diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index 9dafbb0d6b..f36055dab0 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -88,18 +88,21 @@ jobs:
mysql -u root -proot tg_ci < SQL/tgstation_schema.sql
mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;'
mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql
- - name: Install rust-g
+ - name: Install rust dependencies
run: |
sudo dpkg --add-architecture i386
sudo apt update || true
sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386
bash tools/ci/install_rust_g.sh
+ - name: Install auxmos
+ run: |
+ bash tools/ci/install_auxmos.sh
- name: Compile and run tests
run: |
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
- tools/build/build
- # bash tools/ci/run_server.sh
+ tools/build/build -DCIBUILDING
+ bash tools/ci/run_server.sh
env:
CBT_BUILD_MODE: TEST_RUN
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm
new file mode 100644
index 0000000000..d50f448afc
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm
@@ -0,0 +1,175 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/closed/wall/mineral/silver,
+/area/ruin/powered/bathhouse)
+"c" = (
+/obj/machinery/shower{
+ pixel_y = 16
+ },
+/obj/structure/curtain,
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"e" = (
+/obj/structure/mirror{
+ pixel_y = 28
+ },
+/obj/structure/sink{
+ pixel_y = 20
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"f" = (
+/obj/structure/table/greyscale,
+/obj/item/bikehorn/rubberducky,
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"g" = (
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"h" = (
+/obj/item/soap,
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"i" = (
+/obj/machinery/door/airlock/freezer{
+ name = "bath house airlock"
+ },
+/turf/open/floor/plasteel/white,
+/area/ruin/powered/bathhouse)
+"j" = (
+/turf/closed/wall/mineral/wood,
+/area/ruin/powered/bathhouse)
+"k" = (
+/turf/open/floor/wood,
+/area/ruin/powered/bathhouse)
+"l" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/meatballspaghetti,
+/turf/open/floor/wood,
+/area/ruin/powered/bathhouse)
+"m" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/wood,
+/area/ruin/powered/bathhouse)
+"n" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"o" = (
+/obj/structure/bed,
+/obj/item/bedsheet,
+/turf/open/floor/wood,
+/area/ruin/powered/bathhouse)
+
+(1,1,1) = {"
+b
+b
+b
+b
+b
+n
+a
+a
+"}
+(2,1,1) = {"
+b
+c
+g
+g
+b
+j
+j
+j
+"}
+(3,1,1) = {"
+b
+b
+g
+g
+i
+k
+k
+j
+"}
+(4,1,1) = {"
+b
+c
+g
+g
+b
+l
+k
+j
+"}
+(5,1,1) = {"
+b
+b
+g
+g
+b
+m
+o
+j
+"}
+(6,1,1) = {"
+b
+c
+g
+g
+b
+j
+j
+j
+"}
+(7,1,1) = {"
+b
+b
+g
+h
+b
+n
+n
+n
+"}
+(8,1,1) = {"
+b
+e
+g
+g
+b
+n
+n
+n
+"}
+(9,1,1) = {"
+b
+e
+g
+g
+i
+n
+n
+n
+"}
+(10,1,1) = {"
+b
+f
+g
+g
+b
+n
+n
+a
+"}
+(11,1,1) = {"
+b
+b
+b
+b
+b
+n
+a
+a
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm
new file mode 100644
index 0000000000..3c7f5603b4
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm
@@ -0,0 +1,2063 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ab" = (
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ad" = (
+/obj/machinery/power/floodlight,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ae" = (
+/turf/closed/wall/r_wall,
+/area/lavaland/surface/outdoors)
+"af" = (
+/obj/structure/lattice,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ag" = (
+/obj/structure/cable,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"ah" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"ai" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"aj" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"al" = (
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"am" = (
+/obj/machinery/power/emitter,
+/obj/effect/turf_decal/stripes/end{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"an" = (
+/turf/closed/wall/mineral/iron,
+/area/lavaland/surface/outdoors)
+"ao" = (
+/obj/item/clothing/under/rank/engineering/chief_engineer,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ap" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"aq" = (
+/obj/machinery/field/generator,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"ar" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"as" = (
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"at" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"au" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"av" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ax" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber,
+/turf/open/floor/engine/o2,
+/area/lavaland/surface/outdoors)
+"ay" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume,
+/turf/open/floor/engine/o2,
+/area/lavaland/surface/outdoors)
+"az" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber,
+/turf/open/floor/engine/n2,
+/area/lavaland/surface/outdoors)
+"aA" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume,
+/turf/open/floor/engine/n2,
+/area/lavaland/surface/outdoors)
+"aB" = (
+/turf/closed/wall,
+/area/lavaland/surface/outdoors)
+"aC" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/machinery/light/small/broken{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aD" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine/o2,
+/area/lavaland/surface/outdoors)
+"aE" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/turf/open/floor/engine/o2,
+/area/lavaland/surface/outdoors)
+"aF" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine/n2,
+/area/lavaland/surface/outdoors)
+"aG" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/turf/open/floor/engine/n2,
+/area/lavaland/surface/outdoors)
+"aH" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aI" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/suit/space/hardsuit/engine,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aJ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"aK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aL" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aM" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine/airless,
+/area/lavaland/surface/outdoors)
+"aN" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/turf/open/floor/engine/airless,
+/area/lavaland/surface/outdoors)
+"aO" = (
+/turf/closed/wall/r_wall/rust,
+/area/lavaland/surface/outdoors)
+"aP" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aQ" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aR" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aU" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 5
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aV" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aW" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aX" = (
+/obj/machinery/atmospherics/components/trinary/mixer/flipped{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aY" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"aZ" = (
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ba" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 10
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bb" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"bd" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bf" = (
+/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/blood/gibs/core,
+/obj/item/clothing/suit/space/hardsuit/engine,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"bh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"bi" = (
+/obj/machinery/door/airlock/engineering{
+ name = "The Singularity Engine"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"bj" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bk" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Engine Entry";
+ req_access_txt = "204"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bm" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bn" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bo" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bp" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/visible{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"br" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bt" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bu" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bv" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bw" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bx" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 1
+ },
+/obj/machinery/power/apc/unlocked{
+ dir = 4;
+ pixel_x = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"by" = (
+/obj/item/stack/rods{
+ amount = 2
+ },
+/obj/item/shard/plasma,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bA" = (
+/obj/item/flashlight/flare,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bC" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"bD" = (
+/obj/effect/decal/cleanable/robot_debris,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bE" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bI" = (
+/obj/item/pda/clear{
+ note = "Chief's asked me to check on the machinery inside PDA. He's also worried about Build, but i'm sure Harry'll handle the construction. I just need to work on Internals. Fuck i'm hungry"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bJ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bK" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/visible,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bM" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bN" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bO" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 10
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bP" = (
+/obj/machinery/atmospherics/components/binary/pump,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bQ" = (
+/obj/effect/spawner/structure/window/plasma,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bR" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bS" = (
+/obj/structure/sign/poster/official/build{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bT" = (
+/obj/item/pipe_dispenser,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bU" = (
+/obj/effect/mob_spawn/human/corpse/assistant,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bV" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bW" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bX" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bY" = (
+/obj/structure/sign/poster/official/safety_internals{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"bZ" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ca" = (
+/obj/item/flashlight,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cb" = (
+/obj/item/book/manual/wiki/atmospherics,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cc" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cd" = (
+/obj/machinery/atmospherics/pipe/manifold/dark/visible{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ce" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cf" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cg" = (
+/obj/item/wallframe/apc,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"ch" = (
+/obj/machinery/light/broken,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ci" = (
+/obj/structure/sign/poster/official/pda_ad{
+ pixel_y = -32
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cj" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ck" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 5
+ },
+/obj/structure/sign/poster/contraband/atmosia_independence{
+ pixel_x = -32
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cl" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/visible,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cm" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cn" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"co" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cp" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cq" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 1
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cr" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/door_assembly/door_assembly_eng,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cs" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/heater{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"ct" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/visible{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cv" = (
+/obj/machinery/atmospherics/pipe/manifold/green/visible,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cw" = (
+/obj/machinery/atmospherics/pipe/manifold4w/green/visible,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cx" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cy" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cz" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cA" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cB" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cC" = (
+/obj/effect/decal/cleanable/oil,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"cD" = (
+/obj/effect/decal/cleanable/blood,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"cE" = (
+/obj/machinery/computer/rdconsole/production,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"cG" = (
+/obj/machinery/field/generator,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"cH" = (
+/obj/item/construction/rcd,
+/obj/structure/rack,
+/obj/item/rcd_ammo,
+/obj/item/rcd_ammo,
+/obj/item/rcd_upgrade/frames,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cI" = (
+/obj/machinery/airalarm/directional/west,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cJ" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/visible{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cK" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cL" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/machinery/space_heater,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cM" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cN" = (
+/obj/machinery/atmospherics/components/binary/pump,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cO" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cP" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cQ" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 9
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cR" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/obj/machinery/space_heater,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cS" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cT" = (
+/obj/machinery/power/emitter{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/end,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"cV" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cW" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 4
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cY" = (
+/obj/machinery/light/small/broken,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"cZ" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/visible,
+/turf/open/floor/engine/airless,
+/area/lavaland/surface/outdoors)
+"da" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/brown/visible,
+/turf/open/floor/engine/airless,
+/area/lavaland/surface/outdoors)
+"db" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/turf/open/floor/engine/airless,
+/area/lavaland/surface/outdoors)
+"dc" = (
+/obj/machinery/power/rad_collector,
+/obj/structure/cable,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"dd" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"de" = (
+/obj/machinery/autolathe,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"df" = (
+/obj/machinery/door/airlock,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dg" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dh" = (
+/obj/structure/sign/poster/contraband/grey_tide,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/lavaland/surface/outdoors)
+"di" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dj" = (
+/turf/closed/wall/rust,
+/area/lavaland/surface/outdoors)
+"dk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible,
+/turf/open/floor/engine/air,
+/area/lavaland/surface/outdoors)
+"dl" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible,
+/turf/open/floor/engine/air,
+/area/lavaland/surface/outdoors)
+"dm" = (
+/obj/machinery/atmospherics/pipe/simple/brown/visible,
+/turf/open/floor/engine/vacuum,
+/area/lavaland/surface/outdoors)
+"dn" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/turf/open/floor/engine/vacuum,
+/area/lavaland/surface/outdoors)
+"do" = (
+/obj/machinery/power/port_gen/pacman,
+/obj/effect/decal/cleanable/oil/streak,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"dp" = (
+/obj/machinery/light/built,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"dq" = (
+/obj/item/tank/internals/plasma,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"dr" = (
+/obj/machinery/power/floodlight,
+/obj/structure/cable,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"ds" = (
+/obj/structure/tank_dispenser,
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"dt" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"du" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dv" = (
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dw" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber{
+ dir = 1
+ },
+/turf/open/floor/engine/air,
+/area/lavaland/surface/outdoors)
+"dx" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{
+ dir = 1
+ },
+/turf/open/floor/engine/air,
+/area/lavaland/surface/outdoors)
+"dy" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber{
+ dir = 1
+ },
+/turf/open/floor/engine/vacuum,
+/area/lavaland/surface/outdoors)
+"dz" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{
+ dir = 1
+ },
+/turf/open/floor/engine/vacuum,
+/area/lavaland/surface/outdoors)
+"dA" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"dB" = (
+/obj/structure/girder,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"dC" = (
+/obj/structure/door_assembly/door_assembly_eng,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"gA" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"gD" = (
+/obj/machinery/power/emitter{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/end,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"mO" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"oi" = (
+/obj/machinery/space_heater,
+/turf/open/floor/plating/rust,
+/area/lavaland/surface/outdoors)
+"tY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"CR" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"DM" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"Ee" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+"Wr" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating/icemoon,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aB
+an
+aB
+aB
+an
+ab
+aa
+by
+bQ
+bQ
+aO
+ae
+ae
+ae
+ae
+aO
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aj
+ab
+al
+al
+ab
+ab
+ab
+ab
+ab
+ab
+al
+al
+al
+do
+ae
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aj
+al
+al
+al
+al
+al
+al
+al
+al
+al
+al
+gA
+ae
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aw
+aK
+bc
+bc
+bR
+bc
+bc
+cC
+cT
+ai
+Ee
+aO
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+al
+cD
+gA
+al
+al
+aO
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+bd
+aa
+aa
+aa
+af
+cA
+DM
+dc
+al
+ae
+aa
+"}
+(8,1,1) = {"
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+af
+af
+DM
+ag
+al
+ae
+aa
+"}
+(9,1,1) = {"
+ab
+ab
+al
+ap
+aa
+aa
+aa
+aa
+bf
+aa
+aa
+aa
+af
+af
+DM
+dc
+dp
+ae
+aa
+"}
+(10,1,1) = {"
+ab
+ab
+dd
+ap
+al
+aa
+aa
+aa
+aa
+aa
+bT
+aa
+af
+ab
+DM
+dc
+dq
+ae
+aa
+"}
+(11,1,1) = {"
+ad
+ai
+mO
+aq
+ab
+aa
+aa
+aa
+aa
+bA
+aa
+aa
+af
+aI
+DM
+dc
+al
+ae
+aa
+"}
+(12,1,1) = {"
+ab
+ab
+gA
+ap
+al
+ab
+aJ
+aa
+aa
+aa
+aa
+ab
+ab
+cF
+gA
+al
+al
+aO
+aa
+"}
+(13,1,1) = {"
+ab
+ab
+am
+ar
+at
+at
+at
+at
+Wr
+bB
+bB
+bB
+tY
+cG
+gD
+ai
+dr
+ae
+aa
+"}
+(14,1,1) = {"
+ab
+ah
+al
+as
+au
+as
+as
+as
+bg
+al
+al
+cg
+gA
+al
+al
+al
+al
+ae
+aa
+"}
+(15,1,1) = {"
+ab
+al
+al
+al
+al
+al
+al
+al
+bh
+bC
+al
+al
+CR
+al
+al
+al
+ds
+aO
+aa
+"}
+(16,1,1) = {"
+aO
+aO
+ae
+ae
+ae
+aO
+ae
+aO
+bi
+ae
+aO
+ae
+ae
+aO
+ae
+aO
+ae
+aO
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+aL
+bb
+bD
+aO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+oi
+bj
+ab
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,1) = {"
+af
+aa
+aa
+aB
+an
+dj
+ae
+aP
+bk
+aP
+ae
+aB
+aB
+dj
+aB
+aB
+aB
+aa
+aa
+"}
+(20,1,1) = {"
+af
+af
+ab
+aa
+aa
+af
+aC
+aQ
+bl
+bE
+bS
+cf
+cr
+cB
+cI
+ab
+aB
+aa
+aa
+"}
+(21,1,1) = {"
+af
+ab
+ab
+af
+af
+ab
+ab
+ab
+bj
+ab
+bU
+ch
+aB
+cE
+ab
+cY
+dj
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+af
+ab
+ab
+ab
+ab
+ab
+bj
+ab
+bV
+ab
+aP
+cH
+ab
+de
+dj
+aa
+aa
+"}
+(23,1,1) = {"
+ab
+aa
+af
+ab
+ao
+ab
+ab
+aR
+bm
+ab
+bH
+ci
+aB
+aB
+aP
+aB
+aB
+ab
+aa
+"}
+(24,1,1) = {"
+aa
+af
+ab
+al
+ab
+ab
+ab
+aS
+bn
+ab
+bH
+ab
+ab
+cI
+cR
+aB
+dj
+aB
+aB
+"}
+(25,1,1) = {"
+aa
+af
+ab
+ab
+ab
+ab
+ab
+aT
+bo
+ab
+bW
+cj
+cj
+cj
+cS
+dh
+dg
+du
+aB
+"}
+(26,1,1) = {"
+aa
+af
+af
+an
+an
+ab
+ab
+ab
+bp
+bF
+bX
+bF
+bF
+cJ
+cV
+df
+di
+dv
+dB
+"}
+(27,1,1) = {"
+aa
+aa
+aa
+aa
+an
+av
+aH
+av
+bj
+bG
+bY
+av
+av
+cK
+cW
+aB
+dt
+dA
+dC
+"}
+(28,1,1) = {"
+aa
+aa
+aa
+aa
+an
+an
+dj
+ae
+bj
+bH
+ae
+aB
+dB
+dB
+aB
+dj
+aB
+aB
+dj
+"}
+(29,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+bj
+bI
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aB
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+bq
+bH
+aO
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aB
+"}
+(31,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+bq
+bJ
+ae
+ae
+aO
+ae
+aO
+aa
+aa
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+aa
+ae
+ae
+ae
+ae
+ae
+br
+bK
+bZ
+ck
+cs
+cL
+aO
+ae
+ae
+aO
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+ae
+ax
+aD
+aM
+aU
+bs
+bL
+bZ
+cl
+ct
+cM
+cZ
+dk
+dw
+ae
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+ae
+ay
+aE
+aN
+aV
+bt
+bM
+ab
+cm
+co
+cN
+aN
+dl
+dx
+ae
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+ae
+ae
+ae
+aO
+aW
+bu
+bN
+ca
+cn
+cv
+cO
+ae
+aO
+aO
+aO
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+ae
+az
+aF
+aM
+aX
+bv
+bN
+cb
+co
+cw
+cM
+da
+dm
+dy
+ae
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+ae
+aA
+aG
+aN
+aY
+bw
+bM
+cc
+cp
+cx
+cP
+db
+dn
+dz
+ae
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+ae
+aO
+aO
+ae
+aZ
+bu
+bO
+cd
+cd
+cy
+cQ
+ae
+aO
+aO
+aO
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ba
+bx
+bP
+ce
+cq
+cz
+ab
+ae
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+aO
+aO
+ae
+ae
+ae
+aO
+ae
+aO
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm
new file mode 100644
index 0000000000..f026d8ca96
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm
@@ -0,0 +1,161 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/closed/indestructible/sandstone,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/open/water,
+/area/lavaland/surface/outdoors)
+"I" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"L" = (
+/obj/structure/fluff/beach_umbrella,
+/turf/open/floor/plating/beach/sand,
+/area/lavaland/surface/outdoors)
+"U" = (
+/turf/open/floor/plating/beach/sand,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+I
+I
+I
+I
+I
+I
+I
+I
+I
+I
+I
+"}
+(2,1,1) = {"
+I
+I
+I
+a
+a
+I
+a
+a
+I
+I
+I
+"}
+(3,1,1) = {"
+I
+I
+a
+U
+U
+U
+U
+U
+a
+I
+I
+"}
+(4,1,1) = {"
+I
+a
+U
+L
+c
+c
+c
+L
+U
+a
+I
+"}
+(5,1,1) = {"
+I
+a
+U
+c
+c
+c
+c
+c
+U
+a
+I
+"}
+(6,1,1) = {"
+I
+I
+U
+c
+c
+c
+c
+c
+U
+I
+I
+"}
+(7,1,1) = {"
+I
+a
+U
+c
+c
+c
+c
+c
+U
+a
+I
+"}
+(8,1,1) = {"
+I
+a
+U
+L
+c
+c
+c
+L
+U
+a
+I
+"}
+(9,1,1) = {"
+I
+I
+a
+U
+U
+U
+U
+U
+a
+I
+I
+"}
+(10,1,1) = {"
+I
+I
+I
+a
+a
+I
+a
+a
+I
+I
+I
+"}
+(11,1,1) = {"
+I
+I
+I
+I
+I
+I
+I
+I
+I
+I
+I
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm
new file mode 100644
index 0000000000..0360a9ebb5
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm
@@ -0,0 +1,734 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/obj/structure/table/wood/fancy/black,
+/obj/item/documents/syndicate/mining,
+/obj/effect/decal/cleanable/cobweb,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"ac" = (
+/turf/closed/wall/mineral/wood,
+/area/ruin/unpowered/buried_library)
+"ad" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"ae" = (
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"af" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"ag" = (
+/obj/item/feather,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"ah" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"ai" = (
+/obj/structure/table/wood/fancy/black,
+/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary2,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"al" = (
+/turf/closed/wall/mineral/iron,
+/area/ruin/unpowered/buried_library)
+"am" = (
+/obj/structure/table/wood/fancy/black,
+/obj/item/book_of_babel,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"ao" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"ap" = (
+/obj/item/stack/sheet/mineral/wood,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aq" = (
+/obj/structure/bookcase/random,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"ar" = (
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"as" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/oldstation/protosing,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"av" = (
+/obj/structure/bookcase/random,
+/turf/open/space/basic,
+/area/ruin/unpowered/buried_library)
+"aw" = (
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"ay" = (
+/obj/machinery/door/keycard/library,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"az" = (
+/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aA" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"aC" = (
+/obj/item/feather,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"aD" = (
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+"aE" = (
+/obj/item/stack/sheet/mineral/wood,
+/obj/item/book/manual/random,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aF" = (
+/obj/item/book/manual/random,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"aG" = (
+/obj/structure/table/bronze,
+/obj/item/stack/ore/slag,
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+"aH" = (
+/obj/structure/table/bronze,
+/obj/item/statuebust,
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+"aI" = (
+/obj/effect/mob_spawn/human/skeleton,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"aJ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"aK" = (
+/obj/item/feather,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"aL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aM" = (
+/obj/item/stack/sheet/mineral/wood,
+/obj/item/book/manual/random,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"aN" = (
+/obj/structure/statue/sandstone/venus,
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+"aP" = (
+/obj/item/keycard/library,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"aQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aR" = (
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aS" = (
+/obj/structure/table/wood/fancy/black,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/secretrecipe,
+/obj/item/flashlight/lantern/jade{
+ on = 1
+ },
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"aV" = (
+/obj/item/stack/sheet/mineral/wood,
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"aW" = (
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/plasteel/cult,
+/area/ruin/unpowered/buried_library)
+"aX" = (
+/obj/structure/table/bronze,
+/obj/item/statuebust,
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"aY" = (
+/obj/structure/table_frame/wood,
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"ba" = (
+/obj/structure/barricade/wooden/crude,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bg" = (
+/obj/item/paper/fluff/ruins/oldstation/protogun,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bh" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/pet/fox,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"bi" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bj" = (
+/obj/item/book/manual/random,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bl" = (
+/obj/item/storage/box/fountainpens,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bm" = (
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bn" = (
+/obj/item/book/manual/random,
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bo" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bp" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bq" = (
+/obj/structure/mineral_door/wood,
+/obj/structure/barricade/wooden/crude/snow,
+/turf/open/floor/wood,
+/area/ruin/unpowered/buried_library)
+"br" = (
+/obj/structure/girder,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_library)
+"bt" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/template_noop,
+/area/template_noop)
+"bu" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"bw" = (
+/turf/open/floor/wood,
+/area/lavaland/surface/outdoors)
+"by" = (
+/obj/item/statuebust,
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+"bz" = (
+/obj/item/flashlight/lantern/jade{
+ on = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"bA" = (
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/plating,
+/area/ruin/unpowered/buried_library)
+"bB" = (
+/obj/structure/fluff/paper/stack,
+/turf/open/floor/carpet/black,
+/area/ruin/unpowered/buried_library)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ad
+ad
+ad
+ad
+ad
+ad
+bt
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+bi
+bi
+bi
+bi
+bi
+ac
+ba
+ac
+ac
+ac
+ad
+ad
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+bi
+bi
+bi
+bi
+bo
+bi
+bi
+bi
+bm
+ae
+af
+ae
+ac
+ad
+ad
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+bi
+bi
+aR
+bi
+bi
+ae
+bj
+aq
+bi
+ah
+aL
+ah
+ao
+ac
+ad
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+bi
+bi
+bi
+aC
+ae
+aQ
+aq
+bi
+aq
+bg
+ah
+ao
+ah
+bi
+ac
+ad
+ad
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+aa
+ad
+ac
+bi
+ae
+bi
+aM
+ae
+aq
+bm
+aq
+aA
+ah
+ao
+ah
+ae
+ac
+ad
+ad
+ad
+"}
+(7,1,1) = {"
+aa
+aa
+aa
+aa
+ad
+ac
+bi
+bm
+bi
+ao
+aR
+ao
+aA
+ao
+ag
+ah
+aR
+ah
+bh
+ac
+ad
+ad
+ad
+"}
+(8,1,1) = {"
+aa
+aa
+aa
+aa
+ad
+bi
+bi
+av
+aA
+bi
+aG
+aD
+aX
+bi
+ao
+ae
+ao
+ah
+ae
+ac
+br
+ad
+ad
+"}
+(9,1,1) = {"
+aa
+aa
+aa
+aa
+ad
+ac
+as
+av
+aF
+aD
+aD
+bz
+aD
+bB
+bi
+ae
+ao
+ae
+ao
+ac
+bp
+bw
+ad
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+ad
+ad
+ac
+ap
+bp
+bi
+aD
+aD
+aN
+bi
+aw
+bi
+ao
+af
+aR
+ae
+bq
+ae
+bu
+ad
+"}
+(11,1,1) = {"
+aa
+al
+al
+al
+al
+al
+ae
+ah
+aR
+aD
+bi
+aD
+aD
+by
+ao
+aw
+ao
+ae
+bm
+ac
+ae
+ad
+ad
+"}
+(12,1,1) = {"
+ad
+al
+ab
+aI
+ar
+al
+aR
+aE
+af
+aD
+aH
+bA
+aY
+aD
+bi
+ae
+bm
+ah
+ag
+br
+ac
+ad
+ad
+"}
+(13,1,1) = {"
+ad
+al
+am
+aJ
+aW
+ay
+ae
+ah
+ao
+ae
+ao
+ae
+af
+bp
+bi
+ah
+bi
+ah
+bp
+ac
+ad
+ad
+ad
+"}
+(14,1,1) = {"
+ad
+al
+aS
+aW
+aK
+al
+ae
+ah
+bi
+ah
+ao
+ah
+az
+ah
+bi
+ah
+bi
+bn
+ao
+ac
+ad
+aa
+aa
+"}
+(15,1,1) = {"
+ad
+al
+al
+ai
+ar
+al
+ag
+ah
+aL
+ah
+aA
+ah
+ao
+ah
+bi
+bi
+bl
+bi
+bi
+bi
+ad
+aa
+aa
+"}
+(16,1,1) = {"
+ad
+ad
+al
+al
+al
+al
+ao
+ah
+ao
+ah
+ao
+aV
+bi
+ah
+bp
+bi
+bm
+bo
+bi
+br
+bu
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+ad
+ad
+ad
+ad
+ac
+ae
+ao
+ae
+aP
+ae
+aR
+ae
+bp
+bi
+bj
+bi
+ad
+ad
+ad
+aa
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+aa
+aa
+ad
+ac
+ac
+ac
+ac
+ac
+ac
+ba
+ac
+ac
+br
+ad
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+ad
+ad
+ad
+ad
+ad
+ad
+aa
+ad
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm
new file mode 100644
index 0000000000..8faf14c141
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm
@@ -0,0 +1,170 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/obj/structure/sign/poster/contraband/lusty_xenomorph,
+/turf/closed/wall/mineral/abductor,
+/area/lavaland/surface)
+"c" = (
+/turf/open/floor/mineral/diamond,
+/area/lavaland/surface)
+"d" = (
+/obj/item/reagent_containers/food/drinks/trophy/gold_cup,
+/turf/open/floor/mineral/diamond,
+/area/lavaland/surface)
+"e" = (
+/obj/item/greentext{
+ light_color = "#64C864";
+ light_range = 1
+ },
+/turf/open/floor/mineral/diamond,
+/area/lavaland/surface)
+"f" = (
+/obj/item/tcg_card/special/xenomaid,
+/turf/open/floor/mineral/diamond,
+/area/lavaland/surface)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+b
+f
+c
+c
+b
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+b
+c
+c
+d
+c
+c
+b
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+b
+c
+d
+e
+d
+c
+b
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+b
+c
+c
+d
+c
+c
+b
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+b
+c
+c
+c
+b
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm
new file mode 100644
index 0000000000..ec334820af
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm
@@ -0,0 +1,881 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"b" = (
+/turf/closed/wall/mineral/wood/nonmetal,
+/area/ruin/unpowered)
+"c" = (
+/obj/structure/closet/toolcloset,
+/obj/item/wrench,
+/obj/item/screwdriver,
+/obj/item/crowbar,
+/obj/item/weldingtool/largetank,
+/obj/item/wirecutters,
+/obj/item/radio/off,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"d" = (
+/turf/open/openspace/icemoon,
+/area/template_noop)
+"e" = (
+/obj/item/clothing/suit/hooded/explorer,
+/obj/item/clothing/mask/gas/explorer,
+/obj/item/clothing/gloves/color/black,
+/obj/item/storage/backpack/explorer,
+/obj/item/flashlight/lantern,
+/obj/item/storage/bag/ore,
+/obj/structure/closet,
+/obj/item/clothing/shoes/jackboots,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"f" = (
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"g" = (
+/obj/structure/fireplace,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"h" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"i" = (
+/turf/template_noop,
+/area/template_noop)
+"j" = (
+/obj/structure/sink/kitchen,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"k" = (
+/obj/structure/closet/crate/freezer,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"l" = (
+/obj/machinery/vending/dinnerware,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"m" = (
+/obj/structure/barricade/wooden/crude/snow,
+/obj/structure/mineral_door/wood,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"n" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"o" = (
+/obj/item/reagent_containers/food/drinks/beer,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"p" = (
+/obj/machinery/light/broken{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"q" = (
+/obj/structure/table/wood,
+/obj/item/pen,
+/obj/machinery/light/broken{
+ dir = 8
+ },
+/obj/item/paper/crumpled/bloody{
+ info = "help...";
+ text = ""
+ },
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"r" = (
+/obj/item/chair/wood,
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/effect/decal/cleanable/blood/drip,
+/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+"s" = (
+/obj/effect/decal/cleanable/trail_holder,
+/turf/open/floor/wood,
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(2,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(3,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(4,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(5,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(6,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(7,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(8,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(9,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+d
+b
+b
+b
+b
+b
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(10,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+b
+b
+b
+b
+b
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(11,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+c
+f
+f
+o
+q
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(12,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+e
+f
+f
+f
+r
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(13,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+f
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(14,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+g
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(15,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+f
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(16,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+j
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(17,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+k
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(18,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+l
+f
+f
+f
+s
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(19,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+b
+f
+f
+p
+b
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(20,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+b
+b
+b
+f
+b
+b
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(21,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+b
+f
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(22,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+b
+f
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(23,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+b
+f
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(24,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+b
+m
+b
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(25,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+n
+h
+n
+h
+n
+i
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(26,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+i
+n
+n
+n
+h
+n
+n
+n
+i
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(27,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+i
+n
+n
+n
+n
+n
+n
+n
+n
+n
+i
+i
+i
+i
+i
+i
+i
+i
+"}
+(28,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+n
+n
+n
+n
+n
+n
+n
+n
+n
+n
+n
+i
+i
+i
+i
+i
+i
+i
+"}
+(29,1,1) = {"
+i
+i
+i
+i
+i
+i
+i
+n
+n
+n
+n
+n
+n
+n
+n
+n
+n
+n
+i
+i
+i
+i
+i
+i
+i
+"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm
new file mode 100644
index 0000000000..0494353243
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm
@@ -0,0 +1,270 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface)
+"b" = (
+/turf/closed/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"e" = (
+/obj/structure/spawner/nether,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface)
+"q" = (
+/turf/closed/mineral/strong/wasteland,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
+(2,1,1) = {"
+b
+b
+b
+b
+q
+q
+q
+q
+q
+q
+q
+b
+b
+b
+b
+"}
+(3,1,1) = {"
+b
+b
+q
+q
+q
+a
+a
+a
+a
+a
+q
+q
+q
+b
+b
+"}
+(4,1,1) = {"
+b
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+b
+"}
+(5,1,1) = {"
+b
+q
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+q
+b
+"}
+(6,1,1) = {"
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+"}
+(7,1,1) = {"
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+"}
+(8,1,1) = {"
+b
+q
+a
+a
+a
+a
+a
+e
+a
+a
+a
+a
+a
+q
+b
+"}
+(9,1,1) = {"
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+"}
+(10,1,1) = {"
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+"}
+(11,1,1) = {"
+b
+q
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+q
+b
+"}
+(12,1,1) = {"
+b
+b
+q
+a
+a
+a
+a
+a
+a
+a
+a
+a
+q
+b
+b
+"}
+(13,1,1) = {"
+b
+b
+q
+q
+q
+a
+a
+a
+a
+a
+q
+q
+q
+b
+b
+"}
+(14,1,1) = {"
+b
+b
+b
+b
+q
+q
+q
+q
+q
+q
+q
+b
+b
+b
+b
+"}
+(15,1,1) = {"
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 086cc9ffd6..cf15bd05e1 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -6690,20 +6690,6 @@
"amC" = (
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"amD" = (
-/obj/item/trash/sosjerky,
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
-"amE" = (
-/obj/item/electronics/airalarm,
-/obj/item/circuitboard/machine/seed_extractor,
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 4;
- name = "4maintenance loot spawner"
- },
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
"amF" = (
/obj/machinery/atmospherics/components/unary/tank/air,
/turf/open/floor/plating,
@@ -6977,37 +6963,12 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
-"anj" = (
-/obj/structure/sink{
- dir = 8;
- pixel_x = -12;
- pixel_y = 2
- },
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
"ank" = (
/obj/machinery/door/airlock/maintenance/abandoned{
req_access_txt = "12"
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"anl" = (
-/obj/structure/bed,
-/obj/effect/landmark/xeno_spawn,
-/obj/item/bedsheet,
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
-"anm" = (
-/obj/machinery/computer/slot_machine{
- balance = 15;
- money = 500
- },
-/obj/item/coin/iron,
-/obj/item/coin/diamond,
-/obj/item/coin/diamond,
-/obj/item/coin/diamond,
-/turf/open/floor/plating,
-/area/maintenance/port/fore)
"ann" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -11807,25 +11768,6 @@
/obj/item/ectoplasm,
/turf/open/floor/wood,
/area/maintenance/port/fore)
-"azH" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/service/theater/clown)
"azK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -12299,18 +12241,6 @@
/obj/item/pen/fourcolor,
/turf/open/floor/plasteel,
/area/commons/dorms)
-"aBa" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/command/gateway)
"aBh" = (
/obj/machinery/camera{
c_tag = "EVA Maintenance";
@@ -12447,13 +12377,6 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics/garden)
-"aBx" = (
-/obj/machinery/shower{
- dir = 8;
- pixel_y = -4
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet)
"aBy" = (
/obj/machinery/door/airlock{
desc = "A small bathroom with a sink, toilet and shower.";
@@ -12462,12 +12385,6 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet)
-"aBz" = (
-/obj/machinery/shower{
- dir = 4
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet)
"aBA" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -12668,30 +12585,6 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/command/storage/eva)
-"aCh" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/bananalamp{
- pixel_y = 3
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/requests_console{
- department = "Theatre";
- name = "theatre RC";
- pixel_y = 32
- },
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/clown)
"aCi" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -13233,18 +13126,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/nuke_storage)
-"aDy" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/baguette,
-/obj/structure/mirror{
- pixel_y = 32
- },
-/obj/item/toy/crayon/spraycan/mimecan,
-/obj/item/toy/dummy,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
"aDz" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -13373,25 +13254,6 @@
"aDM" = (
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet)
-"aDN" = (
-/obj/machinery/camera{
- c_tag = "Bathrooms";
- dir = 1
- },
-/obj/structure/urinal{
- pixel_y = 32
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/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/commons/toilet)
"aDQ" = (
/obj/machinery/door/airlock{
desc = "A small bathroom with a sink, toilet and shower.";
@@ -13401,36 +13263,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet)
-"aDR" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/service/bar)
-"aDT" = (
-/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/commons/toilet)
-"aDU" = (
-/obj/machinery/shower{
- dir = 4
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet)
-"aDY" = (
-/obj/structure/window{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aDZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13458,12 +13290,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aEc" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aEd" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13738,13 +13564,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/nuke_storage)
-"aEU" = (
-/obj/machinery/vending/autodrobe,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
"aEV" = (
/obj/structure/reagent_dispensers/watertank,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -13818,20 +13637,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/commons/dorms)
-"aFk" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/service/bar)
-"aFl" = (
-/obj/structure/festivus{
- anchored = 1;
- desc = "A pole for dancing.";
- name = "pole"
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aFm" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -14181,16 +13986,6 @@
},
/turf/open/floor/plasteel,
/area/command/gateway)
-"aGf" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/fore)
"aGg" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -14292,44 +14087,12 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"aGw" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aGx" = (
/obj/item/radio/intercom{
pixel_x = -25
},
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet)
-"aGy" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"aGz" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"aGA" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -14944,12 +14707,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aHZ" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aIa" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -14957,12 +14714,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aIb" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"aIc" = (
/obj/machinery/power/apc{
areastring = "/area/service/bar";
@@ -15445,13 +15196,6 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/command/storage/eva)
-"aJk" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock{
- name = "Bar Back Room"
- },
-/turf/open/floor/plasteel/dark,
-/area/service/bar)
"aJl" = (
/obj/structure/tank_dispenser/oxygen,
/obj/machinery/light{
@@ -15899,16 +15643,6 @@
},
/turf/open/floor/wood,
/area/service/bar)
-"aKr" = (
-/obj/machinery/vending/snack/orange,
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/sign/poster/contraband/donut_corp{
- pixel_y = 32
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aKs" = (
/obj/structure/disposalpipe/segment,
/obj/effect/spawner/structure/window,
@@ -15992,13 +15726,6 @@
/obj/structure/closet/secure_closet/hydroponics,
/turf/open/floor/plasteel,
/area/service/hydroponics)
-"aKJ" = (
-/obj/machinery/vending/cola/black,
-/obj/structure/sign/poster/contraband/starkist{
- pixel_y = 32
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aKL" = (
/obj/machinery/airalarm{
pixel_y = 24
@@ -16025,19 +15752,6 @@
},
/turf/open/floor/wood,
/area/service/bar)
-"aKN" = (
-/obj/structure/table/wood/fancy,
-/obj/item/reagent_containers/food/condiment/saltshaker{
- pixel_x = -3;
- pixel_y = 20
- },
-/obj/item/reagent_containers/food/condiment/peppermill{
- dir = 1;
- pixel_x = 3;
- pixel_y = 20
- },
-/turf/open/floor/wood,
-/area/service/bar)
"aKO" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -16375,13 +16089,6 @@
},
/turf/open/floor/plasteel,
/area/commons/storage/primary)
-"aLN" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
"aLO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -17227,22 +16934,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/fore)
-"aOt" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
"aOv" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -19398,12 +19089,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
/area/commons/vacant_room/office)
-"aUn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
"aUo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -19411,63 +19096,12 @@
},
/turf/open/floor/plasteel,
/area/commons/locker)
-"aUp" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/window{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
-"aUs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
"aUt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/commons/locker)
-"aUu" = (
-/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/commons/locker)
"aUv" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -19636,12 +19270,6 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/wood,
/area/commons/vacant_room/office)
-"aUX" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
"aUY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -20244,16 +19872,6 @@
/obj/item/clothing/head/beret/black,
/turf/open/floor/plasteel,
/area/commons/locker)
-"aWo" = (
-/obj/machinery/camera{
- c_tag = "Locker Room West";
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
"aWp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -20796,13 +20414,6 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
-"aXp" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"aXq" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -21117,13 +20728,6 @@
},
/turf/open/floor/wood,
/area/commons/vacant_room/office)
-"aYe" = (
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"aYf" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -21583,17 +21187,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
/area/commons/vacant_room/office)
-"aZo" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/mirror{
- pixel_x = 28
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"aZp" = (
/obj/structure/rack,
/obj/item/electronics/apc,
@@ -21661,28 +21254,6 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet/locker)
-"aZw" = (
-/obj/effect/landmark/blobstart,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/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/structure/window,
-/obj/structure/window{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/commons/locker)
"aZy" = (
/obj/machinery/camera{
c_tag = "Conference Room"
@@ -22010,14 +21581,6 @@
},
/turf/open/floor/wood,
/area/service/library)
-"baw" = (
-/obj/machinery/camera{
- c_tag = "Locker Room Toilets";
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"bax" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -22148,10 +21711,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"baO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"baP" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/donut_box,
@@ -22331,13 +21890,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/ai_monitored/turret_protected/ai_upload)
-"bbq" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"bbs" = (
/obj/structure/window/reinforced{
dir = 8
@@ -22701,9 +22253,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"bct" = (
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"bcu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/maintenance{
@@ -23184,13 +22733,6 @@
},
/turf/open/floor/carpet,
/area/command/meeting_room)
-"bdJ" = (
-/obj/machinery/door/airlock{
- id_tag = "LockerShitter3";
- name = "Unit 3"
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet/locker)
"bdK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -23198,18 +22740,6 @@
/obj/machinery/holopad/secure,
/turf/open/floor/carpet,
/area/command/meeting_room)
-"bdL" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/bedsheetbin/color,
-/obj/structure/table,
-/turf/open/floor/plasteel/cafeteria,
-/area/commons/locker)
"bdN" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -23870,28 +23400,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port)
-"bfr" = (
-/obj/structure/noticeboard{
- dir = 8;
- pixel_x = 27
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/wood,
-/area/command/meeting_room)
-"bfs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"bft" = (
/obj/machinery/status_display/ai,
/obj/structure/cable{
@@ -23905,19 +23413,6 @@
},
/turf/closed/wall/r_wall,
/area/ai_monitored/turret_protected/ai_upload)
-"bfv" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
-"bfw" = (
-/obj/machinery/status_display/evac,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"bfx" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -23940,15 +23435,6 @@
},
/turf/open/floor/wood,
/area/command/heads_quarters/captain)
-"bfz" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"bfA" = (
/obj/structure/table/wood,
/obj/item/hand_tele,
@@ -24243,13 +23729,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/port)
-"bgr" = (
-/obj/machinery/door/airlock{
- id_tag = "LockerShitter4";
- name = "Unit 4"
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet/locker)
"bgt" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
@@ -24405,52 +23884,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
-"bgS" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/wood,
-/area/command/heads_quarters/captain)
-"bgT" = (
-/obj/machinery/computer/communications{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/wood,
-/area/command/heads_quarters/captain)
-"bgU" = (
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/obj/effect/landmark/start/captain,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/wood,
-/area/command/heads_quarters/captain)
-"bgV" = (
-/obj/structure/table/wood,
-/obj/item/book/manual/wiki/security_space_law,
-/obj/item/coin/plasma,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/wood,
-/area/command/heads_quarters/captain)
-"bgW" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/holopad/secure,
-/turf/open/floor/wood,
-/area/command/heads_quarters/captain)
"bgX" = (
/obj/structure/table/wood,
/obj/machinery/airalarm{
@@ -39370,19 +38803,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"bPM" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
"bPN" = (
/turf/closed/wall,
/area/science/misc_lab)
@@ -40568,13 +39988,6 @@
},
/turf/open/floor/engine,
/area/science/misc_lab)
-"bTo" = (
-/obj/structure/table/reinforced,
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
"bTp" = (
/obj/structure/table/reinforced,
/obj/item/stack/sheet/glass/fifty,
@@ -42103,10 +41516,6 @@
"bXs" = (
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"bXt" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/science/circuit)
"bXv" = (
/obj/item/stack/rods,
/turf/open/space,
@@ -45178,10 +44587,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/misc_lab)
-"cfv" = (
-/obj/structure/plasticflaps/opaque,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"cfw" = (
/turf/closed/wall/r_wall,
/area/maintenance/solars/port/aft)
@@ -46096,6 +45501,9 @@
/obj/machinery/door/airlock/external{
req_access_txt = "13"
},
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"chP" = (
@@ -50928,11 +50336,6 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/security/processing)
-"cxW" = (
-/obj/structure/lattice,
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
"cxY" = (
/obj/machinery/camera{
c_tag = "Arrivals Escape Pod 1";
@@ -51589,16 +50992,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plating,
/area/service/hydroponics)
-"cBh" = (
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/commons/locker)
"cBi" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -51632,16 +51025,6 @@
/obj/machinery/light,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"cBn" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/mirror{
- pixel_x = 28
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"cBo" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/wood,
@@ -52102,19 +51485,6 @@
/obj/structure/closet/boxinggloves,
/turf/open/floor/plasteel,
/area/commons/fitness)
-"cFG" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/mirror{
- pixel_x = 28
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"cGf" = (
/obj/structure/sign/poster/contraband/random{
pixel_y = 32
@@ -52683,10 +52053,6 @@
"cPb" = (
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/port/fore)
-"cPn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet)
"cPA" = (
/obj/machinery/atmospherics/components/binary/valve{
dir = 4
@@ -53086,32 +52452,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"cTT" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/bot_white,
-/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/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/command/gateway)
"cTX" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -53134,6 +52474,17 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"cUb" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/structure/grille/broken,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/kirbyplants/random,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"cUx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -53227,6 +52578,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"ddl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet/locker)
"ddI" = (
/obj/machinery/door/airlock/public/glass{
name = "Central Access"
@@ -53243,18 +52600,6 @@
icon_state = "wood-broken6"
},
/area/maintenance/starboard/aft)
-"ddV" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/command/gateway)
"dev" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -53365,6 +52710,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"dsi" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"dsJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/table/glass,
@@ -53373,20 +52724,19 @@
},
/turf/open/floor/wood/wood_large,
/area/service/chapel/main)
-"dtx" = (
-/obj/structure/cable{
- icon_state = "1-2"
+"dvb" = (
+/obj/structure/table,
+/obj/item/trash/tray,
+/obj/item/trash/boritos,
+/obj/item/trash/can,
+/obj/item/reagent_containers/food/drinks/sillycup{
+ pixel_x = 8;
+ pixel_y = 10
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
},
-/obj/structure/mirror{
- pixel_x = 25
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet)
+/area/commons/arcade)
"dvc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -53403,6 +52753,19 @@
/obj/machinery/gear_painter,
/turf/open/floor/wood,
/area/maintenance/bar)
+"dyC" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"dyE" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -53443,20 +52806,6 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"dBm" = (
-/obj/machinery/light/floor,
-/obj/structure/table,
-/obj/item/clothing/glasses/sunglasses/reagent,
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = -5;
- pixel_y = 13
- },
-/obj/item/storage/fancy/cigarettes/cigpack_uplift{
- pixel_x = 10;
- pixel_y = 7
- },
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"dCr" = (
/obj/structure/pool/Rboard,
/turf/open/floor/plasteel/yellowsiding{
@@ -53477,10 +52826,6 @@
},
/turf/open/floor/plasteel,
/area/security/range)
-"dEh" = (
-/obj/machinery/jukebox/disco/indestructible,
-/turf/open/floor/light/colour_cycle/dancefloor_b,
-/area/maintenance/starboard/aft)
"dEX" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/machinery/requests_console{
@@ -53494,10 +52839,17 @@
"dFX" = (
/turf/closed/wall,
/area/commons/fitness/pool)
-"dHp" = (
-/mob/living/simple_animal/bot/secbot/grievous/toy,
-/turf/open/floor/light/colour_cycle/dancefloor_a,
-/area/maintenance/starboard/aft)
+"dGa" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
+ },
+/area/commons/arcade)
"dIu" = (
/obj/structure/chair/sofa{
dir = 8
@@ -53585,6 +52937,14 @@
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
+"dYl" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/command/gateway)
"dYZ" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -53684,6 +53044,18 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"eky" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/baguette,
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/item/toy/crayon/spraycan/mimecan,
+/obj/item/toy/dummy,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"elh" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -53808,6 +53180,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"exX" = (
+/obj/machinery/door/airlock{
+ name = "Shower Room"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"eyq" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on,
/turf/open/floor/plating,
@@ -53838,6 +53216,12 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"eAe" = (
+/obj/structure/dresser,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"eAG" = (
/obj/item/clothing/under/misc/pj/blue,
/obj/item/clothing/shoes/sneakers/white,
@@ -53904,20 +53288,6 @@
icon_state = "panelscorched"
},
/area/maintenance/starboard/aft)
-"eEe" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/landmark/start/clown,
-/turf/open/floor/plasteel,
-/area/service/theater/clown)
"eFx" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -53975,6 +53345,12 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
+"eOu" = (
+/obj/structure/table/wood,
+/obj/item/book/manual/wiki/security_space_law,
+/obj/item/coin/plasma,
+/turf/open/floor/wood,
+/area/command/heads_quarters/captain)
"eQb" = (
/turf/open/floor/carpet,
/area/commons/dorms)
@@ -53991,6 +53367,23 @@
/obj/structure/closet/secure_closet/personal/cabinet,
/turf/open/floor/carpet,
/area/commons/dorms)
+"eTA" = (
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 20
+ },
+/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/wood,
+/area/service/bar)
"eUy" = (
/obj/machinery/door/airlock{
name = "Starboard Emergency Storage"
@@ -54004,6 +53397,10 @@
},
/turf/open/space,
/area/space/nearstation)
+"eUX" = (
+/obj/machinery/jukebox/disco,
+/turf/open/floor/light/colour_cycle/dancefloor_b,
+/area/maintenance/starboard/aft)
"eVC" = (
/obj/effect/spawner/structure/window,
/obj/machinery/door/firedoor,
@@ -54101,20 +53498,11 @@
},
/turf/open/floor/wood,
/area/service/bar)
-"fgG" = (
-/obj/machinery/power/apc{
- areastring = "/area/service/theater";
- dir = 8;
- name = "Theatre APC";
- pixel_x = -25
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
+"fgl" = (
+/obj/structure/closet/crate/bin,
+/obj/item/coin/silver,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"fhu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54125,6 +53513,13 @@
/obj/item/clothing/mask/gas/owl_mask,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"fiv" = (
+/obj/effect/spawner/lootdrop/cigars_cases,
+/obj/structure/table,
+/turf/open/floor/plating{
+ icon_state = "platingdmg1"
+ },
+/area/commons/arcade)
"fiy" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
@@ -54142,6 +53537,12 @@
/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
+"fkh" = (
+/mob/living/simple_animal/bot/secbot/grievous/toy{
+ name = "Rave Bot 9001"
+ },
+/turf/open/floor/light/colour_cycle/dancefloor_a,
+/area/maintenance/starboard/aft)
"fkW" = (
/obj/structure/cable/white,
/obj/structure/cable/white{
@@ -54167,6 +53568,10 @@
},
/turf/open/floor/plasteel,
/area/commons/dorms)
+"flG" = (
+/obj/machinery/computer/arcade,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"flP" = (
/obj/machinery/hydroponics/soil{
pixel_y = 8
@@ -54181,11 +53586,6 @@
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/port/fore)
-"fne" = (
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
"fnC" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -54199,6 +53599,25 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"fnE" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/service/theater)
"foT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54299,9 +53718,8 @@
/turf/open/floor/wood/wood_large,
/area/service/chapel/main)
"fty" = (
-/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/lattice,
+/obj/structure/lattice/catwalk,
/turf/open/space,
/area/space/nearstation)
"ftE" = (
@@ -54320,6 +53738,30 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/medical/storage)
+"fvU" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/bananalamp{
+ pixel_y = 3
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/requests_console{
+ department = "Theatre";
+ name = "theatre RC";
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"fvY" = (
/obj/machinery/computer/cryopod{
pixel_y = 26
@@ -54399,6 +53841,25 @@
},
/turf/open/floor/plating,
/area/service/abandoned_gambling_den)
+"fBW" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/machinery/button/door{
+ id = "commissaryshutters";
+ name = "Commissary Shutters Control";
+ pixel_x = 24;
+ pixel_y = 6;
+ req_access_txt = null
+ },
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/pen,
+/turf/open/floor/plasteel,
+/area/commons/locker)
"fCx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54410,6 +53871,44 @@
},
/turf/open/floor/plasteel,
/area/commons/fitness)
+"fCJ" = (
+/obj/structure/sign/poster/contraband/missing_gloves{
+ pixel_x = -32
+ },
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
+"fDn" = (
+/obj/structure/table,
+/obj/item/trash/chips{
+ pixel_x = -4;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/beer/light{
+ pixel_x = 7
+ },
+/obj/item/cigbutt{
+ pixel_x = 10;
+ pixel_y = 17
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
+"fFl" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/commons/locker)
"fFA" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -54452,11 +53951,6 @@
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/processing)
-"fKl" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel,
-/area/science/circuit)
"fKC" = (
/obj/structure/chair/office/dark{
dir = 1
@@ -54498,6 +53992,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"fOK" = (
+/obj/machinery/shower{
+ dir = 1
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"fPi" = (
/obj/effect/decal/cleanable/oil{
icon_state = "floor6"
@@ -54509,6 +54009,20 @@
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"fRe" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/window{
+ dir = 1
+ },
+/obj/structure/bedsheetbin/color,
+/obj/structure/table,
+/turf/open/floor/plasteel/cafeteria,
+/area/commons/locker)
"fSO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
@@ -54533,6 +54047,12 @@
/obj/item/pen/fountain,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"fWi" = (
+/obj/structure/sign/poster/contraband/robust_softdrinks{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/service/bar)
"fZm" = (
/obj/structure/chair/sofa/left,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -54540,6 +54060,12 @@
},
/turf/open/floor/plasteel,
/area/commons/fitness)
+"fZR" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/commons/storage/primary)
"gav" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -54605,6 +54131,15 @@
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"gcx" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/mob/living/simple_animal/opossum{
+ name = "garbage"
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"gcF" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54649,6 +54184,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/commons/fitness)
+"giy" = (
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"giT" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54672,6 +54210,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"got" = (
+/obj/structure/closet,
+/obj/item/poster/random_contraband,
+/obj/item/poster/random_contraband,
+/obj/item/poster/random_contraband,
+/turf/open/floor/plasteel,
+/area/commons/locker)
"gpD" = (
/obj/effect/turf_decal/bot_white/left,
/obj/effect/turf_decal/tile/neutral{
@@ -54721,12 +54266,6 @@
"gvX" = (
/turf/open/floor/plasteel/yellowsiding,
/area/commons/fitness/pool)
-"gwd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
"gxc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54752,6 +54291,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
+"gyQ" = (
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"gzf" = (
/obj/structure/window/reinforced/tinted{
dir = 8
@@ -54811,6 +54353,27 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
/area/maintenance/starboard/aft)
+"gER" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
+"gFs" = (
+/obj/effect/landmark/start/assistant,
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/lusty_xenomorph{
+ pixel_x = 32
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/port/fore)
"gGK" = (
/turf/open/floor/carpet/royalblue,
/area/maintenance/starboard/aft)
@@ -54849,6 +54412,20 @@
/obj/structure/bedsheetbin/towel,
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/port/fore)
+"gLw" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/landmark/start/clown,
+/turf/open/floor/plasteel,
+/area/service/theater)
"gLz" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54885,17 +54462,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"gNC" = (
-/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/command/meeting_room)
"gNE" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -54907,6 +54473,21 @@
},
/turf/open/floor/plating,
/area/security/brig)
+"gOF" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/mob/living/simple_animal/bot/mulebot{
+ beacon_freq = 1400;
+ home_destination = "QM #1";
+ name = "Massive Load";
+ suffix = "#1"
+ },
+/obj/structure/sign/poster/official/high_class_martini{
+ pixel_x = -32
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"gOZ" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -54919,29 +54500,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
-"gQX" = (
-/obj/machinery/button/door{
- id = "LockerShitter4";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 14;
- pixel_y = 38;
- specialfunctions = 4
- },
-/obj/structure/toilet/secret/low_loot{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/sink{
- pixel_y = 25
- },
-/obj/structure/mirror{
- pixel_y = 32
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet/locker)
"gRV" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -55000,6 +54558,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"gZB" = (
+/obj/item/clothing/mask/cigarette{
+ pixel_x = -6;
+ pixel_y = 14
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"gZG" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -55088,6 +54653,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"hlS" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/mineral/titanium/blue,
+/area/commons/toilet)
"hlT" = (
/obj/machinery/door/airlock/external{
name = "Labor Camp Shuttle Airlock";
@@ -55123,6 +54695,29 @@
},
/turf/open/floor/plating,
/area/security/range)
+"hoL" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/bot_white,
+/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/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/command/gateway)
"hrF" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -55147,6 +54742,14 @@
/obj/item/kirbyplants/random,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"hty" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/command/gateway)
"hxn" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/green/visible,
@@ -55210,6 +54813,12 @@
/obj/item/pen,
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
+"hNm" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/commons/locker)
"hOv" = (
/obj/structure/table/wood/fancy,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -55219,13 +54828,6 @@
/obj/item/reagent_containers/food/snacks/burger/plain,
/turf/open/floor/wood,
/area/service/bar)
-"hPs" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 23
- },
-/turf/open/floor/plasteel/freezer,
-/area/commons/toilet/locker)
"hPP" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -55235,6 +54837,15 @@
},
/turf/closed/wall,
/area/cargo/warehouse)
+"hQX" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/command/gateway)
"hQY" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 6
@@ -55293,11 +54904,6 @@
/obj/effect/spawner/structure/window/hollow/reinforced/directional,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"hUJ" = (
-/obj/structure/reagent_dispensers/beerkeg,
-/obj/machinery/light/floor,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"hWd" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -55341,18 +54947,20 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"igi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"ihR" = (
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
+"ihS" = (
+/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/cafeteria,
+/area/commons/locker)
"iiW" = (
/turf/open/floor/wood,
/area/maintenance/bar)
@@ -55460,12 +55068,6 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/security/brig)
-"itG" = (
-/obj/structure/table/reinforced,
-/obj/item/paper_bin,
-/obj/item/pen,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
"itK" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -55509,11 +55111,6 @@
/obj/structure/table/optable,
/turf/open/floor/plasteel/white,
/area/medical/surgery)
-"ixd" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/beer,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"iyG" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small{
@@ -55639,6 +55236,12 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"iQg" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"iRj" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -55791,6 +55394,24 @@
},
/turf/open/space,
/area/space)
+"jdu" = (
+/obj/structure/table,
+/obj/machinery/light/floor,
+/obj/machinery/light/floor,
+/obj/item/clothing/glasses/sunglasses/reagent,
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = -5;
+ pixel_y = 12
+ },
+/obj/item/storage/fancy/cigarettes/cigpack_uplift{
+ pixel_x = 8;
+ pixel_y = 8
+ },
+/obj/structure/sign/poster/contraband/borg_fancy_2{
+ pixel_y = -32
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"jdE" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 1
@@ -55822,6 +55443,13 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"jfZ" = (
+/obj/machinery/computer/communications{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/command/heads_quarters/captain)
"jgm" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -55871,6 +55499,12 @@
/obj/machinery/rnd/production/techfab/department/cargo,
/turf/open/floor/plasteel,
/area/cargo/office)
+"jmL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/ai_monitored/turret_protected/ai_upload)
"jmV" = (
/obj/structure/table/wood/fancy,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -55904,6 +55538,23 @@
icon_state = "wood-broken7"
},
/area/maintenance/bar)
+"jqD" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/item/cigbutt{
+ pixel_x = -12;
+ pixel_y = 22
+ },
+/obj/item/cigbutt{
+ pixel_x = -15;
+ pixel_y = 16
+ },
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"jrE" = (
/obj/item/beacon,
/turf/open/floor/plasteel/white,
@@ -56015,18 +55666,18 @@
/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"jCq" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
+"jBZ" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/obj/effect/landmark/start/mime,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"jDr" = (
/obj/machinery/door/poddoor/preopen{
id = "atmos";
@@ -56057,6 +55708,10 @@
dir = 1
},
/area/commons/fitness)
+"jFd" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"jFB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -56201,12 +55856,33 @@
},
/turf/open/floor/plasteel,
/area/commons/fitness/pool)
+"jNr" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/item/cigbutt{
+ pixel_x = -15;
+ pixel_y = 16
+ },
+/turf/open/floor/plating/rust,
+/area/maintenance/port/fore)
"jRw" = (
/obj/machinery/computer/arcade/minesweeper{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/prison)
+"jSD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
"jSO" = (
/obj/machinery/light{
dir = 4
@@ -56356,6 +56032,13 @@
},
/turf/open/floor/plating,
/area/security/prison)
+"kgB" = (
+/obj/machinery/vending/snack/orange,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/service/bar)
"khb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -56381,6 +56064,22 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"kic" = (
+/obj/structure/table,
+/obj/item/circuitboard/machine/paystand{
+ pixel_x = 5;
+ pixel_y = -5
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"kil" = (
/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 5
@@ -56406,6 +56105,13 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"kkK" = (
+/obj/machinery/vending/autodrobe,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"klN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -56471,10 +56177,6 @@
/obj/machinery/gear_painter,
/turf/open/floor/plasteel,
/area/commons/fitness)
-"kqI" = (
-/obj/structure/window,
-/turf/open/floor/wood,
-/area/service/bar)
"ktP" = (
/obj/machinery/power/smes{
charge = 5e+006
@@ -56503,6 +56205,19 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"kuw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ areastring = "/area/commons/arcade";
+ dir = 8;
+ name = "Arcade Room";
+ pixel_x = -25
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"kuA" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/item/radio/intercom{
@@ -56514,10 +56229,6 @@
/obj/item/trash/candy,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"kvl" = (
-/obj/structure/grille,
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
"kvL" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -56556,6 +56267,15 @@
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/wood,
/area/maintenance/bar)
+"kzn" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/command/gateway)
"kzT" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
@@ -56605,6 +56325,12 @@
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"kEJ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/wood,
+/area/service/bar)
"kEY" = (
/obj/effect/landmark/stationroom/box/engine,
/turf/open/space/basic,
@@ -56694,6 +56420,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"kPi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/light/small/broken{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"kPj" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -56835,6 +56569,16 @@
/obj/effect/decal/cleanable/blood/gibs/human/body,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/aft)
+"lfu" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/structure/urinal{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/commons/toilet)
"lfV" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -56903,18 +56647,15 @@
},
/turf/open/floor/plasteel,
/area/command/gateway)
-"lld" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
+"lkT" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"lnk" = (
/obj/item/radio/intercom{
pixel_y = 25
@@ -56929,6 +56670,15 @@
icon_state = "wood-broken6"
},
/area/maintenance/bar)
+"lpQ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/command/gateway)
"lqO" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -56958,6 +56708,25 @@
/obj/machinery/vending/kink,
/turf/open/floor/plasteel,
/area/commons/fitness)
+"lsS" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"ltv" = (
+/mob/living/simple_animal/bot/cleanbot{
+ name = "Honest Work"
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"ltK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -57070,6 +56839,13 @@
"lLf" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/command/nuke_storage)
+"lLA" = (
+/obj/machinery/computer/slot_machine{
+ balance = 15;
+ money = 500
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"lMg" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -57095,12 +56871,32 @@
},
/turf/open/floor/plasteel,
/area/security/processing)
+"lOr" = (
+/obj/structure/table,
+/obj/machinery/light/floor,
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/blood/oilblood{
+ pixel_x = 7
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"lPr" = (
/obj/item/kirbyplants{
icon_state = "applebush"
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"lPG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/item/soap,
+/obj/effect/landmark/xeno_spawn,
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"lQG" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -57136,11 +56932,39 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/carpet,
/area/commons/dorms)
+"lVy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"lWD" = (
+/obj/effect/decal/cleanable/vomit/old,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"lXy" = (
/obj/machinery/light,
/obj/item/light/tube/broken,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"lZa" = (
+/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/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"lZl" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
@@ -57181,6 +57005,20 @@
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/port/fore)
+"mau" = (
+/obj/machinery/power/apc{
+ areastring = "/area/service/theater";
+ dir = 8;
+ name = "Theatre APC";
+ pixel_x = -25
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/service/theater)
"maT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
@@ -57204,6 +57042,16 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/security/range)
+"mcE" = (
+/obj/machinery/vending/cigarette,
+/obj/effect/decal/cleanable/cobweb{
+ icon_state = "cobweb2"
+ },
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = 32
+ },
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"meb" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/bed,
@@ -57233,13 +57081,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
-"mkO" = (
-/obj/machinery/door/airlock{
- name = "Shower Room"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
-/area/commons/toilet)
"mkU" = (
/obj/machinery/door/airlock/external{
name = "Labor Camp Shuttle Airlock"
@@ -57264,6 +57105,13 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
+"mmx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet/locker)
"mnC" = (
/obj/structure/target_stake,
/obj/item/target/syndicate,
@@ -57337,6 +57185,17 @@
dir = 1
},
/area/hallway/secondary/entry)
+"mqH" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/poddoor/shutters{
+ id = "commissaryshutters";
+ name = "Vacant Commissary Shutters"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"mqZ" = (
/obj/item/reagent_containers/glass/beaker,
/turf/open/floor/plating,
@@ -57349,13 +57208,13 @@
/obj/structure/sign/departments/holy,
/turf/closed/wall,
/area/service/chapel/main)
-"mug" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
+"muv" = (
+/obj/item/radio/intercom{
+ pixel_y = 25
},
-/mob/living/simple_animal/bot/mulebot,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
+/obj/machinery/shower,
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"mvt" = (
/obj/machinery/airalarm{
dir = 1;
@@ -57363,6 +57222,16 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"mwj" = (
+/obj/structure/noticeboard{
+ dir = 8;
+ pixel_x = 27
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/command/meeting_room)
"mwS" = (
/turf/open/floor/plating{
icon_state = "platingdmg3"
@@ -57396,6 +57265,14 @@
},
/turf/open/floor/wood,
/area/service/theater)
+"mzT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/vending/coffee,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"mAH" = (
/obj/machinery/atmospherics/components/unary/tank/air{
dir = 8
@@ -57486,20 +57363,6 @@
/obj/item/electronics/airlock,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"mJG" = (
-/obj/machinery/light{
- dir = 4;
- light_color = "#c1caff"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/wood,
-/area/service/theater)
"mLS" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating{
@@ -57666,6 +57529,13 @@
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
+"ncg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/shower{
+ dir = 1
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"ndq" = (
/turf/open/floor/plating,
/area/service/abandoned_gambling_den)
@@ -57839,6 +57709,19 @@
"nyi" = (
/turf/closed/wall,
/area/medical/paramedic)
+"nyn" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"nzB" = (
/obj/machinery/hydroponics/soil{
pixel_y = 8
@@ -57859,6 +57742,20 @@
},
/turf/closed/wall,
/area/maintenance/port/fore)
+"nDd" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
"nEj" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
@@ -57894,6 +57791,11 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"nGR" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/computer/arcade,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"nJP" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 5
@@ -57935,6 +57837,16 @@
},
/turf/open/floor/plasteel,
/area/commons/locker)
+"nNF" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/service/bar)
+"nPr" = (
+/obj/item/broken_bottle,
+/turf/open/floor/plating,
+/area/maintenance/port/fore)
"nQi" = (
/obj/machinery/recharge_station,
/turf/open/floor/plating,
@@ -57981,6 +57893,9 @@
},
/turf/open/floor/plasteel,
/area/service/hydroponics)
+"nVz" = (
+/turf/closed/wall/r_wall,
+/area/ai_monitored/turret_protected/ai_upload)
"nXg" = (
/obj/structure/girder,
/obj/structure/grille,
@@ -58181,41 +58096,6 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/security/prison)
-"omY" = (
-/obj/machinery/button/door{
- id = "LockerShitter3";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 14;
- pixel_y = 38;
- specialfunctions = 4
- },
-/obj/structure/toilet/secret/low_loot{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/sink{
- pixel_y = 25
- },
-/obj/structure/mirror{
- pixel_y = 32
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet/locker)
-"opg" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"oqj" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -58237,6 +58117,10 @@
},
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
+"otC" = (
+/obj/machinery/status_display/evac,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/turret_protected/ai_upload)
"ouf" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -58270,6 +58154,19 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"owx" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/commons/locker)
"oxm" = (
/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/sparsegrass,
@@ -58312,12 +58209,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"oAb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/service/bar)
"oAB" = (
/obj/structure/fireplace{
pixel_y = -6
@@ -58344,6 +58235,12 @@
/obj/machinery/gulag_teleporter,
/turf/open/floor/plasteel,
/area/security/prison)
+"oDD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/service/bar)
"oDN" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -58366,12 +58263,6 @@
"oHB" = (
/turf/open/floor/plasteel/dark,
/area/commons/dorms)
-"oHU" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
"oIJ" = (
/obj/structure/chair/comfy/brown{
dir = 8
@@ -58438,6 +58329,11 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/security/range)
+"oTH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/shower,
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet)
"oTW" = (
/obj/machinery/light{
dir = 1
@@ -58470,11 +58366,6 @@
},
/turf/closed/wall/r_wall,
/area/engineering/atmos)
-"oYQ" = (
-/obj/structure/chair/stool,
-/mob/living/simple_animal/bot/medbot,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"oZl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/closet/wardrobe/pjs,
@@ -58495,11 +58386,11 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/maintenance/aft)
-"pcK" = (
-/mob/living/simple_animal/bot/cleanbot{
- name = "C.L.E.A.N."
+"pcz" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
},
-/turf/open/floor/light/colour_cycle/dancefloor_a,
+/turf/open/floor/carpet/royalblue,
/area/maintenance/starboard/aft)
"pcQ" = (
/obj/effect/turf_decal/tile/neutral{
@@ -58582,15 +58473,6 @@
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/aft)
-"plC" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/service/bar)
"plS" = (
/obj/machinery/door/window/brigdoor/security/cell{
id = "Cell 1";
@@ -58611,6 +58493,22 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"pnc" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ 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/commons/locker)
"poc" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -58710,18 +58608,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"pyC" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/command/gateway)
"pzG" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
@@ -58738,6 +58624,12 @@
},
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
+"pzP" = (
+/obj/structure/sign/poster/contraband/punch_shit{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/maintenance/starboard/aft)
"pAK" = (
/obj/machinery/door/window/brigdoor/security/cell{
id = "Cell 3";
@@ -58772,6 +58664,13 @@
},
/turf/open/floor/plating,
/area/engineering/atmos)
+"pCE" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
"pDe" = (
/obj/machinery/door/window/southright{
name = "Target Storage"
@@ -58838,15 +58737,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"pIf" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/clown)
"pJR" = (
/obj/structure/disposalpipe/segment,
/obj/structure/chair/comfy/brown{
@@ -58871,6 +58761,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"pNS" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"pPi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -58973,6 +58870,11 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"qae" = (
+/obj/effect/decal/cleanable/vomit,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/maintenance/fore)
"qaY" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/bar,
@@ -58982,18 +58884,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/service/bar)
-"qcm" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/command/gateway)
"qeb" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -59062,6 +58952,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"qki" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet/locker)
"qkn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/light{
@@ -59082,6 +58981,12 @@
},
/turf/closed/wall,
/area/maintenance/port/fore)
+"qlV" = (
+/obj/item/mop{
+ name = "Ain't Much"
+ },
+/turf/open/floor/light/colour_cycle/dancefloor_a,
+/area/maintenance/starboard/aft)
"qlY" = (
/obj/item/kirbyplants/random,
/turf/open/floor/plating{
@@ -59097,15 +59002,19 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
-"qqs" = (
-/obj/structure/mirror{
- pixel_y = 32
+"qoT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/obj/structure/sink{
- pixel_y = 25
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet)
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
"qtw" = (
/obj/machinery/door/airlock/external{
dir = 2;
@@ -59149,12 +59058,36 @@
},
/turf/open/floor/plasteel,
/area/commons/dorms)
+"qAu" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/item/storage/toolbox/emergency,
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/commons/locker)
"qBi" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"qCw" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/light/small/broken{
+ dir = 8
+ },
+/obj/item/glasswork/glass_base/glasses_frame_1{
+ pixel_x = -6;
+ pixel_y = 13
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
+ },
+/area/commons/arcade)
"qCR" = (
/obj/structure/musician/piano,
/obj/effect/decal/cleanable/cobweb,
@@ -59274,6 +59207,18 @@
},
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
+"qSo" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/commons/locker)
"qSF" = (
/obj/item/seeds/bee_balm/honey_balm,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -59341,6 +59286,19 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"rbH" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/window{
+ dir = 1
+ },
+/obj/machinery/washing_machine,
+/turf/open/floor/plasteel/cafeteria,
+/area/commons/locker)
"rcD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -59485,12 +59443,6 @@
},
/turf/open/floor/wood,
/area/service/bar)
-"rqW" = (
-/obj/structure/dresser,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
"rrM" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -59561,6 +59513,25 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"rwj" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/closet/crate/bin,
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/maintenance/port/fore)
+"rxD" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Locker Room Toilets";
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet/locker)
"rxF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/table/glass,
@@ -59616,6 +59587,24 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"rDh" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/structure/sign/poster/contraband/clown{
+ pixel_y = -32
+ },
+/obj/structure/closet/crate/wooden/toy,
+/obj/item/toy/crayon/spraycan/lubecan,
+/turf/open/floor/plasteel,
+/area/service/theater)
"rGo" = (
/obj/machinery/light/small{
dir = 1
@@ -59687,18 +59676,6 @@
/obj/machinery/status_display/evac,
/turf/closed/wall,
/area/ai_monitored/command/storage/eva)
-"rPU" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/effect/landmark/start/mime,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/service/theater/mime)
"rQJ" = (
/obj/machinery/light/small{
dir = 8
@@ -59727,16 +59704,6 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"rTu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
"rTD" = (
/turf/open/floor/plasteel,
/area/command/gateway)
@@ -59806,6 +59773,11 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"rZE" = (
+/obj/structure/table,
+/obj/item/flashlight/lamp,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"rZQ" = (
/obj/docking_port/stationary{
dir = 8;
@@ -59891,6 +59863,16 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"smN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/machinery/camera{
+ c_tag = "Locker Room West";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"smP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -59913,12 +59895,6 @@
/obj/item/clothing/shoes/sneakers/white,
/turf/open/floor/plating,
/area/maintenance/fore)
-"sqp" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
"srk" = (
/turf/open/floor/light/colour_cycle/dancefloor_a,
/area/maintenance/starboard/aft)
@@ -59956,6 +59932,14 @@
/obj/item/toy/poolnoodle/yellow,
/turf/open/floor/plasteel,
/area/commons/fitness/pool)
+"suN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/landmark/event_spawn,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
"sxs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/table,
@@ -60104,25 +60088,6 @@
/obj/structure/grille/broken,
/turf/open/floor/plating,
/area/maintenance/aft)
-"sLa" = (
-/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/commons/locker)
"sLj" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -60145,23 +60110,11 @@
icon_state = "platingdmg3"
},
/area/maintenance/starboard/aft)
-"sNK" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/obj/structure/closet/secure_closet/freezer/cream_pie,
-/obj/machinery/airalarm{
- pixel_y = 23
- },
+"sMI" = (
+/obj/structure/table,
+/obj/item/storage/secure/briefcase,
/turf/open/floor/plasteel,
-/area/service/theater/clown)
+/area/commons/locker)
"sOs" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -60214,6 +60167,24 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"sUx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/command/gateway)
+"sVt" = (
+/obj/item/storage/secure/safe{
+ pixel_y = 32
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"sVD" = (
/obj/structure/table/wood/poker,
/obj/item/storage/box/matches{
@@ -60252,17 +60223,46 @@
/obj/effect/turf_decal/vg_decals/atmos/mix,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
-"sYR" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
+"sYv" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/service/bar)
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/structure/closet/secure_closet/freezer/cream_pie,
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/plasteel,
+/area/service/theater)
"tal" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/hallway/secondary/service)
+"tcU" = (
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "46"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/fore)
+"teS" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/mob/living/simple_animal/opossum{
+ name = "trash"
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"tgH" = (
/obj/structure/filingcabinet/employment,
/turf/open/floor/wood,
@@ -60356,6 +60356,14 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
+"trT" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
"tsq" = (
/obj/structure/cable/white{
icon_state = "0-4"
@@ -60404,6 +60412,15 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"tyE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"tyX" = (
/obj/effect/turf_decal/bot_white,
/obj/effect/turf_decal/tile/neutral{
@@ -60425,6 +60442,11 @@
/obj/item/soap,
/turf/open/floor/mineral/titanium/blue,
/area/commons/dorms)
+"tAy" = (
+/obj/effect/decal/cleanable/oil/slippery,
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/light/colour_cycle/dancefloor_a,
+/area/maintenance/starboard/aft)
"tAC" = (
/obj/structure/closet/athletic_mixed,
/obj/item/toy/poolnoodle/red,
@@ -60637,6 +60659,14 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"tVB" = (
+/obj/effect/landmark/blobstart,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/commons/toilet/locker)
"tVE" = (
/obj/item/chair/wood{
dir = 4
@@ -60664,6 +60694,18 @@
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"tZa" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"tZe" = (
/obj/effect/turf_decal/bot,
/obj/structure/sign/poster/official/pda_ad{
@@ -60671,6 +60713,9 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"tZp" = (
+/turf/closed/wall,
+/area/commons/arcade)
"tZu" = (
/obj/machinery/light/small{
dir = 8
@@ -60689,25 +60734,6 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
-"ubj" = (
-/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/commons/locker)
"ucq" = (
/obj/structure/sign/poster/contraband/red_rum{
pixel_y = 32
@@ -60817,6 +60843,14 @@
},
/turf/open/floor/wood,
/area/service/bar)
+"unQ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/item/papercutter,
+/obj/structure/table,
+/turf/open/floor/carpet,
+/area/command/heads_quarters/hop)
"unR" = (
/turf/open/floor/plasteel/yellowsiding{
dir = 8
@@ -60973,6 +61007,15 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
+"uCn" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin,
+/obj/item/pen,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
"uCo" = (
/obj/structure/chair{
dir = 1
@@ -61089,16 +61132,11 @@
/obj/machinery/door/window,
/turf/open/floor/wood,
/area/service/theater)
-"uNu" = (
-/obj/structure/disposalpipe/segment{
+"uOd" = (
+/turf/open/floor/plasteel/white/side{
dir = 4
},
-/obj/effect/turf_decal/stripes/line,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
+/area/service/theater)
"uOJ" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -61116,24 +61154,12 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"uQS" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/commons/toilet)
"uRd" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/closed/wall/r_wall,
/area/engineering/gravity_generator)
-"uRn" = (
-/obj/structure/chair/stool,
-/mob/living/simple_animal/opossum,
-/turf/open/floor/carpet/royalblue,
-/area/maintenance/starboard/aft)
"uRS" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -61144,6 +61170,16 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"uSc" = (
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#c1caff"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/service/theater)
"uSC" = (
/obj/machinery/pool/drain,
/turf/open/pool,
@@ -61155,12 +61191,13 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
-"uUi" = (
-/obj/effect/decal/cleanable/vomit,
+"uTL" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/fore)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"uUP" = (
/obj/structure/cable/white,
/obj/structure/cable/white{
@@ -61196,6 +61233,12 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"uZM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/ai_monitored/turret_protected/ai_upload)
"vae" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -61244,6 +61287,14 @@
},
/turf/open/floor/plating,
/area/security/range)
+"vde" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/obj/effect/landmark/start/captain,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/command/heads_quarters/captain)
"vdo" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
/obj/structure/lattice,
@@ -61287,18 +61338,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
-"vhb" = (
-/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/commons/locker)
"viF" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -61347,6 +61386,19 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"voT" = (
+/obj/machinery/camera{
+ c_tag = "Bathrooms";
+ dir = 1
+ },
+/obj/structure/sink{
+ pixel_y = 25
+ },
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/commons/toilet)
"voW" = (
/obj/structure/pool/Lboard,
/turf/open/pool,
@@ -61467,6 +61519,17 @@
},
/turf/open/floor/plating,
/area/security/brig)
+"vyP" = (
+/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/commons/toilet/locker)
"vzp" = (
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
@@ -61491,18 +61554,6 @@
},
/turf/open/floor/plasteel,
/area/commons/fitness/pool)
-"vBa" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/command/gateway)
"vCb" = (
/obj/machinery/rnd/production/techfab/department/service,
/turf/open/floor/plasteel,
@@ -61803,6 +61854,15 @@
/obj/structure/girder,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"wfC" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/mob/living/simple_animal/bot/medbot{
+ name = "Doctor Love"
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"wfR" = (
/obj/item/electropack/shockcollar,
/obj/item/assembly/signaler,
@@ -61934,6 +61994,26 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"wrX" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/structure/window,
+/obj/structure/window{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
"wuO" = (
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -61957,6 +62037,30 @@
/obj/item/stack/sheet/metal/ten,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"wwG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/commons/locker)
+"wxf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/holopad/secure,
+/turf/open/floor/wood,
+/area/command/heads_quarters/captain)
+"wxk" = (
+/obj/item/reagent_containers/food/drinks/beer{
+ pixel_x = -15
+ },
+/obj/machinery/computer/arcade,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"wxT" = (
/obj/structure/chair/sofa/left,
/obj/structure/window{
@@ -61977,12 +62081,28 @@
},
/turf/closed/wall,
/area/hallway/secondary/service)
+"wCQ" = (
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"wHk" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/commons/fitness/pool)
+"wHm" = (
+/obj/structure/window/reinforced,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/wood,
+/area/service/theater)
"wHz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -61993,6 +62113,11 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"wII" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance,
+/turf/open/floor/wood,
+/area/service/bar)
"wJA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -62102,6 +62227,13 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"wYn" = (
+/obj/structure/plasticflaps/opaque,
+/obj/structure/sign/poster/contraband/free_drone{
+ pixel_y = 32
+ },
+/turf/open/floor/carpet/royalblue,
+/area/maintenance/starboard/aft)
"wZI" = (
/obj/machinery/light{
dir = 1
@@ -62256,24 +62388,17 @@
},
/turf/open/floor/plasteel,
/area/commons/fitness)
-"xmo" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
+"xlX" = (
+/obj/structure/table/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/red,
-/obj/structure/sign/poster/contraband/clown{
- pixel_y = -32
+/obj/machinery/door/poddoor/shutters{
+ id = "commissaryshutters";
+ name = "Vacant Commissary Shutters"
},
-/obj/structure/closet/crate/wooden/toy,
-/obj/item/toy/crayon/spraycan/lubecan,
/turf/open/floor/plasteel,
-/area/service/theater/clown)
+/area/commons/locker)
"xmS" = (
/obj/structure/chair/comfy/beige{
dir = 8
@@ -62331,6 +62456,15 @@
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
+"xwB" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"xxi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -62350,6 +62484,11 @@
"xxp" = (
/turf/open/floor/plating,
/area/security/range)
+"xzd" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/closet,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"xzv" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -62516,15 +62655,6 @@
/obj/effect/spawner/lootdrop/bedsheet,
/turf/open/floor/wood,
/area/commons/dorms)
-"xPY" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/closed/wall/r_wall,
-/area/ai_monitored/turret_protected/ai_upload)
"xRa" = (
/obj/item/kirbyplants{
icon_state = "plant-20"
@@ -62686,12 +62816,6 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/commons/toilet/locker)
-"ycu" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
"ycY" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -62723,24 +62847,16 @@
/obj/machinery/status_display/evac,
/turf/closed/wall,
/area/hallway/primary/central)
+"yfX" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/carpet/arcade,
+/area/commons/arcade)
"ygb" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 4
},
/turf/open/floor/wood/wood_diagonal,
/area/maintenance/port/fore)
-"ygG" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/command/gateway)
"yhx" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -79073,10 +79189,10 @@ aQM
aTv
aUT
aPz
-aXQ
-aXQ
-aXQ
-aXQ
+aPA
+hNm
+aPA
+aPA
aXQ
aXQ
aXQ
@@ -79330,14 +79446,14 @@ aPA
aPA
aPA
aPA
+got
+pNS
+sMI
+kic
aXQ
aZt
aXQ
ycd
-aXQ
-omY
-aXQ
-gQX
bhQ
bjj
bkF
@@ -79586,15 +79702,15 @@ aQO
aSh
aTw
aUU
-aWn
+aPA
+aPA
+sVt
+pNS
+qAu
aXQ
aZv
aXQ
bbL
-aXQ
-bdJ
-aXQ
-bgr
bhQ
bjj
bkF
@@ -79842,16 +79958,16 @@ aPA
aQN
aQN
aQN
-aUn
-aTy
+aQN
+aWn
+aPA
+uTL
+wwG
+fBW
aWy
-aYe
-bbq
-aZw
+mmx
+tVB
wTk
-bct
-bct
-bct
bhQ
bjk
bkE
@@ -80099,16 +80215,16 @@ aPA
aQS
aQN
aSV
-aUo
-aUX
-aXp
-baO
-aZo
-baw
-cFG
-hPs
-cBn
-bct
+aYU
+smN
+aPA
+mqH
+xlX
+aPA
+aXQ
+ddl
+vyP
+rxD
bhQ
bjk
bkF
@@ -80327,8 +80443,8 @@ aaa
aaa
alU
alU
-ank
alU
+ank
alU
aoW
amC
@@ -80356,14 +80472,14 @@ aPA
aQP
aQN
aTB
+aQN
+aWq
+aQN
+aWq
aUt
-aWo
-aXQ
-aXQ
-aXQ
-aXQ
-aXQ
+aQN
aXQ
+qki
aXQ
aXQ
bhQ
@@ -80583,9 +80699,9 @@ aaa
aaa
aaa
alU
-anj
-amD
-amC
+lLA
+mzT
+aKY
alU
arG
amC
@@ -80613,14 +80729,14 @@ aPA
aQR
aQN
aQN
-aUt
+aQN
aWq
aQN
+aWq
+aUt
aQN
-aQN
-aQN
-vhb
-bbO
+fRe
+qSo
aPA
bgt
bhS
@@ -80840,8 +80956,8 @@ aaf
aaf
aaf
alU
-amC
-arK
+jNr
+gZB
amC
ank
amC
@@ -80870,14 +80986,14 @@ aPC
aQN
aQN
aTz
-aUp
-ubj
aXr
-aZx
-aQN
-aQN
-cBh
-bdL
+lZa
+fFl
+wrX
+aUo
+aYU
+ihS
+owx
aPA
bgt
bhR
@@ -81097,9 +81213,9 @@ aaa
aaa
aaa
alU
-anl
-amE
-amC
+enJ
+enJ
+arL
alU
qjo
alU
@@ -81127,13 +81243,13 @@ aPD
aQT
aQN
aTC
-aUs
+dyC
aUY
aXv
aYS
+aUt
aQN
-aQN
-vhb
+rbH
bbO
aPA
aSg
@@ -81354,8 +81470,8 @@ aaa
aaa
aaa
alU
-alU
-alU
+rwj
+nPr
amC
alU
alU
@@ -81384,11 +81500,11 @@ aPA
pqs
aQN
aTC
-aUs
+dyC
mTG
aXt
ijG
-aQN
+aUt
aQN
aPA
aPA
@@ -81610,10 +81726,10 @@ aaa
aaa
aaa
aaa
-alU
-anm
-alU
-amC
+jFd
+fDn
+gFs
+aKY
alU
xFM
alU
@@ -81641,11 +81757,11 @@ aPE
aQV
aQN
aTC
-aUu
+aXv
gxc
aXt
ijG
-aQN
+aUt
aQN
aZB
aPA
@@ -81886,7 +82002,7 @@ ayy
aAO
aBN
aDe
-aDe
+fZR
aFT
aDe
aIU
@@ -81898,11 +82014,11 @@ aPA
aiB
aQN
nLw
-sLa
+pnc
oyl
aXw
qfk
-aQN
+aUt
aQN
aZA
aPA
@@ -82155,11 +82271,11 @@ aPA
aQX
aQN
aSi
-aUv
+aTy
aWp
aTy
aTy
-aTy
+aUv
aTy
bbs
bcw
@@ -82652,9 +82768,9 @@ lZN
amC
jIW
nBI
-aDy
-fgG
-rqW
+eky
+mau
+eAe
wUr
tJi
aLP
@@ -82909,9 +83025,9 @@ alU
amC
ntt
ugq
-aEU
-rPU
-fne
+kkK
+jBZ
+uOd
wUr
aHI
fOA
@@ -83167,8 +83283,8 @@ aFJ
ntt
nBI
wUr
-aCh
-pIf
+fvU
+gER
kCo
aHK
aHK
@@ -83423,9 +83539,9 @@ alU
alU
awa
axp
-aGf
-azH
-eEe
+tcU
+fnE
+gLw
wUr
aCr
aLT
@@ -83677,16 +83793,16 @@ gQr
xbi
wje
rQJ
-uUi
+arP
avZ
xtP
wUr
-sNK
-xmo
+sYv
+rDh
wUr
mzB
-mJG
-tWj
+uSc
+wHm
qTG
aJe
aKw
@@ -84204,9 +84320,9 @@ aOs
ngs
uRS
fcn
-aLN
-rTu
-aOt
+trT
+jSD
+nDd
aPK
aPK
aPK
@@ -84958,7 +85074,7 @@ anO
aaa
aaa
arP
-aqR
+qae
aqR
arP
asQ
@@ -85220,7 +85336,7 @@ dPq
arP
asP
cya
-arP
+avZ
axu
ayH
ktS
@@ -86090,7 +86206,7 @@ bgO
jBA
btG
aaa
-kvl
+iDo
ctv
iDo
aaa
@@ -89368,7 +89484,7 @@ bmo
bnR
bpe
bqB
-bqq
+unQ
btD
buO
bwk
@@ -89874,7 +89990,7 @@ bde
kvL
bcd
bcd
-gNC
+bcd
bcd
bcd
bcd
@@ -90130,7 +90246,7 @@ bbh
bcc
bdd
cVs
-bfr
+mwj
bbX
bif
aZM
@@ -90387,10 +90503,10 @@ bbk
bbk
bfu
bbk
-bfs
-ctv
-ctv
-ctv
+jmL
+aZM
+aZM
+aZM
ktS
gXs
ktS
@@ -90644,7 +90760,7 @@ bbj
bce
bdf
beb
-xPY
+aYv
ktS
ktS
ktS
@@ -90901,10 +91017,10 @@ aZR
aZR
bbm
bec
-lld
-vBa
-aBa
-pyC
+bfu
+hty
+lpQ
+sUx
iZd
wql
wql
@@ -91415,7 +91531,7 @@ bbm
bbm
bdh
bee
-bfv
+nVz
xUL
tyX
gpD
@@ -91672,10 +91788,10 @@ cBj
bcf
bdg
bed
-bfv
+nVz
tyX
pst
-cTT
+hoL
alu
aEM
aGd
@@ -91929,7 +92045,7 @@ bbm
bbm
bdh
bef
-bfv
+nVz
gTx
tyX
xEB
@@ -92186,7 +92302,7 @@ aZR
aZR
aZR
aZR
-bfw
+otC
wZI
gDO
aBW
@@ -92443,10 +92559,10 @@ aZR
aZR
bbm
beh
-opg
-qcm
-ddV
-ygG
+bfx
+dYl
+kzn
+hQX
iss
iss
lcx
@@ -92700,7 +92816,7 @@ bbn
bcg
aZU
beg
-igi
+aYB
ktS
ktS
ktS
@@ -92957,10 +93073,10 @@ bbp
bbp
bfx
bbp
-bfz
-sqp
-ctv
-ctv
+uZM
+aZV
+aZV
+aZV
ktS
gXs
ktS
@@ -93215,7 +93331,7 @@ bch
bdi
bbw
bfy
-bgS
+bbw
bik
aZV
aZV
@@ -93472,7 +93588,7 @@ bdk
mRQ
bek
bfB
-bgU
+vde
bdk
bjF
blc
@@ -93729,7 +93845,7 @@ bej
bdj
bej
bfA
-bgT
+jfZ
bil
bej
blb
@@ -93986,7 +94102,7 @@ baQ
wcB
bcQ
bfC
-bgV
+eOu
bim
bjG
aZV
@@ -94243,7 +94359,7 @@ baP
asD
bcP
cBo
-bgS
+bbw
bbw
bbw
aZV
@@ -94500,7 +94616,7 @@ bcm
bcm
bem
bfD
-bgW
+wxf
bfD
bjI
aZV
@@ -95507,7 +95623,7 @@ aAi
uIO
aCn
xBk
-dtx
+hlS
aGm
aHV
aDM
@@ -95764,10 +95880,10 @@ kmw
xrN
aAh
aAh
+exX
aAh
aAh
-aAh
-aDN
+voT
aAh
aMo
aNC
@@ -96020,9 +96136,9 @@ aze
awr
flE
aAh
-aDU
-aBz
-aBz
+muv
+gyQ
+fOK
aAh
dTI
ujv
@@ -96277,11 +96393,11 @@ awr
azX
aAZ
aCe
-aDT
-cPn
-cPn
-mkO
-uQS
+oTH
+lPG
+ncg
+aCe
+lfu
aAh
aJC
aJC
@@ -96534,12 +96650,12 @@ awr
avG
aBA
aAh
-aDP
-aBx
-aBx
aAh
-qqs
-sYR
+aAh
+aAh
+aAh
+aJC
+aJC
aMq
adq
aQb
@@ -96791,13 +96907,13 @@ lgX
qvf
wqF
aAh
-aAh
-aAh
-aAh
-aAh
-aAh
-aAh
-aKR
+nGR
+qCw
+fCJ
+fiv
+aJC
+fWi
+hIL
aKR
fxe
aPY
@@ -97047,14 +97163,14 @@ axT
axW
aAl
cHf
+tZp
+wxk
+xwB
+lWD
+dvb
aJC
-aDR
-aFl
-kqI
-aHZ
-aJC
-aKJ
-hIL
+nNF
+aKR
aKR
wxT
moD
@@ -97304,14 +97420,14 @@ axS
azk
aAk
tvi
-aJC
-aDY
-aDY
-kqI
-aKR
-aJk
-aKR
-aKR
+tZp
+flG
+jqD
+giy
+yfX
+wII
+aMu
+kEJ
aKR
aKR
aKR
@@ -97399,7 +97515,7 @@ aaa
aaa
aaa
aaa
-jAD
+fIs
aaa
aaa
aaa
@@ -97561,14 +97677,14 @@ awr
awr
aAn
rqk
+tZp
+mcE
+dsi
+fgl
+rZE
aJC
-aEc
-aFk
-aGw
-aKR
-aJC
-aKr
-aKR
+kgB
+oDD
aKR
sLj
sLj
@@ -97818,14 +97934,14 @@ awr
awr
aAn
jGW
-aJC
-aJC
-plC
-oAb
-aJC
+tZp
+tZp
+dGa
+tZp
+tZp
aJC
aKq
-aKR
+oDD
aNF
hOv
oax
@@ -98078,11 +98194,11 @@ uxY
aBC
aCt
aEA
-aGz
-aIb
+lsS
+kuw
aJC
-aKN
-aKR
+eTA
+oDD
aKR
aOJ
oIJ
@@ -98335,11 +98451,11 @@ vyp
aBB
aBB
aBB
-aGy
+tZa
aIa
cNE
aKM
-aMu
+feG
aMu
feG
tif
@@ -98661,7 +98777,7 @@ cCS
bMK
bMK
bMK
-gXs
+gJi
aaa
aaa
aaa
@@ -99175,7 +99291,7 @@ bMK
bMK
bMK
bMK
-aaf
+aag
aoV
aoV
aoV
@@ -103202,7 +103318,7 @@ aaf
aaf
aaf
aaf
-cxW
+aag
alO
anf
anf
@@ -111498,7 +111614,7 @@ mRe
olr
bPL
cVK
-bTo
+uCn
eaI
cbZ
bSl
@@ -112008,11 +112124,11 @@ cbe
bTp
vCt
bVs
-fKl
-bXt
-bPM
+suN
+pCE
+qoT
bZh
-itG
+bXs
cbe
wvX
bSl
@@ -112262,14 +112378,14 @@ bEC
bSl
dMZ
bXs
+vPE
bXs
-bXs
-gwd
-ycu
-oHU
-uNu
-bXs
-bXs
+bVt
+dfh
+jSO
+jgm
+oUh
+vPE
bXs
bXs
bSl
@@ -112519,14 +112635,14 @@ cOe
bSl
bUq
flc
-vPE
-bXs
-bVt
-dfh
-jSO
-jgm
-oUh
-vPE
+bSl
+bSl
+bSl
+bSl
+bSl
+bSl
+bSl
+bSl
jrE
saK
bSl
@@ -112772,17 +112888,17 @@ bKb
cNX
cNZ
cNZ
-jCq
-bSl
-bSl
-bSl
-bSl
-bSl
-bSl
+nyn
bSl
bSl
bSl
bSl
+kPi
+cOe
+cae
+oMT
+wCQ
+xzd
bSl
bSl
bSl
@@ -113028,22 +113144,22 @@ bGL
bKd
cNY
bMC
-cOb
+lVy
jHt
bPO
kob
bSm
bTr
-bTr
-bTr
-bTr
-bTr
-bTr
+tyE
+lkT
+cUb
+lkT
+tyE
bTr
bTr
cbg
bTr
-bTr
+tyE
bTr
nGt
cbg
@@ -113561,13 +113677,13 @@ ccW
cNW
clt
cNW
-cfv
+wYn
cNW
-mug
-hUJ
-ixd
+gOF
+gGK
+lOr
cNW
-ktS
+gXs
aaf
aaf
aaf
@@ -113816,13 +113932,13 @@ cNW
wly
ccV
noa
-clu
-cNW
-xgs
+iQg
+ccU
+pcz
srk
+tAy
srk
-srk
-oYQ
+wfC
cNW
aaa
aaf
@@ -114077,11 +114193,11 @@ ceT
cNW
gGK
chH
-dEh
+eUX
srk
gGK
cNW
-ktS
+gXs
aaf
aaf
aaf
@@ -114332,11 +114448,11 @@ cNW
cNW
cPH
cNW
-gGK
-pcK
+xgs
+qlV
srk
-dHp
-uRn
+fkh
+gcx
cNW
aaa
aaf
@@ -114590,10 +114706,10 @@ cNW
ceU
cNW
cgy
+ltv
gGK
-gGK
-uRn
-dBm
+teS
+jdu
cNW
aaa
aaf
@@ -114827,7 +114943,7 @@ gXs
aaf
aaa
cNW
-bPP
+pzP
tsq
pkS
olh
@@ -114852,7 +114968,7 @@ cNW
cNW
cNW
cNW
-ktS
+gXs
aaf
aaf
aaf
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index 385df5e097..b2478c540c 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -5386,12 +5386,14 @@
/turf/open/floor/plating/asteroid,
/area/security/prison)
"aiw" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/obj/item/stack/cable_coil/white,
/obj/item/stack/cable_coil/white,
/obj/item/stack/sheet/glass,
/obj/item/stack/sheet/glass,
/obj/item/circuitboard/machine/microwave,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -9379,7 +9381,6 @@
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"aoO" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "1-2"
},
@@ -9392,12 +9393,12 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"aoP" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -9414,22 +9415,18 @@
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"aoQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"aoR" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/cable/white{
icon_state = "4-8"
@@ -9438,6 +9435,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/service/bar/atrium)
"aoS" = (
@@ -9445,9 +9445,6 @@
name = "Maintenance Hatch";
req_access_txt = "12"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -9457,26 +9454,18 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/central)
-"aoT" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
+/turf/open/floor/plating,
/area/maintenance/starboard/central)
"aoU" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
/obj/structure/cable/white{
icon_state = "2-8"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"aoV" = (
@@ -10266,27 +10255,18 @@
/turf/closed/wall,
/area/maintenance/starboard/central)
"apZ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"aqa" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/maintenance/starboard/central)
"aqb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -10936,19 +10916,14 @@
/turf/open/floor/plating,
/area/service/bar/atrium)
"arg" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/maintenance/starboard/central)
-"arh" = (
-/obj/structure/girder,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/central)
"ari" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/extinguisher_cabinet{
@@ -11758,19 +11733,21 @@
/turf/open/floor/plasteel/dark,
/area/service/bar/atrium)
"ask" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "1-4"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"asl" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"asm" = (
@@ -12453,24 +12430,6 @@
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
/area/security/detectives_office)
-"atl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall,
-/area/service/bar/atrium)
-"atm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/service/bar/atrium)
-"atn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall,
-/area/service/bar/atrium)
"ato" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/white{
@@ -13161,10 +13120,6 @@
},
/turf/open/floor/plasteel/dark,
/area/service/bar/atrium)
-"aum" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/service/bar/atrium)
"aun" = (
/obj/effect/landmark/blobstart,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -13816,9 +13771,6 @@
dir = 8;
pixel_x = 24
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -13829,13 +13781,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/service/bar/atrium)
-"avr" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
-/turf/closed/wall,
+/turf/open/floor/plasteel/dark,
/area/service/bar/atrium)
"avs" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -14552,7 +14501,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -16011,7 +15959,6 @@
/area/maintenance/starboard/central)
"ayT" = (
/obj/structure/girder,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"ayU" = (
@@ -17273,16 +17220,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/starboard/central)
-"aAW" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/central)
"aAX" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
/obj/structure/cable/white{
@@ -17951,10 +17888,6 @@
"aCe" = (
/turf/closed/wall,
/area/service/kitchen)
-"aCf" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/service/kitchen)
"aCg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -19079,32 +19012,13 @@
/area/service/kitchen)
"aDU" = (
/obj/effect/landmark/start/cook,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
/turf/open/floor/plasteel/white,
/area/service/kitchen)
-"aDV" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/service/kitchen)
"aDW" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/turf/open/floor/plasteel/white,
/area/service/kitchen)
"aDX" = (
@@ -19112,9 +19026,6 @@
name = "Station Intercom";
pixel_x = 28
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -19127,12 +19038,6 @@
},
/turf/open/floor/plasteel,
/area/service/kitchen)
-"aDY" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/service/kitchen)
"aDZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/white{
@@ -19934,7 +19839,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -22470,15 +22374,13 @@
/turf/open/floor/plasteel/freezer,
/area/service/kitchen)
"aIT" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-4"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/freezer,
/area/service/kitchen)
"aIU" = (
@@ -22487,9 +22389,6 @@
name = "sink";
pixel_y = 28
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "2-8"
},
@@ -22503,16 +22402,10 @@
/obj/machinery/light{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/service/kitchen)
"aIW" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/structure/reagent_dispensers/cooking_oil,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -23665,6 +23558,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/effect/turf_decal/trimline/green/line,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aKK" = (
@@ -24055,9 +23949,6 @@
dir = 8;
pixel_x = 24
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -24066,17 +23957,8 @@
},
/turf/open/floor/plasteel/dark,
/area/service/bar/atrium)
-"aLh" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/service/kitchen)
"aLi" = (
/obj/structure/kitchenspike,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -24088,32 +23970,12 @@
/obj/structure/extinguisher_cabinet{
pixel_y = -32
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/service/kitchen)
-"aLk" = (
-/obj/structure/kitchenspike,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/service/kitchen)
-"aLl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/turf/closed/wall/rust,
-/area/service/kitchen)
"aLm" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -24
@@ -24872,23 +24734,16 @@
/turf/closed/wall,
/area/maintenance/port/aft)
"aME" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
-"aMF" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
},
-/obj/structure/closet/crate,
-/obj/item/stack/ore/silver,
-/obj/item/stack/ore/iron,
-/obj/item/stack/ore/iron,
-/obj/item/stack/ore/iron,
-/obj/item/pickaxe/emergency,
-/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aMG" = (
/obj/structure/girder,
@@ -25297,6 +25152,11 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/power/apc{
+ areastring = "/area/service/hydroponics";
+ name = "Hydroponics APC";
+ pixel_y = -26
+ },
/turf/open/floor/plasteel,
/area/service/hydroponics)
"aNr" = (
@@ -25405,18 +25265,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/central)
-"aNC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/maintenance/starboard/central)
"aND" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
@@ -25894,10 +25742,6 @@
/obj/structure/rack,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
-"aOt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/maintenance/starboard/central)
"aOu" = (
/obj/machinery/door/airlock/maintenance_hatch{
name = "Maintenance Hatch";
@@ -26731,20 +26575,6 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/medical/morgue)
-"aPC" = (
-/obj/machinery/computer/security/telescreen/entertainment,
-/obj/structure/bodycontainer/morgue{
- dir = 2
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel/dark,
-/area/medical/morgue)
"aPD" = (
/obj/machinery/light,
/obj/structure/noticeboard{
@@ -27261,8 +27091,10 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aQw" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/effect/turf_decal/tile/purple,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"aQx" = (
@@ -27680,6 +27512,7 @@
/turf/open/floor/plating,
/area/command/heads_quarters/cmo)
"aRm" = (
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aRn" = (
@@ -28156,6 +27989,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aSg" = (
@@ -29580,6 +29416,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/effect/turf_decal/trimline/green/line,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aUM" = (
@@ -29602,6 +29439,10 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 8;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aUO" = (
@@ -29710,6 +29551,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVa" = (
@@ -29720,6 +29565,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVb" = (
@@ -29759,6 +29608,10 @@
dir = 1
},
/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -29777,6 +29630,10 @@
dir = 1
},
/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVe" = (
@@ -29787,6 +29644,10 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVf" = (
@@ -29803,6 +29664,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/effect/turf_decal/trimline/green/corner{
+ dir = 1;
+ icon_state = "trimline_corner"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVg" = (
@@ -30084,6 +29949,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 9;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVJ" = (
@@ -30093,6 +29962,10 @@
/obj/structure/cable/white{
icon_state = "2-4"
},
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVK" = (
@@ -30116,6 +29989,10 @@
/obj/structure/cable/white{
icon_state = "1-8"
},
+/obj/effect/turf_decal/trimline/green/corner{
+ dir = 1;
+ icon_state = "trimline_corner"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aVN" = (
@@ -30564,6 +30441,10 @@
pixel_x = -32
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 8;
+ icon_state = "trimline"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aWx" = (
@@ -30914,6 +30795,10 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
+/obj/effect/turf_decal/trimline/green/corner{
+ dir = 1;
+ icon_state = "trimline_corner"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"aXe" = (
@@ -31337,10 +31222,12 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aXO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aXP" = (
@@ -31843,6 +31730,7 @@
"aYC" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/landmark/event_spawn,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aYD" = (
@@ -31866,11 +31754,13 @@
/area/medical/virology)
"aYF" = (
/obj/structure/chair/comfy/black,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aYG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/chair/comfy/black,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aYH" = (
@@ -32087,6 +31977,7 @@
dir = 1
},
/obj/structure/window/reinforced/spawner/north,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aYY" = (
@@ -32198,6 +32089,7 @@
dir = 1
},
/obj/effect/landmark/xeno_spawn,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aZo" = (
@@ -32208,6 +32100,7 @@
/obj/machinery/door/window/northright{
name = "Theatre Stage"
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aZp" = (
@@ -32215,6 +32108,7 @@
/obj/effect/turf_decal/tile/bar{
dir = 1
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aZq" = (
@@ -32228,6 +32122,7 @@
name = "Maintenance Hatch";
req_access_txt = "12"
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aZr" = (
@@ -32238,6 +32133,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
"aZs" = (
@@ -32248,6 +32144,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"aZt" = (
@@ -32260,6 +32157,7 @@
/obj/structure/table/wood,
/obj/item/clothing/suit/syndicatefake,
/obj/item/clothing/head/syndicatefake,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"aZu" = (
@@ -32320,6 +32218,7 @@
pixel_y = -3
},
/obj/item/lipstick/random,
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"aZy" = (
@@ -32334,6 +32233,7 @@
/obj/item/clothing/head/helmet/justice/escape{
name = "justice helmet"
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"aZz" = (
@@ -32344,6 +32244,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"aZA" = (
@@ -32387,6 +32288,7 @@
/obj/structure/sign/poster/random{
pixel_x = 32
},
+/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"aZD" = (
@@ -33440,15 +33342,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"bbe" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating/airless,
-/area/maintenance/port/aft)
"bbf" = (
/obj/machinery/power/smes,
/obj/structure/cable/white{
@@ -34363,7 +34256,16 @@
/obj/structure/closet/l3closet/scientist{
pixel_x = -2
},
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"bcF" = (
/obj/structure/sign/warning/securearea,
@@ -35296,7 +35198,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel/white,
/area/medical/medbay/zone3)
"bdV" = (
@@ -35304,8 +35206,8 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
+/obj/effect/turf_decal/tile/green,
+/obj/effect/turf_decal/tile/green{
dir = 8
},
/turf/open/floor/plasteel/white,
@@ -35619,7 +35521,11 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"bev" = (
/obj/structure/table/plasmaglass,
@@ -35709,7 +35615,11 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"beB" = (
/obj/structure/cable/white{
@@ -35993,7 +35903,11 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"beW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -36038,7 +35952,11 @@
/obj/machinery/portable_atmospherics/scrubber,
/obj/item/storage/firstaid/toxin,
/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"bfc" = (
/obj/structure/cable/white{
@@ -36193,7 +36111,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
dir = 8
},
/turf/open/floor/plasteel,
@@ -36213,7 +36134,16 @@
"bfs" = (
/obj/machinery/vending/wardrobe/science_wardrobe,
/obj/machinery/light,
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"bft" = (
/obj/structure/closet/secure_closet/RD,
@@ -39576,16 +39506,16 @@
/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/science/mixing)
"bpj" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/obj/machinery/camera{
c_tag = "Toxins Launch Room Access";
dir = 4
},
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"bpn" = (
@@ -40621,12 +40551,10 @@
},
/area/engineering/atmos)
"bOJ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
/obj/machinery/atmospherics/components/unary/thermomachine/heater{
dir = 8
},
+/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/science/mixing)
"bYE" = (
@@ -40832,7 +40760,7 @@
"dfK" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/plating,
-/area/science/storage)
+/area/science/mixing)
"dfP" = (
/obj/machinery/door/airlock/maintenance_hatch{
name = "Maintenance Hatch";
@@ -40956,7 +40884,7 @@
receive_ore_updates = 1
},
/obj/structure/table/reinforced,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"dYC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -41106,9 +41034,6 @@
},
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
-"eGm" = (
-/turf/closed/wall/r_wall,
-/area/science/storage)
"eOs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 4
@@ -41252,10 +41177,6 @@
/obj/item/wrench,
/turf/open/space,
/area/space/nearstation)
-"foz" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/turf/open/floor/plasteel,
-/area/science/mixing)
"fsl" = (
/obj/docking_port/stationary{
dir = 2;
@@ -41279,6 +41200,15 @@
},
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
+"fuR" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/science/mixing)
"fvd" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -41406,6 +41336,11 @@
},
/turf/open/floor/plasteel/dark,
/area/command/bridge)
+"ghr" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
"gii" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -41624,12 +41559,12 @@
pixel_x = 24
},
/obj/structure/cable/white,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"hDi" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=3.4-AtriumNE";
location = "3.3-AtriumSE"
@@ -41646,6 +41581,19 @@
},
/turf/open/floor/plasteel,
/area/service/bar/atrium)
+"hIu" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"hNO" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 5
@@ -41694,6 +41642,21 @@
/obj/structure/sign/warning/vacuum,
/turf/closed/wall,
/area/cargo/storage)
+"hSE" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/green/line{
+ dir = 1;
+ icon_state = "trimline"
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/port/aft)
"hTn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock/research/glass{
@@ -41784,12 +41747,13 @@
/turf/closed/wall,
/area/science/mixing)
"iiW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
/area/science/mixing)
"iqC" = (
@@ -41953,6 +41917,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"jlZ" = (
+/obj/structure/closet/crate,
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/pickaxe/emergency,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
"jnK" = (
/obj/machinery/light_switch{
pixel_y = 24
@@ -42031,6 +42007,17 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"jBh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg1"
+ },
+/area/maintenance/port/aft)
"jBG" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -42093,12 +42080,13 @@
pixel_y = 5
},
/obj/structure/table/reinforced,
-/turf/open/floor/plasteel,
+/obj/structure/window/reinforced/spawner/west,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"jIu" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/dark/visible,
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/science/mixing)
"jLF" = (
/obj/effect/turf_decal/stripes/line{
@@ -42115,6 +42103,16 @@
},
/turf/closed/wall/r_wall,
/area/science/mixing)
+"jXc" = (
+/obj/machinery/door/airlock/external{
+ name = "External Airlock";
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"jXX" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/effect/turf_decal/stripes/line{
@@ -42181,10 +42179,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/mixing)
-"kuK" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plasteel,
-/area/science/mixing)
"kwF" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -42268,6 +42262,9 @@
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 8
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"kRV" = (
@@ -42283,13 +42280,10 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
-"leU" = (
-/turf/closed/wall/r_wall/rust,
-/area/science/storage)
"lmq" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/turf/open/floor/plating,
-/area/science/storage)
+/area/science/mixing)
"low" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -42603,6 +42597,9 @@
dir = 1;
name = "Space Loop Out"
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"ndg" = (
@@ -42612,11 +42609,14 @@
"nfS" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/open/floor/plating,
-/area/science/storage)
+/area/science/mixing)
"ngY" = (
/obj/machinery/atmospherics/components/binary/valve{
dir = 1
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"nhU" = (
@@ -42682,7 +42682,11 @@
network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"nTg" = (
/obj/item/assembly/timer{
@@ -42692,7 +42696,7 @@
/obj/item/assembly/timer,
/obj/structure/table/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"nTi" = (
/obj/structure/sign/warning/biohazard,
@@ -42812,6 +42816,10 @@
/area/maintenance/disposal/incinerator)
"oys" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"oyD" = (
@@ -42855,7 +42863,7 @@
"oKp" = (
/obj/structure/chair/stool,
/obj/effect/landmark/start/scientist,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"oKz" = (
/obj/structure/cable/white{
@@ -42923,7 +42931,11 @@
pixel_y = 25
},
/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
/area/science/mixing)
"pjU" = (
/obj/structure/grille,
@@ -43033,7 +43045,7 @@
},
/obj/item/analyzer,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"pEt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -43092,6 +43104,7 @@
/obj/machinery/atmospherics/components/binary/valve{
dir = 8
},
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/mixing)
"pNE" = (
@@ -43125,6 +43138,12 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"qdt" = (
@@ -43164,7 +43183,7 @@
/area/science/mixing)
"qnA" = (
/turf/open/floor/plating,
-/area/science/storage)
+/area/science/mixing)
"qoT" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
@@ -43230,6 +43249,11 @@
},
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
+"qHx" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/science/mixing)
"qIp" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -43383,7 +43407,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -43531,17 +43554,6 @@
"sAA" = (
/turf/closed/wall/rust,
/area/service/bar/atrium)
-"sAX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
- },
-/area/maintenance/starboard/central)
"sAY" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -43553,12 +43565,6 @@
},
/turf/closed/wall/rust,
/area/service/theater)
-"sBw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/rust,
-/area/service/bar/atrium)
"sBx" = (
/obj/effect/landmark/xeno_spawn,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -43649,10 +43655,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/rust,
/area/service/theater)
-"sDM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/rust,
-/area/service/bar/atrium)
"sDP" = (
/turf/closed/wall/rust,
/area/hallway/secondary/exit)
@@ -44130,7 +44132,7 @@
/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 10
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/science/mixing)
"sIu" = (
/turf/closed/wall/r_wall/rust,
@@ -44226,15 +44228,6 @@
"sIK" = (
/turf/closed/wall/rust,
/area/service/janitor)
-"sIL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable/white{
- icon_state = "1-2"
- },
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
- },
-/area/maintenance/starboard/central)
"sIN" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall/rust,
@@ -44390,17 +44383,6 @@
},
/turf/open/floor/plasteel/dark,
/area/service/bar/atrium)
-"sJo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
- },
-/area/maintenance/starboard/central)
"sJq" = (
/obj/structure/sign/directions/engineering{
desc = "A sign that shows there are doors here. There are doors everywhere!";
@@ -46374,9 +46356,7 @@
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
dir = 4
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
+/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/science/mixing)
"ujg" = (
@@ -46400,6 +46380,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"uqY" = (
@@ -46748,6 +46734,10 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
/area/science/mixing)
"vJk" = (
@@ -46837,7 +46827,10 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
/area/science/mixing)
"wbV" = (
@@ -46910,6 +46903,12 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"wPr" = (
@@ -46922,7 +46921,8 @@
pixel_y = 9
},
/obj/structure/table/reinforced,
-/turf/open/floor/plasteel,
+/obj/structure/window/reinforced/spawner/west,
+/turf/open/floor/plasteel/white,
/area/science/mixing)
"wRY" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -47190,6 +47190,7 @@
/obj/structure/cable/white{
icon_state = "2-8"
},
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
/area/science/mixing)
"yeE" = (
@@ -47233,6 +47234,23 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port/aft)
+"ygE" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/service/bar/atrium)
"yhg" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -47242,6 +47260,14 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"ylr" = (
+/obj/machinery/door/airlock/external{
+ name = "External Airlock";
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"ymj" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -77720,11 +77746,11 @@ aUR
aVL
aUR
aUQ
-bvo
+bvg
aLs
bbd
aKm
-aac
+aKm
aad
aac
aad
@@ -77977,15 +78003,15 @@ aUS
aUU
aWz
aVL
-bvo
+bvg
aqo
-bbe
+aVh
+bbb
aKm
aad
aad
aad
aad
-aad
aac
aac
aaa
@@ -78234,11 +78260,11 @@ aUR
aUU
aWz
aUQ
-bvg
-aKm
+aqo
+aqo
+aqo
bbd
aKm
-aKm
aad
aad
aad
@@ -78491,9 +78517,9 @@ aUS
aUU
aWz
aVL
-bvg
-aLv
-bbd
+ylr
+aSG
+jXc
aME
aKm
aad
@@ -78748,10 +78774,10 @@ aUT
aUU
aUU
aUQ
-bvg
-aKm
+aqo
+aqo
+aqo
bbd
-aMF
aKm
aac
aac
@@ -79007,8 +79033,8 @@ aWz
aVL
bvg
aKm
-bbd
-aMG
+ghr
+jBh
aKm
aKm
aKm
@@ -79262,10 +79288,10 @@ aUR
aUU
aWz
aUQ
-bvo
+bvg
aKm
-baq
-bbb
+jlZ
+atE
aOI
aPQ
aPQ
@@ -82865,7 +82891,7 @@ bdW
aOl
aOQ
aCy
-aPC
+aPE
aQh
aRb
aKJ
@@ -84411,7 +84437,7 @@ aSh
aSh
aSh
aSh
-atE
+hIu
bfA
bfu
bgF
@@ -84668,7 +84694,7 @@ bcd
bcU
bdQ
aSh
-atE
+hIu
bfA
bfV
bgG
@@ -85182,7 +85208,7 @@ bcf
bcW
bfF
ooX
-avB
+hSE
bfA
bfX
bgI
@@ -85439,7 +85465,7 @@ bcg
bcX
bdS
aSh
-avB
+hSE
bfy
bfY
bgJ
@@ -85696,7 +85722,7 @@ aUn
aWb
bdT
aSh
-atE
+hIu
bfA
bfZ
bgK
@@ -88757,7 +88783,7 @@ aGN
aHS
asf
aJW
-aJW
+ygE
aMu
aNy
aOn
@@ -89014,7 +89040,7 @@ aGO
aHT
gPY
dQC
-avi
+asg
axP
ard
aOo
@@ -89271,7 +89297,7 @@ aGP
aud
ash
ayK
-ayK
+ash
aAQ
aNz
aOp
@@ -89764,7 +89790,7 @@ aml
and
tKM
aoS
-apY
+ayP
ara
asj
atj
@@ -90020,7 +90046,7 @@ alt
amm
amm
tKM
-aoT
+asl
apZ
ara
ara
@@ -90042,7 +90068,7 @@ aCe
aCe
aCe
aJY
-aLh
+aCe
aAT
ayP
sJA
@@ -90281,7 +90307,7 @@ aoU
aqa
arg
ask
-atl
+ara
aug
avl
awq
@@ -90299,7 +90325,7 @@ aGR
aCe
aIR
aJZ
-aLh
+aCe
aso
ayP
ayP
@@ -90536,9 +90562,9 @@ aae
anQ
aoV
aqb
-arh
+ayT
asl
-atm
+ara
abb
abJ
awr
@@ -90556,8 +90582,8 @@ aGS
aHV
aIS
aKa
-aLh
-sJo
+aCe
+aMx
aNA
ayP
aPr
@@ -90795,7 +90821,7 @@ syT
alu
alu
asp
-atm
+ara
aui
avn
aws
@@ -90813,7 +90839,7 @@ aGT
aHW
aIT
aKb
-aLh
+aCe
aCe
aso
ayP
@@ -91052,7 +91078,7 @@ aoW
aqc
syT
bxC
-atm
+ara
auj
avo
awt
@@ -91063,7 +91089,7 @@ azN
asp
aCe
aCY
-aDV
+aFU
aFc
aFU
aGU
@@ -91309,7 +91335,7 @@ anV
aqd
alu
aso
-atm
+ara
auk
avp
awu
@@ -91566,7 +91592,7 @@ aoX
aqe
alu
asp
-sBw
+ara
aul
avq
awv
@@ -91584,10 +91610,10 @@ aGW
sIC
aIW
aKe
-aLk
-aCf
-aNC
-aOt
+aLi
+aCe
+asp
+ayP
soC
aQw
aRs
@@ -91822,26 +91848,26 @@ anX
ani
aqf
alu
-sAX
-atn
-aum
-avr
+asp
+ara
+ara
+ara
aww
-aum
-sDM
+ara
+ara
ayT
aiw
-aAW
-aCf
-aCf
-aDY
+asp
+aCe
+aCe
+aCe
aFf
-aCf
-aCf
-aCf
-aDY
+aCe
+aCe
+aCe
+aCe
aFf
-aLl
+aCe
aCe
aND
aOu
@@ -92096,7 +92122,7 @@ aFg
axe
avs
axe
-sIL
+axe
aKf
ato
axe
@@ -97767,20 +97793,20 @@ bdK
bew
ajP
ajP
-eGm
+sVt
meo
uiT
bfq
bpj
+qHx
+qHx
+qHx
oys
-oys
-oys
-oys
-fjN
+fuR
iio
aad
aaa
-aaa
+sdX
aaa
aaa
aaa
@@ -98034,10 +98060,10 @@ hVE
hVE
hVE
pMh
-kuK
+tPn
aac
aaa
-aaa
+sdX
aaa
aaa
aaa
@@ -98279,14 +98305,14 @@ aaa
aaa
aad
aad
-leU
+meo
dfK
qnA
ucd
vZb
iiW
bOJ
-foz
+mhf
nbT
ngY
oXz
@@ -98536,7 +98562,7 @@ aaa
aaa
aac
aad
-eGm
+sVt
lmq
nfS
sVt
@@ -98793,9 +98819,9 @@ aaa
aaa
aac
aad
-eGm
-eGm
-eGm
+sVt
+sVt
+sVt
sVt
gLD
lFm
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 3f07daecc2..0972252bf6 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -29615,7 +29615,9 @@
},
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 8
+ },
/area/hallway/secondary/entry)
"bqT" = (
/obj/structure/flora/grass/jungle/b,
@@ -30302,7 +30304,9 @@
},
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 8
+ },
/area/hallway/secondary/entry)
"bsn" = (
/obj/structure/girder,
@@ -30967,7 +30971,9 @@
dir = 8
},
/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 8
+ },
/area/hallway/secondary/entry)
"btO" = (
/obj/structure/cable{
@@ -53150,6 +53156,14 @@
/obj/machinery/power/rad_collector/anchored,
/turf/open/floor/engine,
/area/engineering/supermatter)
+"daQ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/flora/ausbushes/reedbush{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"daY" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -53171,14 +53185,7 @@
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
"deJ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/gps/mining{
- gpstag = "MINE_PUB"
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellowsiding/corner,
/area/hallway/secondary/entry)
"dgg" = (
/obj/structure/disposalpipe/segment{
@@ -56253,6 +56260,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"jEZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/yellowsiding,
+/area/hallway/secondary/entry)
"jFw" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -56532,6 +56543,15 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"kuS" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/computer/shuttle/mining/common{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"kvj" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -57645,6 +57665,9 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"mJR" = (
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"mKc" = (
/obj/structure/bookcase/random/nonfiction,
/turf/open/floor/plasteel/dark,
@@ -58346,6 +58369,13 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"osY" = (
+/obj/structure/flora/ausbushes/reedbush{
+ pixel_x = -2;
+ pixel_y = 13
+ },
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"ous" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/button/door{
@@ -59477,6 +59507,12 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
+"qFw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
"qGu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -59636,6 +59672,19 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"qUD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/structure/flora/rock/pile/largejungle{
+ pixel_x = -50;
+ pixel_y = -50
+ },
+/obj/structure/flora/ausbushes/sparsegrass{
+ pixel_x = -60;
+ pixel_y = -60
+ },
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"qVk" = (
/obj/machinery/door/poddoor/incinerator_atmos_aux,
/obj/structure/lattice/catwalk,
@@ -59996,6 +60045,13 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"rGY" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/yellowsiding/corner{
+ dir = 8
+ },
+/area/hallway/secondary/entry)
"rHA" = (
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
@@ -60375,7 +60431,9 @@
dir = 8
},
/obj/structure/table,
-/obj/item/flashlight,
+/obj/item/gps/mining{
+ gpstag = "MINE_PUB"
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"sJp" = (
@@ -60419,6 +60477,9 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
+"sPh" = (
+/turf/open/floor/plasteel/yellowsiding,
+/area/hallway/secondary/entry)
"sQt" = (
/obj/machinery/door/airlock/external{
name = "Supply Dock Airlock";
@@ -61108,6 +61169,15 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"upz" = (
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 4
+ },
+/area/hallway/secondary/entry)
+"upX" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"uqJ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -61399,6 +61469,11 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
+"uXL" = (
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
"uZb" = (
/obj/structure/lattice,
/obj/structure/window/reinforced{
@@ -61717,6 +61792,11 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"vIa" = (
+/turf/open/floor/plasteel/yellowsiding/corner{
+ dir = 4
+ },
+/area/hallway/secondary/entry)
"vIc" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -61911,6 +61991,13 @@
},
/turf/open/floor/engine,
/area/engineering/main)
+"whP" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/yellowsiding/corner{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
"wig" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/plating{
@@ -61943,15 +62030,14 @@
/turf/open/floor/plasteel,
/area/engineering/main)
"wjQ" = (
-/obj/machinery/computer/shuttle/mining/common{
- dir = 4
- },
/obj/machinery/light{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/structure/table,
+/obj/item/flashlight,
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"wkZ" = (
@@ -62241,6 +62327,14 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"wSX" = (
+/obj/structure/flora/junglebush/large{
+ pixel_x = -15;
+ pixel_y = -4
+ },
+/obj/structure/flora/rock/pile,
+/turf/open/water/decorative,
+/area/hallway/secondary/entry)
"wTD" = (
/obj/structure/table/wood,
/obj/item/folder/red,
@@ -83253,10 +83347,10 @@ bdV
bnp
baK
pEH
-deJ
+pEH
sIK
wjQ
-pEH
+kuS
bbR
aZx
aaa
@@ -83509,11 +83603,11 @@ aZx
jzz
bnp
baK
-baK
-baK
-baK
-baK
-baK
+deJ
+upz
+upz
+upz
+vIa
baK
aZx
aaa
@@ -83766,11 +83860,11 @@ bbR
bbR
bnp
baK
-baK
-baK
-baK
-baK
-baK
+sPh
+osY
+mJR
+mJR
+uXL
baK
aZx
aZx
@@ -84023,11 +84117,11 @@ baK
baK
bnq
baM
-baK
-baK
-baK
-baK
-baK
+sPh
+mJR
+wSX
+mJR
+uXL
baK
bxY
bzz
@@ -84280,11 +84374,11 @@ bbT
bbT
bnr
bop
-bbT
-bbT
-bbT
-bbT
-bbT
+jEZ
+qUD
+upX
+daQ
+qFw
bbT
bxZ
bzA
@@ -84537,11 +84631,11 @@ bkT
bfY
bns
bfY
-bfY
+rGY
bqS
bsm
btN
-bfY
+whP
bfY
bya
bzB
diff --git a/auxmos.dll b/auxmos.dll
index 04522e9d44..48c151f21c 100644
Binary files a/auxmos.dll and b/auxmos.dll differ
diff --git a/auxmos.pdb b/auxmos.pdb
index 78725799be..ee831d46db 100644
Binary files a/auxmos.pdb and b/auxmos.pdb differ
diff --git a/code/__DEFINES/_auxtools.dm b/code/__DEFINES/_auxtools.dm
new file mode 100644
index 0000000000..ab07becbd9
--- /dev/null
+++ b/code/__DEFINES/_auxtools.dm
@@ -0,0 +1,9 @@
+#define AUXMOS (world.system_type == MS_WINDOWS ? "auxmos.dll" : __detect_auxmos())
+
+/proc/__detect_auxmos()
+ if (fexists("./libauxmos.so"))
+ return "./libauxmos.so"
+ else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/libauxmos.so"))
+ return "[world.GetConfig("env", "HOME")]/.byond/bin/libauxmos.so"
+ else
+ CRASH("Could not find libauxmos.so")
diff --git a/code/__DEFINES/_extools.dm b/code/__DEFINES/_extools.dm
deleted file mode 100644
index 281eabf374..0000000000
--- a/code/__DEFINES/_extools.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "libbyond-extools.so")
-#define AUXMOS (world.system_type == MS_WINDOWS ? "auxmos.dll" : "libauxmos.so")
diff --git a/code/__DEFINES/spans.dm b/code/__DEFINES/spans.dm
new file mode 100644
index 0000000000..45eae3ce76
--- /dev/null
+++ b/code/__DEFINES/spans.dm
@@ -0,0 +1,114 @@
+// Sorted alphabetically
+#define span_abductor(str) ("" + str + "")
+#define span_admin(str) ("" + str + "")
+#define span_adminhelp(str) ("" + str + "")
+#define span_adminnotice(str) ("" + str + "")
+#define span_adminobserverooc(str) ("" + str + "")
+#define span_adminooc(str) ("" + str + "")
+#define span_adminsay(str) ("" + str + "")
+#define span_aiprivradio(str) ("" + str + "")
+#define span_alert(str) ("" + str + "")
+#define span_alertalien(str) ("" + str + "")
+#define span_alertsyndie(str) ("" + str + "")
+#define span_alertwarning(str) ("" + str + "")
+#define span_alien(str) ("" + str + "")
+#define span_announce(str) ("" + str + "")
+#define span_big(str) ("" + str + "")
+#define span_bigicon(str) ("" + str + "")
+#define span_binarysay(str) ("" + str + "")
+#define span_blue(str) ("" + str + "")
+#define span_blueteamradio(str) ("" + str + "")
+#define span_bold(str) ("" + str + "")
+#define span_boldannounce(str) ("" + str + "")
+#define span_boldnotice(str) ("" + str + "")
+#define span_boldwarning(str) ("" + str + "")
+#define span_centcomradio(str) ("" + str + "")
+#define span_changeling(str) ("" + str + "")
+#define span_clown(str) ("" + str + "")
+#define span_colossus(str) ("" + str + "")
+#define span_command_headset(str) ("" + str + "")
+#define span_comradio(str) ("" + str + "")
+#define span_cult(str) ("" + str + "")
+#define span_cultbold(str) ("" + str + "")
+#define span_cultboldtalic(str) ("" + str + "")
+#define span_cultitalic(str) ("" + str + "")
+#define span_cultlarge(str) ("" + str + "")
+#define span_danger(str) ("" + str + "")
+#define span_deadsay(str) ("" + str + "")
+#define span_deconversion_message(str) ("" + str + "")
+#define span_drone(str) ("" + str + "")
+#define span_engradio(str) ("" + str + "")
+#define span_extremelybig(str) ("" + str + "")
+#define span_ghostalert(str) ("" + str + "")
+#define span_green(str) ("" + str + "")
+#define span_greenannounce(str) ("" + str + "")
+#define span_greenteamradio(str) ("" + str + "")
+#define span_greentext(str) ("" + str + "")
+#define span_hear(str) ("" + str + "")
+#define span_hidden(str) ("" + str + "")
+#define span_hierophant(str) ("" + str + "")
+#define span_hierophant_warning(str) ("" + str + "")
+#define span_highlight(str) ("" + str + "")
+#define span_his_grace(str) ("" + str + "")
+#define span_holoparasite(str) ("" + str + "")
+#define span_hypnophrase(str) ("" + str + "")
+#define span_icon(str) ("" + str + "")
+#define span_info(str) ("" + str + "")
+#define span_interface(str) ("" + str + "")
+#define span_looc(str) ("" + str + "")
+#define span_medal(str) ("" + str + "")
+#define span_medradio(str) ("" + str + "")
+#define span_memo(str) ("" + str + "")
+#define span_memoedit(str) ("" + str + "")
+#define span_mind_control(str) ("" + str + "")
+#define span_minorannounce(str) ("" + str + "")
+#define span_monkey(str) ("" + str + "")
+#define span_monkeyhive(str) ("" + str + "")
+#define span_monkeylead(str) ("" + str + "")
+#define span_name(str) ("" + str + "")
+#define span_narsie(str) ("" + str + "")
+#define span_narsiesmall(str) ("" + str + "")
+#define span_nicegreen(str) ("" + str + "")
+#define span_notice(str) ("" + str + "")
+#define span_noticealien(str) ("" + str + "")
+#define span_ooc(str) ("" + str + "")
+#define span_papyrus(str) ("" + str + "")
+#define span_phobia(str) ("" + str + "")
+#define span_prefix(str) ("" + str + "")
+#define span_purple(str) ("" + str + "")
+#define span_radio(str) ("" + str + "")
+#define span_reallybig(str) ("" + str + "")
+#define span_red(str) ("" + str + "")
+#define span_redteamradio(str) ("" + str + "")
+#define span_redtext(str) ("" + str + "")
+#define span_resonate(str) ("" + str + "")
+#define span_revenbignotice(str) ("" + str + "")
+#define span_revenboldnotice(str) ("" + str + "")
+#define span_revendanger(str) ("" + str + "")
+#define span_revenminor(str) ("" + str + "")
+#define span_revennotice(str) ("" + str + "")
+#define span_revenwarning(str) ("" + str + "")
+#define span_robot(str) ("" + str + "")
+#define span_rose(str) ("" + str + "")
+#define span_sans(str) ("" + str + "")
+#define span_sciradio(str) ("" + str + "")
+#define span_secradio(str) ("" + str + "")
+#define span_servradio(str) ("" + str + "")
+#define span_singing(str) ("" + str + "")
+#define span_slime(str) ("" + str + "")
+#define span_small(str) ("" + str + "")
+#define span_smallnotice(str) ("" + str + "")
+#define span_smallnoticeital(str) ("" + str + "")
+#define span_spider(str) ("" + str + "")
+#define span_suicide(str) ("" + str + "")
+#define span_suppradio(str) ("" + str + "")
+#define span_swarmer(str) ("" + str + "")
+#define span_syndradio(str) ("" + str + "")
+#define span_tape_recorder(str) ("" + str + "")
+#define span_tinynotice(str) ("" + str + "")
+#define span_tinynoticeital(str) ("" + str + "")
+#define span_unconscious(str) ("" + str + "")
+#define span_userdanger(str) ("" + str + "")
+#define span_warning(str) ("" + str + "")
+#define span_yell(str) ("" + str + "")
+#define span_yellowteamradio(str) ("" + str + "")
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index fb0ec3d39c..30899c0ca2 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -215,6 +215,12 @@
#define SSAIR_ATMOSMACHINERY_AIR 12
#define SSAIR_DEFERRED_AIRS 13
+// Subsystem delta times or tickrates, in seconds. I.e, how many seconds in between each process() call for objects being processed by that subsystem.
+// Only use these defines if you want to access some other objects processing delta_time, otherwise use the delta_time that is sent as a parameter to process()
+#define SSFLUIDS_DT (SSfluids.wait/10)
+#define SSMACHINES_DT (SSmachines.wait/10)
+#define SSMOBS_DT (SSmobs.wait/10)
+#define SSOBJ_DT (SSobj.wait/10)
//! ## Overlays subsystem
diff --git a/code/__HELPERS/_extools_api.dm b/code/__HELPERS/_extools_api.dm
index 8605c6a975..7bff3f06c0 100644
--- a/code/__HELPERS/_extools_api.dm
+++ b/code/__HELPERS/_extools_api.dm
@@ -10,12 +10,16 @@
GLOBAL_LIST_EMPTY(auxtools_initialized)
#define AUXTOOLS_CHECK(LIB)\
- if (!GLOB.auxtools_initialized[LIB] && fexists(LIB)) {\
- var/string = call(LIB,"auxtools_init")();\
- if(findtext(string, "SUCCESS")) {\
- GLOB.auxtools_initialized[LIB] = TRUE;\
+ if (!GLOB.auxtools_initialized[LIB]) {\
+ if (fexists(LIB)) {\
+ var/string = call(LIB,"auxtools_init")();\
+ if(findtext(string, "SUCCESS")) {\
+ GLOB.auxtools_initialized[LIB] = TRUE;\
+ } else {\
+ CRASH(string);\
+ }\
} else {\
- CRASH(string);\
+ CRASH("No file named [LIB] found!")\
}\
}\
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 12430df500..9fee97bbb1 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -163,6 +163,7 @@ Turf and target are separate in case you want to teleport some distance from a t
//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame()
/mob/proc/apply_pref_name(role, client/C)
+ set waitfor = FALSE
if(!C)
C = client
var/oldname = real_name
diff --git a/code/controllers/configuration/entries/admin.dm b/code/controllers/configuration/entries/admin.dm
new file mode 100644
index 0000000000..3b5b437742
--- /dev/null
+++ b/code/controllers/configuration/entries/admin.dm
@@ -0,0 +1,64 @@
+/datum/config_entry/flag/admin_legacy_system //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/protect_legacy_admins //Stops any admins loaded by the legacy system from having their rank edited by the permissions panel
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/protect_legacy_ranks //Stops any ranks loaded by the legacy system from having their flags edited by the permissions panel
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/enable_localhost_rank //Gives the !localhost! rank to any client connecting from 127.0.0.1 or ::1
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/mentors_mobname_only
+
+/datum/config_entry/flag/mentor_legacy_system //Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/forbid_singulo_possession
+
+/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
+
+/datum/config_entry/number/note_fresh_days
+ config_entry_value = null
+ min_val = 0
+ integer = FALSE
+
+/datum/config_entry/number/note_stale_days
+ config_entry_value = null
+ min_val = 0
+ integer = FALSE
+
+/datum/config_entry/flag/autoconvert_notes //if all connecting player's notes should attempt to be converted to the database
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/announce_admin_logout
+
+/datum/config_entry/flag/announce_admin_login
+
+/datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API
+
+/datum/config_entry/flag/autoadmin // if autoadmin is enabled
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
+ config_entry_value = "Game Master"
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
+
+/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
+
+/datum/config_entry/flag/guest_jobban
+
+/datum/config_entry/flag/ban_legacy_system //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/flag/guest_ban
+
+/datum/config_entry/flag/automute_on //enables automuting/spam prevention
+
+/datum/config_entry/flag/debug_admin_hrefs
diff --git a/code/controllers/configuration/entries/alert.dm b/code/controllers/configuration/entries/alert.dm
new file mode 100644
index 0000000000..6177c602db
--- /dev/null
+++ b/code/controllers/configuration/entries/alert.dm
@@ -0,0 +1,26 @@
+/datum/config_entry/string/alert_green
+ config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
+
+/datum/config_entry/string/alert_blue_upto
+ config_entry_value = "The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted."
+
+/datum/config_entry/string/alert_blue_downto
+ config_entry_value = "Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted."
+
+/datum/config_entry/string/alert_amber_upto
+ config_entry_value = "There are significant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
+
+/datum/config_entry/string/alert_amber_downto
+ config_entry_value = "The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored."
+
+/datum/config_entry/string/alert_red_upto
+ config_entry_value = "There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted."
+
+/datum/config_entry/string/alert_red_downto
+ config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force."
+
+/datum/config_entry/string/alert_delta
+ config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
+
+/datum/config_entry/number/minimum_secborg_alert //Minimum alert level for secborgs to be chosen.
+ config_entry_value = 3
diff --git a/code/controllers/configuration/entries/antag_rep.dm b/code/controllers/configuration/entries/antag_rep.dm
new file mode 100644
index 0000000000..c34eef4159
--- /dev/null
+++ b/code/controllers/configuration/entries/antag_rep.dm
@@ -0,0 +1,17 @@
+/datum/config_entry/flag/use_antag_rep // see game_options.txt for details
+
+/datum/config_entry/number/antag_rep_maximum
+ config_entry_value = 200
+ min_val = 0
+
+/datum/config_entry/number/default_antag_tickets
+ config_entry_value = 100
+ min_val = 0
+
+/datum/config_entry/number/max_tickets_per_roll
+ config_entry_value = 100
+ min_val = 0
+
+/datum/config_entry/keyed_list/antag_rep
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
diff --git a/code/controllers/configuration/entries/connections.dm b/code/controllers/configuration/entries/connections.dm
new file mode 100644
index 0000000000..acdf588e5a
--- /dev/null
+++ b/code/controllers/configuration/entries/connections.dm
@@ -0,0 +1,106 @@
+/datum/config_entry/flag/panic_bunker // prevents people the server hasn't seen before from connecting
+
+/datum/config_entry/number/panic_bunker_living // living time in minutes that a player needs to pass the panic bunker
+
+/datum/config_entry/string/panic_bunker_message
+ config_entry_value = "Sorry but the server is currently not accepting connections from never before seen players."
+
+/datum/config_entry/string/panic_server_name
+
+/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
+ return str_val != "\[Put the name here\]" && ..()
+
+/datum/config_entry/string/panic_server_address //Reconnect a player this linked server if this server isn't accepting new players
+
+/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
+ return str_val != "byond://address:port" && ..()
+
+/datum/config_entry/number/max_bunker_days
+ config_entry_value = 7
+ min_val = 1
+
+/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
+ min_val = -1
+
+/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
+ min_val = 0
+
+/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
+ config_entry_value = TRUE
+
+/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
+
+/datum/config_entry/flag/check_randomizer
+
+/datum/config_entry/string/ipintel_email
+
+/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
+ return str_val != "ch@nge.me" && ..()
+
+/datum/config_entry/number/ipintel_rating_bad
+ config_entry_value = 1
+ integer = FALSE
+ min_val = 0
+ max_val = 1
+
+/datum/config_entry/number/ipintel_save_good
+ config_entry_value = 12
+ min_val = 0
+
+/datum/config_entry/number/ipintel_save_bad
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/string/ipintel_domain
+ config_entry_value = "check.getipintel.net"
+
+/datum/config_entry/flag/aggressive_changelog
+
+/datum/config_entry/flag/allow_webclient
+
+/datum/config_entry/flag/webclient_only_byond_members
+
+/datum/config_entry/number/client_warn_version
+ config_entry_value = null
+ min_val = 500
+
+/datum/config_entry/number/client_warn_version
+ config_entry_value = null
+ min_val = 500
+
+/datum/config_entry/string/client_warn_message
+ config_entry_value = "Your version of byond may have issues or be blocked from accessing this server in the future."
+
+/datum/config_entry/flag/client_warn_popup
+
+/datum/config_entry/number/client_error_version
+ config_entry_value = null
+ min_val = 500
+
+/datum/config_entry/string/client_error_message
+ config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
+
+/datum/config_entry/number/client_error_build
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/number/soft_popcap
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/number/hard_popcap
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/number/extreme_popcap
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/string/soft_popcap_message
+ config_entry_value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
+
+/datum/config_entry/string/hard_popcap_message
+ config_entry_value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
+
+/datum/config_entry/string/extreme_popcap_message
+ config_entry_value = "The server is currently serving a high number of users, find alternative servers."
diff --git a/code/controllers/configuration/entries/debris.dm b/code/controllers/configuration/entries/debris.dm
new file mode 100644
index 0000000000..1cc2c2d7b7
--- /dev/null
+++ b/code/controllers/configuration/entries/debris.dm
@@ -0,0 +1,16 @@
+/// Amount of dirtyness tiles need to spawn dirt.
+/datum/config_entry/number/turf_dirt_threshold
+ config_entry_value = 100
+ min_val = 1
+ integer = TRUE
+
+/// Alpha dirt starts at
+/datum/config_entry/number/dirt_alpha_starting
+ config_entry_value = 127
+ max_val = 255
+ min_val = 0
+ integer = TRUE
+
+/// Dirtyness multiplier for making turfs dirty
+/datum/config_entry/number/turf_dirty_multiplier
+ config_entry_value = 1
diff --git a/code/controllers/configuration/entries/fetish_content.dm b/code/controllers/configuration/entries/fetish_content.dm
new file mode 100644
index 0000000000..1de796a11d
--- /dev/null
+++ b/code/controllers/configuration/entries/fetish_content.dm
@@ -0,0 +1,45 @@
+/datum/config_entry/keyed_list/breasts_cups_prefs
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+ config_entry_value = list("a", "b", "c", "d", "e") //keep these lowercase
+
+/datum/config_entry/number/penis_min_inches_prefs
+ config_entry_value = 1
+ min_val = 0
+
+/datum/config_entry/number/penis_max_inches_prefs
+ config_entry_value = 20
+ min_val = 0
+
+/datum/config_entry/keyed_list/safe_visibility_toggles
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+ config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
+
+//Body size configs, the feature will be disabled if both min and max have the same value.
+/datum/config_entry/number/body_size_min
+ config_entry_value = 0.9
+ min_val = 0.1 //to avoid issues with zeros and negative values.
+ max_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
+
+/datum/config_entry/number/body_size_max
+ config_entry_value = 1.25
+ min_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
+
+//Penalties given to characters with a body size smaller than this value,
+//to compensate for their smaller hitbox.
+//To disable, just make sure the value is lower than 'body_size_min'
+/datum/config_entry/number/threshold_body_size_penalty
+ config_entry_value = RESIZE_DEFAULT_SIZE
+ min_val = 0
+ max_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
+
+//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
+//doesn't apply to floating or crawling mobs
+/datum/config_entry/number/body_size_slowdown_multiplier
+ config_entry_value = 0
+ min_val = 0
+ integer = FALSE
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
deleted file mode 100644
index 08989469f5..0000000000
--- a/code/controllers/configuration/entries/game_options.dm
+++ /dev/null
@@ -1,619 +0,0 @@
-/datum/config_entry/number_list/repeated_mode_adjust
-
-/datum/config_entry/keyed_list/probability
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/probability/ValidateListEntry(key_name)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/chaos_level
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/chaos_level/ValidateListEntry(key_name)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/max_pop
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/max_pop/ValidateListEntry(key_name)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/min_pop
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/min_pop/ValidateListEntry(key_name, key_value)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/continuous // which roundtypes continue if all antagonists die
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
-
-/datum/config_entry/keyed_list/continuous/ValidateListEntry(key_name, key_value)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/midround_antag // which roundtypes use the midround antagonist system
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
-
-/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/force_antag_count
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
-
-/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
- return key_name in config.modes
-
-/datum/config_entry/keyed_list/policy
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_TEXT
-
-/datum/config_entry/number/damage_multiplier
- config_entry_value = 1
- integer = FALSE
-
-/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
- min_val = 0
-
-/datum/config_entry/flag/jobs_have_minimal_access //determines whether jobs use minimal access or expanded access.
-
-/datum/config_entry/flag/assistants_have_maint_access
-
-/datum/config_entry/flag/security_has_maint_access
-
-/datum/config_entry/flag/everyone_has_maint_access
-
-/datum/config_entry/flag/sec_start_brig //makes sec start in brig instead of dept sec posts
-
-/datum/config_entry/flag/force_random_names
-
-/datum/config_entry/flag/humans_need_surnames
-
-/datum/config_entry/flag/allow_ai // allow ai job
-
-/datum/config_entry/flag/allow_ai_multicam //whether the AI can use their multicam
-
-/datum/config_entry/flag/disable_human_mood
-
-/datum/config_entry/flag/disable_borg_flash_knockdown //Should borg flashes be capable of knocking humanoid entities down?
-
-/datum/config_entry/flag/weaken_secborg //Brings secborgs and k9s back in-line with the other borg modules
-
-/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
-
-/datum/config_entry/flag/disable_peaceborg
-
-/datum/config_entry/flag/economy //money money money money money money money money money money money money
-
-/datum/config_entry/number/minimum_secborg_alert //Minimum alert level for secborgs to be chosen.
- config_entry_value = 3
-
-/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
- config_entry_value = 6
- min_val = 1
-
-/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
- config_entry_value = 25
- min_val = 1
-
-/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
- config_entry_value = 6
- min_val = 1
-
-/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
- config_entry_value = 6
- integer = FALSE
- min_val = 1
-
-/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
- config_entry_value = 8
- min_val = 1
-
-/datum/config_entry/number/abductor_scaling_coeff //how many players per abductor team
- config_entry_value = 15
- min_val = 1
-
-/datum/config_entry/number/traitor_objectives_amount
- config_entry_value = 2
- min_val = 0
-
-/datum/config_entry/number/brother_objectives_amount
- config_entry_value = 2
- min_val = 0
-
-/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
-
-/datum/config_entry/flag/protect_roles_from_antagonist //If security and such can be traitor/cult/other
-
-/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
-
-/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff
-
-/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
-
-/datum/config_entry/flag/use_antag_rep // see game_options.txt for details
-
-/datum/config_entry/number/antag_rep_maximum
- config_entry_value = 200
- min_val = 0
-
-/datum/config_entry/number/default_antag_tickets
- config_entry_value = 100
- min_val = 0
-
-/datum/config_entry/number/max_tickets_per_roll
- config_entry_value = 100
- min_val = 0
-
-/datum/config_entry/number/midround_antag_time_check // How late (in minutes you want the midround antag system to stay on, setting this to 0 will disable the system)
- config_entry_value = 60
- min_val = 0
-
-/datum/config_entry/number/midround_antag_life_check // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
- config_entry_value = 0.7
- integer = FALSE
- min_val = 0
- max_val = 1
-
-/datum/config_entry/number/suicide_reenter_round_timer
- config_entry_value = 30
- min_val = 0
-
-/datum/config_entry/number/roundstart_suicide_time_limit
- config_entry_value = 30
- min_val = 0
-
-/datum/config_entry/number/shuttle_refuel_delay
- config_entry_value = 12000
- min_val = 0
-
-/datum/config_entry/flag/show_game_type_odds //if set this allows players to see the odds of each roundtype on the get revision screen
-
-/datum/config_entry/keyed_list/roundstart_races //races you can play as from the get go.
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
-
-/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
-
-/datum/config_entry/flag/no_summon_guns //No
-
-/datum/config_entry/flag/no_summon_magic //Fun
-
-/datum/config_entry/flag/no_summon_events //Allowed
-
-/datum/config_entry/flag/no_summon_traumas //!
-
-/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
-
-/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
- config_entry_value = 55
- min_val = 30
-
-/datum/config_entry/flag/arrivals_shuttle_require_undocked //Require the arrivals shuttle to be undocked before latejoiners can join
-
-/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
-
-/datum/config_entry/string/alert_green
- config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
-
-/datum/config_entry/string/alert_blue_upto
- config_entry_value = "The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted."
-
-/datum/config_entry/string/alert_blue_downto
- config_entry_value = "Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted."
-
-/datum/config_entry/string/alert_amber_upto
- config_entry_value = "There are significant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
-
-/datum/config_entry/string/alert_amber_downto
- config_entry_value = "The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored."
-
-/datum/config_entry/string/alert_red_upto
- config_entry_value = "There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted."
-
-/datum/config_entry/string/alert_red_downto
- config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force."
-
-/datum/config_entry/string/alert_delta
- config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
-
-/datum/config_entry/flag/revival_pod_plants
-
-/datum/config_entry/flag/revival_cloning
-
-/datum/config_entry/number/revival_brain_life
- config_entry_value = -1
- min_val = -1
-
-/datum/config_entry/flag/ooc_during_round
-
-/datum/config_entry/flag/emojis
-
-/datum/config_entry/keyed_list/multiplicative_movespeed
- key_mode = KEY_MODE_TYPE
- value_mode = VALUE_MODE_NUM
- abstract_type = /datum/config_entry/keyed_list/multiplicative_movespeed
-
-/datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet()
- . = ..()
- if(.)
- update_config_movespeed_type_lookup(TRUE)
-
-/datum/config_entry/keyed_list/multiplicative_movespeed/vv_edit_var(var_name, var_value)
- . = ..()
- if(. && (var_name == NAMEOF(src, config_entry_value)))
- update_config_movespeed_type_lookup(TRUE)
-
-/datum/config_entry/keyed_list/multiplicative_movespeed/normal
- name = "multiplicative_movespeed"
- config_entry_value = list( //DEFAULTS
- /mob/living/simple_animal = 1,
- /mob/living/silicon/pai = 1,
- /mob/living/carbon/alien/humanoid/sentinel = 0.25,
- /mob/living/carbon/alien/humanoid/drone = 0.5,
- /mob/living/carbon/alien/humanoid/royal/praetorian = 1,
- /mob/living/carbon/alien/humanoid/royal/queen = 3
- )
-
-/datum/config_entry/keyed_list/multiplicative_movespeed/floating
- name = "multiplicative_movespeed_floating"
- config_entry_value = list(
- /mob/living = 0,
- /mob/living/carbon/alien/humanoid = 0,
- /mob/living/carbon/alien/humanoid/royal/praetorian = 0,
- /mob/living/carbon/alien/humanoid/royal/queen = 2
- )
-
-/datum/config_entry/number/sprintless_stagger_slowdown
- config_entry_value = 0
-
-/datum/config_entry/number/melee_stagger_factor
- config_entry_value = 1
-
-/datum/config_entry/number/sprintless_off_balance_slowdown
- config_entry_value = 0.85
-
-/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
- abstract_type = /datum/config_entry/number/movedelay
- integer = FALSE
-
-/datum/config_entry/number/movedelay/ValidateAndSet()
- . = ..()
- if(.)
- update_mob_config_movespeeds()
-
-/datum/config_entry/number/movedelay/vv_edit_var(var_name, var_value)
- . = ..()
- if(. && (var_name == NAMEOF(src, config_entry_value)))
- update_mob_config_movespeeds()
-
-/datum/config_entry/number/movedelay/run_delay
-
-/datum/config_entry/number/movedelay/run_delay/ValidateAndSet()
- . = ..()
- var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run)
- M.sync()
-
-/datum/config_entry/number/movedelay/walk_delay
-
-/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet()
- . = ..()
- var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
- M.sync()
-
-/datum/config_entry/flag/sprint_enabled
- config_entry_value = TRUE
-
-/datum/config_entry/flag/sprint_enabled/ValidateAndSet(str_val)
- . = ..()
- for(var/datum/hud/human/H)
- H.assert_move_intent_ui()
- if(!config_entry_value) // disabled
- for(var/mob/living/L in world)
- L.disable_intentional_sprint_mode()
-
-/datum/config_entry/number/movedelay/sprint_speed_increase
- config_entry_value = 1
-
-/datum/config_entry/number/movedelay/sprint_max_tiles_increase
- config_entry_value = 5
-
-/datum/config_entry/number/movedelay/sprint_absolute_max_tiles
- config_entry_value = 13
-
-/datum/config_entry/number/movedelay/sprint_buffer_max
- config_entry_value = 24
-
-/datum/config_entry/number/movedelay/sprint_stamina_cost
- config_entry_value = 1.4
-
-/datum/config_entry/number/movedelay/sprint_buffer_regen_per_ds
- config_entry_value = 0.4
-
-/////////////////////////////////////////////////Outdated move delay
-/datum/config_entry/number/outdated_movedelay
- deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed/normal
- abstract_type = /datum/config_entry/number/outdated_movedelay
-
- var/movedelay_type
-
-/datum/config_entry/number/outdated_movedelay/DeprecationUpdate(value)
- return "[movedelay_type] [value]"
-
-/datum/config_entry/number/outdated_movedelay/human_delay
- movedelay_type = /mob/living/carbon/human
-/datum/config_entry/number/outdated_movedelay/robot_delay
- movedelay_type = /mob/living/silicon/robot
-/datum/config_entry/number/outdated_movedelay/monkey_delay
- movedelay_type = /mob/living/carbon/monkey
-/datum/config_entry/number/outdated_movedelay/alien_delay
- movedelay_type = /mob/living/carbon/alien
-/datum/config_entry/number/outdated_movedelay/slime_delay
- movedelay_type = /mob/living/simple_animal/slime
-/datum/config_entry/number/outdated_movedelay/animal_delay
- movedelay_type = /mob/living/simple_animal
-/////////////////////////////////////////////////
-
-/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
-
-/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded?
-
-/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
- config_entry_value = 18000
- min_val = 0
-
-/datum/config_entry/flag/ghost_interaction
-
-/datum/config_entry/flag/silent_ai
-/datum/config_entry/flag/silent_borg
-
-/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
-
-/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
- config_entry_value = 0
- min_val = 0
- max_val = 3
-
-/datum/config_entry/number/silicon_max_law_amount
- config_entry_value = 12
- min_val = 0
-
-/datum/config_entry/keyed_list/random_laws
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
-
-/datum/config_entry/keyed_list/law_weight
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
- splitter = ","
-
-/datum/config_entry/number/overflow_cap
- config_entry_value = -1
- min_val = -1
-
-/datum/config_entry/string/overflow_job
- config_entry_value = "Assistant"
-
-/datum/config_entry/flag/starlight
-/datum/config_entry/flag/grey_assistants
-
-/datum/config_entry/number/lavaland_budget
- config_entry_value = 60
- min_val = 0
-
-/datum/config_entry/number/space_budget
- config_entry_value = 16
- min_val = 0
-
-/datum/config_entry/number/icemoon_budget
- config_entry_value = 90
- integer = FALSE
- min_val = 0
-
-/datum/config_entry/number/station_space_budget
- config_entry_value = 10
- min_val = 0
-
-/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
-
-/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
- config_entry_value = 1
- min_val = 0
- integer = FALSE
-
-/datum/config_entry/number/events_min_players_mul
- config_entry_value = 1
- min_val = 0
- integer = FALSE
-
-/datum/config_entry/number/mice_roundstart
- config_entry_value = 10
- min_val = 0
-
-/datum/config_entry/number/bombcap
- config_entry_value = 14
- min_val = 4
-
-/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
- . = ..()
- if(.)
- GLOB.MAX_EX_DEVESTATION_RANGE = round(config_entry_value / 4)
- GLOB.MAX_EX_HEAVY_RANGE = round(config_entry_value / 2)
- GLOB.MAX_EX_LIGHT_RANGE = config_entry_value
- GLOB.MAX_EX_FLASH_RANGE = config_entry_value
- GLOB.MAX_EX_FLAME_RANGE = config_entry_value
-
-/datum/config_entry/number/emergency_shuttle_autocall_threshold
- min_val = 0
- max_val = 1
- integer = FALSE
-
-/datum/config_entry/flag/ic_printing
-
-/datum/config_entry/flag/roundstart_traits
-
-/datum/config_entry/flag/enable_night_shifts
-
-/datum/config_entry/number/night_shift_public_areas_only
- config_entry_value = NIGHTSHIFT_AREA_PUBLIC
-
-/datum/config_entry/flag/nightshift_toggle_requires_auth
- config_entry_value = FALSE
-
-/datum/config_entry/flag/nightshift_toggle_public_requires_auth
- config_entry_value = TRUE
-
-/datum/config_entry/flag/randomize_shift_time
-
-/datum/config_entry/flag/shift_time_realtime
-
-/datum/config_entry/keyed_list/antag_rep
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/job_threat
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/keyed_list/antag_threat
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
-
-/datum/config_entry/number/monkeycap
- config_entry_value = 64
- min_val = 0
-
-/datum/config_entry/number/ratcap
- config_entry_value = 64
- min_val = 0
-
-/datum/config_entry/flag/disable_stambuffer
-
-/datum/config_entry/keyed_list/box_random_engine
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_NUM
- lowercase = FALSE
- splitter = ","
-
-/datum/config_entry/flag/pai_custom_holoforms
-
-/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
-
-/datum/config_entry/flag/modetier_voting
-
-/datum/config_entry/flag/must_be_readied_to_vote_gamemode
-
-/datum/config_entry/number/dropped_modes
- config_entry_value = 3
-
-/datum/config_entry/flag/suicide_allowed
-
-/datum/config_entry/keyed_list/breasts_cups_prefs
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
- config_entry_value = list("a", "b", "c", "d", "e") //keep these lowercase
-
-/datum/config_entry/number/penis_min_inches_prefs
- config_entry_value = 1
- min_val = 0
-
-/datum/config_entry/number/penis_max_inches_prefs
- config_entry_value = 20
- min_val = 0
-
-/datum/config_entry/keyed_list/safe_visibility_toggles
- key_mode = KEY_MODE_TEXT
- value_mode = VALUE_MODE_FLAG
- config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
-
-//Body size configs, the feature will be disabled if both min and max have the same value.
-/datum/config_entry/number/body_size_min
- config_entry_value = 0.9
- min_val = 0.1 //to avoid issues with zeros and negative values.
- max_val = RESIZE_DEFAULT_SIZE
- integer = FALSE
-
-/datum/config_entry/number/body_size_max
- config_entry_value = 1.25
- min_val = RESIZE_DEFAULT_SIZE
- integer = FALSE
-
-//Penalties given to characters with a body size smaller than this value,
-//to compensate for their smaller hitbox.
-//To disable, just make sure the value is lower than 'body_size_min'
-/datum/config_entry/number/threshold_body_size_penalty
- config_entry_value = RESIZE_DEFAULT_SIZE
- min_val = 0
- max_val = RESIZE_DEFAULT_SIZE
- integer = FALSE
-
-//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
-//doesn't apply to floating or crawling mobs
-/datum/config_entry/number/body_size_slowdown_multiplier
- config_entry_value = 0
- min_val = 0
- integer = FALSE
-
-//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
-/datum/config_entry/flag/allow_custom_skintones
-
-///Initial loadout points
-/datum/config_entry/number/initial_gear_points
- config_entry_value = 10
-
-/**
- * Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
- * Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
- */
-/datum/config_entry/flag/use_field_of_vision
-
-//Shuttle size limiter
-/datum/config_entry/number/max_shuttle_count
- config_entry_value = 6
-
-/datum/config_entry/number/max_shuttle_size
- config_entry_value = 500
-
-//wound config stuff (increases the max injury roll, making injuries more likely)
-/datum/config_entry/number/wound_exponent
- config_entry_value = WOUND_DAMAGE_EXPONENT
- min_val = 0
- integer = FALSE
-
-//adds a set amount to any injury rolls on a limb using get_damage() multiplied by this number
-/datum/config_entry/number/wound_damage_multiplier
- config_entry_value = 0.333
- min_val = 0
- integer = FALSE
-
-/// Amount of dirtyness tiles need to spawn dirt.
-/datum/config_entry/number/turf_dirt_threshold
- config_entry_value = 100
- min_val = 1
- integer = TRUE
-
-/// Alpha dirt starts at
-/datum/config_entry/number/dirt_alpha_starting
- config_entry_value = 127
- max_val = 255
- min_val = 0
- integer = TRUE
-
-/// Dirtyness multiplier for making turfs dirty
-/datum/config_entry/number/turf_dirty_multiplier
- config_entry_value = 1
-
-/datum/config_entry/flag/weigh_by_recent_chaos
-
-/datum/config_entry/number/chaos_exponent
- config_entry_value = 1
diff --git a/code/controllers/configuration/entries/gamemodes.dm b/code/controllers/configuration/entries/gamemodes.dm
new file mode 100644
index 0000000000..f11c6dd5f5
--- /dev/null
+++ b/code/controllers/configuration/entries/gamemodes.dm
@@ -0,0 +1,94 @@
+/datum/config_entry/number_list/repeated_mode_adjust
+
+/datum/config_entry/flag/weigh_by_recent_chaos
+
+/datum/config_entry/number/chaos_exponent
+ config_entry_value = 1
+
+/datum/config_entry/keyed_list/probability
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/probability/ValidateListEntry(key_name)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/chaos_level
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/chaos_level/ValidateListEntry(key_name)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/max_pop
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/max_pop/ValidateListEntry(key_name)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/min_pop
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/min_pop/ValidateListEntry(key_name, key_value)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/continuous // which roundtypes continue if all antagonists die
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/keyed_list/continuous/ValidateListEntry(key_name, key_value)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/midround_antag // which roundtypes use the midround antagonist system
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
+ return key_name in config.modes
+
+/datum/config_entry/keyed_list/force_antag_count
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
+ return key_name in config.modes
+
+/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
+ config_entry_value = 6
+ min_val = 1
+
+/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
+ config_entry_value = 25
+ min_val = 1
+
+/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
+ config_entry_value = 6
+ min_val = 1
+
+/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
+ config_entry_value = 6
+ integer = FALSE
+ min_val = 1
+
+/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
+ config_entry_value = 8
+ min_val = 1
+
+/datum/config_entry/number/abductor_scaling_coeff //how many players per abductor team
+ config_entry_value = 15
+ min_val = 1
+
+/datum/config_entry/number/traitor_objectives_amount
+ config_entry_value = 2
+ min_val = 0
+
+/datum/config_entry/number/brother_objectives_amount
+ config_entry_value = 2
+ min_val = 0
+
+/datum/config_entry/flag/protect_roles_from_antagonist //If security and such can be traitor/cult/other
+
+/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
+
+/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 63da60d7b5..8ecd7c0c60 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -1,21 +1,3 @@
-/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
-
-/datum/config_entry/flag/autoadmin // if autoadmin is enabled
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
- config_entry_value = "Game Master"
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/string/servername // server name (the name of the game window)
-
-/datum/config_entry/string/servertagline
- config_entry_value = "We forgot to set the server's tagline in config.txt"
-
-/datum/config_entry/string/serversqlname // short form server name used for the DB
-
-/datum/config_entry/string/stationname // station name (the name of the station in-game)
-
/datum/config_entry/number/lobby_countdown // In between round countdown.
config_entry_value = 120
min_val = 0
@@ -24,164 +6,11 @@
config_entry_value = 25
min_val = 0
-/datum/config_entry/flag/hub // if the game appears on the hub or not
-
-/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
-
-/datum/config_entry/flag/allow_vote_restart // allow votes to restart
-
-/datum/config_entry/flag/allow_vote_mode // allow votes to change mode
-
-/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
- config_entry_value = 6000
- min_val = 0
-
-/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
- config_entry_value = 600
- min_val = 0
-
-/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
-/// Set to 0 to disable the subsystem altogether.
-/datum/config_entry/number/vote_autotransfer_initial
- config_entry_value = 72000
- min_val = 0
-
-///length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
-/datum/config_entry/number/vote_autotransfer_interval
- config_entry_value = 18000
- min_val = 0
-
-/// maximum extensions until the round autoends.
-/// Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
-/// Set to -1 to disable the maximum extensions cap.
-/datum/config_entry/number/vote_autotransfer_maximum
- config_entry_value = 4
- min_val = -1
-
-/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
-
-/datum/config_entry/flag/no_dead_vote // dead people can't vote
/datum/config_entry/flag/allow_metadata // Metadata is supported.
-/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
-
-/datum/config_entry/number/fps
- config_entry_value = 20
- min_val = 1
- max_val = 100 //byond will start crapping out at 50, so this is just ridic
- var/sync_validate = FALSE
-
-/datum/config_entry/number/fps/ValidateAndSet(str_val)
- . = ..()
- if(.)
- sync_validate = TRUE
- var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
- if(!TL.sync_validate)
- TL.ValidateAndSet(10 / config_entry_value)
- sync_validate = FALSE
-
-/datum/config_entry/number/ticklag
- integer = FALSE
- var/sync_validate = FALSE
-
-/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
- var/datum/config_entry/CE = /datum/config_entry/number/fps
- config_entry_value = 10 / initial(CE.config_entry_value)
- ..()
-
-/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
- . = text2num(str_val) > 0 && ..()
- if(.)
- sync_validate = TRUE
- var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
- if(!FPS.sync_validate)
- FPS.ValidateAndSet(10 / config_entry_value)
- sync_validate = FALSE
-
/datum/config_entry/flag/allow_holidays
-/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
- config_entry_value = TICK_LIMIT_MC_INIT_DEFAULT
- min_val = 0 //oranges warned us
- integer = FALSE
-
-/datum/config_entry/flag/admin_legacy_system //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/protect_legacy_admins //Stops any admins loaded by the legacy system from having their rank edited by the permissions panel
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/protect_legacy_ranks //Stops any ranks loaded by the legacy system from having their flags edited by the permissions panel
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/enable_localhost_rank //Gives the !localhost! rank to any client connecting from 127.0.0.1 or ::1
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/mentors_mobname_only
-
-/datum/config_entry/flag/mentor_legacy_system //Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/string/hostedby
-
-/datum/config_entry/flag/guest_jobban
-
-/datum/config_entry/flag/usewhitelist
-
-/datum/config_entry/flag/ban_legacy_system //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/use_age_restriction_for_jobs //Do jobs use account age restrictions? --requires database
-
-/datum/config_entry/flag/use_account_age_for_jobs //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
-
-/datum/config_entry/flag/use_exp_tracking
-
-/datum/config_entry/flag/use_exp_restrictions_heads
-
-/datum/config_entry/number/use_exp_restrictions_heads_hours
- config_entry_value = 0
- min_val = 0
-
-/datum/config_entry/flag/use_exp_restrictions_heads_department
-
-/datum/config_entry/flag/use_exp_restrictions_other
-
-/datum/config_entry/flag/use_exp_restrictions_admin_bypass
-
-/datum/config_entry/string/server
-
-/datum/config_entry/string/banappeals
-
-/datum/config_entry/string/wikiurl
- config_entry_value = "https://katlin.dog/citadel-wiki"
-
-/datum/config_entry/string/wikiurltg
- config_entry_value = "http://www.tgstation13.org/wiki"
-
-/datum/config_entry/string/forumurl
- config_entry_value = "http://tgstation13.org/phpBB/index.php"
-
-/datum/config_entry/string/rulesurl
- config_entry_value = "http://www.tgstation13.org/wiki/Rules"
-
-/datum/config_entry/string/githuburl
- config_entry_value = "https://www.github.com/tgstation/-tg-station"
-
-/datum/config_entry/string/roundstatsurl
-
-/datum/config_entry/string/gamelogurl
-
-/datum/config_entry/number/githubrepoid
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/flag/guest_ban
-
/datum/config_entry/number/id_console_jobslot_delay
config_entry_value = 30
min_val = 0
@@ -208,181 +37,8 @@
/datum/config_entry/flag/load_jobs_from_txt
-/datum/config_entry/flag/forbid_singulo_possession
-
-/datum/config_entry/flag/automute_on //enables automuting/spam prevention
-
-/datum/config_entry/string/panic_server_name
-
-/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
- return str_val != "\[Put the name here\]" && ..()
-
-/datum/config_entry/string/panic_server_address //Reconnect a player this linked server if this server isn't accepting new players
-
-/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
- return str_val != "byond://address:port" && ..()
-
-/datum/config_entry/string/invoke_youtubedl
- protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
-
/datum/config_entry/flag/show_irc_name
-/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
-
-/datum/config_entry/number/note_fresh_days
- config_entry_value = null
- min_val = 0
- integer = FALSE
-
-/datum/config_entry/number/note_stale_days
- config_entry_value = null
- min_val = 0
- integer = FALSE
-
-/datum/config_entry/flag/maprotation
-
-/datum/config_entry/flag/tgstyle_maprotation
-
-/datum/config_entry/string/map_vote_type
- config_entry_value = APPROVAL_VOTING
-
-/datum/config_entry/number/maprotatechancedelta
- config_entry_value = 0.75
- min_val = 0
- max_val = 1
- integer = FALSE
-
-/datum/config_entry/number/soft_popcap
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/number/hard_popcap
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/number/extreme_popcap
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/string/soft_popcap_message
- config_entry_value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
-
-/datum/config_entry/string/hard_popcap_message
- config_entry_value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
-
-/datum/config_entry/string/extreme_popcap_message
- config_entry_value = "The server is currently serving a high number of users, find alternative servers."
-
-/datum/config_entry/flag/panic_bunker // prevents people the server hasn't seen before from connecting
-
-/datum/config_entry/number/panic_bunker_living // living time in minutes that a player needs to pass the panic bunker
-
-/datum/config_entry/string/panic_bunker_message
- config_entry_value = "Sorry but the server is currently not accepting connections from never before seen players."
-
-/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
- min_val = -1
-
-/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
- min_val = 0
-
-/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
- config_entry_value = TRUE
-
-/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
-
-/datum/config_entry/flag/check_randomizer
-
-/datum/config_entry/string/ipintel_email
-
-/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
- return str_val != "ch@nge.me" && ..()
-
-/datum/config_entry/number/ipintel_rating_bad
- config_entry_value = 1
- integer = FALSE
- min_val = 0
- max_val = 1
-
-/datum/config_entry/number/ipintel_save_good
- config_entry_value = 12
- min_val = 0
-
-/datum/config_entry/number/ipintel_save_bad
- config_entry_value = 1
- min_val = 0
-
-/datum/config_entry/string/ipintel_domain
- config_entry_value = "check.getipintel.net"
-
-/datum/config_entry/flag/aggressive_changelog
-
-/datum/config_entry/flag/autoconvert_notes //if all connecting player's notes should attempt to be converted to the database
- protection = CONFIG_ENTRY_LOCKED
-
-/datum/config_entry/flag/allow_webclient
-
-/datum/config_entry/flag/webclient_only_byond_members
-
-/datum/config_entry/flag/announce_admin_logout
-
-/datum/config_entry/flag/announce_admin_login
-
-/datum/config_entry/flag/allow_map_voting
-
-/datum/config_entry/number/client_warn_version
- config_entry_value = null
- min_val = 500
-
-/datum/config_entry/number/client_warn_version
- config_entry_value = null
- min_val = 500
-
-/datum/config_entry/string/client_warn_message
- config_entry_value = "Your version of byond may have issues or be blocked from accessing this server in the future."
-
-/datum/config_entry/flag/client_warn_popup
-
-/datum/config_entry/number/client_error_version
- config_entry_value = null
- min_val = 500
-
-/datum/config_entry/string/client_error_message
- config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
-
-/datum/config_entry/number/client_error_build
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/number/minute_topic_limit
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/number/second_topic_limit
- config_entry_value = null
- min_val = 0
-
-/datum/config_entry/number/minute_click_limit
- config_entry_value = 400
- min_val = 0
-
-/datum/config_entry/number/second_click_limit
- config_entry_value = 15
- min_val = 0
-
-/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
- config_entry_value = 600
- min_val = 0
-
-/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
- config_entry_value = 50
-
-/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
- config_entry_value = 6000
-
-/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
- config_entry_value = 50
-
/datum/config_entry/flag/irc_announce_new_game
deprecated_by = /datum/config_entry/string/chat_announce_new_game
@@ -390,54 +46,290 @@
return "" //default broadcast
/datum/config_entry/string/chat_announce_new_game
+
config_entry_value = null
-/datum/config_entry/flag/debug_admin_hrefs
-
-/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
- integer = FALSE
- config_entry_value = 1
-
-/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
- integer = FALSE
- config_entry_value = 1.1
-
-/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
- config_entry_value = 65
-
-/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
- config_entry_value = 60
-
-/datum/config_entry/number/mc_tick_rate
- abstract_type = /datum/config_entry/number/mc_tick_rate
-
-/datum/config_entry/number/mc_tick_rate/ValidateAndSet(str_val)
- . = ..()
- if (.)
- Master.UpdateTickRate()
-
-/datum/config_entry/flag/resume_after_initializations
-
-/datum/config_entry/flag/resume_after_initializations/ValidateAndSet(str_val)
- . = ..()
- if(. && Master.current_runlevel)
- world.sleep_offline = !config_entry_value
-
-/datum/config_entry/number/rounds_until_hard_restart
- config_entry_value = -1
- min_val = 0
-
/datum/config_entry/string/default_view
config_entry_value = "15x15"
/datum/config_entry/string/default_view_square
config_entry_value = "15x15"
-/datum/config_entry/number/max_bunker_days
- config_entry_value = 7
- min_val = 1
/datum/config_entry/flag/minimaps_enabled
config_entry_value = TRUE
-/datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API
+
+
+/datum/config_entry/number/damage_multiplier
+ config_entry_value = 1
+ integer = FALSE
+
+/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
+ min_val = 0
+
+/datum/config_entry/flag/jobs_have_minimal_access //determines whether jobs use minimal access or expanded access.
+
+/datum/config_entry/flag/assistants_have_maint_access
+
+/datum/config_entry/flag/security_has_maint_access
+
+/datum/config_entry/flag/everyone_has_maint_access
+
+/datum/config_entry/flag/sec_start_brig //makes sec start in brig instead of dept sec posts
+
+/datum/config_entry/flag/force_random_names
+
+/datum/config_entry/flag/humans_need_surnames
+
+/datum/config_entry/flag/allow_ai // allow ai job
+
+/datum/config_entry/flag/allow_ai_multicam //whether the AI can use their multicam
+
+/datum/config_entry/flag/disable_human_mood
+
+/datum/config_entry/flag/disable_borg_flash_knockdown //Should borg flashes be capable of knocking humanoid entities down?
+
+/datum/config_entry/flag/weaken_secborg //Brings secborgs and k9s back in-line with the other borg modules
+
+/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
+
+/datum/config_entry/flag/disable_peaceborg
+
+/datum/config_entry/flag/economy //money money money money money money money money money money money money
+
+/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
+
+/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff
+
+/datum/config_entry/number/midround_antag_time_check // How late (in minutes you want the midround antag system to stay on, setting this to 0 will disable the system)
+ config_entry_value = 60
+ min_val = 0
+
+/datum/config_entry/number/midround_antag_life_check // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
+ config_entry_value = 0.7
+ integer = FALSE
+ min_val = 0
+ max_val = 1
+
+/datum/config_entry/number/suicide_reenter_round_timer
+ config_entry_value = 30
+ min_val = 0
+
+/datum/config_entry/number/roundstart_suicide_time_limit
+ config_entry_value = 30
+ min_val = 0
+
+/datum/config_entry/number/shuttle_refuel_delay
+ config_entry_value = 12000
+ min_val = 0
+
+/datum/config_entry/flag/show_game_type_odds //if set this allows players to see the odds of each roundtype on the get revision screen
+
+/datum/config_entry/keyed_list/roundstart_races //races you can play as from the get go.
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
+
+/datum/config_entry/flag/no_summon_guns //No
+
+/datum/config_entry/flag/no_summon_magic //Fun
+
+/datum/config_entry/flag/no_summon_events //Allowed
+
+/datum/config_entry/flag/no_summon_traumas //!
+
+/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
+
+/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
+ config_entry_value = 55
+ min_val = 30
+
+/datum/config_entry/flag/arrivals_shuttle_require_undocked //Require the arrivals shuttle to be undocked before latejoiners can join
+
+/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
+
+
+/datum/config_entry/flag/revival_pod_plants
+
+/datum/config_entry/flag/revival_cloning
+
+/datum/config_entry/number/revival_brain_life
+ config_entry_value = -1
+ min_val = -1
+
+/datum/config_entry/flag/ooc_during_round
+
+/datum/config_entry/flag/emojis
+
+/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
+
+/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded?
+
+/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
+ config_entry_value = 18000
+ min_val = 0
+
+/datum/config_entry/flag/ghost_interaction
+
+/datum/config_entry/flag/silent_ai
+/datum/config_entry/flag/silent_borg
+
+/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
+
+/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
+ config_entry_value = 0
+ min_val = 0
+ max_val = 3
+
+/datum/config_entry/number/silicon_max_law_amount
+ config_entry_value = 12
+ min_val = 0
+
+/datum/config_entry/keyed_list/random_laws
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/keyed_list/law_weight
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+ splitter = ","
+
+/datum/config_entry/number/overflow_cap
+ config_entry_value = -1
+ min_val = -1
+
+/datum/config_entry/string/overflow_job
+ config_entry_value = "Assistant"
+
+/datum/config_entry/flag/starlight
+/datum/config_entry/flag/grey_assistants
+
+/datum/config_entry/number/lavaland_budget
+ config_entry_value = 60
+ min_val = 0
+
+/datum/config_entry/number/space_budget
+ config_entry_value = 16
+ min_val = 0
+
+/datum/config_entry/number/icemoon_budget
+ config_entry_value = 90
+ integer = FALSE
+ min_val = 0
+
+/datum/config_entry/number/station_space_budget
+ config_entry_value = 10
+ min_val = 0
+
+/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
+
+/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
+ config_entry_value = 1
+ min_val = 0
+ integer = FALSE
+
+/datum/config_entry/number/events_min_players_mul
+ config_entry_value = 1
+ min_val = 0
+ integer = FALSE
+
+/datum/config_entry/number/mice_roundstart
+ config_entry_value = 10
+ min_val = 0
+
+/datum/config_entry/number/bombcap
+ config_entry_value = 14
+ min_val = 4
+
+/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
+ . = ..()
+ if(.)
+ GLOB.MAX_EX_DEVESTATION_RANGE = round(config_entry_value / 4)
+ GLOB.MAX_EX_HEAVY_RANGE = round(config_entry_value / 2)
+ GLOB.MAX_EX_LIGHT_RANGE = config_entry_value
+ GLOB.MAX_EX_FLASH_RANGE = config_entry_value
+ GLOB.MAX_EX_FLAME_RANGE = config_entry_value
+
+/datum/config_entry/number/emergency_shuttle_autocall_threshold
+ min_val = 0
+ max_val = 1
+ integer = FALSE
+
+/datum/config_entry/flag/ic_printing
+
+/datum/config_entry/flag/roundstart_traits
+
+/datum/config_entry/flag/enable_night_shifts
+
+/datum/config_entry/number/night_shift_public_areas_only
+ config_entry_value = NIGHTSHIFT_AREA_PUBLIC
+
+/datum/config_entry/flag/nightshift_toggle_requires_auth
+ config_entry_value = FALSE
+
+/datum/config_entry/flag/nightshift_toggle_public_requires_auth
+ config_entry_value = TRUE
+
+/datum/config_entry/flag/randomize_shift_time
+
+/datum/config_entry/flag/shift_time_realtime
+
+/datum/config_entry/number/monkeycap
+ config_entry_value = 64
+ min_val = 0
+
+/datum/config_entry/number/ratcap
+ config_entry_value = 64
+ min_val = 0
+
+/datum/config_entry/keyed_list/box_random_engine
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+ lowercase = FALSE
+ splitter = ","
+
+/datum/config_entry/flag/pai_custom_holoforms
+
+/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
+
+/datum/config_entry/flag/suicide_allowed
+
+
+//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
+/datum/config_entry/flag/allow_custom_skintones
+
+///Initial loadout points
+/datum/config_entry/number/initial_gear_points
+ config_entry_value = 10
+
+/**
+ * Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
+ * Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
+ */
+/datum/config_entry/flag/use_field_of_vision
+
+//Shuttle size limiter
+/datum/config_entry/number/max_shuttle_count
+ config_entry_value = 6
+
+/datum/config_entry/number/max_shuttle_size
+ config_entry_value = 500
+
+//wound config stuff (increases the max injury roll, making injuries more likely)
+/datum/config_entry/number/wound_exponent
+ config_entry_value = WOUND_DAMAGE_EXPONENT
+ min_val = 0
+ integer = FALSE
+
+//adds a set amount to any injury rolls on a limb using get_damage() multiplied by this number
+/datum/config_entry/number/wound_damage_multiplier
+ config_entry_value = 0.333
+ min_val = 0
+ integer = FALSE
diff --git a/code/controllers/configuration/entries/jexp.dm b/code/controllers/configuration/entries/jexp.dm
new file mode 100644
index 0000000000..3d9754b4a6
--- /dev/null
+++ b/code/controllers/configuration/entries/jexp.dm
@@ -0,0 +1,17 @@
+/datum/config_entry/flag/use_age_restriction_for_jobs //Do jobs use account age restrictions? --requires database
+
+/datum/config_entry/flag/use_account_age_for_jobs //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
+
+/datum/config_entry/flag/use_exp_tracking
+
+/datum/config_entry/flag/use_exp_restrictions_heads
+
+/datum/config_entry/number/use_exp_restrictions_heads_hours
+ config_entry_value = 0
+ min_val = 0
+
+/datum/config_entry/flag/use_exp_restrictions_heads_department
+
+/datum/config_entry/flag/use_exp_restrictions_other
+
+/datum/config_entry/flag/use_exp_restrictions_admin_bypass
diff --git a/code/controllers/configuration/entries/logging.dm b/code/controllers/configuration/entries/logging.dm
index 1cb47d6ab7..25ca145939 100644
--- a/code/controllers/configuration/entries/logging.dm
+++ b/code/controllers/configuration/entries/logging.dm
@@ -9,6 +9,7 @@
/datum/config_entry/flag/log_admin // log admin actions
protection = CONFIG_ENTRY_LOCKED
+ config_entry_value = TRUE
/datum/config_entry/flag/log_prayer // log prayers
config_entry_value = TRUE
@@ -68,3 +69,16 @@
/// forces log_href for tgui
/datum/config_entry/flag/emergency_tgui_logging
config_entry_value = FALSE
+
+/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
+ config_entry_value = 600
+ min_val = 0
+
+/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
+ config_entry_value = 50
+
+/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
+ config_entry_value = 6000
+
+/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
+ config_entry_value = 50
diff --git a/code/controllers/configuration/entries/movespeed.dm b/code/controllers/configuration/entries/movespeed.dm
new file mode 100644
index 0000000000..b1c3818cd3
--- /dev/null
+++ b/code/controllers/configuration/entries/movespeed.dm
@@ -0,0 +1,124 @@
+/datum/config_entry/keyed_list/multiplicative_movespeed
+ key_mode = KEY_MODE_TYPE
+ value_mode = VALUE_MODE_NUM
+ abstract_type = /datum/config_entry/keyed_list/multiplicative_movespeed
+
+/datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet()
+ . = ..()
+ if(.)
+ update_config_movespeed_type_lookup(TRUE)
+
+/datum/config_entry/keyed_list/multiplicative_movespeed/vv_edit_var(var_name, var_value)
+ . = ..()
+ if(. && (var_name == NAMEOF(src, config_entry_value)))
+ update_config_movespeed_type_lookup(TRUE)
+
+/datum/config_entry/keyed_list/multiplicative_movespeed/normal
+ name = "multiplicative_movespeed"
+ config_entry_value = list( //DEFAULTS
+ /mob/living/simple_animal = 1,
+ /mob/living/silicon/pai = 1,
+ /mob/living/carbon/alien/humanoid/sentinel = 0.25,
+ /mob/living/carbon/alien/humanoid/drone = 0.5,
+ /mob/living/carbon/alien/humanoid/royal/praetorian = 1,
+ /mob/living/carbon/alien/humanoid/royal/queen = 3
+ )
+
+/datum/config_entry/keyed_list/multiplicative_movespeed/floating
+ name = "multiplicative_movespeed_floating"
+ config_entry_value = list(
+ /mob/living = 0,
+ /mob/living/carbon/alien/humanoid = 0,
+ /mob/living/carbon/alien/humanoid/royal/praetorian = 0,
+ /mob/living/carbon/alien/humanoid/royal/queen = 2
+ )
+
+/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
+ abstract_type = /datum/config_entry/number/movedelay
+ integer = FALSE
+
+/datum/config_entry/number/movedelay/ValidateAndSet()
+ . = ..()
+ if(.)
+ update_mob_config_movespeeds()
+
+/datum/config_entry/number/movedelay/vv_edit_var(var_name, var_value)
+ . = ..()
+ if(. && (var_name == NAMEOF(src, config_entry_value)))
+ update_mob_config_movespeeds()
+
+/datum/config_entry/number/movedelay/run_delay
+
+/datum/config_entry/number/movedelay/run_delay/ValidateAndSet()
+ . = ..()
+ var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run)
+ M.sync()
+
+/datum/config_entry/number/movedelay/walk_delay
+
+/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet()
+ . = ..()
+ var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
+ M.sync()
+
+/datum/config_entry/flag/sprint_enabled
+ config_entry_value = TRUE
+
+/datum/config_entry/flag/sprint_enabled/ValidateAndSet(str_val)
+ . = ..()
+ for(var/datum/hud/human/H)
+ H.assert_move_intent_ui()
+ if(!config_entry_value) // disabled
+ for(var/mob/living/L in world)
+ L.disable_intentional_sprint_mode()
+
+/datum/config_entry/number/sprintless_stagger_slowdown
+ config_entry_value = 0
+
+/datum/config_entry/number/sprintless_off_balance_slowdown
+ config_entry_value = 0.85
+
+/datum/config_entry/number/melee_stagger_factor
+ config_entry_value = 1
+
+/datum/config_entry/number/movedelay/sprint_speed_increase
+ config_entry_value = 1
+
+/datum/config_entry/number/movedelay/sprint_max_tiles_increase
+ config_entry_value = 5
+
+/datum/config_entry/number/movedelay/sprint_absolute_max_tiles
+ config_entry_value = 13
+
+/datum/config_entry/number/movedelay/sprint_buffer_max
+ config_entry_value = 24
+
+/datum/config_entry/number/movedelay/sprint_stamina_cost
+ config_entry_value = 1.4
+
+/datum/config_entry/number/movedelay/sprint_buffer_regen_per_ds
+ config_entry_value = 0.4
+
+/////////////////////////////////////////////////Outdated move delay
+/datum/config_entry/number/outdated_movedelay
+ deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed/normal
+ abstract_type = /datum/config_entry/number/outdated_movedelay
+
+ var/movedelay_type
+
+/datum/config_entry/number/outdated_movedelay/DeprecationUpdate(value)
+ return "[movedelay_type] [value]"
+
+/datum/config_entry/number/outdated_movedelay/human_delay
+ movedelay_type = /mob/living/carbon/human
+/datum/config_entry/number/outdated_movedelay/robot_delay
+ movedelay_type = /mob/living/silicon/robot
+/datum/config_entry/number/outdated_movedelay/monkey_delay
+ movedelay_type = /mob/living/carbon/monkey
+/datum/config_entry/number/outdated_movedelay/alien_delay
+ movedelay_type = /mob/living/carbon/alien
+/datum/config_entry/number/outdated_movedelay/slime_delay
+ movedelay_type = /mob/living/simple_animal/slime
+/datum/config_entry/number/outdated_movedelay/animal_delay
+ movedelay_type = /mob/living/simple_animal
+/////////////////////////////////////////////////
diff --git a/code/controllers/configuration/entries/policy.dm b/code/controllers/configuration/entries/policy.dm
index de611e1813..ea8973a4ce 100644
--- a/code/controllers/configuration/entries/policy.dm
+++ b/code/controllers/configuration/entries/policy.dm
@@ -3,9 +3,9 @@
config_entry_value = 300
integer = TRUE
-/datum/config_entry/keyed_list/policyconfig
+/datum/config_entry/keyed_list/policy
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_TEXT
-/datum/config_entry/keyed_list/policyconfig/preprocess_key(key)
+/datum/config_entry/keyed_list/policy/preprocess_key(key)
return uppertext(..())
diff --git a/code/controllers/configuration/entries/fail2topic.dm b/code/controllers/configuration/entries/security.dm
similarity index 62%
rename from code/controllers/configuration/entries/fail2topic.dm
rename to code/controllers/configuration/entries/security.dm
index 7ed09b378a..3a49c97d70 100644
--- a/code/controllers/configuration/entries/fail2topic.dm
+++ b/code/controllers/configuration/entries/security.dm
@@ -9,7 +9,6 @@
protection = CONFIG_ENTRY_LOCKED //affects physical server configuration, no touchies!!
/datum/config_entry/flag/fail2topic_enabled
- config_entry_value = TRUE
/datum/config_entry/number/topic_max_size
config_entry_value = 8192
@@ -17,3 +16,19 @@
/datum/config_entry/keyed_list/topic_rate_limit_whitelist
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/number/minute_topic_limit
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/number/second_topic_limit
+ config_entry_value = null
+ min_val = 0
+
+/datum/config_entry/number/minute_click_limit
+ config_entry_value = 400
+ min_val = 0
+
+/datum/config_entry/number/second_click_limit
+ config_entry_value = 15
+ min_val = 0
diff --git a/code/controllers/configuration/entries/server.dm b/code/controllers/configuration/entries/server.dm
new file mode 100644
index 0000000000..1acf8a11ca
--- /dev/null
+++ b/code/controllers/configuration/entries/server.dm
@@ -0,0 +1,90 @@
+/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
+
+/datum/config_entry/string/servername // server name (the name of the game window)
+
+/datum/config_entry/string/servertagline
+ config_entry_value = "We forgot to set the server's tagline in config.txt"
+
+/datum/config_entry/string/serversqlname // short form server name used for the DB
+
+/datum/config_entry/string/stationname // station name (the name of the station in-game)
+
+/datum/config_entry/number/fps
+ config_entry_value = 20
+ min_val = 1
+ max_val = 100 //byond will start crapping out at 50, so this is just ridic
+ var/sync_validate = FALSE
+
+/datum/config_entry/number/fps/ValidateAndSet(str_val)
+ . = ..()
+ if(.)
+ sync_validate = TRUE
+ var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
+ if(!TL.sync_validate)
+ TL.ValidateAndSet(10 / config_entry_value)
+ sync_validate = FALSE
+
+/datum/config_entry/number/ticklag
+ integer = FALSE
+ var/sync_validate = FALSE
+
+/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
+ var/datum/config_entry/CE = /datum/config_entry/number/fps
+ config_entry_value = 10 / initial(CE.config_entry_value)
+ ..()
+
+/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
+ . = text2num(str_val) > 0 && ..()
+ if(.)
+ sync_validate = TRUE
+ var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
+ if(!FPS.sync_validate)
+ FPS.ValidateAndSet(10 / config_entry_value)
+ sync_validate = FALSE
+
+/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
+ config_entry_value = TICK_LIMIT_MC_INIT_DEFAULT
+ min_val = 0 //oranges warned us
+ integer = FALSE
+
+/datum/config_entry/flag/usewhitelist
+
+/datum/config_entry/string/hostedby
+
+/datum/config_entry/flag/hub // if the game appears on the hub or not
+
+/datum/config_entry/string/invoke_youtubedl
+ protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
+
+/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
+ integer = FALSE
+ config_entry_value = 1
+
+/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
+ integer = FALSE
+ config_entry_value = 1.1
+
+/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
+ config_entry_value = 65
+
+/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
+ config_entry_value = 60
+
+/datum/config_entry/number/mc_tick_rate
+ abstract_type = /datum/config_entry/number/mc_tick_rate
+
+/datum/config_entry/number/mc_tick_rate/ValidateAndSet(str_val)
+ . = ..()
+ if (.)
+ Master.UpdateTickRate()
+
+/datum/config_entry/flag/resume_after_initializations
+
+/datum/config_entry/flag/resume_after_initializations/ValidateAndSet(str_val)
+ . = ..()
+ if(. && Master.current_runlevel)
+ world.sleep_offline = !config_entry_value
+
+/datum/config_entry/number/rounds_until_hard_restart
+ config_entry_value = -1
+ min_val = 0
diff --git a/code/controllers/configuration/entries/stamina_combat.dm b/code/controllers/configuration/entries/stamina_combat.dm
index 5c2c9d7ec5..681b903286 100644
--- a/code/controllers/configuration/entries/stamina_combat.dm
+++ b/code/controllers/configuration/entries/stamina_combat.dm
@@ -29,3 +29,5 @@
/// Factor to multiply by for stamina usage past buffer into health
/datum/config_entry/number/stamina_combat/overdraw_penalty_factor
config_entry_value = 1.5
+
+/datum/config_entry/flag/disable_stambuffer
diff --git a/code/controllers/configuration/entries/threat.dm b/code/controllers/configuration/entries/threat.dm
new file mode 100644
index 0000000000..3a3e03e149
--- /dev/null
+++ b/code/controllers/configuration/entries/threat.dm
@@ -0,0 +1,7 @@
+/datum/config_entry/keyed_list/job_threat
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
+
+/datum/config_entry/keyed_list/antag_threat
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_NUM
diff --git a/code/controllers/configuration/entries/urls.dm b/code/controllers/configuration/entries/urls.dm
new file mode 100644
index 0000000000..fe82574da0
--- /dev/null
+++ b/code/controllers/configuration/entries/urls.dm
@@ -0,0 +1,26 @@
+/datum/config_entry/string/server
+
+/datum/config_entry/string/banappeals
+
+/datum/config_entry/string/wikiurl
+ config_entry_value = "https://katlin.dog/citadel-wiki"
+
+/datum/config_entry/string/wikiurltg
+ config_entry_value = "http://www.tgstation13.org/wiki"
+
+/datum/config_entry/string/forumurl
+ config_entry_value = "http://tgstation13.org/phpBB/index.php"
+
+/datum/config_entry/string/rulesurl
+ config_entry_value = "http://www.tgstation13.org/wiki/Rules"
+
+/datum/config_entry/string/githuburl
+ config_entry_value = "https://www.github.com/tgstation/-tg-station"
+
+/datum/config_entry/string/roundstatsurl
+
+/datum/config_entry/string/gamelogurl
+
+/datum/config_entry/number/githubrepoid
+ config_entry_value = null
+ min_val = 0
diff --git a/code/controllers/configuration/entries/vote.dm b/code/controllers/configuration/entries/vote.dm
new file mode 100644
index 0000000000..545fd01e3c
--- /dev/null
+++ b/code/controllers/configuration/entries/vote.dm
@@ -0,0 +1,55 @@
+/datum/config_entry/flag/allow_vote_restart // allow votes to restart
+
+/datum/config_entry/flag/allow_vote_mode // allow votes to change mode
+
+/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
+ config_entry_value = 6000
+ min_val = 0
+
+/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
+ config_entry_value = 600
+ min_val = 0
+
+/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
+/// Set to 0 to disable the subsystem altogether.
+/datum/config_entry/number/vote_autotransfer_initial
+ config_entry_value = 72000
+ min_val = 0
+
+///length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
+/datum/config_entry/number/vote_autotransfer_interval
+ config_entry_value = 18000
+ min_val = 0
+
+/// maximum extensions until the round autoends.
+/// Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
+/// Set to -1 to disable the maximum extensions cap.
+/datum/config_entry/number/vote_autotransfer_maximum
+ config_entry_value = 4
+ min_val = -1
+
+/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
+
+/datum/config_entry/flag/no_dead_vote // dead people can't vote
+
+/datum/config_entry/flag/maprotation
+
+/datum/config_entry/flag/tgstyle_maprotation
+
+/datum/config_entry/string/map_vote_type
+ config_entry_value = APPROVAL_VOTING
+
+/datum/config_entry/number/maprotatechancedelta
+ config_entry_value = 0.75
+ min_val = 0
+ max_val = 1
+ integer = FALSE
+
+/datum/config_entry/flag/allow_map_voting
+
+/datum/config_entry/flag/modetier_voting
+
+/datum/config_entry/number/dropped_modes
+ config_entry_value = 3
+
+/datum/config_entry/flag/must_be_readied_to_vote_gamemode
diff --git a/code/controllers/subsystem/activity.dm b/code/controllers/subsystem/activity.dm
index 0a8d248e58..d10e67f210 100644
--- a/code/controllers/subsystem/activity.dm
+++ b/code/controllers/subsystem/activity.dm
@@ -11,6 +11,7 @@ SUBSYSTEM_DEF(activity)
/datum/controller/subsystem/activity/Initialize(timeofday)
RegisterSignal(SSdcs,COMSIG_GLOB_EXPLOSION,.proc/on_explosion)
RegisterSignal(SSdcs,COMSIG_GLOB_MOB_DEATH,.proc/on_death)
+ return ..()
/datum/controller/subsystem/activity/fire(resumed = 0)
calculate_threat()
@@ -54,7 +55,10 @@ SUBSYSTEM_DEF(activity)
var/weight = (text2num(threat_history[i+1])-text2num(threat_history[i]))
total_weight += weight
total_amt += weight * (threat_history[threat_history[i]])
- return round(total_amt / total_weight,0.1)
+ if(total_weight == 0)
+ return total_amt
+ else
+ return round(total_amt / total_weight,0.1)
/datum/controller/subsystem/activity/proc/get_max_threat()
. = 0
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 3351b37407..6b3a5e60c5 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -58,9 +58,9 @@ SUBSYSTEM_DEF(air)
// Whether turf-to-turf heat exchanging should be enabled.
var/heat_enabled = FALSE
// Max number of times process_turfs will share in a tick.
- var/share_max_steps = 1
+ var/share_max_steps = 3
// Excited group processing will try to equalize groups with total pressure difference less than this amount.
- var/excited_group_pressure_goal = 0.25
+ var/excited_group_pressure_goal = 1
/datum/controller/subsystem/air/stat_entry(msg)
msg += "C:{"
diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm
index ac9db60ccc..946980389c 100644
--- a/code/controllers/subsystem/research.dm
+++ b/code/controllers/subsystem/research.dm
@@ -409,8 +409,7 @@ SUBSYSTEM_DEF(research)
var/datum/techweb_node/TN = techweb_nodes[id]
TN.Initialize()
techweb_nodes = returned
- if (!verify_techweb_nodes()) //Verify all nodes have ids and such.
- stack_trace("Invalid techweb nodes detected")
+ verify_techweb_nodes()
calculate_techweb_nodes()
calculate_techweb_boost_list()
if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly.
@@ -442,52 +441,52 @@ SUBSYSTEM_DEF(research)
for(var/n in techweb_nodes)
var/datum/techweb_node/N = techweb_nodes[n]
if(!istype(N))
- WARNING("Invalid research node with ID [n] detected and removed.")
+ stack_trace("Invalid research node with ID [n] detected and removed.")
techweb_nodes -= n
research_node_id_error(n)
. = FALSE
for(var/p in N.prereq_ids)
var/datum/techweb_node/P = techweb_nodes[p]
if(!istype(P))
- WARNING("Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.")
+ stack_trace("Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.")
N.prereq_ids -= p
research_node_id_error(p)
. = FALSE
for(var/d in N.design_ids)
var/datum/design/D = techweb_designs[d]
if(!istype(D))
- WARNING("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.")
+ stack_trace("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.")
N.design_ids -= d
design_id_error(d)
. = FALSE
for(var/u in N.unlock_ids)
var/datum/techweb_node/U = techweb_nodes[u]
if(!istype(U))
- WARNING("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.")
+ stack_trace("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.")
N.unlock_ids -= u
research_node_id_error(u)
. = FALSE
for(var/p in N.boost_item_paths)
if(!ispath(p))
N.boost_item_paths -= p
- WARNING("[p] is not a valid path.")
+ stack_trace("[p] is not a valid path.")
node_boost_error(N.id, "[p] is not a valid path.")
. = FALSE
var/list/points = N.boost_item_paths[p]
if(islist(points))
for(var/i in points)
if(!isnum(points[i]))
- WARNING("[points[i]] is not a valid number.")
+ stack_trace("[points[i]] is not a valid number.")
node_boost_error(N.id, "[points[i]] is not a valid number.")
. = FALSE
else if(!point_types[i])
- WARNING("[i] is not a valid point type.")
+ stack_trace("[i] is not a valid point type.")
node_boost_error(N.id, "[i] is not a valid point type.")
. = FALSE
else if(!isnull(points))
N.boost_item_paths -= p
node_boost_error(N.id, "No valid list.")
- WARNING("No valid list.")
+ stack_trace("No valid list.")
. = FALSE
CHECK_TICK
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index 996f73ccf6..ee2bfd354d 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -10,7 +10,7 @@ SUBSYSTEM_DEF(title)
/datum/controller/subsystem/title/Initialize()
if(file_path && icon)
- return
+ return ..()
if(fexists("data/previous_title.dat"))
var/previous_path = file2text("data/previous_title.dat")
@@ -31,15 +31,13 @@ SUBSYSTEM_DEF(title)
if(length(title_screens))
file_path = "[global.config.directory]/title_screens/images/[pick(title_screens)]"
- if(!file_path)
+ if(!file_path || !fexists(file_path))
file_path = "icons/default_title.dmi"
- ASSERT(fexists(file_path))
-
- icon = new(fcopy_rsc(file_path))
-
- if(splash_turf)
- splash_turf.icon = icon
+ if(fexists(file_path))
+ icon = new(fcopy_rsc(file_path))
+ if(splash_turf)
+ splash_turf.icon = icon
return ..()
diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm
index 26f52f6ba5..c34d56982a 100644
--- a/code/datums/components/orbiter.dm
+++ b/code/datums/components/orbiter.dm
@@ -90,7 +90,7 @@
return
SEND_SIGNAL(parent, COMSIG_ATOM_ORBIT_END, orbiter, refreshing)
UnregisterSignal(orbiter, COMSIG_MOVABLE_MOVED)
- orbiter.SpinAnimation(0, 0)
+ orbiter.SpinAnimation(0, 0, parallel = FALSE)
if(istype(orbiters[orbiter],/matrix)) //This is ugly.
orbiter.transform = orbiters[orbiter]
orbiters -= orbiter
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 2439ef4d53..0b4b3ef2dd 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -159,9 +159,9 @@
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
if(!istype(C))
return
- C.reagents.metabolize(C, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
+ C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
if(triple_metabolism)
- C.reagents.metabolize(C, can_overdose=TRUE)
+ C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE)
C.overeatduration = max(C.overeatduration - 2, 0)
var/lost_nutrition = 9 - (reduced_hunger * 5)
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
diff --git a/code/datums/elements/trash.dm b/code/datums/elements/trash.dm
index 3a4d5b0150..a83889c6ca 100644
--- a/code/datums/elements/trash.dm
+++ b/code/datums/elements/trash.dm
@@ -1,5 +1,5 @@
/datum/element/trash
- element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
+ element_flags = ELEMENT_DETACH
/datum/element/trash/Attach(datum/target)
. = ..()
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index a08b535aff..5d97448d69 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -35,6 +35,14 @@
cost = 10
allow_duplicates = FALSE
+/datum/map_template/ruin/lavaland/library
+ name = "Lavaland Library"
+ id = "llibrary"
+ description = "A once grand library, now lost to the confines of lavaland."
+ suffix = "lavaland_surface_library.dmm"
+ cost = 5
+ allow_duplicates = FALSE
+
/datum/map_template/ruin/lavaland/seed_vault
name = "Seed Vault"
id = "seed-vault"
@@ -79,6 +87,20 @@
suffix = "lavaland_surface_animal_hospital.dmm"
allow_duplicates = FALSE
+/datum/map_template/ruin/lavaland/hotsprings
+ name = "Hot Springs"
+ id = "lhotsprings"
+ description = "Just relax and take a dip! Lavaland's finest hot springs await!"
+ suffix = "lavaland_surface_hotsprings.dmm"
+
+/datum/map_template/ruin/lavaland/engioutpost
+ name = "Engineer Outpost"
+ id = "lengioutpost"
+ description = "Blown up by an unfortunate accident."
+ suffix = "lavaland_surface_engioutpost.dmm"
+ cost = 10
+ allow_duplicates = FALSE
+
/datum/map_template/ruin/lavaland/sin
cost = 10
allow_duplicates = FALSE
@@ -115,6 +137,24 @@
suffix = "lavaland_surface_sloth.dmm"
// Generates nothing but atmos runtimes and salt
+/datum/map_template/ruin/lavaland/sin/lust
+ name = "Ruin of Lust"
+ id = "llust"
+ description = "Not exactly what you expected."
+ suffix = "lavaland_surface_lust.dmm"
+
+/datum/map_template/ruin/lavaland/sin/wrath
+ name = "Ruin of Wrath"
+ id = "lwrath"
+ description = "You'll fight and fight and just keep fighting."
+ suffix = "lavaland_surface_wrath.dmm"
+
+/datum/map_template/ruin/lavaland/bathhouse
+ name = "Bath House"
+ id = "lbathhouse"
+ description = "A taste of paradise, locked in the hell of Lavaland."
+ suffix = "lavaland_surface_bathhouse.dmm"
+
/datum/map_template/ruin/lavaland/ratvar
name = "Dead God"
id = "ratvar"
@@ -132,19 +172,20 @@
/datum/map_template/ruin/lavaland/blood_drunk_miner
name = "Blood-Drunk Miner"
- id = "blooddrunk"
- description = "A strange arrangement of stone tiles and an insane, beastly miner contemplating them."
- suffix = "lavaland_surface_blooddrunk1.dmm"
+ description = "An insane, beastly miner contemplating stone tiles..."
always_place = TRUE
- allow_duplicates = FALSE //will only spawn one variant of the ruin
-
-/datum/map_template/ruin/lavaland/blood_drunk_miner/guidance
- name = "Blood-Drunk Miner (Guidance)"
- suffix = "lavaland_surface_blooddrunk2.dmm"
-
-/datum/map_template/ruin/lavaland/blood_drunk_miner/hunter
- name = "Blood-Drunk Miner (Hunter)"
- suffix = "lavaland_surface_blooddrunk3.dmm"
+ allow_duplicates = FALSE
+ id = "blooddrunk"
+/datum/map_template/ruin/lavaland/blood_drunk_miner/New()
+ if(prob(25))
+ suffix = "lavaland_surface_blooddrunk1.dmm"
+ else if(prob(34))
+ suffix = "lavaland_surface_blooddrunk2.dmm"
+ else if(prob(50))
+ suffix = "lavaland_surface_blooddrunk3.dmm"
+ else
+ suffix = "lavaland_surface_mining_site.dmm"
+ . = ..()
/datum/map_template/ruin/lavaland/ufo_crash
name = "UFO Crash"
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 7fc7da2ef7..ba5f2e1e18 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -199,6 +199,23 @@
movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode
stamdmg_per_ds = 1
+/datum/status_effect/vtec_disabled
+ id = "vtec_disable"
+ tick = FALSE
+
+/datum/status_effect/vtec_disabled/on_creation(mob/living/new_owner, set_duration)
+ if(isnum(set_duration))
+ duration = set_duration
+ . = ..()
+ if(iscyborg(owner))
+ var/mob/living/silicon/robot/R = owner
+ R.vtec_disabled = TRUE
+
+/datum/status_effect/vtec_disabled/on_remove()
+ if(iscyborg(owner))
+ var/mob/living/silicon/robot/R = owner
+ R.vtec_disabled = FALSE
+ return ..()
//OTHER DEBUFFS
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm
index b38b755f28..6d0c62a8b2 100644
--- a/code/datums/status_effects/status_effect.dm
+++ b/code/datums/status_effects/status_effect.dm
@@ -5,6 +5,8 @@
/datum/status_effect
var/id = "effect" //Used for screen alerts.
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
+ /// do we tick()?
+ var/tick = TRUE
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
var/next_tick //The scheduled time for the next tick.
var/mob/living/owner //The mob affected by the status effect.
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index e9957fdae2..65edf9c98e 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -169,7 +169,7 @@
* * [/turf/open/space/proc/Initialize]
*/
/atom/proc/Initialize(mapload, ...)
- // SHOULD_NOT_SLEEP(TRUE)
+ SHOULD_NOT_SLEEP(TRUE)
SHOULD_CALL_PARENT(TRUE)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index a3bdfe4243..75c84bd2a8 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -388,7 +388,7 @@
to_chat(occupant, "There is a bright flash!
You feel like a new being.")
mob_occupant.flash_act()
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/policy = policies[POLICYCONFIG_ON_CLONE]
if(policy)
to_chat(occupant, policy)
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 8f8b83bfde..66579c90f3 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -296,7 +296,7 @@
var/mob/C = pick(candidates)
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(S)])")
C.transfer_ckey(S, FALSE)
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/policy = policies[POLICYCONFIG_ON_PYROCLASTIC_SENTIENT]
if(policy)
to_chat(S,policy)
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index bd32ddadf3..e5ccd9f21a 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -53,7 +53,7 @@
bloodiness = 0
/obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases)
- ..()
+ . = ..()
icon_state += "-old"
add_blood_DNA(list("Non-human DNA" = "A+"))
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index c601624072..ee65bd5c96 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -620,7 +620,7 @@
if(req_defib)
if(defib.healdisk)
H.heal_overall_damage(25, 25)
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index e7a9d51ebe..d54911528d 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -122,7 +122,7 @@
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
src.pai = personality
src.add_overlay("pai-null")
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/policy = policies[POLICYCONFIG_PAI]
if(policy)
to_chat(personality, policy)
diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm
index 0673e1d489..05b7ef4802 100644
--- a/code/game/objects/items/manuals.dm
+++ b/code/game/objects/items/manuals.dm
@@ -337,7 +337,7 @@
page_link = "Guide_to_chemistry"
/obj/item/book/manual/wiki/chemistry/Initialize()
- ..()
+ . = ..()
new /obj/item/book/manual/wiki/cit/chemistry(loc)
new /obj/item/book/manual/wiki/cit/chem_recipies(loc)
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index a04bfb365b..dbfeb9d08f 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -73,14 +73,14 @@
/datum/block_parry_data/captain_saber
parry_time_windup = 0
- parry_time_active = 6
+ parry_time_active = 10
parry_time_spindown = 0
parry_time_perfect = 0.75
- parry_time_perfect_leeway = 0.75
+ parry_time_perfect_leeway = 1.5
parry_imperfect_falloff_percent = 30
parry_efficiency_perfect = 100
parry_failed_stagger_duration = 3 SECONDS
- parry_failed_clickcd_duration = 1 SECONDS
+ parry_failed_clickcd_duration = 0
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK
parry_automatic_enabled = TRUE
@@ -179,19 +179,23 @@
// Fast, efficient parry.
/datum/block_parry_data/traitor_rapier
parry_time_windup = 0
- parry_time_active = 6
+ parry_time_active = 10
parry_time_spindown = 0
parry_time_active_visual_override = 3
parry_time_spindown_visual_override = 2
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK | PARRY_LOCK_ATTACKING
- parry_time_perfect = 1
- parry_time_perfect_leeway = 1
+ parry_time_perfect = 2
+ parry_time_perfect_leeway = 2
parry_time_perfect_leeway_override = list(
TEXT_ATTACK_TYPE_PROJECTILE = 1
)
parry_imperfect_falloff_percent = 30
- parry_efficiency_to_counterattack = INFINITY
+ parry_efficiency_to_counterattack = 100
parry_efficiency_considered_successful = 1
+ parry_data = list(
+ PARRY_KNOCKDOWN_ATTACKER = 10,
+ PARRY_DISARM_ATTACKER = TRUE
+ )
parry_efficiency_perfect = 100
parry_stamina_cost = 5
parry_failed_stagger_duration = 2 SECONDS
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 31481f58cf..13ababa0d5 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -466,7 +466,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
can_random_spawn = FALSE
/obj/item/toy/plush/random/Initialize()
- SHOULD_CALL_PARENT(FALSE)
+ ..()
var/newtype
var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ed92623a37..88648bcbb7 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -90,7 +90,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
to_chat(user, "There's no room for another VTEC unit!")
return FALSE
- //R.speed = -2 // Gotta go fast.
+ //R.vtec = -2 // Gotta go fast.
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
VC = new /obj/effect/proc_holder/silicon/cyborg/vtecControl
R.AddAbility(VC)
@@ -100,7 +100,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
. = ..()
if (.)
R.RemoveAbility(VC)
- R.speed = initial(R.speed)
+ R.vtec = initial(R.vtec)
R.cansprint = 1
/obj/item/borg/upgrade/disablercooler
@@ -690,11 +690,11 @@ as performing this in action() will cause the upgrade to end up in the borg inst
if(istype(user))
switch(currentState)
if (0)
- user.speed = initial(user.speed)
+ user.vtec = initial(user.vtec)
if (1)
- user.speed = initial(user.speed) - maxReduction * 0.5
+ user.vtec = initial(user.vtec) - maxReduction * 0.5
if (2)
- user.speed = initial(user.speed) - maxReduction * 1
+ user.vtec = initial(user.vtec) - maxReduction * 1
action.button_icon_state = "Chevron_State_[currentState]"
action.UpdateButtonIcon()
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index d126e39873..266d8b7b86 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -48,7 +48,7 @@
amount -= max_amount
new type(loc, max_amount, FALSE)
if(!merge_type)
- merge_type = type
+ merge_type = src.type
if(LAZYLEN(mats_per_unit))
set_mats_per_unit(mats_per_unit, 1)
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index a733c282c6..62bde0e4e6 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -16,7 +16,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
attack_speed = CLICK_CD_MELEE
- var/stamina_loss_amount = 35
+ var/stamina_loss_amount = 40
var/turned_on = FALSE
var/knockdown = TRUE
/// block percent needed to prevent knockdown/disarm
@@ -25,7 +25,7 @@
var/hitcost = 750
var/throw_hit_chance = 35
var/preload_cell_type //if not empty the baton starts with this type of cell
- var/cooldown_duration = 5 SECONDS //How long our baton rightclick goes on cooldown for after applying a knockdown
+ var/cooldown_duration = 3.5 SECONDS //How long our baton rightclick goes on cooldown for after applying a knockdown
var/status_duration = 5 SECONDS //how long our status effects last for otherwise
COOLDOWN_DECLARE(shove_cooldown)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 6356424aaf..065c0d2f28 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -243,6 +243,32 @@
new framestack(T, framestackamount)
qdel(src)
+
+/**
+ * Gets all connected tables
+ * Cardinals only
+ */
+/obj/structure/table/proc/connected_floodfill(max = 25)
+ . = list()
+ connected_floodfill_internal(., list())
+
+/obj/structure/table/proc/connected_floodfill_internal(list/out = list(), list/processed = list())
+ if(processed[src])
+ return
+ processed[src] = TRUE
+ out += src
+ var/obj/structure/table/other
+#define RUN_TABLE(dir) \
+ other = locate(/obj/structure/table) in get_step(src, dir); \
+ if(other) { \
+ other.connected_floodfill_internal(out, processed); \
+ }
+ RUN_TABLE(NORTH)
+ RUN_TABLE(SOUTH)
+ RUN_TABLE(EAST)
+ RUN_TABLE(WEST)
+#undef RUN_TABLE
+
/obj/structure/table/greyscale
icon = 'icons/obj/smooth_structures/table_greyscale.dmi'
icon_state = "table"
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index 708ca230b1..72612f82ff 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -15,3 +15,7 @@
barefootstep = FOOTSTEP_WATER
clawfootstep = FOOTSTEP_WATER
heavyfootstep = FOOTSTEP_WATER
+
+/turf/open/water/decorative
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = FALSE
diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm
index 32171a036a..643458d05a 100644
--- a/code/modules/antagonists/changeling/powers/adrenaline.dm
+++ b/code/modules/antagonists/changeling/powers/adrenaline.dm
@@ -13,5 +13,5 @@
//Recover from stuns.
/obj/effect/proc_holder/changeling/adrenaline/sting_action(mob/living/user)
- user.do_adrenaline(0, FALSE, 70, 0, TRUE, list(/datum/reagent/medicine/epinephrine = 3, /datum/reagent/drug/methamphetamine/changeling = 10, /datum/reagent/medicine/changelingadrenaline = 5), "Energy rushes through us.", 0, 0.75, 0)
+ user.do_adrenaline(0, FALSE, 70, 0, TRUE, list(/datum/reagent/medicine/epinephrine = 3, /datum/reagent/medicine/changelinghaste = 10, /datum/reagent/medicine/changelingadrenaline = 5), "Energy rushes through us.", 0, 0.75, 0)
return TRUE
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 bd2ca07134..5fdedd5be7 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -1,6 +1,6 @@
/obj/machinery/atmospherics/pipe/heat_exchanging
level = 2
- var/minimum_temperature_difference = 20
+ var/minimum_temperature_difference = 0.01
var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
color = "#404040"
buckle_lying = 1
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index cf4456789a..15c6475033 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -433,7 +433,7 @@
var/list/danger = list()
for(var/id in air_contents.get_gases())
var/gas = air_contents.get_moles(id)
- if(!GLOB.gas_data.flags[id] & GAS_FLAG_DANGEROUS)
+ if(!(GLOB.gas_data.flags[id] & GAS_FLAG_DANGEROUS))
continue
if(gas > (GLOB.gas_data.visibility[id] || MOLES_GAS_VISIBLE)) //if moles_visible is undefined, default to default visibility
danger[GLOB.gas_data.names[id]] = gas //ex. "plasma" = 20
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index b56f689979..a58b218c1a 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -103,14 +103,14 @@
. = ..()
AddElement(/datum/element/polychromic, poly_colors, 3)
-/obj/item/clothing/neck/cancloak/polychromic
+/obj/item/clothing/neck/cloak/cancloak/polychromic
name = "canvas cloak"
desc = "A rugged cloak made of canvas."
icon_state = "cancloak"
item_state = "cloak"
var/list/poly_colors = list("#585858", "#373737", "#BEBEBE")
-/obj/item/clothing/neck/cancloak/polychromic/ComponentInitialize()
+/obj/item/clothing/neck/cloak/cancloak/polychromic/ComponentInitialize()
. = ..()
AddElement(/datum/element/polychromic, poly_colors, 3)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index cc18207a29..7f81fb9993 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -31,7 +31,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
if(!hallucination)
return
- hallucination--
+ hallucination = max(hallucination-1, 0)
if(world.time < next_hallucination)
return
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index f97ef17364..5f0c01a5c8 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -468,7 +468,7 @@
/obj/item/reagent_containers/medspray/sterilizine = 1)
/obj/machinery/smartfridge/organ/preloaded/Initialize()
- ..()
+ . = ..()
var/list = list(/obj/item/organ/tongue, /obj/item/organ/brain, /obj/item/organ/heart, /obj/item/organ/liver, /obj/item/organ/ears, /obj/item/organ/eyes, /obj/item/organ/tail, /obj/item/organ/stomach)
var/newtype = pick(list)
load(new newtype(src.loc))
diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm
index 600f5113e1..b3056d46cf 100644
--- a/code/modules/integrated_electronics/subtypes/atmospherics.dm
+++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm
@@ -19,7 +19,7 @@
/obj/item/integrated_circuit/atmospherics/Initialize()
air_contents = new(volume)
- ..()
+ return ..()
/obj/item/integrated_circuit/atmospherics/return_air()
return air_contents
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 3eb7771025..b3e2169b12 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -439,6 +439,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
* * pref_load - Preferences to be loaded from character setup, loads in preferred mutant things like bodyparts, digilegs, skin color, etc.
*/
/datum/species/proc/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
+ set waitfor = FALSE
// Drop the items the new species can't wear
for(var/slot_id in no_equip)
var/obj/item/thing = C.get_item_by_slot(slot_id)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 0b12f3884e..f42661ca47 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -1,6 +1,6 @@
/mob/living/carbon/BiologicalLife(seconds, times_fired)
//Reagent processing needs to come before breathing, to prevent edge cases.
- handle_organs()
+ handle_organs(seconds, times_fired)
. = ..() // if . is false, we are dead.
if(stat == DEAD)
stop_sound_channel(CHANNEL_HEARTBEAT)
@@ -23,7 +23,7 @@
handle_brain_damage()
if(stat != DEAD)
- handle_liver()
+ handle_liver(seconds, times_fired)
if(stat != DEAD)
handle_corruption()
@@ -378,25 +378,25 @@
/mob/living/carbon/proc/handle_blood()
return
-/mob/living/carbon/proc/handle_bodyparts()
+/mob/living/carbon/proc/handle_bodyparts(seconds, times_fired)
for(var/I in bodyparts)
var/obj/item/bodypart/BP = I
if(BP.needs_processing)
- . |= BP.on_life()
+ . |= BP.on_life(seconds, times_fired)
-/mob/living/carbon/proc/handle_organs()
+/mob/living/carbon/proc/handle_organs(seconds, times_fired)
if(stat != DEAD)
for(var/V in internal_organs)
var/obj/item/organ/O = V
if(O)
- O.on_life()
+ O.on_life(seconds, times_fired)
else
if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/preservahyde, 1)) // No organ decay if the body contains formaldehyde. Or preservahyde.
return
for(var/V in internal_organs)
var/obj/item/organ/O = V
if(O)
- O.on_death() //Needed so organs decay while inside the body.
+ O.on_death(seconds, times_fired) //Needed so organs decay while inside the body.
/mob/living/carbon/handle_diseases()
for(var/thing in diseases)
@@ -687,16 +687,16 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
//LIVER//
/////////
-/mob/living/carbon/proc/handle_liver()
+/mob/living/carbon/proc/handle_liver(seconds, times_fired)
var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER)
if((!dna && !liver) || (NOLIVER in dna.species.species_traits))
return
if(!liver || liver.organ_flags & ORGAN_FAILING)
- liver_failure()
+ liver_failure(seconds, times_fired)
-/mob/living/carbon/proc/liver_failure()
+/mob/living/carbon/proc/liver_failure(seconds, times_fired)
reagents.end_metabolization(src, keep_liverless = TRUE) //Stops trait-based effects on reagents, to prevent permanent buffs
- reagents.metabolize(src, can_overdose=FALSE, liverless = TRUE)
+ reagents.metabolize(src, seconds, times_fired, can_overdose=FALSE, liverless = TRUE)
if(HAS_TRAIT(src, TRAIT_STABLELIVER))
return
adjustToxLoss(4, TRUE, TRUE)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index d49059f839..4ab24c31dd 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -173,4 +173,4 @@
if(prob(10))
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
equip_to_slot_or_del(helmet,SLOT_HEAD)
- helmet.attack_self(src) // todo encapsulate toggle
+ INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 47f9a794cf..8a400ad02d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -966,7 +966,8 @@
upgrades.Cut()
- speed = 0
+ vtec = 0
+ vtec_disabled = FALSE
ionpulse = FALSE
revert_shell()
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 36f291bf36..5342638c03 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -82,6 +82,18 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
if(!opened)
return ..()
+/mob/living/silicon/robot/disarm_shove(mob/living/carbon/human/H)
+ visible_message(span_danger("[src]'s motors grind as they are shoved by [H]!"))
+ vtec_disable(10 SECONDS)
+
+/mob/living/silicon/robot/proc/vtec_disable(time)
+ var/datum/status_effect/vtec_disabled/V = has_status_effect(/datum/status_effect/vtec_disabled)
+ if(V)
+ V.duration = max(V.duration, world.time + time)
+ else
+ apply_status_effect(/datum/status_effect/vtec_disabled, time)
+ update_movespeed()
+
/mob/living/silicon/robot/fire_act()
if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them
IgniteMob()
diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm
index fe22ec1236..bf3bdcf707 100644
--- a/code/modules/mob/living/silicon/robot/robot_defines.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defines.dm
@@ -61,7 +61,9 @@
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list())
- var/speed = 0 // VTEC speed boost.
+ var/vtec = 0 // VTEC speed boost.
+ /// vtec shorted out
+ var/vtec_disabled = FALSE
var/magpulse = FALSE // Magboot-like effect.
var/ionpulse = FALSE // Jetpack-like effect.
var/ionpulse_on = FALSE // Jetpack-like effect.
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index e3a640bca0..23500688ae 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -23,4 +23,4 @@
. = ..()
if(!resting && !(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE))
. += 1
- . += speed
+ . += vtec_disabled? 0 : vtec
diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm
index 3377bf9601..fbd4daa1d3 100644
--- a/code/modules/mob/living/silicon/silicon_defense.dm
+++ b/code/modules/mob/living/silicon/silicon_defense.dm
@@ -79,6 +79,8 @@
M.visible_message("[M] pets [src].", \
"You pet [src].", target = src,
target_message = "[M] pets you.")
+ if(INTENT_DISARM)
+ disarm_shove(M)
if(INTENT_GRAB)
grabbedby(M)
else
@@ -88,6 +90,9 @@
"[M] punches you, but doesn't leave a dent.", null, COMBAT_MESSAGE_RANGE, null, M,
"You punch [src], but don't leave a dent.")
+/mob/living/silicon/proc/disarm_shove(mob/living/carbon/human/H)
+ visible_message(span_danger("[H] shoves [src], but doesn't manage to make much of an effect."))
+
/mob/living/silicon/attack_drone(mob/living/simple_animal/drone/M)
if(M.a_intent == INTENT_HARM)
return
diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
index a5d36b5ba9..99048b4e9f 100644
--- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
@@ -33,7 +33,7 @@
/mob/living/simple_animal/bot/secbot/grievous/Initialize()
. = ..()
weapon = new baton_type(src)
- weapon.attack_self(src)
+ INVOKE_ASYNC(weapon, /obj/item.proc/attack_self, src)
/mob/living/simple_animal/bot/secbot/grievous/Destroy()
QDEL_NULL(weapon)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index e3486a40e2..fb3d009a72 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -381,6 +381,7 @@
..()
/mob/living/simple_animal/pet/dog/corgi/Ian/proc/Read_Memory()
+ set waitfor = FALSE
if(fexists("data/npc_saves/Ian.sav")) //legacy compatability to convert old format to new
var/savefile/S = new /savefile("data/npc_saves/Ian.sav")
S["age"] >> age
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index 77731f0ea4..950da865f6 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -35,14 +35,16 @@
coffer.Grant(src)
riot = new /datum/action/cooldown/riot
riot.Grant(src)
+ AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
+ INVOKE_ASYNC(src, .proc/poll_for_player)
+
+/mob/living/simple_animal/hostile/regalrat/proc/poll_for_player()
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the Royal Rat, cheesey be his crown?", ROLE_SENTIENCE, null, FALSE, 100, POLL_IGNORE_SENTIENCE_POTION)
if(LAZYLEN(candidates) && !mind)
var/mob/dead/observer/C = pick(candidates)
key = C.key
notify_ghosts("All rise for the rat king, ascendant to the throne in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE)
- AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
-
/mob/living/simple_animal/hostile/regalrat/handle_automated_action()
if(prob(20))
riot.Trigger()
diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm
index 1217084ce3..ecb5cd2290 100644
--- a/code/modules/mob/living/simple_animal/hostile/zombie.dm
+++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm
@@ -30,6 +30,7 @@
setup_visuals()
/mob/living/simple_animal/hostile/zombie/proc/setup_visuals()
+ set waitfor = FALSE
var/datum/preferences/dummy_prefs = new
dummy_prefs.pref_species = new /datum/species/zombie
dummy_prefs.be_random_body = TRUE
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 94bf45c1b0..88bb526188 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -144,33 +144,14 @@
message = "[user] [user.say_emphasis(message)]"
var/list/show_to = list()
- var/list/processing = list()
- var/safety = 25
+ var/list/processed = list()
for(var/obj/structure/table/T in range(user, 1))
- processing |= T
- for(var/i = 1; i <= processing.len; ++i)
- var/obj/structure/table/T = processing[i]
- if(safety-- <= 0)
- to_chat(user, "Table scan aborted early, some people might have not received the message (max 25)")
- break
- if(get_dist(T, user) > 7)
- continue // nah
- processing |= T
- for(var/mob/living/M in range(T, 1)) // no ghosts/cameramobs
- show_to |= M
- var/obj/structure/table/other
- other = locate() in get_step(T, NORTH)
- if(other)
- processing |= other
- other = locate() in get_step(T, SOUTH)
- if(other)
- processing |= other
- other = locate() in get_step(T, WEST)
- if(other)
- processing |= other
- other = locate() in get_step(T, EAST)
- if(other)
- processing |= other
+ if(processed[T])
+ continue
+ for(var/obj/structure/table/T2 in T.connected_floodfill(25))
+ processed[T2] = TRUE
+ for(var/mob/living/L in range(T2, 1))
+ show_to |= L
for(var/i in show_to)
var/mob/M = i
diff --git a/code/modules/movespeed/modifiers/reagents.dm b/code/modules/movespeed/modifiers/reagents.dm
index 1a03e8a602..ca0a74d749 100644
--- a/code/modules/movespeed/modifiers/reagents.dm
+++ b/code/modules/movespeed/modifiers/reagents.dm
@@ -2,17 +2,53 @@
blacklisted_movetypes = (FLYING|FLOATING)
/datum/movespeed_modifier/reagent/stimulants
- multiplicative_slowdown = -0.5
+ multiplicative_slowdown = -0.55
+
+/datum/movespeed_modifier/reagent/ephedrine
+ // strong painkiller effect that caps out at slightly above runspeed
+ multiplicative_slowdown = -1.5
+ priority = -100
+ complex_calculation = TRUE
+ absolute_max_tiles_per_second = 7
+
+/datum/movespeed_modifier/reagent/pepperspray
+ multiplicative_slowdown = 0.25
+
+/datum/movespeed_modifier/reagent/monkey_energy
+ multiplicative_slowdown = -0.35
/datum/movespeed_modifier/reagent/changelinghaste
- multiplicative_slowdown = -2
+ // extremely strong painkiller effect: allows user to run at old sprint speeds but not over by cancelling out slowdowns.
+ // however, will not make user go faster than that
+ multiplicative_slowdown = -4
+ priority = -100
+ complex_calculation = TRUE
+ absolute_max_tiles_per_second = 8
+
+/datum/movespeed_modifier/reagent/methamphetamine
+ // very strong painkiller effect that caps out at slightly above runspeed
+ multiplicative_slowdown = -2.5
+ priority = -100
+ complex_calculation = TRUE
+ absolute_max_tiles_per_second = 7.5
+
+/datum/movespeed_modifier/reagent/nitryl
+ multiplicative_slowdown = -0.65
+
+/datum/movespeed_modifier/reagent/freon
+ multiplicative_slowdown = 1.6
+
+/datum/movespeed_modifier/reagent/halon
+ multiplicative_slowdown = 1.8
+
+/datum/movespeed_modifier/reagent/lenturi
+ multiplicative_slowdown = 1.5
+
+/datum/movespeed_modifier/reagent/nuka_cola
+ multiplicative_slowdown = -0.35
+
+/datum/movespeed_modifier/reagent/nooartrium
+ multiplicative_slowdown = 2
/datum/movespeed_modifier/reagent/skooma
multiplicative_slowdown = -1
-
-/datum/movespeed_modifier/reagent/nitryl
- multiplicative_slowdown = -1
-
-/datum/movespeed_modifier/reagent/meth
- multiplicative_slowdown = -0.5
- absolute_max_tiles_per_second = 11
diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm
index 1adfe8b4be..260ee17c21 100644
--- a/code/modules/movespeed/modifiers/status_effects.dm
+++ b/code/modules/movespeed/modifiers/status_effects.dm
@@ -51,3 +51,11 @@
/datum/movespeed_modifier/status_effect/off_balance
variable = TRUE
+
+/datum/movespeed_modifier/status_effect/slime/light_pink
+ // decently good painkiller + speedup effect
+ blacklisted_movetypes = FLYING | FLOATING
+ priority = -150 // someday we really need to make these defines lmao
+ multiplicative_slowdown = -2
+ complex_calculation = TRUE
+ absolute_max_tiles_per_second = 7
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index ed711771bf..15071a186f 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -77,6 +77,11 @@ Contents:
cell.name = "black power cell"
cell.icon_state = "bscell"
+/obj/item/clothing/suit/space/space_ninja/Destroy()
+ if(affecting)
+ unlock_suit()
+ return ..()
+
//Simply deletes all the attachments and self, killing all related procs.
/obj/item/clothing/suit/space/space_ninja/proc/terminate()
qdel(n_hood)
@@ -84,7 +89,6 @@ Contents:
qdel(n_shoes)
qdel(src)
-
//Randomizes suit parameters.
/obj/item/clothing/suit/space/space_ninja/proc/randomize_param()
s_cost = rand(1,20)
@@ -93,7 +97,6 @@ Contents:
s_bombs = rand(5,20)
a_boost = rand(1,7)
-
//This proc prevents the suit from being taken off.
/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H)
if(!istype(H))
@@ -113,14 +116,14 @@ Contents:
return FALSE
affecting = H
ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |=
- slowdown = 0
n_hood = H.head
ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_shoes = H.shoes
ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
- n_shoes.slowdown -= 0.5
+ n_shoes.slowdown = -0.25
n_gloves = H.gloves
ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
+ ADD_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT)
return TRUE
/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H)
@@ -133,19 +136,19 @@ Contents:
/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit()
affecting = null
REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)
- slowdown = 1
icon_state = "s-ninja"
if(n_hood)//Should be attached, might not be attached.
REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
if(n_shoes)
REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
- n_shoes.slowdown += 0.5
+ n_shoes.slowdown = 0.25
if(n_gloves)
n_gloves.icon_state = "s-ninja"
n_gloves.item_state = "s-ninja"
REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_gloves.candrain=0
n_gloves.draining=0
+ REMOVE_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT)
/obj/item/clothing/suit/space/space_ninja/examine(mob/user)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index b1e1ff2208..16317bf9a3 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -241,7 +241,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
///How much the bullets damage should be multiplied by when it is added to the internal variables
var/bullet_energy = 2
///How much hallucination should we produce per unit of power?
- var/hallucination_power = 0.1
+ var/hallucination_power = 0.05 // 2 seconds per second at a distance of 7 with a typical nitrogen setup
///Our internal radio
var/obj/item/radio/radio
@@ -648,6 +648,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
for(var/mob/living/carbon/human/l in fov_viewers(src, HALLUCINATION_RANGE(power))) // If they can see it without mesons on. Bad on them.
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
var/D = sqrt(1 / max(1, get_dist(l, src)))
+ if(!l.hallucination)
+ to_chat(l, "Looking at the supermatter unprotected gives you a headache...")
l.hallucination += power * hallucination_power * D
l.hallucination = clamp(l.hallucination, 0, 200)
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
index dc2a1df03a..39b7cbf540 100644
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ b/code/modules/projectiles/guns/misc/syringe_gun.dm
@@ -114,7 +114,7 @@
can_unsuppress = FALSE
/obj/item/gun/syringe/dart/Initialize()
- ..()
+ . = ..()
chambered = new /obj/item/ammo_casing/syringegun/dart(src)
/obj/item/gun/syringe/dart/attackby(obj/item/A, mob/user, params, show_msg = TRUE)
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index 6f272dab40..acec1ef94f 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -31,6 +31,11 @@
else if(tase_duration && (C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE) && !HAS_TRAIT(C, TRAIT_TASED_RESISTANCE))
C.apply_status_effect(strong_tase? STATUS_EFFECT_TASED : STATUS_EFFECT_TASED_WEAK, tase_duration)
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
+ else if(iscyborg(target))
+ target.visible_message(span_danger("A shower of sparks emit from [target] on impact from [src]!"))
+ do_sparks(1, TRUE, target)
+ var/mob/living/silicon/robot/R = target
+ R.vtec_disable(10 SECONDS)
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
do_sparks(1, TRUE, src)
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index fd6204a8e3..afad323a27 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -280,71 +280,114 @@
R.handle_reactions()
return amount
-/datum/reagents/proc/metabolize(mob/living/carbon/C, can_overdose = FALSE, liverless = FALSE)
+/**
+ * Triggers metabolizing for all the reagents in this holder
+ *
+ * Arguments:
+ * * mob/living/carbon/carbon - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom]
+ * * delta_time - the time in server seconds between proc calls (when performing normally it will be 2)
+ * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired
+ * * can_overdose - Allows overdosing
+ * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing
+ */
+/datum/reagents/proc/metabolize(mob/living/carbon/owner, delta_time, times_fired, can_overdose = FALSE, liverless = FALSE)
var/list/cached_reagents = reagent_list
- var/list/cached_addictions = addiction_list
- if(C)
- expose_temperature(C.bodytemperature, 0.25)
- var/need_mob_update = 0
- for(var/reagent in cached_reagents)
- var/datum/reagent/R = reagent
- if(QDELETED(R.holder))
- continue
- if(liverless && !R.self_consuming) //need to be metabolized
- continue
- if(!C)
- C = R.holder.my_atom
- if(!R.metabolizing)
- R.metabolizing = TRUE
- R.on_mob_metabolize(C)
- if(C && R)
- if(C.reagent_check(R) != 1)
- if(can_overdose)
- if(R.overdose_threshold)
- if(R.volume > R.overdose_threshold && !R.overdosed)
- R.overdosed = 1
- var/turf/CT = get_turf(C)
- log_reagent("OVERDOSE START: [key_name(C)] at [AREACOORD(CT)] started overdosing on [R.volume] units of [R].")
- need_mob_update += R.overdose_start(C)
- if(R.addiction_threshold)
- if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
- var/datum/reagent/new_reagent = new R.type()
- cached_addictions.Add(new_reagent)
- if(R.overdosed)
- need_mob_update += R.overdose_process(C)
- if(is_type_in_list(R,cached_addictions))
- for(var/addiction in cached_addictions)
- var/datum/reagent/A = addiction
- if(istype(R, A))
- A.addiction_stage = -15 // you're satisfied for a good while.
- need_mob_update += R.on_mob_life(C)
-
+ if(owner)
+ expose_temperature(owner.bodytemperature, 0.25)
+ var/need_mob_update = FALSE
+ for(var/datum/reagent/reagent as anything in cached_reagents)
+ need_mob_update += metabolize_reagent(owner, reagent, delta_time, times_fired, can_overdose, liverless)
if(can_overdose)
if(addiction_tick == 6)
addiction_tick = 1
- for(var/addiction in cached_addictions)
+ for(var/addiction in addiction_list)
var/datum/reagent/R = addiction
- if(C && R)
+ if(owner && R)
R.addiction_stage++
if(1 <= R.addiction_stage && R.addiction_stage <= R.addiction_stage1_end)
- need_mob_update += R.addiction_act_stage1(C)
+ need_mob_update += R.addiction_act_stage1(owner)
else if(R.addiction_stage1_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage2_end)
- need_mob_update += R.addiction_act_stage2(C)
+ need_mob_update += R.addiction_act_stage2(owner)
else if(R.addiction_stage2_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage3_end)
- need_mob_update += R.addiction_act_stage3(C)
+ need_mob_update += R.addiction_act_stage3(owner)
else if(R.addiction_stage3_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage4_end)
- need_mob_update += R.addiction_act_stage4(C)
+ need_mob_update += R.addiction_act_stage4(owner)
else if(R.addiction_stage4_end < R.addiction_stage)
remove_addiction(R)
else
- SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
+ SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
addiction_tick++
- if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
- C.updatehealth()
- C.update_mobility()
- C.update_stamina()
+ if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
+ owner.updatehealth()
+ owner.update_mobility()
+ owner.update_stamina()
update_total()
+/*
+ * Metabolises a single reagent for a target owner carbon mob. See above.
+ *
+ * Arguments:
+ * * mob/living/carbon/owner - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom]
+ * * delta_time - the time in server seconds between proc calls (when performing normally it will be 2)
+ * * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired
+ * * can_overdose - Allows overdosing
+ * * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing
+ */
+/datum/reagents/proc/metabolize_reagent(mob/living/carbon/owner, datum/reagent/reagent, delta_time, times_fired, can_overdose = FALSE, liverless = FALSE)
+ var/need_mob_update = FALSE
+ if(QDELETED(reagent.holder))
+ return FALSE
+
+ if(!owner)
+ owner = reagent.holder.my_atom
+
+ if(owner && reagent)
+ if(!owner.reagent_check(reagent, delta_time, times_fired) != TRUE)
+ return
+ if(liverless && !reagent.self_consuming) //need to be metabolized
+ return
+ if(!reagent.metabolizing)
+ reagent.metabolizing = TRUE
+ reagent.on_mob_metabolize(owner)
+ if(can_overdose)
+ if(reagent.overdose_threshold)
+ if(reagent.volume >= reagent.overdose_threshold && !reagent.overdosed)
+ reagent.overdosed = TRUE
+ need_mob_update += reagent.overdose_start(owner)
+ log_game("[key_name(owner)] has started overdosing on [reagent.name] at [reagent.volume] units.")
+
+ // for(var/addiction in reagent.addiction_types)
+ // owner.mind?.add_addiction_points(addiction, reagent.addiction_types[addiction] * REAGENTS_METABOLISM)
+ if(reagent.addiction_threshold)
+ if(reagent.volume > reagent.addiction_threshold && !is_type_in_list(reagent, addiction_list))
+ var/datum/reagent/new_reagent = new reagent.type()
+ addiction_list.Add(new_reagent)
+ if(is_type_in_list(reagent, addiction_list))
+ for(var/addiction in addiction_list)
+ var/datum/reagent/A = addiction
+ if(istype(reagent, A))
+ A.addiction_stage = -15 // you're satisfied for a good while.
+
+ if(reagent.overdosed)
+ need_mob_update += reagent.overdose_process(owner, delta_time, times_fired)
+
+ need_mob_update += reagent.on_mob_life(owner, delta_time, times_fired)
+ return need_mob_update
+
+/// Signals that metabolization has stopped, triggering the end of trait-based effects
+/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE)
+ var/list/cached_reagents = reagent_list
+ for(var/datum/reagent/reagent as anything in cached_reagents)
+ if(QDELETED(reagent.holder))
+ continue
+ if(keep_liverless && reagent.self_consuming) //Will keep working without a liver
+ continue
+ if(!C)
+ C = reagent.holder.my_atom
+ if(reagent.metabolizing)
+ reagent.metabolizing = FALSE
+ reagent.on_mob_end_metabolize(C)
+
/datum/reagents/proc/remove_addiction(datum/reagent/R)
to_chat(my_atom, "You feel like you've gotten over your need for [R.name].")
SEND_SIGNAL(my_atom, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
@@ -354,21 +397,6 @@
addiction_list.Remove(R)
qdel(R)
-//Signals that metabolization has stopped, triggering the end of trait-based effects
-/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE)
- var/list/cached_reagents = reagent_list
- for(var/reagent in cached_reagents)
- var/datum/reagent/R = reagent
- if(QDELETED(R.holder))
- continue
- if(keep_liverless && R.self_consuming) //Will keep working without a liver
- continue
- if(!C)
- C = R.holder.my_atom
- if(R.metabolizing)
- R.metabolizing = FALSE
- R.on_mob_end_metabolize(C)
-
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
var/list/cached_reagents = reagent_list
for(var/reagent in cached_reagents)
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index f4f5b90398..5059376954 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -505,11 +505,11 @@
value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/carbon/M)
- M.add_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
+ M.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nuka_cola)
return ..()
/datum/reagent/consumable/nuka_cola/on_mob_end_metabolize(mob/living/carbon/M)
- M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
+ M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nuka_cola)
return ..()
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 96985514b5..ed80804f28 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -164,62 +164,54 @@
/datum/reagent/drug/methamphetamine
name = "Methamphetamine"
- description = "Reduces stun times by about 300%, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
+ description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
reagent_state = LIQUID
color = "#FAFAFA"
overdose_threshold = 20
- addiction_threshold = 10
metabolization_rate = 0.75 * REAGENTS_METABOLISM
- var/brain_damage = TRUE
- var/jitter = TRUE
- var/confusion = TRUE
pH = 5
+ addiction_threshold = 10
value = REAGENT_VALUE_UNCOMMON
/datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L)
..()
- ADD_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
- L.update_movespeed()
- ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
- L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/methamphetamine)
/datum/reagent/drug/methamphetamine/on_mob_end_metabolize(mob/living/L)
- REMOVE_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
- L.update_movespeed()
- REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
- L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/methamphetamine)
..()
-/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M)
+/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
- if(prob(5))
- to_chat(M, "[high_message]")
- M.AdjustAllImmobility(-40, 0)
- M.AdjustUnconscious(-40, 0)
- M.adjustStaminaLoss(-7.5 * REM, 0)
- if(jitter)
- M.Jitter(2)
- if(brain_damage)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4))
- M.heal_overall_damage(2, 2)
- if(prob(5))
+ if(DT_PROB(2.5, delta_time))
+ to_chat(M, span_notice("[high_message]"))
+ // SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "tweaking", /datum/mood_event/stimulant_medium, name)
+ M.AdjustStun(-40 * REM * delta_time)
+ M.AdjustKnockdown(-40 * REM * delta_time)
+ M.AdjustUnconscious(-40 * REM * delta_time)
+ M.AdjustParalyzed(-40 * REM * delta_time)
+ M.AdjustImmobilized(-40 * REM * delta_time)
+ M.adjustStaminaLoss(-2 * REM * delta_time, 0)
+ M.Jitter(2 * REM * delta_time)
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * delta_time)
+ if(DT_PROB(2.5, delta_time))
M.emote(pick("twitch", "shiver"))
..()
- . = 1
+ . = TRUE
-/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M)
+/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M, delta_time, times_fired)
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
- for(var/i in 1 to 4)
+ for(var/i in 1 to round(4 * REM * delta_time, 1))
step(M, pick(GLOB.cardinals))
- if(prob(20))
+ if(DT_PROB(10, delta_time))
M.emote("laugh")
- if(prob(33))
- M.visible_message("[M]'s hands flip out and flail everywhere!")
+ if(DT_PROB(18, delta_time))
+ M.visible_message(span_danger("[M]'s hands flip out and flail everywhere!"))
M.drop_all_held_items()
..()
- M.adjustToxLoss(1, 0)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
- . = 1
+ M.adjustToxLoss(1 * REM * delta_time, 0)
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, (rand(5, 10) / 10) * REM * delta_time)
+ . = TRUE
/datum/reagent/drug/methamphetamine/addiction_act_stage1(mob/living/M)
M.Jitter(5)
@@ -256,14 +248,6 @@
..()
. = 1
-/datum/reagent/drug/methamphetamine/changeling
- name = "Changeling Adrenaline"
- addiction_threshold = 35
- overdose_threshold = 35
- jitter = FALSE
- brain_damage = FALSE
- value = REAGENT_VALUE_RARE
-
/datum/reagent/drug/bath_salts
name = "Bath Salts"
description = "Makes you impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic."
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 90082c464b..a9bdff64b2 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -345,6 +345,8 @@
victim.confused = max(M.confused, 3)
victim.damageoverlaytemp = 60
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 3, 15))
+ victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray)
+ addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS)
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim.blur_eyes(3)
@@ -358,6 +360,8 @@
victim.confused = max(M.confused, 6)
victim.damageoverlaytemp = 75
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 5, 25))
+ victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray)
+ addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS)
victim.update_damage_hud()
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 65443b65c7..fe843fff36 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -706,21 +706,42 @@
addiction_threshold = 30
pH = 12
-/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M)
- M.AdjustAllImmobility(-20, FALSE)
- M.AdjustUnconscious(-20, FALSE)
- M.adjustStaminaLoss(-4.5*REM, FALSE)
- M.Jitter(10)
- if(prob(50))
- M.confused = max(M.confused, 1)
+/datum/reagent/medicine/ephedrine/on_mob_metabolize(mob/living/L)
+ ..()
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine)
+ ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
+
+/datum/reagent/medicine/ephedrine/on_mob_end_metabolize(mob/living/L)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine)
+ REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
+ ..()
+
+/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
+ // if(DT_PROB(10 * (1-creation_purity), delta_time) && iscarbon(M))
+ // var/obj/item/I = M.get_active_held_item()
+ // if(I && M.dropItemToGround(I))
+ // to_chat(M, span_notice("Your hands spaz out and you drop what you were holding!"))
+ // M.Jitter(10)
+
+ M.AdjustAllImmobility(-20 * REM * delta_time)
+ M.adjustStaminaLoss(-1 * REM * delta_time, FALSE)
..()
return TRUE
-/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M)
- if(prob(33))
- M.adjustToxLoss(0.5*REM, 0)
+/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M, delta_time, times_fired)
+ if(DT_PROB(1, delta_time) && iscarbon(M))
+ var/datum/disease/D = new /datum/disease/heart_failure
+ M.ForceContractDisease(D)
+ to_chat(M, span_userdanger("You're pretty sure you just felt your heart stop for a second there.."))
+ M.playsound_local(M, 'sound/effects/singlebeat.ogg', 100, 0)
+
+ if(DT_PROB(3.5, delta_time))
+ to_chat(M, span_notice("[pick("Your head pounds.", "You feel a tight pain in your chest.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]"))
+
+ if(DT_PROB(18, delta_time))
+ M.adjustToxLoss(1, 0)
M.losebreath++
- . = 1
+ . = TRUE
return TRUE
/datum/reagent/medicine/ephedrine/addiction_act_stage1(mob/living/M)
@@ -981,7 +1002,7 @@
M.grab_ghost()
M.emote("gasp")
log_combat(M, M, "revived", src)
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
@@ -1415,37 +1436,42 @@
/datum/reagent/medicine/changelingadrenaline
name = "Changeling Adrenaline"
description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed."
- color = "#918e53"
+ color = "#C1151D"
overdose_threshold = 30
value = REAGENT_VALUE_VERY_RARE
-/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
- ..()
- ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
-
-/datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/L)
- REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
- ..()
-
-/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob)
- M.AdjustUnconscious(-20, 0)
- M.AdjustAllImmobility(-20, 0)
- M.AdjustSleeping(-20, 0)
- M.adjustStaminaLoss(-30, 0)
+/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired)
..()
+ metabolizer.AdjustAllImmobility(-20 * REM * delta_time)
+ metabolizer.adjustStaminaLoss(-10 * REM * delta_time, 0)
+ metabolizer.Jitter(10 * REM * delta_time)
+ metabolizer.Dizzy(10 * REM * delta_time)
return TRUE
-/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/M as mob)
- M.adjustToxLoss(5, 0) //let's make this mildly more toxic because of the stamina buff
+/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
+ ..()
+ ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
+ ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
+ L.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
+
+/datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/L)
+ ..()
+ REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
+ REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
+ L.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
+ L.Dizzy(0)
+ L.Jitter(0)
+
+/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/metabolizer, delta_time, times_fired)
+ metabolizer.adjustToxLoss(1 * REM * delta_time, 0)
..()
return TRUE
/datum/reagent/medicine/changelinghaste
name = "Changeling Haste"
description = "Drastically increases movement speed, but deals toxin damage."
- color = "#669153"
- metabolization_rate = 1
- value = REAGENT_VALUE_VERY_RARE
+ color = "#AE151D"
+ metabolization_rate = 2.5 * REAGENTS_METABOLISM
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
..()
@@ -1455,11 +1481,12 @@
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
..()
-/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
- M.adjustToxLoss(2, 0)
+/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired)
+ metabolizer.adjustToxLoss(2 * REM * delta_time, 0)
..()
return TRUE
+
/datum/reagent/medicine/corazone
// Heart attack code will not do damage if corazone is present
// because it's SPACE MAGIC ASPIRIN
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 319b4a2199..98b04a8382 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -42,6 +42,7 @@
return ..()
/obj/machinery/rnd/production/proc/update_research()
+ set waitfor = FALSE
host_research.copy_research_to(stored_research, TRUE)
update_designs()
diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm
index 41d3a08d64..fa17d62e50 100644
--- a/code/modules/research/techweb/nodes/bepis_nodes.dm
+++ b/code/modules/research/techweb/nodes/bepis_nodes.dm
@@ -55,7 +55,7 @@
display_name = "Nanite Replication Protocols"
description = "Advanced behaviours that allow nanites to exploit certain circumstances to replicate faster."
prereq_ids = list("nanite_smart")
- design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites","offline_nanites","synergy_nanites")
+ design_ids = list("kickstart_nanites","factory_nanites","offline_nanites","synergy_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
hidden = TRUE
experimental = TRUE
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 62e68e5b0e..8254e20761 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -704,16 +704,20 @@
/datum/status_effect/stabilized/sepia
id = "stabilizedsepia"
colour = "sepia"
- var/mod = 0
+ var/list/possible = list(
+ -0.5,
+ -0.25,
+ 0,
+ 0.5,
+ 1
+ )
+
+/datum/status_effect/stabilized/sepia/New(list/arguments)
+ . = ..()
+ possible = typelist(NAMEOF(src, possible), possible)
/datum/status_effect/stabilized/sepia/tick()
- if(prob(50) && mod > -1)
- mod--
- owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1)
- else if(mod < 1)
- mod++
- // yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
- owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
+ owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = safepick(possible))
return ..()
/datum/status_effect/stabilized/sepia/on_remove()
@@ -934,6 +938,7 @@
/datum/status_effect/stabilized/lightpink/on_apply()
ADD_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime")
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink)
return ..()
/datum/status_effect/stabilized/lightpink/tick()
@@ -945,6 +950,7 @@
/datum/status_effect/stabilized/lightpink/on_remove()
REMOVE_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime")
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink)
return ..()
/datum/status_effect/stabilized/adamantine
diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm
index 0b864958a0..a8d7deb803 100644
--- a/code/modules/surgery/advanced/revival.dm
+++ b/code/modules/surgery/advanced/revival.dm
@@ -69,7 +69,7 @@
for(var/obj/item/organ/O in target.internal_organs)//zap those buggers back to life!
if(O.organ_flags & ORGAN_FAILING)
O.applyOrganDamage(-5)
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index e24268cc45..e929641367 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -188,7 +188,7 @@
needs_processing = .
//Return TRUE to get whatever mob this is in to update health.
-/obj/item/bodypart/proc/on_life()
+/obj/item/bodypart/proc/on_life(seconds, times_fired)
if(stam_heal_tick && stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
if(heal_damage(brute = 0, burn = 0, stamina = (stam_heal_tick * (disabled ? 2 : 1)), only_robotic = FALSE, only_organic = FALSE, updating_health = FALSE))
. |= BODYPART_LIFE_UPDATE_HEALTH
diff --git a/code/modules/surgery/emergency_reboot.dm b/code/modules/surgery/emergency_reboot.dm
index 046edd884c..5023480b51 100644
--- a/code/modules/surgery/emergency_reboot.dm
+++ b/code/modules/surgery/emergency_reboot.dm
@@ -42,7 +42,7 @@
if(target.revive())
target.visible_message("...[target]'s posibrain flickers to life once again!")
target.emote("ping")
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm
index 2037547d36..5c6b66f702 100755
--- a/code/modules/surgery/organs/liver.dm
+++ b/code/modules/surgery/organs/liver.dm
@@ -25,7 +25,7 @@
var/cachedmoveCalc = 1
food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5)
-/obj/item/organ/liver/on_life()
+/obj/item/organ/liver/on_life(seconds, times_fired)
. = ..()
if(!. || !owner)//can't process reagents with a failing liver
return
@@ -40,7 +40,7 @@
damage += (thisamount*toxLethality)
//metabolize reagents
- owner.reagents.metabolize(owner, can_overdose=TRUE)
+ owner.reagents.metabolize(owner, seconds, times_fired, can_overdose=TRUE)
if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
to_chat(owner, "You feel a dull pain in your abdomen.")
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 6cdeadcbb3..f0f2a7ef19 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -92,18 +92,18 @@
on_death() //Kinda hate doing it like this, but I really don't want to call process directly.
//Sources; life.dm process_organs
-/obj/item/organ/proc/on_death() //Runs when outside AND inside.
+/obj/item/organ/proc/on_death(seconds, times_fired) //Runs when outside AND inside.
decay()
//Applys the slow damage over time decay
-/obj/item/organ/proc/decay()
+/obj/item/organ/proc/decay(seconds, times_fired)
if(!can_decay())
STOP_PROCESSING(SSobj, src)
return
is_cold()
if(organ_flags & ORGAN_FROZEN)
return
- applyOrganDamage(maxHealth * decay_factor)
+ applyOrganDamage(maxHealth * decay_factor * (seconds * 0.5))
/obj/item/organ/proc/can_decay()
if(CHECK_BITFIELD(organ_flags, ORGAN_NO_SPOIL | ORGAN_SYNTHETIC | ORGAN_FAILING))
@@ -151,7 +151,7 @@
organ_flags &= ~ORGAN_FROZEN
return FALSE
-/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing or synthetic
+/obj/item/organ/proc/on_life(seconds, times_fired) //repair organ damage if the organ is not failing or synthetic
if(organ_flags & ORGAN_FAILING || !owner)
return FALSE
if(organ_flags & ORGAN_SYNTHETIC_EMP) //Synthetic organ has been emped, is now failing.
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 12e282200c..e41980cdd3 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -1,8 +1,15 @@
-#define COOLDOWN_STUN 1200
-#define COOLDOWN_KNOCKDOWN 600
-#define COOLDOWN_DAMAGE 600
-#define COOLDOWN_MEME 300
-#define COOLDOWN_NONE 100
+#define COOLDOWN_STUN 300
+#define COOLDOWN_KNOCKDOWN 300
+#define COOLDOWN_DAMAGE 300
+#define COOLDOWN_MEME 150
+#define COOLDOWN_NONE 50
+
+/// anything above this requires adminbus, to prevent a cultist from stacking chaplain + cult + specific listener = 8x, which is enough to instantly kill someone with damage.
+#define VOG_MAX_STANDARD_POWER 3
+/// max damage we can do in one "blast" to a listener
+#define VOG_MAX_BURST_DAMAGE 40
+/// max healing we can do in one "blast" to a listener
+#define VOG_MAX_BURST_HEAL 40
/obj/item/organ/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel
name = "vocal cords"
@@ -130,13 +137,11 @@
return 0 //no cooldown
var/log_message = uppertext(message)
- if(!span_list || !span_list.len)
- if(iscultist(user))
- span_list = list("narsiesmall")
- else if (is_servant_of_ratvar(user))
- span_list = list("ratvar")
- else
- span_list = list()
+ if(iscultist(user))
+ span_list = list("narsiesmall")
+ else if (is_servant_of_ratvar(user))
+ span_list = list("ratvar")
+ LAZYINITLIST(span_list)
user.say(message, spans = span_list, sanitize = FALSE)
@@ -156,39 +161,24 @@
cooldown = COOLDOWN_NONE
return cooldown
- var/power_multiplier = base_multiplier
-
- if(user.mind)
- //Chaplains are very good at speaking with the voice of god
- if(user.mind.assigned_role == "Chaplain")
- power_multiplier *= 2
- //Command staff has authority
- if(user.mind.assigned_role in GLOB.command_positions)
- power_multiplier *= 1.4
- //Why are you speaking
- if(user.mind.assigned_role == "Mime")
- power_multiplier *= 0.5
-
- //Cultists are closer to their gods and are more powerful, but they'll give themselves away
- if(iscultist(user))
- power_multiplier *= 2
- else if (is_servant_of_ratvar(user))
- power_multiplier *= 2
-
//Try to check if the speaker specified a name or a job to focus on
var/list/specific_listeners = list()
var/found_string = null
+ var/devil_target = FALSE
//Get the proper job titles
message = get_full_job_name(message)
+ // limitation: this only checks at the start of the message.
+ // if we wanted to check anywhere we'd have to make the user use delimiters to specify who they're talking to,
+ // as otherwise it'd be far too computationally and logically expensive to find out who we want.
for(var/V in listeners)
var/mob/living/L = V
var/datum/antagonist/devil/devilinfo = is_devil(L)
if(devilinfo && findtext(message, devilinfo.truename))
var/start = findtext(message, devilinfo.truename)
listeners = list(L) //Devil names are unique.
- power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up
+ devil_target = TRUE //if you're a devil and god himself addressed you, you fucked up
//Cut out the name so it doesn't trigger commands
message = copytext(message, 1, start) + copytext(message, start + length(devilinfo.truename))
break
@@ -207,10 +197,14 @@
//Cut out the job so it doesn't trigger commands
found_string = L.mind.assigned_role
+ var/power_multiplier = get_vog_multiplier(user, base_multiplier, specific_listeners)
+ var/adminbus = power_multiplier > VOG_MAX_STANDARD_POWER // an admin is being a dunce, bypass hard scaling limits on this message
+ if(devil_target)
+ power_multiplier = max(power_multiplier, 5)
+
if(specific_listeners.len)
- listeners = specific_listeners
- power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on
message = copytext(message, length(found_string) + 1)
+ listeners = specific_listeners.Copy()
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown")
@@ -264,7 +258,7 @@
cooldown = COOLDOWN_STUN
for(var/V in listeners)
var/mob/living/L = V
- L.Stagger(60 * power_multiplier)
+ L.Stagger(40 * power_multiplier)
//KNOCKDOWN
else if(findtext(message, knockdown_words))
@@ -272,6 +266,7 @@
for(var/V in listeners)
var/mob/living/L = V
L.DefaultCombatKnockdown()
+ L.Stagger(10 * power_multiplier)
//VOMIT
else if((findtext(message, vomit_words)))
@@ -285,13 +280,13 @@
for(var/mob/living/carbon/C in listeners)
if(user.mind && (user.mind.assigned_role == "Curator" || user.mind.assigned_role == "Mime"))
power_multiplier *= 3
- C.silent += (10 * power_multiplier)
+ C.silent += (5 * power_multiplier)
//HALLUCINATE
else if((findtext(message, hallucinate_words)))
cooldown = COOLDOWN_MEME
for(var/mob/living/carbon/C in listeners)
- new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
+ new /datum/hallucination/delusion(C, TRUE, null, 150 * power_multiplier, 0)
//WAKE UP
else if((findtext(message, wakeup_words)))
@@ -305,14 +300,14 @@
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.heal_overall_damage(10 * power_multiplier, 10 * power_multiplier, 0, FALSE, FALSE)
+ L.heal_overall_damage(min(17.5 * power_multiplier, adminbus? INFINITY : VOG_MAX_BURST_HEAL), min(17.5 * power_multiplier, VOG_MAX_BURST_HEAL), 0, FALSE, FALSE)
//BRUTE DAMAGE
else if((findtext(message, hurt_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.apply_damage(15 * power_multiplier, def_zone = BODY_ZONE_CHEST, wound_bonus=CANT_WOUND)
+ L.apply_damage(min(20 * power_multiplier, adminbus? INFINITY : VOG_MAX_BURST_DAMAGE), def_zone = BODY_ZONE_CHEST, wound_bonus = CANT_WOUND)
//BLEED
else if((findtext(message, bleed_words)))
@@ -334,14 +329,14 @@
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.adjust_bodytemperature(50 * power_multiplier)
+ L.adjust_bodytemperature(75 * power_multiplier)
//COLD
else if((findtext(message, cold_words)))
cooldown = COOLDOWN_DAMAGE
for(var/V in listeners)
var/mob/living/L = V
- L.adjust_bodytemperature(-50 * power_multiplier)
+ L.adjust_bodytemperature(-75 * power_multiplier)
//REPULSE
else if((findtext(message, repulse_words)))
@@ -596,6 +591,34 @@
return cooldown
+/proc/get_vog_multiplier(mob/living/carbon/user, base_multiplier = 1, list/specific_listeners = list())
+ if(base_multiplier >= VOG_MAX_STANDARD_POWER)
+ return base_multiplier // an admin bussed you and they probably didn't realize you were a chaplain/cultist.
+
+ var/special_check = get_vog_special(user)
+ if(!special_check)
+ return 0
+
+ . = min(base_multiplier * special_check, VOG_MAX_STANDARD_POWER) // anything above should require conscious admin fuckery, as things are balanced around 3 multiplier tops (see: damage being 15*3)
+ if(!specific_listeners.len)
+ return
+ . = min(. * (1 + (1 / specific_listeners.len)), VOG_MAX_STANDARD_POWER)
+
+/// get special role multiplier for voice of god. No double dipping.
+/proc/get_vog_special(mob/living/carbon/user)
+ if(iscultist(user) || is_servant_of_ratvar(user))
+ return 2 // servant of god
+ if(user.mind)
+ // servant of god
+ if(user.mind.assigned_role == "Chaplain")
+ return 2
+ // shut up you broke your vow
+ if(user.mind.assigned_role == "Mime")
+ return 0.5
+ if(user.mind.assigned_role in GLOB.command_positions)
+ return 1.4 // heads are great at speaking with authority
+ return 1
+
//////////////////////////////////////
///////ENTHRAL VELVET CHORDS//////////
//////////////////////////////////////
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 2745d971ff..7cc72ed1c1 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -44,7 +44,7 @@
// #include "heretic_knowledge.dm"
// #include "holidays.dm"
#include "initialize_sanity.dm"
-#include "keybinding_init.dm"
+// #include "keybinding_init.dm"
#include "machine_disassembly.dm"
#include "medical_wounds.dm"
#include "merge_type.dm"
diff --git a/code/modules/unit_tests/keybinding_init.dm b/code/modules/unit_tests/keybinding_init.dm
index 2bd2fdee1e..16141bc553 100644
--- a/code/modules/unit_tests/keybinding_init.dm
+++ b/code/modules/unit_tests/keybinding_init.dm
@@ -3,4 +3,4 @@
var/datum/keybinding/KB = i
if(initial(KB.keybind_signal) || !initial(KB.name))
continue
- Fail("[KB.name] does not have a keybind signal defined.")
+ Fail("[initial(KB.name)] does not have a keybind signal defined.")
diff --git a/code/modules/unit_tests/merge_type.dm b/code/modules/unit_tests/merge_type.dm
index ba3cfcf492..1aed82e6a3 100644
--- a/code/modules/unit_tests/merge_type.dm
+++ b/code/modules/unit_tests/merge_type.dm
@@ -10,6 +10,6 @@
var/list/paths = subtypesof(/obj/item/stack) - blacklist
for(var/stackpath in paths)
- var/obj/item/stack/stack = stackpath
- if(!initial(stack.merge_type))
+ var/obj/item/stack/stack = new stackpath
+ if(!stack.merge_type)
Fail("([stack]) lacks set merge_type variable!")
diff --git a/code/modules/unit_tests/metabolizing.dm b/code/modules/unit_tests/metabolizing.dm
index b7f8fc4f6a..6c0a635b13 100644
--- a/code/modules/unit_tests/metabolizing.dm
+++ b/code/modules/unit_tests/metabolizing.dm
@@ -11,7 +11,7 @@
/datum/unit_test/metabolization/proc/test_reagent(mob/living/carbon/C, reagent_type)
C.reagents.add_reagent(reagent_type, 10)
- C.reagents.metabolize(C, can_overdose = TRUE)
+ C.reagents.metabolize(C, SSMOBS_DT, 1, can_overdose = TRUE)
C.reagents.clear_reagents()
/datum/unit_test/metabolization/Destroy()
diff --git a/code/modules/unit_tests/surgeries.dm b/code/modules/unit_tests/surgeries.dm
index 6348057f79..c8ac1d9424 100644
--- a/code/modules/unit_tests/surgeries.dm
+++ b/code/modules/unit_tests/surgeries.dm
@@ -53,7 +53,8 @@
TEST_ASSERT(!isnull(alice.get_bodypart(BODY_ZONE_HEAD)), "Alice has no head after prosthetic replacement")
TEST_ASSERT_EQUAL(alice.get_visible_name(), "Bob", "Bob's head was transplanted onto Alice's body, but their name is not Bob")
-
+/*
+i couldn't actually find anything in the parts of the code it's calling preventing two surgeries, so it's probably somewhere else
/datum/unit_test/multiple_surgeries/Run()
var/mob/living/carbon/human/user = allocate(/mob/living/carbon/human)
var/mob/living/carbon/human/patient_zero = allocate(/mob/living/carbon/human)
@@ -65,10 +66,12 @@
var/datum/surgery/organ_manipulation/surgery_for_zero = new
INVOKE_ASYNC(surgery_step, /datum/surgery_step/proc/initiate, user, patient_zero, BODY_ZONE_CHEST, scalpel, surgery_for_zero)
+ sleep(1)
TEST_ASSERT(surgery_for_zero.step_in_progress, "Surgery on patient zero was not initiated")
var/datum/surgery/organ_manipulation/surgery_for_one = new
+
// Without waiting for the incision to complete, try to start a new surgery
TEST_ASSERT(!surgery_step.initiate(user, patient_one, BODY_ZONE_CHEST, scalpel, surgery_for_one), "Was allowed to start a second surgery without the rod of asclepius")
TEST_ASSERT(!surgery_for_one.step_in_progress, "Surgery for patient one is somehow in progress, despite not initiating")
@@ -76,6 +79,7 @@
user.apply_status_effect(STATUS_EFFECT_HIPPOCRATIC_OATH)
INVOKE_ASYNC(surgery_step, /datum/surgery_step/proc/initiate, user, patient_one, BODY_ZONE_CHEST, scalpel, surgery_for_one)
TEST_ASSERT(surgery_for_one.step_in_progress, "Surgery on patient one was not initiated, despite having rod of asclepius")
+*/
/datum/unit_test/tend_wounds/Run()
var/mob/living/carbon/human/patient = allocate(/mob/living/carbon/human)
diff --git a/code/modules/unit_tests/teleporters.dm b/code/modules/unit_tests/teleporters.dm
index fa2624adaa..0fc9bdb082 100644
--- a/code/modules/unit_tests/teleporters.dm
+++ b/code/modules/unit_tests/teleporters.dm
@@ -1,8 +1,8 @@
/datum/unit_test/auto_teleporter_linking/Run()
// Put down the teleporter machinery
var/obj/machinery/teleport/hub/hub = allocate(/obj/machinery/teleport/hub)
- var/obj/machinery/teleport/station/station = allocate(/obj/machinery/teleport/station, locate(run_loc_bottom_left.x + 1, run_loc_bottom_left.y, run_loc_bottom_left.z))
var/obj/machinery/computer/teleporter/computer = allocate(/obj/machinery/computer/teleporter, locate(run_loc_bottom_left.x + 2, run_loc_bottom_left.y, run_loc_bottom_left.z))
+ var/obj/machinery/teleport/station/station = allocate(/obj/machinery/teleport/station, locate(run_loc_bottom_left.x + 1, run_loc_bottom_left.y, run_loc_bottom_left.z))
TEST_ASSERT_EQUAL(hub.power_station, station, "Hub didn't link to the station")
TEST_ASSERT_EQUAL(station.teleporter_console, computer, "Station didn't link to the teleporter console")
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index d125453e5a..d5ddfe63cc 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -9,7 +9,7 @@
/obj/vehicle/ridden/atv/Initialize()
. = ..()
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 1
+ D.vehicle_move_delay = CONFIG_GET(number/movedelay/run_delay)
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index a061561383..6adc9d38e6 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -21,7 +21,7 @@
/obj/item/clothing/suit/jacket/puffer/vest = 4,
/obj/item/clothing/suit/jacket/puffer = 4,
/obj/item/clothing/suit/hooded/cloak/david = 4,
- /obj/item/clothing/neck/cancloak/polychromic = 4,
+ /obj/item/clothing/neck/cloak/cancloak/polychromic = 4,
/obj/item/clothing/suit/bomber = 5,
/obj/item/clothing/under/suit/turtle/teal = 3,
/obj/item/clothing/under/suit/turtle/grey = 3,
diff --git a/code/modules/vore/eating/vorepanel.dm b/code/modules/vore/eating/vorepanel.dm
index a3adc89352..8e8cfc4935 100644
--- a/code/modules/vore/eating/vorepanel.dm
+++ b/code/modules/vore/eating/vorepanel.dm
@@ -466,8 +466,6 @@
if(!(target in host.vore_selected))
return TRUE // Not in our X anymore, update UI
var/list/available_options = list("Examine", "Eject", "Move")
- if(ishuman(target))
- available_options += "Transform"
intent = tgui_alert(user, "What would you like to do with [target]?", "Vore Pick", available_options)
switch(intent)
if("Examine")
@@ -498,17 +496,6 @@
host.vore_selected.transfer_contents(target, choice)
return TRUE
- if("Transform")
- if(host.stat)
- to_chat(user,"You can't do that in your state!")
- return TRUE
-
- var/mob/living/carbon/human/H = target
- if(!istype(H))
- return
-
- return TRUE
-
/datum/vore_look/proc/set_attr(mob/user, params)
if(!host.vore_selected)
tgui_alert_async(usr, "No belly selected to modify.")
diff --git a/config/antag_rep.txt b/config/antag_rep.txt
deleted file mode 100644
index e8a7250686..0000000000
--- a/config/antag_rep.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-## Custom antag reputation values
-## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
-## e.g.
-## ANTAG_REP Captain 10
-## ANTAG_REP Assistant 0
diff --git a/config/config.txt b/config/config.txt
index 611d63cb24..c0c683373d 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -1,18 +1,7 @@
# You can use the "$include" directive to split your configs however you want
-$include game_options.txt
-$include dbconfig.txt
-$include comms.txt
-$include antag_rep.txt
-$include resources.txt
-# Cit-specific imports
-$include donator_groupings.txt
-$include dynamic_config.txt
-$include plushies/defines.txt
-$include job_threats.txt
-$include policy.txt
-$include persistence.txt
-$include respawns.txt
+# MAKE SURE ENTRIES ARE SORTED IN THE SAME FASHION THEY ARE IN THE .dm
+# if you don't do this i will find you and put lemons on your eyes.
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
# Example usage:
@@ -22,523 +11,31 @@ $include respawns.txt
# Which explicitly disables LOG_TWITTER, as well as locking it.
# There are various options which are hard-locked for security reasons.
-## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice.
-# SERVERNAME tgstation
-## Server tagline: This will appear right below the server's title.
-# SERVERTAGLINE A generic TG-based server
-
-## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters.
-# SERVERSQLNAME tgstation
-
-## Station name: The name of the station as it is referred to in-game. If commented out, the game will generate a random name instead.
-STATIONNAME Space Station 13
-
-## Put on byond hub: Uncomment this to put your server on the byond hub.
-#HUB
-
-## Lobby time: This is the amount of time between rounds that players have to setup their characters and be ready.
-LOBBY_COUNTDOWN 120
-
-## Round End Time: This is the amount of time after the round ends that players have to murder death kill each other.
-ROUND_END_COUNTDOWN 90
-
-## Comment this out if you want to use the SQL based admin system, the legacy system uses admins.txt.
-## You need to set up your database to use the SQL based system.
-## This flag is automatically enabled if SQL_ENABLED isn't
-ADMIN_LEGACY_SYSTEM
-
-##Uncomment this to stop any admins loaded by the legacy system from having their rank edited by the permissions panel
-#PROTECT_LEGACY_ADMINS
-
-##Uncomment this to stop any ranks loaded by the legacy system from having their flags edited by the permissions panel
-#PROTECT_LEGACY_RANKS
-
-##Uncomment this to have admin ranks only loaded from the legacy admin_ranks.txt
-##If enabled, each time admins are loaded ranks the database will be updated with the current ranks and their flags
-#LOAD_LEGACY_RANKS_ONLY
-
-## Comment this out if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
-BAN_LEGACY_SYSTEM
-
-## Comment this out to stop locally connected clients from being given the almost full access !localhost! admin rank
-ENABLE_LOCALHOST_RANK
-
-## Comment this out if you want to use the SQL based mentor system, the legacy system uses mentors.txt.
-## You need to set up your database to use the SQL based system.
-## This flag is automatically enabled if SQL_ENABLED isn't
-MENTOR_LEGACY_SYSTEM
-
-#Mentors only see ckeys by default. Uncomment to have them only see mob name
-#MENTORS_MOBNAME_ONLY
-
-## Uncomment this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing
-## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.
-## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.
-## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means
-## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
-#USE_AGE_RESTRICTION_FOR_JOBS
-
-## Uncomment this to have the job system use the player's account creation date, rather than the when they first joined the server for job timers.
-#USE_ACCOUNT_AGE_FOR_JOBS
-
-## Unhash this to track player playtime in the database. Requires database to be enabled.
-#USE_EXP_TRACKING
-## Unhash this to enable playtime requirements for head jobs.
-#USE_EXP_RESTRICTIONS_HEADS
-## Unhash this to override head jobs' playtime requirements with this number of hours.
-## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes.
-#USE_EXP_RESTRICTIONS_HEADS_HOURS 3
-## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime.
-#USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT
-## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist.
-#USE_EXP_RESTRICTIONS_OTHER
-## Allows admins to bypass job playtime requirements.
-#USE_EXP_RESTRICTIONS_ADMIN_BYPASS
-
-## log OOC channel
-LOG_OOC
-
-## log client Say
-LOG_SAY
-
-## log admin actions
-LOG_ADMIN
-
-## log admin chat
-LOG_ADMINCHAT
-
-## log client access (logon/logoff)
-LOG_ACCESS
-
-## log game actions (start of round, results, etc.)
-LOG_GAME
-
-## log player votes
-LOG_VOTE
-
-## log player crafting
-LOG_CRAFT
-
-## log client Whisper
-LOG_WHISPER
-
-## log emotes
-LOG_EMOTE
-
-## log attack messages
-LOG_ATTACK
-
-## log pda messages
-LOG_PDA
-
-## log telecomms messages
-LOG_TELECOMMS
-
-## log prayers
-LOG_PRAYER
-
-## log lawchanges
-LOG_LAW
-
-## log crew manifest to seperate file
-LOG_MANIFEST
-
-## log job divide debugging information
-#LOG_JOB_DEBUG
-
-## log all world.Topic() calls
-# LOG_WORLD_TOPIC
-
-## enables use of the proc twitterize() that lets you take a large list of strings and turn it into a JSON file of tweet sized strings.
-## As an example of how this could be """useful""" look towards Poly (https://twitter.com/Poly_the_Parrot)
-# LOG_TWITTER
-
-## Enable logging pictures
-# LOG_PICTURES
-
-## log virus and actions
-LOG_VIRUS
-
-##Log camera pictures - Must have picture logging enabled
-PICTURE_LOGGING_CAMERA
-
-## period of time in seconds for players to be considered inactive
-# INACTIVITY_PERIOD 300
-
-## period of time in seconds for players to be considered afk and kickable
-# AFK_PERIOD 600
-
-## disconnect players who are considered afk
-# KICK_INACTIVE
-
-## Comment this out to stop admins being able to choose their personal ooccolor
-ALLOW_ADMIN_OOCCOLOR
-
-## Job slot open/close by identification consoles delay in seconds
-ID_CONSOLE_JOBSLOT_DELAY 30
-
-## allow players to initiate a restart vote
-#ALLOW_VOTE_RESTART
-
-## allow players to initate a mode-change start
-#ALLOW_VOTE_MODE
-
-## min delay (deciseconds) between voting sessions (default 10 minutes)
-VOTE_DELAY 6000
-
-## time period (deciseconds) which voting session will last (default 1 minute)
-VOTE_PERIOD 600
-
-## autovote initial delay (deciseconds) before first automatic transfer vote call (default 120 minutes)
-## Set to 0 to disable the subsystem altogether.
-VOTE_AUTOTRANSFER_INITIAL 72000
-
-## autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)
-VOTE_AUTOTRANSFER_INTERVAL 18000
-
-## autovote maximum votes until automatic transfer call. (default 4)
-## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
-## Set to -1 to disable the maximum votes cap.
-VOTE_AUTOTRANSFER_MAXIMUM 4
-
-## prevents dead players from voting or starting votes
-# NO_DEAD_VOTE
-
-## players' votes default to "No vote" (otherwise, default to "No change")
-# DEFAULT_NO_VOTE
-
-## disables calling del(src) on newmobs if they logout before spawnin in
-# DONT_DEL_NEWMOB
-
-## set a hosted by name for unix platforms
-HOSTEDBY Yournamehere
-
-## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
-## Set to 1 to jobban them from those positions, set to 0 to allow them.
-# GUEST_JOBBAN
-
-## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting)
-GUEST_BAN
-
-## Comment this out to disable checking for the cid randomizer dll. (disabled if database isn't enabled or connected)
-CHECK_RANDOMIZER
-
-## IPINTEL:
-## This allows you to detect likely proxies by checking ips against getipintel.net
-## Rating to warn at: (0.9 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning
-#IPINTEL_RATING_BAD 0.9
-## Contact email, (required to use the service, leaving blank or default disables IPINTEL)
-#IPINTEL_EMAIL ch@nge.me
-## How long to save good matches (ipintel rate limits to 15 per minute and 500 per day. so this shouldn't be too low, getipintel.net suggests 6 hours, time is in hours) (Your ip will get banned if you go over 500 a day too many times)
-#IPINTEL_SAVE_GOOD 12
-## How long to save bad matches (these numbers can change as ips change hands, best not to save these for too long in case somebody gets a new ip used by a spammer/proxy before.)
-#IPINTEL_SAVE_BAD 3
-## Domain name to query (leave commented out for the default, only needed if you pay getipintel.net for more querys)
-#IPINTEL_DOMAIN check.getipintel.net
-
-## Uncomment to allow web client connections
-#ALLOW_WEBCLIENT
-
-## Uncomment to restrict web client connections to byond members
-## This makes for a nice pay gate to cut down on ban evading, as the webclient's cid system isn't that great
-## byond membership starts at $10 for 3 months, so to use the webclient to evade, they would have sink 10 bucks in each evade.
-#WEBCLIENT_ONLY_BYOND_MEMBERS
-
-## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server
-#USEWHITELIST
-
-## set a server location for world reboot. Don't include the byond://, just give the address and port.
-## Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted.
-# SERVER ss13.example.com:2506
-
-## forum address
-# FORUMURL https://citadel-station.net/forum/
-
-## Wiki address
-# WIKIURL https://katlin.dog/citadel-wiki
-
-## Rules address
-# RULESURL https://katlin.dog/citadel-rules/main
-
-## Github address
-# GITHUBURL https://github.com/Citadel-Station-13/Citadel-Station-13
-
-## Round specific stats address
-## Link to round specific parsed logs; IE statbus. It is appended with the RoundID automatically by ticker/Reboot()
-## This will take priority over the game logs address during reboot.
-## Example: https://atlantaned.space/statbus/round.php?round=
-# ROUNDSTATSURL http://citadel-station.net/slimbus/
-
-## Game Logs address
-## Incase you don't have a fancy parsing system, but still want players to be able to find where you keep your server's logs.
-## Example: https://tgstation13.org/parsed-logs/basil/data/logs/
-# GAMELOGURL
-
-## Github repo id
-##This can be found by going to https://api.github.com/users//repos
-##Or https://api.github.com/orgs//repos if the repo owner is an organization
-# GITHUBREPOID 62485194
-
-## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
-# BANAPPEALS https://citadel-station.net/forum/viewforum.php?f=8&sid=a0ce5331d5594ef6d49661609c6f4ff9
-
-## System command that invokes youtube-dl, used by Play Internet Sound.
-## You can install youtube-dl with
-## "pip install youtube-dl" if you have pip installed
-## from https://github.com/rg3/youtube-dl/releases
-## or your package manager
-## The default value assumes youtube-dl is in your system PATH
-# INVOKE_YOUTUBEDL youtube-dl
-
-## In-game features
-##Toggle for having jobs load up from the .txt
-# LOAD_JOBS_FROM_TXT
-
-## Uncomment this to forbid admins from possessing the singularity.
-#FORBID_SINGULO_POSSESSION
-
-## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM.
-## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)
-#POPUP_ADMIN_PM
-
-## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR
-ALLOW_HOLIDAYS
-
-## Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin.
-#SHOW_IRC_NAME
-
-## Defines the ticklimit for subsystem initialization (In percents of a byond tick). Lower makes world start smoother. Higher makes it faster.
-##This is currently a testing optimized setting. A good value for production would be 98.
-TICK_LIMIT_MC_INIT 500
-
-##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second).
-## This also controls the client network update rate, as well as the default client fps
-TICKLAG 0.5
-
-##Can also be set as per-second value, the following value is identical to the above.
-#FPS 20
-
-## Comment this out to disable automuting
-#AUTOMUTE_ON
-
-## Uncomment this to let players see their own notes (they can still be set by admins only)
-#SEE_OWN_NOTES
-
-### Comment these two out to prevent notes fading out over time for admins.
-## Notes older then this will start fading out.
-NOTE_FRESH_DAYS 91.31055
-## Notes older then this will be completely faded out.
-NOTE_STALE_DAYS 365.2422
-
-##Note: all population caps can be used with each other if desired.
-
-## Uncomment for 'soft' population caps, players will be warned while joining if the living crew exceeds the listed number.
-#SOFT_POPCAP 100
-
-## Message for soft cap
-SOFT_POPCAP_MESSAGE Be warned that the server is currently serving a high number of users, consider using alternative game servers.
-
-## Uncomment for 'hard' population caps, players will not be allowed to spawn if the living crew exceeds the listed number, though they may still observe or wait for the living crew to decrease in size.
-#HARD_POPCAP 150
-
-## Message for hard cap
-HARD_POPCAP_MESSAGE The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers.
-
-## Uncomment for 'extreme' population caps, players will not be allowed to join the server if living crew exceeds the listed number.
-#EXTREME_POPCAP 200
-
-## Message for extreme cap
-EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, find alternative servers.
-
-## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never)
-## Requres database
-NOTIFY_NEW_PLAYER_AGE 0
-
-## Notify admins when a player connects if their byond account was created in the last X days
-## Requires database
-NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1
-
-## Notify the irc channel when a new player makes their first connection
-## Requres database
-#IRC_FIRST_CONNECTION_ALERT
-
-## Deny all new connections by ckeys we haven't seen before (exempts admins and only denies the connection if the database is enabled and connected)
-## Requires database
-#PANIC_BUNKER
-
-## If a player connects during a bunker with less then or this amount of living time (Minutes), we deny the connection
-#PANIC_BUNKER_LIVING 90
-
-## The message the Panic Bunker gives when someone is rejected by it
-## %minutes% is replaced with PANIC_BUNKER_LIVING on runtime, remove it if you don't want this
-#PANIC_BUNKER_MESSAGE Sorry, but the server is currently not accepting connections from players with less than %minutes% minutes of living time.
-
-## If panic bunker is on and a player is rejected (see above), attempt to send them to this connected server (see below) instead.
-## You probably want this to be the same as CROSS_SERVER_ADDRESS
-#PANIC_SERVER_ADDRESS byond://address:port
-
-##Name of the place to send people rejected by the bunker
-#PANIC_SERVER_NAME [Put the name here]
-
-##Automated age verification, comment this out to not ask new users if they are 18+
-#AGE_VERIFICATION
-
-## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
-#AGGRESSIVE_CHANGELOG
-
-## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes
-AUTOCONVERT_NOTES
-
-## Comment this out to stop admin messages sent anytime an admin disconnects from a round in play, you can edit the messages in admin.dm
-ANNOUNCE_ADMIN_LOGOUT
-
-## Uncomment to have an admin message sent anytime an admin connects to a round in play, you can edit the messages in admin.dm
-#ANNOUNCE_ADMIN_LOGIN
-
-## Map rotation
-## You should edit maps.txt to match your configuration when you enable this.
-MAPROTATION
-
-## TG-style map rotation
-## By default, Citadel uses a more traditional method of map voting, where at the end of a round, players are given a full upfront vote.
-## This PR will disable that, and will make the server use TG's map rotation instead.
-#TGSTYLE_MAPROTATION
-
-## Map voting
-## Allows players to vote for their preffered map
-## When it's set to zero, the map will be randomly picked each round
-ALLOW_MAP_VOTING 1
-
-## Map voting type
-## Determines what kind of vote the map vote is
-## Options are:
-## PLURALITY (default, only vote for one option)
-## APPROVAL (can vote for as many as you want), I
-## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
-## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
-MAP_VOTE_TYPE APPROVAL
-
-## Map rotate chance delta
-## This is the chance of map rotation factored to the round length.
-## A value of 1 would mean the map rotation chance is the round length in minutes (hour long round == 60% rotation chance)
-## A value of 0.5 would mean the map rotation chance is half of the round length in minutes (hour long round == 30% rotation chance)
-#MAPROTATIONCHANCEDELTA 0.75
-
-## AUTOADMIN
-## The default admin rank
-AUTOADMIN_RANK Game Master
-
-## Uncomment to automatically give that admin rank to all players
-#AUTOADMIN
-
-## CLIENT VERSION CONTROL
-## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
-## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower.
-## These messages will be followed by one stating the clients current version and the required version for clarity.
-## If CLIENT_WARN_POPUP is uncommented a popup window with the message will be displayed instead
-#CLIENT_WARN_VERSION 511
-#CLIENT_WARN_POPUP
-#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update.
-CLIENT_ERROR_VERSION 511
-CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade.
-## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit.
-CLIENT_ERROR_BUILD 1421
-
-## TOPIC RATE LIMITING
-## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute.
-## Admins are exempt from these limits.
-## Hitting the minute limit notifies admins.
-## Set to 0 or comment out to disable.
-SECOND_TOPIC_LIMIT 10
-
-MINUTE_TOPIC_LIMIT 100
-
-
-## CLICK RATE LIMITING
-## Same as above, but applies to clicking on objects in the game window.
-## This should be a higher then the interface limit to allow for the spam clickly nature of most battles.
-## Admins are exempt from these limits.
-## Hitting the minute limit notifies admins.
-## Set to 0 to disable.
-SECOND_CLICK_LIMIT 15
-
-MINUTE_CLICK_LIMIT 400
-
-##Error handling related options
-## The "cooldown" time for each occurence of a unique error
-#ERROR_COOLDOWN 600
-## How many occurences before the next will silence them
-#ERROR_LIMIT 90
-## How long a unique error will be silenced for
-#ERROR_SILENCE_TIME 6000
-##How long to wait between messaging admins about occurences of a unique error
-#ERROR_MSG_DELAY 50
-
-## Chat Announce Options
-## Various messages to be sent to game chats
-## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4
-## If using TGS4, the string option can be set as a chat channel tag to limit the message to channels of that tag type (case-sensitive)
-## i.e. CHAT_ANNOUNCE_NEW_GAME chat_channel_tag
-
-## Send a message with the station name starting a new game
-#CHAT_ANNOUNCE_NEW_GAME
-
-## Allow admin hrefs that don't use the new token system, will eventually be removed
-DEBUG_ADMIN_HREFS
-
-###Master Controller High Pop Mode###
-
-##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc)
-##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc)
-## Setting this to 0 will prevent the Master Controller from ticking
-BASE_MC_TICK_RATE 1
-
-##High population MC tick rate
-## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2
-## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like
-## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%.
-## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5)
-HIGH_POP_MC_TICK_RATE 1.1
-
-##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count)
-HIGH_POP_MC_MODE_AMOUNT 65
-
-##Disengage high pop mode if player count drops below this
-DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
-
-## Uncomment to prevent the world from sleeping while no players are connected after initializations
-#RESUME_AFTER_INITIALIZATIONS
-
-## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools.
-#ROUNDS_UNTIL_HARD_RESTART 10
-
-## Number of days for an individual panic bunker passthrough entry to be wiped. Note that they're also wiped as soon as a player is in the database.
-#MAX_BUNKER_DAYS 7
-
-##Default screen resolution, in tiles.
-## By default, this is 15x15, which gets simplified to 7 by BYOND, as it is a 1:1 screen ratio.
-## For reference, Goonstation uses a resolution of 21x15 for it's widescreen mode.
-## Do note that changing this value will affect the title screen. The title screen will have to be updated manually if this is changed.
-DEFAULT_VIEW 21x15
-
-### FAIL2TOPIC:
-### Automated IP bans for world/Topic() spammers
-### NOTE FOR WINDOWS HOSTS: This requires you to be running dreamdaemon as an administrator for it to work at all. TGS3 handles this automatically, and honestly there's no reason not to be using TGS3 if you're hosting on Windows.
-### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing.
-## Enabled
-#FAIL2TOPIC_ENABLED
-## Minimum wait time in deciseconds between valid requests
-FAIL2TOPIC_RATE_LIMIT 10
-## Number of requests after breaching rate limit that triggers a ban
-FAIL2TOPIC_MAX_FAILS 5
-## Firewall rule name used on physical server
-## FOR LINUX HOSTS: This is used as the chain name. The iptables chain doesn't get created or hooked up to INPUT automatically, so you'll have to get that set up yourself. Recommended name: BYOND
-FAIL2TOPIC_RULE_NAME _dd_fail2topic
-
-## Enable automatic profiling - Byond 513.1506 and newer only.
-#AUTO_PROFILE
-
-## Uncomment to enable global ban DB using the provided URL. The API should expect to receive a ckey at the end of the URL.
-## More API details can be found here: https://centcom.melonmesa.com
-CENTCOM_BAN_DB https://centcom.melonmesa.com/ban/search
+$include entries/admin.txt
+$include entries/alert.txt
+$include entries/antag_rep.txt
+$include entries/comms.txt
+$include entries/connections.txt
+$include entries/dbconfig.txt
+$include entries/debris.txt
+$include entries/donator.txt
+$include entries/dynamic.txt
+$include entries/fetish_content.txt
+$include entries/gamemodes.txt
+$include entries/general.txt
+$include entries/jexp.txt
+$include entries/logging.txt
+$include entries/movespeed.txt
+$include entries/persistence.txt
+$include entries/policy.txt
+$include entries/resources.txt
+$include entries/respawns.txt
+$include entries/security.txt
+$include entries/server.txt
+$include entries/stamina_combat.txt
+$include entries/threat.txt
+$include entries/urls.txt
+$include entries/vote.txt
+
+$include plushies/defines.txt
diff --git a/config/donator_groupings.txt b/config/donator_groupings.txt
deleted file mode 100644
index b26d1efe22..0000000000
--- a/config/donator_groupings.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-#this is a bad system but I'm lazy so it piggybacks off config loader system.
-#Specify group followed by ckey for each ckey.
-
-#TIER_1_DONATORS test_ckey
-
-#TIER_2_DONATORS test_ckey
-
-#TIER_3_DONATORS test_ckey
diff --git a/config/entries/admin.txt b/config/entries/admin.txt
new file mode 100644
index 0000000000..883bda9422
--- /dev/null
+++ b/config/entries/admin.txt
@@ -0,0 +1,79 @@
+## Comment this out if you want to use the SQL based admin system, the legacy system uses admins.txt.
+## You need to set up your database to use the SQL based system.
+## This flag is automatically enabled if SQL_ENABLED isn't
+ADMIN_LEGACY_SYSTEM
+
+##Uncomment this to stop any admins loaded by the legacy system from having their rank edited by the permissions panel
+#PROTECT_LEGACY_ADMINS
+
+##Uncomment this to stop any ranks loaded by the legacy system from having their flags edited by the permissions panel
+#PROTECT_LEGACY_RANKS
+
+##Uncomment this to have admin ranks only loaded from the legacy admin_ranks.txt
+##If enabled, each time admins are loaded ranks the database will be updated with the current ranks and their flags
+#LOAD_LEGACY_RANKS_ONLY
+
+## Comment this out if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
+BAN_LEGACY_SYSTEM
+
+## Comment this out to stop locally connected clients from being given the almost full access !localhost! admin rank
+ENABLE_LOCALHOST_RANK
+
+## Comment this out if you want to use the SQL based mentor system, the legacy system uses mentors.txt.
+## You need to set up your database to use the SQL based system.
+## This flag is automatically enabled if SQL_ENABLED isn't
+MENTOR_LEGACY_SYSTEM
+
+#Mentors only see ckeys by default. Uncomment to have them only see mob name
+#MENTORS_MOBNAME_ONLY
+
+## Uncomment this to forbid admins from possessing the singularity.
+#FORBID_SINGULO_POSSESSION
+
+## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM.
+## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)
+#POPUP_ADMIN_PM
+
+## Uncomment this to let players see their own notes (they can still be set by admins only)
+#SEE_OWN_NOTES
+
+### Comment these two out to prevent notes fading out over time for admins.
+## Notes older then this will start fading out.
+NOTE_FRESH_DAYS 91.31055
+## Notes older then this will be completely faded out.
+NOTE_STALE_DAYS 365.2422
+
+## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes
+AUTOCONVERT_NOTES
+
+## Comment this out to stop admin messages sent anytime an admin disconnects from a round in play, you can edit the messages in admin.dm
+ANNOUNCE_ADMIN_LOGOUT
+
+## Uncomment to have an admin message sent anytime an admin connects to a round in play, you can edit the messages in admin.dm
+#ANNOUNCE_ADMIN_LOGIN
+
+## More API details can be found here: https://centcom.melonmesa.com
+CENTCOM_BAN_DB https://centcom.melonmesa.com/ban/search
+
+## AUTOADMIN
+## The default admin rank
+AUTOADMIN_RANK Game Master
+
+## Uncomment to automatically give that admin rank to all players
+#AUTOADMIN
+
+## Comment this out to stop admins being able to choose their personal ooccolor
+ALLOW_ADMIN_OOCCOLOR
+
+## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
+## Set to 1 to jobban them from those positions, set to 0 to allow them.
+# GUEST_JOBBAN
+
+## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting)
+GUEST_BAN
+
+## Comment this out to disable automuting
+#AUTOMUTE_ON
+
+## Allow admin hrefs that don't use the new token system, will eventually be removed
+DEBUG_ADMIN_HREFS
diff --git a/config/entries/alert.txt b/config/entries/alert.txt
new file mode 100644
index 0000000000..5a03eadaec
--- /dev/null
+++ b/config/entries/alert.txt
@@ -0,0 +1,13 @@
+## ALERT LEVELS ###
+ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
+ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
+ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
+ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
+ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
+ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
+ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
+ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
+
+## Determines the minimum alert level for the security cyborg model to be chosen
+## 0: Green, 1:Blue, 2:Amber, 3:Red, 4:Delta
+MINIMUM_SECBORG_ALERT 3
diff --git a/config/entries/antag_rep.txt b/config/entries/antag_rep.txt
new file mode 100644
index 0000000000..6cd9315a0c
--- /dev/null
+++ b/config/entries/antag_rep.txt
@@ -0,0 +1,19 @@
+## disclaimer: this is a confusing file. reading and understanding antag rep code is recommended for future headmins/server leads.
+
+## Use the antagonist reputation system
+# ANTAG_REP
+
+## Maximum antag roll ticketts someone can have
+# ANTAG_REP_MAXIMUM 200
+
+## "Free" tickets someone gets on roll
+# DEFAULT_ANTAG_TICKETS 100
+
+## Maximum **STORED** tickets used ontop of default per roll
+# MAX_TICKETS_PER_ROLL 100
+
+## Custom antag reputation values
+## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
+## e.g.
+## ANTAG_REP Captain 10
+## ANTAG_REP Assistant 0
diff --git a/config/comms.txt b/config/entries/comms.txt
similarity index 78%
rename from config/comms.txt
rename to config/entries/comms.txt
index ae336d484b..7af6a758d3 100644
--- a/config/comms.txt
+++ b/config/entries/comms.txt
@@ -7,9 +7,12 @@
#CROSS_SERVER ServerName byond:\\address:port
## Name that the server calls itself in communications
-#CROSS_COMMS_NAME
+# CROSS_COMMS_NAME Citadel Main
## Network-name used for cross-server broadcasts made from communication consoles.
## Servers that do not match this network-name will have their messages discarded.
## Leaving this commented will allow all messages through, regardless of network.
#CROSS_COMMS_NETWORK default_network
+
+## CITADEL CONFIG: List of cross server URLs, same as CROSS_SERVER, to send bunker override messages for
+## Format is the same as CROSS_SERVER.
diff --git a/config/entries/connections.txt b/config/entries/connections.txt
new file mode 100644
index 0000000000..6351a77fcf
--- /dev/null
+++ b/config/entries/connections.txt
@@ -0,0 +1,93 @@
+## Deny all new connections by ckeys we haven't seen before (exempts admins and only denies the connection if the database is enabled and connected)
+## Requires database
+#PANIC_BUNKER
+
+## If a player connects during a bunker with less then or this amount of living time (Minutes), we deny the connection
+#PANIC_BUNKER_LIVING 90
+
+## The message the Panic Bunker gives when someone is rejected by it
+## %minutes% is replaced with PANIC_BUNKER_LIVING on runtime, remove it if you don't want this
+#PANIC_BUNKER_MESSAGE Sorry, but the server is currently not accepting connections from players with less than %minutes% minutes of living time.
+
+## If panic bunker is on and a player is rejected (see above), attempt to send them to this connected server (see below) instead.
+## You probably want this to be the same as CROSS_SERVER_ADDRESS
+#PANIC_SERVER_ADDRESS byond://address:port
+
+##Name of the place to send people rejected by the bunker
+#PANIC_SERVER_NAME [Put the name here]
+
+## Number of days for an individual panic bunker passthrough entry to be wiped. Note that they're also wiped as soon as a player is in the database.
+#MAX_BUNKER_DAYS 7
+
+## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never)
+## Requres database
+NOTIFY_NEW_PLAYER_AGE 0
+
+## Notify admins when a player connects if their byond account was created in the last X days
+## Requires database
+NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1
+
+##Automated age verification, comment this out to not ask new users if they are 18+
+#AGE_VERIFICATION
+
+## Notify the irc channel when a new player makes their first connection
+## Requres database
+#IRC_FIRST_CONNECTION_ALERT
+
+## Comment this out to disable checking for the cid randomizer dll. (disabled if database isn't enabled or connected)
+CHECK_RANDOMIZER
+
+## IPINTEL:
+## This allows you to detect likely proxies by checking ips against getipintel.net
+## Rating to warn at: (0.9 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning
+#IPINTEL_RATING_BAD 0.9
+## Contact email, (required to use the service, leaving blank or default disables IPINTEL)
+#IPINTEL_EMAIL ch@nge.me
+## How long to save good matches (ipintel rate limits to 15 per minute and 500 per day. so this shouldn't be too low, getipintel.net suggests 6 hours, time is in hours) (Your ip will get banned if you go over 500 a day too many times)
+#IPINTEL_SAVE_GOOD 12
+## How long to save bad matches (these numbers can change as ips change hands, best not to save these for too long in case somebody gets a new ip used by a spammer/proxy before.)
+#IPINTEL_SAVE_BAD 3
+## Domain name to query (leave commented out for the default, only needed if you pay getipintel.net for more querys)
+#IPINTEL_DOMAIN check.getipintel.net
+
+## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
+#AGGRESSIVE_CHANGELOG
+
+## Uncomment to allow web client connections
+#ALLOW_WEBCLIENT
+
+## Uncomment to restrict web client connections to byond members
+## This makes for a nice pay gate to cut down on ban evading, as the webclient's cid system isn't that great
+## byond membership starts at $10 for 3 months, so to use the webclient to evade, they would have sink 10 bucks in each evade.
+#WEBCLIENT_ONLY_BYOND_MEMBERS
+
+## CLIENT VERSION CONTROL
+## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
+## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower.
+## These messages will be followed by one stating the clients current version and the required version for clarity.
+## If CLIENT_WARN_POPUP is uncommented a popup window with the message will be displayed instead
+#CLIENT_WARN_VERSION 511
+#CLIENT_WARN_POPUP
+#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update.
+CLIENT_ERROR_VERSION 511
+CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade.
+## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit.
+CLIENT_ERROR_BUILD 1421
+
+## Uncomment for 'soft' population caps, players will be warned while joining if the living crew exceeds the listed number.
+#SOFT_POPCAP 100
+
+## Message for soft cap
+SOFT_POPCAP_MESSAGE Be warned that the server is currently serving a high number of users, consider using alternative game servers.
+
+## Uncomment for 'hard' population caps, players will not be allowed to spawn if the living crew exceeds the listed number, though they may still observe or wait for the living crew to decrease in size.
+#HARD_POPCAP 150
+
+## Message for hard cap
+HARD_POPCAP_MESSAGE The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers.
+
+## Uncomment for 'extreme' population caps, players will not be allowed to join the server if living crew exceeds the listed number.
+#EXTREME_POPCAP 200
+
+## Message for extreme cap
+EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, find alternative servers.
diff --git a/config/dbconfig.txt b/config/entries/dbconfig.txt
similarity index 93%
rename from config/dbconfig.txt
rename to config/entries/dbconfig.txt
index 3a058fe563..d5bc37bce7 100644
--- a/config/dbconfig.txt
+++ b/config/entries/dbconfig.txt
@@ -43,3 +43,6 @@ BSQL_THREAD_LIMIT 50
## Uncomment to enable verbose BSQL communication logs
#BSQL_DEBUG
+
+## Time to wait before considering a query as lingering too long
+@QUERY_DEBUG_LOG_TIMEOUT 70
diff --git a/config/entries/debris.txt b/config/entries/debris.txt
new file mode 100644
index 0000000000..345ce6610f
--- /dev/null
+++ b/config/entries/debris.txt
@@ -0,0 +1,8 @@
+## Default turf threshold to get dirt
+TURF_DIRT_THRESHOLD 100
+
+## Default alpha of dirt on spawn
+DIRT_ALPHA_STARTING 127
+
+## Multiplier for how dirty walking over a turf makes it
+TURF_DIRTY_MULTIPLIER 1
diff --git a/config/entries/donator.txt b/config/entries/donator.txt
new file mode 100644
index 0000000000..42c0461bf8
--- /dev/null
+++ b/config/entries/donator.txt
@@ -0,0 +1,11 @@
+## Citadel donator system
+## this is a bad system but I'm lazy so it piggybacks off config loader system.
+## File isn't properly documented because the donator system desperately needs a rewrite and I can't be arsed to right now.
+
+#Specify group followed by ckey for each ckey.
+
+#TIER_1_DONATORS test_ckey
+
+#TIER_2_DONATORS test_ckey
+
+#TIER_3_DONATORS test_ckey
diff --git a/config/dynamic_config.txt b/config/entries/dyanmic.txt
similarity index 98%
rename from config/dynamic_config.txt
rename to config/entries/dyanmic.txt
index 480f6d8ed8..e08fb7634d 100644
--- a/config/dynamic_config.txt
+++ b/config/entries/dyanmic.txt
@@ -307,3 +307,12 @@ DYNAMIC_ASSASSINATE_COST 2
DYNAMIC_WAROPS_REQUIREMENT 60
DYNAMIC_WAROPS_COST 10
+
+## Storyteller min players
+# STORYTELLER_MIN_PLAYERS CHAOTIC 35
+
+## Storyteller minimum chaos
+# STORYTELLER_MIN_CHAOS CHAOTIC 75
+
+## Storyteller maximum chaos
+# STORYTELLER_MAX_CHAOS CHAOTIC 250
diff --git a/config/entries/fetish_content.txt b/config/entries/fetish_content.txt
new file mode 100644
index 0000000000..6fabd095d8
--- /dev/null
+++ b/config/entries/fetish_content.txt
@@ -0,0 +1,33 @@
+## Breast cups selectable from the character creation menu. Keep em lowercase.
+BREASTS_CUPS_PREFS a
+BREASTS_CUPS_PREFS b
+BREASTS_CUPS_PREFS c
+BREASTS_CUPS_PREFS d
+BREASTS_CUPS_PREFS e
+BREASTS_CUPS_PREFS f
+BREASTS_CUPS_PREFS g
+BREASTS_CUPS_PREFS h
+
+## Minimum and maximum limits for penis length from the character creation menu.
+PENIS_MIN_INCHES_PREFS 1
+PENIS_MAX_INCHES_PREFS 24
+
+## Body size configs, the feature will be disabled if both min and max have the same value.
+BODY_SIZE_MIN 0.9
+BODY_SIZE_MAX 1.25
+
+## Allowed visibility toggles
+
+# SAFE_VISIBILITY_TOGGLES Always visible
+SAFE_VISIBILITY_TOGGLES Hidden by clothes
+SAFE_VISIBILITY_TOGGLES Hidden by underwear
+SAFE_VISIBILITY_TOGGLES Always hidden
+
+## Pun-Pun movement slowdown given to characters with a body size smaller than this value,
+## to compensate for their smaller hitbox.
+## To disable, just make sure the value is lower than 'body_size_min'
+THRESHOLD_BODY_SIZE_PENALTY 1
+
+## Multiplier used in the smaller strides slowdown calculation.
+## Doesn't apply to floating or crawling mobs.
+BODY_SIZE_SLOWDOWN_MULTIPLIER 0
diff --git a/config/entries/gamemodes.txt b/config/entries/gamemodes.txt
new file mode 100644
index 0000000000..f78c3743aa
--- /dev/null
+++ b/config/entries/gamemodes.txt
@@ -0,0 +1,178 @@
+## Comment to disable weighting modes by how chaotic recent mode rolls were.
+WEIGH_BY_RECENT_CHAOS
+
+## The weight adjustment will be proportional to this power relative to the "ideal" weight range.
+## e.g. if we have a weight range of 0-5, and an exponent of 1, 6 will be weighted 1/2, 7 1/3 etc.
+## if exponent is 2, it'll be 1/4, 1/9 etc.
+CHAOS_EXPONENT 1
+
+## Percent weight reductions for three of the most recent modes
+
+REPEATED_MODE_ADJUST 45 30 10
+
+## Probablities for game modes chosen in 'secret' and 'random' modes.
+## Default probablity is 1, increase to make that mode more likely to be picked.
+## Set to 0 to disable that mode.
+
+PROBABILITY TRAITOR 5
+PROBABILITY TRAITORBRO 2
+PROBABILITY TRAITORCHAN 4
+PROBABILITY INTERNAL_AFFAIRS 3
+PROBABILITY NUCLEAR 2
+PROBABILITY REVOLUTION 2
+PROBABILITY CULT 2
+PROBABILITY CHANGELING 2
+PROBABILITY WIZARD 4
+PROBABILITY MONKEY 0
+PROBABILITY METEOR 0
+PROBABILITY EXTENDED 0
+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
+
+## Toggles for continuous modes.
+## Modes that aren't continuous will end the instant all antagonists are dead.
+
+CONTINUOUS TRAITOR
+CONTINUOUS TRAITORBRO
+CONTINUOUS TRAITORCHAN
+CONTINUOUS INTERNAL_AFFAIRS
+#CONTINUOUS NUCLEAR
+#CONTINUOUS REVOLUTION
+CONTINUOUS CULT
+CONTINUOUS CLOCKWORK_CULT
+CONTINUOUS CHANGELING
+CONTINUOUS WIZARD
+#CONTINUOUS MONKEY
+CONTINUOUS BLOODSUCKER
+CONTINUOUS HERESY
+
+##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
+
+CONTINUOUS METEOR
+CONTINUOUS EXTENDED
+CONTINUOUS SECRET_EXTENDED
+
+## Toggles for allowing midround antagonists (aka mulligan antagonists).
+## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created.
+
+MIDROUND_ANTAG TRAITOR
+#MIDROUND_ANTAG TRAITORBRO
+MIDROUND_ANTAG TRAITORCHAN
+MIDROUND_ANTAG INTERNAL_AFFAIRS
+#MIDROUND_ANTAG NUCLEAR
+#MIDROUND_ANTAG REVOLUTION
+MIDROUND_ANTAG CULT
+MIDROUND_ANTAG CLOCKWORK_CULT
+MIDROUND_ANTAG CHANGELING
+MIDROUND_ANTAG WIZARD
+#MIDROUND_ANTAG MONKEY
+
+## Toggles for whether this mode should force antags even if not enough players have it enabled.
+## If it's off, it just won't roll as many antags.
+#FORCE_ANTAG_COUNT TRAITOR
+#FORCE_ANTAG_COUNT TRAITORBRO
+#FORCE_ANTAG_COUNT TRAITORCHAN
+#FORCE_ANTAG_COUNT INTERNAL_AFFAIRS
+FORCE_ANTAG_COUNT NUCLEAR
+FORCE_ANTAG_COUNT REVOLUTION
+FORCE_ANTAG_COUNT CULT
+FORCE_ANTAG_COUNT CLOCKWORK_CULT
+#FORCE_ANTAG_COUNT CHANGELING
+#FORCE_ANTAG_COUNT WIZARD
+#FORCE_ANTAG_COUNT MONKEY
+
+## A config for how much each game mode's chaos level is.
+## All of them have reasonable defaults, but this can be used to adjust them.
+## 0-9, where 0 is lowest chaos (should only be extended) and 9 is highest (wizard? nukies?)
+#CHAOS_LEVEL EXTENDED 0
+
+## Uncomment these for overrides of the minimum / maximum number of players in a round type.
+## If you set any of these occasionally check to see if you still need them as the modes
+## will still be actively rebalanced around the SUGGESTED populations, not your overrides.
+## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to
+## VERY low numbers (< 5) can lead to errors if the roundtypes were not designed for that.
+
+#MIN_POP TRAITOR 0
+#MAX_POP TRAITOR -1
+
+#MIN_POP TRAITORBRO 0
+#MAX_POP TRAITORBRO -1
+
+#MIN_POP TRAITORCHAN 15
+#MAX_POP TRAITORCHAN -1
+
+#MIN_POP DOUBLE_AGENTS 25
+#MAX_POP DOUBLE_AGENTS -1
+
+#MIN_POP NUCLEAR 0
+#MAX_POP NUCLEAR -1
+
+#MIN_POP REVOLUTION 20
+#MAX_POP REVOLUTION -1
+
+#MIN_POP CULT 24
+#MAX_POP CULT -1
+
+#MIN_POP CLOCKWORK_CULT 24
+#MAX_POP CLOCKWORK_CULT -1
+
+#MIN_POP CHANGELING 15
+#MAX_POP CHANGELING -1
+
+#MIN_POP WIZARD 20
+#MAX_POP WIZARD -1
+
+#MIN_POP MONKEY 20
+#MAX_POP MONKEY -1
+
+#MIN_POP METEOR 0
+#MAX_POP METEOR -1
+
+#MIN_POP DEVIL 0
+#MAX_POP DEVIL -1
+
+#MIN_POP DEVIL_AGENTS 25
+#MAX_POP DEVIL_AGENTS -1
+
+## Setting at least one mode to be playable at 0/1 players is required.
+#MIN_POP EXTENDED 0
+#MAX_POP EXTENDED -1
+
+## Variables calculate how number of antagonists will scale to population.
+## Used as (Antagonists = Population / Coeff)
+## Set to 0 to disable scaling and use default numbers instead.
+TRAITOR_SCALING_COEFF 6
+## per brother TEAM
+BROTHER_SCALING_COEFF 12
+CHANGELING_SCALING_COEFF 6
+## heretics
+ECULT_SCALING_COEFF 5
+## per abductor TEAM
+ABDUCTOR_SCALING_COEFF 15
+
+## Variables calculate how number of open security officer positions will scale to population.
+## Used as (Officers = Population / Coeff)
+## Set to 0 to disable scaling and use default numbers instead.
+SECURITY_SCALING_COEFF 8
+
+## The number of objectives traitors get.
+## Not including escaping/hijacking.
+TRAITOR_OBJECTIVES_AMOUNT 2
+BROTHER_OBJECTIVES_AMOUNT 2
+
+## Uncomment to prohibit jobs that start with loyalty
+## implants from being most antagonists.
+#PROTECT_ROLES_FROM_ANTAGONIST
+
+## Uncomment to prohibit assistants from becoming most antagonists.
+#PROTECT_ASSISTANT_FROM_ANTAGONIST
+
+
+## If late-joining players have a chance to become a traitor/changeling
+ALLOW_LATEJOIN_ANTAGONISTS
diff --git a/config/game_options.txt b/config/entries/general.txt
similarity index 63%
rename from config/game_options.txt
rename to config/entries/general.txt
index b9d763e5b0..3584af63c7 100644
--- a/config/game_options.txt
+++ b/config/entries/general.txt
@@ -1,3 +1,51 @@
+## Lobby time: This is the amount of time between rounds that players have to setup their characters and be ready.
+LOBBY_COUNTDOWN 120
+
+## Round End Time: This is the amount of time after the round ends that players have to murder death kill each other.
+ROUND_END_COUNTDOWN 90
+
+## period of time in seconds for players to be considered inactive
+# INACTIVITY_PERIOD 300
+
+## period of time in seconds for players to be considered afk and kickable
+# AFK_PERIOD 600
+
+## disconnect players who are considered afk
+# KICK_INACTIVE
+
+## Job slot open/close by identification consoles delay in seconds
+ID_CONSOLE_JOBSLOT_DELAY 30
+
+
+## disables calling del(src) on newmobs if they logout before spawnin in
+# DONT_DEL_NEWMOB
+
+## In-game features
+##Toggle for having jobs load up from the .txt
+# LOAD_JOBS_FROM_TXT
+
+
+## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR
+ALLOW_HOLIDAYS
+
+## Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin.
+#SHOW_IRC_NAME
+
+## Chat Announce Options
+## Various messages to be sent to game chats
+## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4
+## If using TGS4, the string option can be set as a chat channel tag to limit the message to channels of that tag type (case-sensitive)
+## i.e. CHAT_ANNOUNCE_NEW_GAME chat_channel_tag
+
+## Send a message with the station name starting a new game
+#CHAT_ANNOUNCE_NEW_GAME
+
+##Default screen resolution, in tiles.
+## By default, this is 15x15, which gets simplified to 7 by BYOND, as it is a 1:1 screen ratio.
+## For reference, Goonstation uses a resolution of 21x15 for it's widescreen mode.
+## Do note that changing this value will affect the title screen. The title screen will have to be updated manually if this is changed.
+DEFAULT_VIEW 21x15
+
## HEALTH ###
##Damage multiplier, effects both weapons and healing on all mobs. For example, 1.25 would result in 25% higher damage.
@@ -22,30 +70,6 @@ OOC_DURING_ROUND
## Comment this out if you want to disable emojis
EMOJIS
-## MOB MOVEMENT ###
-
-## We suggest editing these variables ingame to find a good speed for your server.
-## To do this you must be a high level admin. Open the 'debug' tab ingame.
-## Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name.
-
-## These values get directly added to values and totals ingame.
-## To speed things up make the number negative, to slow things down, make the number positive.
-
-## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
-RUN_DELAY 1
-WALK_DELAY 4
-
-## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE!
-## Entries completely override all subtypes. Later entries have precedence over earlier entries.
-## This means if you put /mob 0 on the last entry, it will null out all changes, while if you put /mob as the first entry and
-## /mob/living/carbon/human on the last entry, the last entry will override the first.
-MULTIPLICATIVE_MOVESPEED /mob/living/carbon/human 1
-##MULTIPLICATIVE_MOVESPEED /mob/living/silicon/robot 0
-##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/monkey 0
-##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien 0
-##MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal/slime 0
-MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
-
## NAMES ###
## If uncommented this adds a random surname to a player's name if they only specify one name.
@@ -54,205 +78,18 @@ MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
## If uncommented, this forces all players to use random names !and appearances!.
#FORCE_RANDOM_NAMES
-
-## ALERT LEVELS ###
-ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
-ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
-ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
-ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
-ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
-ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
-ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
-ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
-
-
-
## GAME MODES ###
## Uncomment to not send a roundstart intercept report. Gamemodes may override this.
#NO_INTERCEPT_REPORT
-## Comment to disable weighting modes by how chaotic recent mode rolls were.
-WEIGH_BY_RECENT_CHAOS
-
-## The weight adjustment will be proportional to this power relative to the "ideal" weight range.
-## e.g. if we have a weight range of 0-5, and an exponent of 1, 6 will be weighted 1/2, 7 1/3 etc.
-## if exponent is 2, it'll be 1/4, 1/9 etc.
-CHAOS_EXPONENT 1
-
-## Probablities for game modes chosen in 'secret' and 'random' modes.
-## Default probablity is 1, increase to make that mode more likely to be picked.
-## Set to 0 to disable that mode.
-
-PROBABILITY TRAITOR 5
-PROBABILITY TRAITORBRO 2
-PROBABILITY TRAITORCHAN 4
-PROBABILITY INTERNAL_AFFAIRS 3
-PROBABILITY NUCLEAR 2
-PROBABILITY REVOLUTION 2
-PROBABILITY CULT 2
-PROBABILITY CHANGELING 2
-PROBABILITY WIZARD 4
-PROBABILITY MONKEY 0
-PROBABILITY METEOR 0
-PROBABILITY EXTENDED 0
-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
-
-## Percent weight reductions for three of the most recent modes
-
-REPEATED_MODE_ADJUST 45 30 10
-
-## Toggles for continuous modes.
-## Modes that aren't continuous will end the instant all antagonists are dead.
-
-CONTINUOUS TRAITOR
-CONTINUOUS TRAITORBRO
-CONTINUOUS TRAITORCHAN
-CONTINUOUS INTERNAL_AFFAIRS
-#CONTINUOUS NUCLEAR
-#CONTINUOUS REVOLUTION
-CONTINUOUS CULT
-CONTINUOUS CLOCKWORK_CULT
-CONTINUOUS CHANGELING
-CONTINUOUS WIZARD
-#CONTINUOUS MONKEY
-CONTINUOUS BLOODSUCKER
-CONTINUOUS HERESY
-
-##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
-
-CONTINUOUS METEOR
-CONTINUOUS EXTENDED
-CONTINUOUS SECRET_EXTENDED
-
-
-## Toggles for allowing midround antagonists (aka mulligan antagonists).
-## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created.
-
-MIDROUND_ANTAG TRAITOR
-#MIDROUND_ANTAG TRAITORBRO
-MIDROUND_ANTAG TRAITORCHAN
-MIDROUND_ANTAG INTERNAL_AFFAIRS
-#MIDROUND_ANTAG NUCLEAR
-#MIDROUND_ANTAG REVOLUTION
-MIDROUND_ANTAG CULT
-MIDROUND_ANTAG CLOCKWORK_CULT
-MIDROUND_ANTAG CHANGELING
-MIDROUND_ANTAG WIZARD
-#MIDROUND_ANTAG MONKEY
-
-## Toggles for whether this mode should force antags even if not enough players have it enabled.
-## If it's off, it just won't roll as many antags.
-#FORCE_ANTAG_COUNT TRAITOR
-#FORCE_ANTAG_COUNT TRAITORBRO
-#FORCE_ANTAG_COUNT TRAITORCHAN
-#FORCE_ANTAG_COUNT INTERNAL_AFFAIRS
-FORCE_ANTAG_COUNT NUCLEAR
-FORCE_ANTAG_COUNT REVOLUTION
-FORCE_ANTAG_COUNT CULT
-FORCE_ANTAG_COUNT CLOCKWORK_CULT
-#FORCE_ANTAG_COUNT CHANGELING
-#FORCE_ANTAG_COUNT WIZARD
-#FORCE_ANTAG_COUNT MONKEY
-
-## A config for how much each game mode's chaos level is.
-## All of them have reasonable defaults, but this can be used to adjust them.
-## 0-9, where 0 is lowest chaos (should only be extended) and 9 is highest (wizard? nukies?)
-#CHAOS_LEVEL EXTENDED 0
-
-## Uncomment these for overrides of the minimum / maximum number of players in a round type.
-## If you set any of these occasionally check to see if you still need them as the modes
-## will still be actively rebalanced around the SUGGESTED populations, not your overrides.
-## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to
-## VERY low numbers (< 5) can lead to errors if the roundtypes were not designed for that.
-
-#MIN_POP TRAITOR 0
-#MAX_POP TRAITOR -1
-
-#MIN_POP TRAITORBRO 0
-#MAX_POP TRAITORBRO -1
-
-#MIN_POP TRAITORCHAN 15
-#MAX_POP TRAITORCHAN -1
-
-#MIN_POP DOUBLE_AGENTS 25
-#MAX_POP DOUBLE_AGENTS -1
-
-#MIN_POP NUCLEAR 0
-#MAX_POP NUCLEAR -1
-
-#MIN_POP REVOLUTION 20
-#MAX_POP REVOLUTION -1
-
-#MIN_POP CULT 24
-#MAX_POP CULT -1
-
-#MIN_POP CLOCKWORK_CULT 24
-#MAX_POP CLOCKWORK_CULT -1
-
-#MIN_POP CHANGELING 15
-#MAX_POP CHANGELING -1
-
-#MIN_POP WIZARD 20
-#MAX_POP WIZARD -1
-
-#MIN_POP MONKEY 20
-#MAX_POP MONKEY -1
-
-#MIN_POP METEOR 0
-#MAX_POP METEOR -1
-
-#MIN_POP DEVIL 0
-#MAX_POP DEVIL -1
-
-#MIN_POP DEVIL_AGENTS 25
-#MAX_POP DEVIL_AGENTS -1
-
-## Setting at least one mode to be playable at 0/1 players is required.
-#MIN_POP EXTENDED 0
-#MAX_POP EXTENDED -1
-
+## If non-human species are barred from joining as a head of staff
+#ENFORCE_HUMAN_AUTHORITY
## The amount of time it takes for the emergency shuttle to be called, from round start.
SHUTTLE_REFUEL_DELAY 12000
-## Variables calculate how number of antagonists will scale to population.
-## Used as (Antagonists = Population / Coeff)
-## Set to 0 to disable scaling and use default numbers instead.
-TRAITOR_SCALING_COEFF 6
-BROTHER_SCALING_COEFF 6
-CHANGELING_SCALING_COEFF 6
-
-## Variables calculate how number of open security officer positions will scale to population.
-## Used as (Officers = Population / Coeff)
-## Set to 0 to disable scaling and use default numbers instead.
-SECURITY_SCALING_COEFF 8
-
-## The number of objectives traitors get.
-## Not including escaping/hijacking.
-TRAITOR_OBJECTIVES_AMOUNT 2
-BROTHER_OBJECTIVES_AMOUNT 2
-
-## Uncomment to prohibit jobs that start with loyalty
-## implants from being most antagonists.
-#PROTECT_ROLES_FROM_ANTAGONIST
-
-## Uncomment to prohibit assistants from becoming most antagonists.
-#PROTECT_ASSISTANT_FROM_ANTAGONIST
-
-## If non-human species are barred from joining as a head of staff
-#ENFORCE_HUMAN_AUTHORITY
-
-## If late-joining players have a chance to become a traitor/changeling
-ALLOW_LATEJOIN_ANTAGONISTS
## Comment this out to disable the antagonist reputation system. This system rewards players who participate in the game instead of greytiding by giving them slightly higher odds to
## roll antagonist in subsequent rounds until they get it.
@@ -303,9 +140,6 @@ ALLOW_AI_MULTICAM
## Uncomment to prevent the security cyborg module from being chosen
#DISABLE_SECBORG
-## Determines the minimum alert level for the security cyborg model to be chosen
-## 0: Green, 1:Blue, 2:Amber, 3:Red, 4:Delta
-MINIMUM_SECBORG_ALERT 3
## Peacekeeper Borg ###
## Uncomment to prevent the peacekeeper cyborg module from being chosen
@@ -643,39 +477,10 @@ BOX_RANDOM_ENGINE Box Empty,0
BOX_RANDOM_ENGINE Box Antimatter,1
BOX_RANDOM_ENGINE Box P.A.C.M.A.N,1
-## Whether or not there's a mode tier list vote after the secret/extended vote.
-MODETIER_VOTING
-
-## Number of modes dropped by the modetier vote during mode selection, after vote.
-DROPPED_MODES 3
## Whether the suicide verb is allowed.
# SUICIDE_ALLOWED
-## Breast cups selectable from the character creation menu. Keep em lowercase.
-BREASTS_CUPS_PREFS a
-BREASTS_CUPS_PREFS b
-BREASTS_CUPS_PREFS c
-BREASTS_CUPS_PREFS d
-BREASTS_CUPS_PREFS e
-
-## Minimum and maximum limits for penis length from the character creation menu.
-PENIS_MIN_INCHES_PREFS 1
-PENIS_MAX_INCHES_PREFS 20
-
-## Body size configs, the feature will be disabled if both min and max have the same value.
-BODY_SIZE_MIN 0.9
-BODY_SIZE_MAX 1.25
-
-## Pun-Pun movement slowdown given to characters with a body size smaller than this value,
-## to compensate for their smaller hitbox.
-## To disable, just make sure the value is lower than 'body_size_min'
-THRESHOLD_BODY_SIZE_PENALTY 1
-
-## Multiplier used in the smaller strides slowdown calculation.
-## Doesn't apply to floating or crawling mobs.
-BODY_SIZE_SLOWDOWN_MULTIPLIER 0
-
## Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
ALLOW_CUSTOM_SKINTONES
@@ -683,11 +488,6 @@ ALLOW_CUSTOM_SKINTONES
## Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
#USE_FIELD_OF_VISION
-## Default turf threshold to get dirt
-TURF_DIRT_THRESHOLD 100
-
-## Default alpha of dirt on spawn
-DIRT_ALPHA_STARTING 127
## Allows pAI custom holoforms
PAI_CUSTOM_HOLOFORMS
diff --git a/config/entries/jexp.txt b/config/entries/jexp.txt
new file mode 100644
index 0000000000..e46d743a66
--- /dev/null
+++ b/config/entries/jexp.txt
@@ -0,0 +1,23 @@
+## Uncomment this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing
+## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.
+## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.
+## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means
+## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
+#USE_AGE_RESTRICTION_FOR_JOBS
+
+## Uncomment this to have the job system use the player's account creation date, rather than the when they first joined the server for job timers.
+#USE_ACCOUNT_AGE_FOR_JOBS
+
+## Unhash this to track player playtime in the database. Requires database to be enabled.
+#USE_EXP_TRACKING
+## Unhash this to enable playtime requirements for head jobs.
+#USE_EXP_RESTRICTIONS_HEADS
+## Unhash this to override head jobs' playtime requirements with this number of hours.
+## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes.
+#USE_EXP_RESTRICTIONS_HEADS_HOURS 3
+## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime.
+#USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT
+## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist.
+#USE_EXP_RESTRICTIONS_OTHER
+## Allows admins to bypass job playtime requirements.
+#USE_EXP_RESTRICTIONS_ADMIN_BYPASS
diff --git a/config/entries/logging.txt b/config/entries/logging.txt
new file mode 100644
index 0000000000..1690dbfacf
--- /dev/null
+++ b/config/entries/logging.txt
@@ -0,0 +1,85 @@
+## log OOC channel
+LOG_OOC
+
+## log client Say
+LOG_SAY
+
+## log admin actions
+@LOG_ADMIN
+
+## log admin chat
+@LOG_ADMINCHAT
+
+## log client access (logon/logoff)
+LOG_ACCESS
+
+## log game actions (start of round, results, etc.)
+LOG_GAME
+
+## log player votes
+LOG_VOTE
+
+## log player crafting
+LOG_CRAFT
+
+## log client Whisper
+LOG_WHISPER
+
+## log emotes
+LOG_EMOTE
+
+## log attack messages
+LOG_ATTACK
+
+## log pda messages
+LOG_PDA
+
+## log telecomms messages
+LOG_TELECOMMS
+
+## log prayers
+LOG_PRAYER
+
+## log lawchanges
+LOG_LAW
+
+## log crew manifest to seperate file
+LOG_MANIFEST
+
+## log job divide debugging information
+LOG_JOB_DEBUG
+
+## Log shuttle related actions
+LOG_SHUTTLE
+
+## log all world.Topic() calls
+LOG_WORLD_TOPIC
+
+## enables use of the proc twitterize() that lets you take a large list of strings and turn it into a JSON file of tweet sized strings.
+## As an example of how this could be """useful""" look towards Poly (https://twitter.com/Poly_the_Parrot)
+# LOG_TWITTER
+
+## Enable logging pictures
+LOG_PICTURES
+
+## Log camera pictures
+PICTURE_LOGGING_CAMERA
+
+## log virus and actions
+LOG_VIRUS
+
+## Log all raw hrefs of tgui, rather than letting tgui logging handle it. KEEP THIS OFF UNLESS YOU KNOW WHAT YOU ARE DOING.
+# EMERGENCY_TGUI_LOGGING
+
+## Cooldown time for each occurance of a unique runtime in deciseconds
+ERROR_COOLDOWN 600
+
+## Max runtimes of one type before silencing
+ERROR_LIMIT 50
+
+## How long an unique runtime will be silenced for when reaching limit in deciseconds
+ERROR_SILENCE_TIME 6000
+
+How long to wait between messaging admins about an unique runtime
+ERROR_MSG_DELAY 50
+
diff --git a/config/entries/movespeed.txt b/config/entries/movespeed.txt
new file mode 100644
index 0000000000..67f9ab503b
--- /dev/null
+++ b/config/entries/movespeed.txt
@@ -0,0 +1,56 @@
+## MOB MOVEMENT ###
+
+## We suggest editing these variables ingame to find a good speed for your server.
+## To do this you must be a high level admin. Open the 'debug' tab ingame.
+## Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name.
+
+## These values get directly added to values and totals ingame.
+## To speed things up make the number negative, to slow things down, make the number positive.
+
+## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
+RUN_DELAY 1.5
+WALK_DELAY 4
+
+## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE!
+## Entries completely override all subtypes. Later entries have precedence over earlier entries.
+## This means if you put /mob 0 on the last entry, it will null out all changes, while if you put /mob as the first entry and
+## /mob/living/carbon/human on the last entry, the last entry will override the first.
+MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien -1
+MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/sentinel -0.75
+MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/drone -0.5
+MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/royal/praetorian 0
+MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/royal/queen 2
+
+## The above, only when a mob is FLOATING
+MULTIPLICATIVE_MOVESPEED_FLOATING /mob/living/carbon -0.5
+MULTIPLICATIVE_MOVESPEED_FLOATING /mob/living 0
+
+## Whether or not sprint is enabled
+SPRINT_ENABLED 0
+
+## When sprint is off, how much does getting staggered slow you
+SPRINTLESS_STAGGER_SLOWDOWN 0.5
+
+## When sprint is off, how much does getting shoved off balance slow you
+SPRINTLESS_OFF_BALANCE_SLOWDOWN 0.85
+
+## Melee stagger power multiplier
+MELEE_STAGGER_FACTOR 1
+
+## Sprint speed increase
+SPRINT_SPEED_INCREASE 1
+
+## Max tiles/second increase from sprint
+SPRINT_MAX_TILES_INCREASE 5
+
+## Absolute max speed sprint can make someone go (tiles/second)
+SPRINT_ABSOLUTE_MAX_TILES 13
+
+## Max sprint buffer
+SPRINT_BUFFER_MAX 24
+
+## Stamina/tile when bufer empty
+SPRINT_STAMINA_COST 1.4
+
+## Buffer regen/decisecond - 0.4 = 4/second
+SPRINT_BUFFER_REGEN_PER_DS 0.4
diff --git a/config/persistence.txt b/config/entries/persistence.txt
similarity index 100%
rename from config/persistence.txt
rename to config/entries/persistence.txt
diff --git a/config/entries/policy.txt b/config/entries/policy.txt
new file mode 100644
index 0000000000..07f64b5b2a
--- /dev/null
+++ b/config/entries/policy.txt
@@ -0,0 +1,24 @@
+## Policy configuration
+## Current valid keys are:
+## ON_CLONE - displayed after a successful cloning operation to the cloned person
+## ON_DEFIB_INTACT - displayed after defibbing before memory loss time threshold
+## ON_DEFIB_LATE - displayed after defibbing post memory loss time threshold
+## SDGF - displayed on SDGF clone spawning
+## SDGF_GOOD - displayed on SDGF clone spawning, if the clone is loyal
+## SDGF_BAD - displayed on SDGF clone spawning, if the clone is not loyal
+## PAI - displayed on PAI personality being loaded
+## EXAMPLE:
+## POLICY ON_CLONE insert text here span classes are fully supported
+
+POLICY ON_CLONE Your thoughts are hazy as the cloning algorithms reboot your consciousness. Unfortunately for you, the imperfect nature of the process has left out your more recent, less entrenched memories.
You only remember vague details of your death, without clear recollection of who or what is specifically responsible for your demise.
(If you were murdered, you do not remember the exact name or appearance of your killer, only vague details of how they killed you rather than the exact murder weapon. (ex: drank something and blanked out, felt an impact in the back and bled out)
If you died to environmental hazards like ash storms or spacing, this is not as applicable -- however, keep in mind that if someone set you up to die to that, like being tossed forcefully into space, that the previous clause of not remembering killer name in a murder applies!
+
+POLICY ON_DEFIB_LATE Your mind barely responds as first as you are forcefully returned to the world of the living after all too long in a state of decay. While medicine may restore your brain functions, you can't seem to remember your latest memories...
You only remember vague details of your death, without clear recollection of who or what is specifically responsible for your demise.
(If you were murdered, you do not remember the exact name or appearance of your killer, only vague details of how they killed you rather than the exact murder weapon. (ex: drank something and blanked out, felt an impact in the back and bled out)
If you died to environmental hazards like ash storms or spacing, this is not as applicable -- however, keep in mind that if someone set you up to die to that, like being tossed forcefully into space, that the previous clause of not remembering killer name in a murder applies!
+
+POLICY ON_DEFIB_INTACT You barely miss a beat as you gasp, awakening from the slumber of the deceased. The rapid resuscitation has saved you from the worst effects of brain damage.
You recall all information leading up to your death and exact details on method of death and killer if applicable, as long as you were conscious to witness such.
+
+POLICY PAI If you are given an ERP-related directive without OOC consent, ahelp immediately.w
+
+## Misc entries for above
+
+## Defib time limit for "cloning memory disorder" memory loss in seconds
+DEFIB_CMD_TIME_LIMIT 300
diff --git a/config/resources.txt b/config/entries/resources.txt
similarity index 100%
rename from config/resources.txt
rename to config/entries/resources.txt
diff --git a/config/respawns.txt b/config/entries/respawns.txt
similarity index 90%
rename from config/respawns.txt
rename to config/entries/respawns.txt
index 804a856a93..41c76eaabc 100644
--- a/config/respawns.txt
+++ b/config/entries/respawns.txt
@@ -2,7 +2,7 @@
RESPAWNS_ENABLED
## Minutes delay before allowing respawns, either from death or observing. Not an integer.
-RESPAWN_DELAY 15.0
+RESPAWN_DELAY 10.0
## Minutes delay before allowing respawns, if the user cryo'd. Not an integer.
RESPAWN_DELAY_CRYO 5.0
@@ -16,8 +16,8 @@ ALLOW_NON_ASSISTANT_RESPAWN
## Allow respawning as the same character
# ALLOW_SAME_CHARACTER_RESPAWN
-## Observing is considered a respawn for the purposes of role lockouts. Defaults to disabled. When disabled, only RESPAWNING rather than returning from observe locks you out.
-# RESPAWN_PENALTY_INCLUDES_OBSERVE
+## Observing is considered a respawn for the purposes of role lockouts. Defaults to disabled. When disabled, only RESPAWNING rather than returning from observer locks you out.
+RESPAWN_PENALTY_INCLUDES_OBSERVE
## Time in minutes from round start before respawn is enabled
RESPAWN_MINIMUM_DELAY_ROUNDSTART 30.0
diff --git a/config/entries/security.txt b/config/entries/security.txt
new file mode 100644
index 0000000000..e6a13d5cdf
--- /dev/null
+++ b/config/entries/security.txt
@@ -0,0 +1,38 @@
+### FAIL2TOPIC:
+### Automated IP bans for world/Topic() spammers
+### NOTE FOR WINDOWS HOSTS: This requires you to be running dreamdaemon as an administrator for it to work at all. TGS3 handles this automatically, and honestly there's no reason not to be using TGS3 if you're hosting on Windows.
+### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing.
+## Enabled
+#FAIL2TOPIC_ENABLED
+## Minimum wait time in deciseconds between valid requests
+FAIL2TOPIC_RATE_LIMIT 10
+## Number of requests after breaching rate limit that triggers a ban
+FAIL2TOPIC_MAX_FAILS 5
+## Firewall rule name used on physical server
+## FOR LINUX HOSTS: This is used as the chain name. The iptables chain doesn't get created or hooked up to INPUT automatically, so you'll have to get that set up yourself. Recommended name: BYOND
+@FAIL2TOPIC_RULE_NAME _dd_fail2topic
+
+## Topic max size before it's rejected, using BYOND length()
+TOPIC_MAX_SIZE 8192
+
+## Fail2topic rate limit whitelist. Using any external IPs is not recommended.
+# TOPIC_RATE_LIMIT_WHITELIST 127.0.0.1:1337
+
+## TOPIC RATE LIMITING
+## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute.
+## Admins are exempt from these limits.
+## Hitting the minute limit notifies admins.
+## Set to 0 or comment out to disable.
+SECOND_TOPIC_LIMIT 10
+
+MINUTE_TOPIC_LIMIT 100
+
+## CLICK RATE LIMITING
+## Same as above, but applies to clicking on objects in the game window.
+## This should be a higher then the interface limit to allow for the spam clickly nature of most battles.
+## Admins are exempt from these limits.
+## Hitting the minute limit notifies admins.
+## Set to 0 to disable.
+SECOND_CLICK_LIMIT 15
+
+MINUTE_CLICK_LIMIT 400
diff --git a/config/entries/server.txt b/config/entries/server.txt
new file mode 100644
index 0000000000..0ffd5b21a3
--- /dev/null
+++ b/config/entries/server.txt
@@ -0,0 +1,68 @@
+## Enable automatic profiling - Byond 513.1506 and newer only.
+#AUTO_PROFILE
+
+## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice.
+# SERVERNAME tgstation
+
+## Server tagline: This will appear right below the server's title.
+# SERVERTAGLINE A generic TG-based server
+
+## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters.
+# SERVERSQLNAME tgstation
+
+## Station name: The name of the station as it is referred to in-game. If commented out, the game will generate a random name instead.
+STATIONNAME Space Station 13
+
+## Put on byond hub: Uncomment this to put your server on the byond hub.
+#HUB
+
+## Defines the ticklimit for subsystem initialization (In percents of a byond tick). Lower makes world start smoother. Higher makes it faster.
+##This is currently a testing optimized setting. A good value for production would be 98.
+TICK_LIMIT_MC_INIT 500
+
+##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second).
+## This also controls the client network update rate, as well as the default client fps
+TICKLAG 0.5
+
+##Can also be set as per-second value, the following value is identical to the above.
+#FPS 20
+
+## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server
+#USEWHITELIST
+
+## set a hosted by name for unix platforms
+HOSTEDBY Yournamehere
+
+## System command that invokes youtube-dl, used by Play Internet Sound.
+## You can install youtube-dl with
+## "pip install youtube-dl" if you have pip installed
+## from https://github.com/rg3/youtube-dl/releases
+## or your package manager
+## The default value assumes youtube-dl is in your system PATH
+# INVOKE_YOUTUBEDL youtube-dl
+
+###Master Controller High Pop Mode###
+
+##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc)
+##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc)
+## Setting this to 0 will prevent the Master Controller from ticking
+BASE_MC_TICK_RATE 1
+
+##High population MC tick rate
+## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2
+## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like
+## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%.
+## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5)
+HIGH_POP_MC_TICK_RATE 1.1
+
+##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count)
+HIGH_POP_MC_MODE_AMOUNT 65
+
+##Disengage high pop mode if player count drops below this
+DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
+
+## Uncomment to prevent the world from sleeping while no players are connected after initializations
+#RESUME_AFTER_INITIALIZATIONS
+
+## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools.
+#ROUNDS_UNTIL_HARD_RESTART 10
diff --git a/config/entries/stamina_combat.txt b/config/entries/stamina_combat.txt
new file mode 100644
index 0000000000..5339502586
--- /dev/null
+++ b/config/entries/stamina_combat.txt
@@ -0,0 +1,28 @@
+## haha these keys are going to collide with other stuff for sure someday
+
+## OUT_OF_COMBAT_TIMER, PERCENT_REGENERATION_OUT_OF_COMBAT disabled - combat mode has been yanked from the codebase and made a UI toggle.
+
+## Maximum stamina buffer
+BUFFER_MAX 25
+
+## Seconds until out of combat regen kicks in
+# OUT_OF_COMBAT_TIMER 15
+
+## Base regen per second
+BASE_REGENERATION 3.5
+
+## Regenerate this % of total buffer when out of combat
+# PERCENT_REGENERATION_OUT_OF_COMBAT
+
+## Seconds after an action for which regeneration is penalized
+POST_ACTION_PENALTY_DELAY 5
+
+## Factor to multiply by for penalizing post action regen
+POST_ACTION_PENALTY_FACTOR 0.25
+
+## Factor to multiply by for stamina usage past buffer into health
+OVERDRAW_PENALTY_FACTOR 1.5
+
+## Completely disable stamina combat by giving people infinite buffers.
+## Has serious balance implications.
+# DISABLE_STAMBUFFER
diff --git a/config/job_threats.txt b/config/entries/threat.txt
similarity index 91%
rename from config/job_threats.txt
rename to config/entries/threat.txt
index e57edb66e4..fa7c5cffa5 100644
--- a/config/job_threats.txt
+++ b/config/entries/threat.txt
@@ -6,4 +6,4 @@
## Custom antag threat values, see above
## e.g.
-## ANTAG_THREAT Traitor 5
\ No newline at end of file
+## ANTAG_THREAT Traitor 5
diff --git a/config/entries/urls.txt b/config/entries/urls.txt
new file mode 100644
index 0000000000..f307245055
--- /dev/null
+++ b/config/entries/urls.txt
@@ -0,0 +1,37 @@
+## set a server location for world reboot. Don't include the byond://, just give the address and port.
+## Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted.
+# SERVER ss13.example.com:2506
+
+## forum address
+# FORUMURL https://citadel-station.net/forum/
+
+## Wiki address
+# WIKIURL https://citadel-station.net/wikimain/index.php
+
+## Wiki address of upstream
+WIKIURLTG http://www.tgstation13.org/wiki
+
+## Rules address
+# RULESURL https://citadel-station.net/wikimain/index.php?title=Rules_-_Main
+
+## Github address
+# GITHUBURL https://github.com/Citadel-Station-13/Citadel-Station-13
+
+## Round specific stats address
+## Link to round specific parsed logs; IE statbus. It is appended with the RoundID automatically by ticker/Reboot()
+## This will take priority over the game logs address during reboot.
+## Example: https://atlantaned.space/statbus/round.php?round=
+# ROUNDSTATSURL http://citadel-station.net/slimbus/
+
+## Game Logs address
+## Incase you don't have a fancy parsing system, but still want players to be able to find where you keep your server's logs.
+## Example: https://tgstation13.org/parsed-logs/basil/data/logs/
+# GAMELOGURL
+
+## Github repo id
+##This can be found by going to https://api.github.com/users//repos
+##Or https://api.github.com/orgs//repos if the repo owner is an organization
+# GITHUBREPOID 62485194
+
+## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
+# BANAPPEALS https://citadel-station.net/forum/viewforum.php?f=8&sid=a0ce5331d5594ef6d49661609c6f4ff9
diff --git a/config/entries/vote.txt b/config/entries/vote.txt
new file mode 100644
index 0000000000..14c7c36a4e
--- /dev/null
+++ b/config/entries/vote.txt
@@ -0,0 +1,67 @@
+## allow players to initiate a restart vote
+#ALLOW_VOTE_RESTART
+
+## allow players to initate a mode-change start
+#ALLOW_VOTE_MODE
+
+## min delay (deciseconds) between voting sessions (default 10 minutes)
+VOTE_DELAY 6000
+
+## time period (deciseconds) which voting session will last (default 1 minute)
+VOTE_PERIOD 600
+
+## autovote initial delay (deciseconds) before first automatic transfer vote call (default 120 minutes)
+## Set to 0 to disable the subsystem altogether.
+VOTE_AUTOTRANSFER_INITIAL 72000
+
+## autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)
+VOTE_AUTOTRANSFER_INTERVAL 18000
+
+## autovote maximum votes until automatic transfer call. (default 4)
+## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
+## Set to -1 to disable the maximum votes cap.
+VOTE_AUTOTRANSFER_MAXIMUM 4
+
+## prevents dead players from voting or starting votes
+# NO_DEAD_VOTE
+
+## players' votes default to "No vote" (otherwise, default to "No change")
+# DEFAULT_NO_VOTE
+
+## Map rotation
+## You should edit maps.txt to match your configuration when you enable this.
+MAPROTATION
+
+## TG-style map rotation
+## By default, Citadel uses a more traditional method of map voting, where at the end of a round, players are given a full upfront vote.
+## This PR will disable that, and will make the server use TG's map rotation instead.
+#TGSTYLE_MAPROTATION
+
+## Map voting
+## Allows players to vote for their preffered map
+## When it's set to zero, the map will be randomly picked each round
+ALLOW_MAP_VOTING 1
+
+## Map voting type
+## Determines what kind of vote the map vote is
+## Options are:
+## PLURALITY (default, only vote for one option)
+## APPROVAL (can vote for as many as you want), I
+## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
+## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
+MAP_VOTE_TYPE APPROVAL
+
+## Map rotate chance delta
+## This is the chance of map rotation factored to the round length.
+## A value of 1 would mean the map rotation chance is the round length in minutes (hour long round == 60% rotation chance)
+## A value of 0.5 would mean the map rotation chance is half of the round length in minutes (hour long round == 30% rotation chance)
+#MAPROTATIONCHANCEDELTA 0.75
+
+## Whether or not there's a mode tier list vote after the secret/extended vote.
+MODETIER_VOTING
+
+## Number of modes dropped by the modetier vote during mode selection, after vote.
+DROPPED_MODES 3
+
+## Whether or not you must be readied up to vote gamemode
+#MUST_BE_READIED_TO_VOTE_GAMEMODE
diff --git a/config/external_rsc_urls.txt b/config/external_rsc_urls.txt
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/config/policy.txt b/config/policy.txt
deleted file mode 100644
index 502b525ad0..0000000000
--- a/config/policy.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-## Policy configuration
-## Current valid keys are:
-## ON_CLONE - displayed after a successful cloning operation to the cloned person
-## ON_DEFIB_INTACT - displayed after defibbing before memory loss time threshold
-## ON_DEFIB_LATE - displayed after defibbing post memory loss time threshold
-## SDGF - displayed on SDGF clone spawning
-## SDGF_GOOD - displayed on SDGF clone spawning, if the clone is loyal
-## SDGF_BAD - displayed on SDGF clone spawning, if the clone is not loyal
-## PAI - displayed on PAI personality being loaded
-## EXAMPLE:
-## POLICYCONFIG ON_CLONE insert text here span classes are fully supported
-
-## Misc entries for above
-
-## Defib time limit for "cloning memory disorder" memory loss in seconds
-# DEFIB_CMD_TIME_LIMIT 300
diff --git a/dependencies.sh b/dependencies.sh
index a86c58a5a2..d7b56ae5b9 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -4,14 +4,14 @@
#Final authority on what's required to fully build the project
# byond version
-export BYOND_MAJOR=513
-export BYOND_MINOR=1536
+export BYOND_MAJOR=514
+export BYOND_MINOR=1556
#rust_g git tag
export RUST_G_VERSION=0.4.8
#auxmos git tag
-export AUXMOS_VERSION=v0.2.0
+export AUXMOS_VERSION=v0.2.2
#node version
export NODE_VERSION=12
diff --git a/html/changelog.html b/html/changelog.html
index 5b5d5bef86..e487901940 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,70 @@
-->
+
31 July 2021
+
MrJWhit updated:
+
+ - Fixes some minor mistakes around space near boxstation.
+
+
TripleShades updated:
+
+ - Fountain area to public mining station-side tweak: Moved around the tables and chairs and monitor at public mining station-side
+
+
WanderingFox95 updated:
+
+ - Added new ruin maps: The Bathhouse, The Library, The Engineering outpost, The Hotsprings(un-cursed), Lust, Wrath and an alternate spawn for the BDM in the form of a mining outpost, based on the same Ruins on the Ice Moon. removed: A lot of the fun items within the ice moon-based ruins that would break mining even more and trading cards.
+ - Yes, this includes that the lavaland version of the hot spring is literally just water and not cursed. tweak: Also "fixed" that only one version of the BDM ruin ever spawns. Not sure it needed fixing but even locally hosted, only blooddrunk2.dmm would spawn. Since I added another spawn for the BDM, I fixed that too.
+
+
+
29 July 2021
+
EmeraldSundisk updated:
+
+ - Adds decals between Virology and the general Medbay to provide clarity
+ - Adds an airlock with access to the Engineering Cooling Loop
+ - The Maintenance Theater now has a suitable amount of dust
+ - Removed an errant entertainment monitor left in the morgue
+ - Removed redundant scrubber piping in and around the bar and kitchen tweak: Slightly readjusts an airpipe to take advantage of newfound space tweak: The Toxins Lab has received (predominantly) visual adjustments as to render it more in line with the general science department tweak: Toxins Storage is no longer its own area and as such needn't worry about APCs
+ - Hydroponics now has a proper APC as intended
+
+
+
27 July 2021
+
Putnam3145 updated:
+
+ - Generic fires work now
+ - A knock-on effect of the HE pipe change is that space cooling is ~8.4x as powerful
+
+
+
26 July 2021
+
SandPoot updated:
+
+ - Removes a sneaky transform button on the vore panel.
+
+
+
24 July 2021
+
MrJWhit updated:
+
+ - Replaces the northwest maint room on box with a sadness room
+ - Replaces bar stripper room with an arcade on boxstation
+ - Squished the west bathrooms a bit and made a room to sell things on boxstation.
+ - Southeast maint hallway on box is now ziggy and zaggier.
+ - Fixed pipes being not connected with the recent map PR for boxstation.
+
+
Putnam3145 updated:
+
+ - hallucination now bottoms out at 0
+ - supermatter now causes only half the hallucinations
+
+
cadyn updated:
+
+ - auxmos bump for dependencies.sh
+
+
+
23 July 2021
+
silicons updated:
+
+ - Batons are slightly more powerful.
+
+
19 July 2021
Arturlang updated:
@@ -523,92 +587,6 @@
- Added an intercom to toxin's launch for the doppler
- The fake nuke auth disk in the library
-
-
29 May 2021
-
Kraseo updated:
-
- - No more slamming into people while bloodcrawled.
-
-
Linzolle updated:
-
- - brand intelligence event works again
-
-
keronshb updated:
-
- - swag outfit available in clothesmate
- - swag shoes availble in clothesmate resprite: changed swag shoes icon to the one twaticus made.
- - Adds the clown mob spawner for admins
-
-
zeroisthebiggay updated:
-
- - puglism damage can no longer stack with scarp
-
-
-
26 May 2021
-
bunny232 updated:
-
- - Removed two random 'captain's office' tiles from space on meta station
-
-
-
24 May 2021
-
zeroisthebiggay updated:
-
- - New traitor item: the Mauler Gauntlets! Punch hard, punch good! Eight telecrystals, buy today!
- - hairs from Airborne Snitch
-
-
-
23 May 2021
-
Putnam3145 updated:
-
- - Antag and species no longer remove all traits if one has a blacklisted trait
-
-
WanderingFox95 updated:
-
- - Replaced the antlers showing up when you select deer ears with actual deer ears. Literally why was that even a thing before?
- - Straight rabbit ears are now a thing.
-
-
keronshb updated:
-
- - 30 > 25 pop req for contractor kit
- - adds a special hud for simple mobs.
- - a lot of >32x32 mobs now have icons for their health dolls
-
-
-
21 May 2021
-
Putnam3145 updated:
-
- - Fixed activity being attached to minds instead of mobs on antag attach.
-
-
-
20 May 2021
-
qweq12yt updated:
-
- - Fixed void cloak voiding itself into oblivion.
- - You can now order emag shuttles again.
-
-
timothyteakettle updated:
-
- - ports rp's marking system
-
-
-
19 May 2021
-
WanderingFox95 updated:
-
- - The E-Fink, a mending tool for food.
- - A backwards bladeslice. (Yes, for the E-fink)
- - And Icons for the E-fink, of course.
-
-
shellspeed1 updated:
-
- - Survival pods can now be designated as requiring power. Survival pods with this feature should include an APC when created and will run out of power rather quickly if no source is added. Perfect for true emergencies.
- - An empty survival pod has been added to the mining vendor. This is an extremely barebones pod featuring only a gps, table, apc, and the standard fridge for some donk pockets.
-
-
zeroisthebiggay updated:
-
- - New Alcohol Amaretto and various cocktails
- - more drink mixture flavortext
- - you're going to Baystation
-
GoonStation 13 Development Team
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index b7ec1b0ab3..ece29da74f 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -29702,3 +29702,55 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
timothyteakettle:
- bugfix: anthros can now select the cow tail
- rscadd: new quirk that allows you to eat trash
+2021-07-23:
+ silicons:
+ - balance: Batons are slightly more powerful.
+2021-07-24:
+ MrJWhit:
+ - rscadd: Replaces the northwest maint room on box with a sadness room
+ - rscadd: Replaces bar stripper room with an arcade on boxstation
+ - rscadd: Squished the west bathrooms a bit and made a room to sell things on boxstation.
+ - balance: Southeast maint hallway on box is now ziggy and zaggier.
+ - bugfix: Fixed pipes being not connected with the recent map PR for boxstation.
+ Putnam3145:
+ - bugfix: hallucination now bottoms out at 0
+ - balance: supermatter now causes only half the hallucinations
+ cadyn:
+ - server: auxmos bump for dependencies.sh
+2021-07-26:
+ SandPoot:
+ - rscdel: Removes a sneaky transform button on the vore panel.
+2021-07-27:
+ Putnam3145:
+ - bugfix: Generic fires work now
+ - balance: A knock-on effect of the HE pipe change is that space cooling is ~8.4x
+ as powerful
+2021-07-29:
+ EmeraldSundisk:
+ - rscadd: Adds decals between Virology and the general Medbay to provide clarity
+ - rscadd: Adds an airlock with access to the Engineering Cooling Loop
+ - rscadd: The Maintenance Theater now has a suitable amount of dust
+ - rscdel: Removed an errant entertainment monitor left in the morgue
+ - rscdel: 'Removed redundant scrubber piping in and around the bar and kitchen tweak:
+ Slightly readjusts an airpipe to take advantage of newfound space tweak: The
+ Toxins Lab has received (predominantly) visual adjustments as to render it more
+ in line with the general science department tweak: Toxins Storage is no longer
+ its own area and as such needn''t worry about APCs'
+ - bugfix: Hydroponics now has a proper APC as intended
+2021-07-31:
+ MrJWhit:
+ - bugfix: Fixes some minor mistakes around space near boxstation.
+ TripleShades:
+ - rscadd: 'Fountain area to public mining station-side tweak: Moved around the tables
+ and chairs and monitor at public mining station-side'
+ WanderingFox95:
+ - rscadd: 'Added new ruin maps: The Bathhouse, The Library, The Engineering outpost,
+ The Hotsprings(un-cursed), Lust, Wrath and an alternate spawn for the BDM in
+ the form of a mining outpost, based on the same Ruins on the Ice Moon. removed:
+ A lot of the fun items within the ice moon-based ruins that would break mining
+ even more and trading cards.'
+ - balance: 'Yes, this includes that the lavaland version of the hot spring is literally
+ just water and not cursed. tweak: Also "fixed" that only one version of the
+ BDM ruin ever spawns. Not sure it needed fixing but even locally hosted, only
+ blooddrunk2.dmm would spawn. Since I added another spawn for the BDM, I fixed
+ that too.'
diff --git a/html/changelogs/AutoChangeLog-pr-14973.yml b/html/changelogs/AutoChangeLog-pr-14973.yml
new file mode 100644
index 0000000000..64cb63199d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14973.yml
@@ -0,0 +1,5 @@
+author: "TripleShades"
+delete-after: True
+changes:
+ - rscadd: "Decorative (read: Station-safe) water tile in the code"
+ - bugfix: "Pubby's new water feature wont kill atmosphere anymore"
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
index 6be13b75d9..128285628a 100644
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ b/modular_citadel/code/modules/client/loadout/neck.dm
@@ -103,6 +103,6 @@
/datum/gear/neck/cancloak
name = "Canvas Cloak"
- path = /obj/item/clothing/neck/cancloak/polychromic
+ path = /obj/item/clothing/neck/cloak/cancloak/polychromic
loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC
loadout_initial_colors = list("#585858", "#373737", "#BEBEBE")
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index 60c009bc29..043d9e5603 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -109,7 +109,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
ZI.Insert(SM)
log_reagent("FERMICHEM: [M] ckey: [M.key]'s zombie_infection has been transferred to their clone")
- var/list/policies = CONFIG_GET(keyed_list/policyconfig)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
var/policy = policies[POLICYCONFIG_SDGF]
if(policy)
to_chat(SM,policy)
@@ -127,7 +127,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
else
to_chat(SM, "While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original.")
log_reagent("FERMICHEM: [SM] ckey: [SM.key]'s is not bound by [M] ckey [M.key]'s will, and is free to determine their own goals, while respecting and acting as their origin.")
-
+
to_chat(SM, "You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with your original, a perfect clone of your origin.")
SM.client?.change_view(CONFIG_GET(string/default_view))
to_chat(M, "You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, a mass splits from you, and find yourself face to face with yourself.")
diff --git a/tgstation.dme b/tgstation.dme
index 298443fd4e..3a0b6b6250 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -17,7 +17,7 @@
#include "_maps\_basemap.dm"
#include "code\_compile_options.dm"
#include "code\world.dm"
-#include "code\__DEFINES\_extools.dm"
+#include "code\__DEFINES\_auxtools.dm"
#include "code\__DEFINES\_globals.dm"
#include "code\__DEFINES\_protect.dm"
#include "code\__DEFINES\_tick.dm"
@@ -109,6 +109,7 @@
#include "code\__DEFINES\sight.dm"
#include "code\__DEFINES\sound.dm"
#include "code\__DEFINES\spaceman_dmm.dm"
+#include "code\__DEFINES\spans.dm"
#include "code\__DEFINES\species.dm"
#include "code\__DEFINES\stat.dm"
#include "code\__DEFINES\stat_tracking.dm"
@@ -291,20 +292,32 @@
#include "code\controllers\subsystem.dm"
#include "code\controllers\configuration\config_entry.dm"
#include "code\controllers\configuration\configuration.dm"
+#include "code\controllers\configuration\entries\admin.dm"
+#include "code\controllers\configuration\entries\alert.dm"
+#include "code\controllers\configuration\entries\antag_rep.dm"
#include "code\controllers\configuration\entries\comms.dm"
+#include "code\controllers\configuration\entries\connections.dm"
#include "code\controllers\configuration\entries\dbconfig.dm"
+#include "code\controllers\configuration\entries\debris.dm"
#include "code\controllers\configuration\entries\donator.dm"
#include "code\controllers\configuration\entries\dynamic.dm"
-#include "code\controllers\configuration\entries\fail2topic.dm"
-#include "code\controllers\configuration\entries\game_options.dm"
+#include "code\controllers\configuration\entries\fetish_content.dm"
+#include "code\controllers\configuration\entries\gamemodes.dm"
#include "code\controllers\configuration\entries\general.dm"
+#include "code\controllers\configuration\entries\jexp.dm"
#include "code\controllers\configuration\entries\logging.dm"
+#include "code\controllers\configuration\entries\movespeed.dm"
#include "code\controllers\configuration\entries\persistence.dm"
#include "code\controllers\configuration\entries\plushies.dm"
#include "code\controllers\configuration\entries\policy.dm"
#include "code\controllers\configuration\entries\resources.dm"
#include "code\controllers\configuration\entries\respawns.dm"
+#include "code\controllers\configuration\entries\security.dm"
+#include "code\controllers\configuration\entries\server.dm"
#include "code\controllers\configuration\entries\stamina_combat.dm"
+#include "code\controllers\configuration\entries\threat.dm"
+#include "code\controllers\configuration\entries\urls.dm"
+#include "code\controllers\configuration\entries\vote.dm"
#include "code\controllers\subsystem\achievements.dm"
#include "code\controllers\subsystem\activity.dm"
#include "code\controllers\subsystem\adjacent_air.dm"
@@ -3621,6 +3634,7 @@
#include "code\modules\vehicles\atv.dm"
#include "code\modules\vehicles\bicycle.dm"
#include "code\modules\vehicles\lavaboat.dm"
+#include "code\modules\vehicles\motorized_wheelchair.dm"
#include "code\modules\vehicles\pimpin_ride.dm"
#include "code\modules\vehicles\ridden.dm"
#include "code\modules\vehicles\scooter.dm"
@@ -3632,7 +3646,6 @@
#include "code\modules\vehicles\wheelchair.dm"
#include "code\modules\vehicles\cars\car.dm"
#include "code\modules\vehicles\cars\clowncar.dm"
-#include "code\modules\vehicles\motorized_wheelchair.dm"
#include "code\modules\vending\_vending.dm"
#include "code\modules\vending\assist.dm"
#include "code\modules\vending\autodrobe.dm"
diff --git a/tools/build/build.js b/tools/build/build.js
index 33767ebd72..0f04441334 100755
--- a/tools/build/build.js
+++ b/tools/build/build.js
@@ -124,7 +124,7 @@ const taskDm = (...injectedDefines) => new Task('dm')
.depends('html/**')
.depends('icons/**')
.depends('interface/**')
- .depends(process.platform === 'win32' ? 'byond-extools.*' : 'libbyond-extools.*')
+ .depends(process.platform === 'win32' ? 'auxmos.*' : 'libauxmos.*')
.depends('tgui/public/tgui.html')
.depends('tgui/public/*.bundle.*')
.depends(`${DME_NAME}.dme`)
diff --git a/tools/ci/install_auxmos.sh b/tools/ci/install_auxmos.sh
new file mode 100644
index 0000000000..bfdbe7199b
--- /dev/null
+++ b/tools/ci/install_auxmos.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+source dependencies.sh
+
+mkdir -p ~/.byond/bin
+wget -O ~/.byond/bin/libauxmos.so "https://github.com/Putnam3145/auxmos/releases/download/${AUXMOS_VERSION}/libauxmos.so"
+chmod +x ~/.byond/bin/libauxmos.so
+ldd ~/.byond/bin/libauxmos.so
diff --git a/tools/ci/install_rust_g.sh b/tools/ci/install_rust_g.sh
old mode 100755
new mode 100644
diff --git a/tools/ci/run_server.sh b/tools/ci/run_server.sh
index ef548370f1..4d943846f0 100755
--- a/tools/ci/run_server.sh
+++ b/tools/ci/run_server.sh
@@ -7,11 +7,6 @@ mkdir ci_test/config
#test config
cp tools/ci/ci_config.txt ci_test/config/config.txt
-#throw extools into ldd
-cp libbyond-extools.so ~/.byond/bin/libbyond-extools.so
-chmod +x ~/.byond/bin/libbyond-extools.so
-ldd ~/.byond/bin/libbyond-extools.so
-
cd ci_test
DreamDaemon tgstation.dmb -close -trusted -verbose -params "log-directory=ci"
cd ..
diff --git a/tools/deploy.sh b/tools/deploy.sh
index d09b606a86..f6fc14d67d 100755
--- a/tools/deploy.sh
+++ b/tools/deploy.sh
@@ -22,8 +22,6 @@ fi
cp tgstation.dmb tgstation.rsc $1/
cp -r _maps/* $1/_maps/
-cp -r icons/runtime/* $1/icons/runtime/
-cp -r sound/runtime/* $1/sound/runtime/
cp -r strings/* $1/strings/
#remove .dm files from _maps