diff --git a/.gitignore b/.gitignore
index d5075446e673..7609467500f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -244,5 +244,6 @@ config/dbconfig.txt
# Running OpenDream locally
tgstation.json
+rust_g64.dll
!/libaneri.so
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 4a0d3e84053a..81e6e4e6245b 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -50,11 +50,6 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/bridge)
-"ao" = (
-/obj/structure/alien/weeds,
-/mob/living/basic/alien/drone,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"ap" = (
/obj/structure/alien/weeds/node,
/obj/structure/alien/egg/burst,
@@ -87,6 +82,10 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
+"av" = (
+/obj/machinery/atmospherics/miner/oxygen,
+/turf/open/floor/engine/o2,
+/area/ruin/space/ancientstation/beta/atmos)
"ax" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/blue{
@@ -94,6 +93,21 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
+"ay" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/hall)
"aA" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/firecloset/full,
@@ -171,6 +185,7 @@
/area/ruin/space/ancientstation/charlie/bridge)
"aM" = (
/obj/structure/alien/weeds,
+/obj/machinery/recharge_station,
/obj/effect/decal/cleanable/xenoblood/xgibs/up,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
@@ -274,7 +289,6 @@
"be" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/window/reinforced/spawner/directional/west,
-/obj/structure/alien/weeds,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
"bg" = (
@@ -310,6 +324,9 @@
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
},
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
"bk" = (
@@ -332,21 +349,15 @@
/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
-"bo" = (
-/obj/machinery/door/airlock/highsecurity,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"bp" = (
/obj/machinery/door/window/brigdoor/left/directional/west,
/obj/effect/decal/cleanable/robot_debris,
-/obj/structure/alien/weeds/node,
+/obj/machinery/flasher/directional/east{
+ id = "IsolationFlash";
+ pixel_y = 40
+ },
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
-"bq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/layer4,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"bs" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -370,20 +381,6 @@
/obj/effect/turf_decal/tile/blue/half/contrasted,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
-"bw" = (
-/obj/machinery/door/airlock/engineering{
- name = "Gravity Generator"
- },
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/gravity)
"bx" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/maintenance_hatch,
@@ -401,17 +398,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
-"bA" = (
-/obj/structure/ai_core/deactivated,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
-"bC" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/biogenerator,
-/obj/effect/decal/cleanable/greenglow,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"bD" = (
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/delta/rnd)
@@ -464,6 +450,9 @@
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 4
},
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
"bQ" = (
@@ -697,14 +686,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"cz" = (
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/structure/window/reinforced/spawner/directional/south,
-/obj/structure/table,
-/obj/machinery/door/window/brigdoor/right/directional/east,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"cA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -739,7 +720,6 @@
"cF" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/window/reinforced/spawner/directional/south,
-/obj/structure/alien/weeds,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
"cG" = (
@@ -772,6 +752,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/mining)
"cP" = (
@@ -852,28 +833,11 @@
/obj/effect/decal/cleanable/xenoblood/xgibs/larva/body,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
-"de" = (
-/obj/structure/alien/weeds,
-/mob/living/basic/alien/queen,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"df" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/alien/weeds,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/hall)
-"dg" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/science{
- name = "Artificial Program Core Room"
- },
-/obj/machinery/door/firedoor,
-/obj/structure/alien/weeds,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "oldstation-aisat"
- },
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/hall)
"dh" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -883,6 +847,7 @@
/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
dir = 1
},
+/obj/structure/table,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"dk" = (
@@ -900,6 +865,14 @@
"dl" = (
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/charlie/engie)
+"dn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/storage/crayons,
+/obj/item/toy/cards/deck,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
"do" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/green{
@@ -907,10 +880,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
-"dp" = (
-/obj/machinery/growing/soil,
-/turf/open/floor/grass,
-/area/ruin/space/ancientstation/charlie/hydro)
"dq" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/reagent_dispensers/watertank/high{
@@ -972,8 +941,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 10
},
+/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"dy" = (
+/obj/item/surgery_tray,
+/turf/template_noop,
+/area/template_noop)
"dB" = (
/obj/structure/alien/weeds,
/obj/effect/gibspawner/human,
@@ -996,17 +970,19 @@
},
/turf/open/floor/iron/airless,
/area/ruin/space/ancientstation/beta/medbay)
+"dE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 5
+ },
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"dF" = (
/obj/structure/lattice,
/turf/template_noop,
/area/template_noop)
-"dG" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/mob/living/basic/alien/drone,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/hall)
"dH" = (
/obj/structure/lattice/catwalk,
/turf/template_noop,
@@ -1017,18 +993,6 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/mining)
-"dL" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/command/glass{
- name = "Bridge"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/bridge)
"dM" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -1127,6 +1091,7 @@
/obj/item/screwdriver/power,
/obj/item/storage/belt/utility,
/obj/item/clothing/head/utility/hardhat/welding,
+/obj/item/holosign_creator/atmos,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/supermatter)
"ec" = (
@@ -1134,6 +1099,7 @@
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
/obj/effect/mapping_helpers/apc/no_charge,
+/obj/structure/table,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"ed" = (
@@ -1146,7 +1112,10 @@
/obj/machinery/firealarm/directional/west,
/obj/effect/decal/cleanable/dirt,
/obj/item/storage/backpack/old,
-/obj/structure/closet,
+/obj/structure/closet{
+ anchored = 1
+ },
+/obj/effect/spawner/random/clothing/backpack,
/obj/effect/spawner/random/clothing/backpack,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
@@ -1219,28 +1188,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
-"ep" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/seeds/wheat,
-/obj/item/seeds/poppy,
-/obj/item/seeds/potato,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"eq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/seed_extractor,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
"er" = (
+/obj/machinery/pipedispenser/disposal/transit_tube,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/seeds/wheat/rice,
-/obj/item/seeds/grape,
-/obj/effect/spawner/random/food_or_drink/seed,
-/obj/item/seeds/ambrosia,
/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
+/area/ruin/space/ancientstation/beta/atmos)
"et" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -1287,6 +1247,8 @@
/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
dir = 4
},
+/obj/structure/closet/crate/bin,
+/obj/effect/spawner/random/maintenance,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"eA" = (
@@ -1302,8 +1264,8 @@
"eB" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/autolathe,
-/obj/machinery/duct,
+/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
+/obj/structure/table,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
"eD" = (
@@ -1311,6 +1273,13 @@
/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
dir = 4
},
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/obj/structure/rack,
+/obj/item/assembly/prox_sensor,
+/obj/item/stack/cable_coil,
+/obj/item/assembly/prox_sensor,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"eE" = (
@@ -1318,11 +1287,6 @@
/obj/machinery/light/directional/west,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
-"eF" = (
-/obj/machinery/computer/rdconsole,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
"eH" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/blue/half/contrasted{
@@ -1390,23 +1354,24 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
-"eR" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/cultivator{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/shovel/spade,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"eS" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/effect/turf_decal/tile/green,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
+"eT" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet,
+/obj/item/storage/backpack/old,
+/obj/effect/spawner/random/clothing/backpack,
+/obj/effect/spawner/random/clothing/backpack,
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
"eU" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/west,
@@ -1456,11 +1421,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"fa" = (
-/obj/machinery/rnd/destructive_analyzer,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
"fb" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 1
@@ -1561,21 +1521,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"fu" = (
-/obj/machinery/mecha_part_fabricator,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
-"fv" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/glass/fifty{
- pixel_x = 3;
- pixel_y = 3
- },
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
"fw" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/directional/east,
@@ -1621,18 +1566,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
-"fG" = (
-/obj/machinery/door/airlock/engineering/glass,
-/obj/machinery/door/poddoor{
- id = "ancient"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/engie)
"fI" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating/rust,
@@ -1646,6 +1579,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/duct,
/obj/structure/cable,
+/obj/machinery/firealarm/directional/west,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
"fK" = (
@@ -1658,6 +1595,7 @@
dir = 8
},
/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
"fL" = (
@@ -1782,6 +1720,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/hall)
+"gj" = (
+/obj/machinery/door/airlock/research{
+ name = "Research and Development"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/door/firedoor/closed,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"gk" = (
/obj/structure/alien/weeds,
/obj/effect/decal/cleanable/blood/old,
@@ -1851,13 +1800,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
-"gD" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/firealarm/directional/east,
-/obj/effect/decal/cleanable/dirt,
-/mob/living/basic/alien/drone,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/hall)
"gE" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -1874,8 +1816,13 @@
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
"gG" = (
-/obj/machinery/rnd/production/protolathe/offstation,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/stock_parts/matter_bin,
+/obj/item/stock_parts/scanning_module{
+ pixel_x = 2;
+ pixel_y = 3
+ },
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"gH" = (
@@ -1893,6 +1840,10 @@
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/hall)
+"gK" = (
+/obj/structure/mecha_wreckage/ripley,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"gL" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 4
@@ -1900,9 +1851,15 @@
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/mining)
"gM" = (
-/obj/machinery/rnd/production/circuit_imprinter/offstation,
/obj/effect/decal/cleanable/dirt,
-/obj/item/reagent_containers/dropper,
+/obj/structure/table,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/item/experi_scanner{
+ pixel_x = 4
+ },
+/obj/item/experi_scanner,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"gO" = (
@@ -1917,18 +1874,18 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/hall)
"gP" = (
+/obj/effect/decal/cleanable/glass,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/tank/internals/anesthetic,
-/obj/item/clothing/mask/breath/medical,
+/obj/machinery/duct,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"gQ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table/optable{
- name = "Robotics Operating Table"
- },
-/obj/item/surgical_drapes,
+/obj/effect/decal/cleanable/xenoblood/xgibs/core,
+/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"gR" = (
@@ -1995,6 +1952,10 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
+"hc" = (
+/obj/machinery/atmospherics/miner/nitrogen,
+/turf/open/floor/engine/n2,
+/area/ruin/space/ancientstation/beta/atmos)
"hi" = (
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/charlie/hall)
@@ -2101,13 +2062,6 @@
/obj/effect/mapping_helpers/airalarm/all_access,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
-"hE" = (
-/mob/living/basic/alien/drone,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
"hI" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -2131,6 +2085,9 @@
/obj/structure/alien/weeds,
/obj/structure/cable,
/obj/effect/decal/cleanable/blood/tracks,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
"hM" = (
@@ -2187,10 +2144,10 @@
/area/ruin/space/ancientstation/charlie/hall)
"hV" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 4
},
+/obj/machinery/computer/security/hos,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
"hW" = (
@@ -2247,7 +2204,8 @@
dir = 4
},
/obj/machinery/duct,
-/turf/open/floor/iron,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/hall)
"ic" = (
/obj/effect/decal/cleanable/dirt,
@@ -2381,6 +2339,7 @@
/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
dir = 8
},
+/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"ir" = (
@@ -2397,21 +2356,6 @@
/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
-"iy" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Medical Bay"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/machinery/door/firedoor/closed,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/medbay)
"iA" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
@@ -2503,8 +2447,11 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/cobweb,
/obj/structure/cable,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/storage)
"iV" = (
@@ -2516,24 +2463,25 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/storage)
-"jc" = (
-/obj/machinery/door/airlock/research{
- name = "Research and Development"
+"iX" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
},
-/obj/machinery/door/firedoor,
+/obj/structure/table_frame,
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
-"jd" = (
-/obj/machinery/door/airlock/research{
- name = "Research and Development"
+/obj/item/shard{
+ icon_state = "medium"
},
-/obj/machinery/door/firedoor,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
+"iY" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
+/area/ruin/space/ancientstation/charlie/hall)
"je" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -2635,6 +2583,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"jw" = (
+/obj/structure/alien/weeds/node,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"jx" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/directional/east,
@@ -2749,9 +2704,9 @@
"jP" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/item/storage/backpack/duffelbag,
-/obj/structure/closet,
-/obj/effect/spawner/random/clothing/backpack,
+/obj/structure/table,
+/obj/item/storage/photo_album,
+/obj/item/pai_card,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
"jU" = (
@@ -2764,32 +2719,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
-"jV" = (
-/obj/structure/rack,
-/obj/item/pickaxe,
-/obj/item/pickaxe,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/mining)
"jW" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/tile/purple/anticorner/contrasted,
+/obj/structure/table/optable{
+ name = "Robotics Operating Table"
+ },
+/obj/item/surgical_drapes,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
-"jX" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/seeds/harebell,
-/obj/item/seeds/carrot,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"jY" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -2867,6 +2809,9 @@
/obj/item/shard,
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/broken_flooring/singular/directional/east,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron/airless,
/area/ruin/space/ancientstation/beta/hall)
"ko" = (
@@ -2897,6 +2842,10 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
},
+/obj/structure/table,
+/obj/item/stock_parts/capacitor,
+/obj/item/stock_parts/manipulator,
+/obj/item/stock_parts/micro_laser,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"kr" = (
@@ -2977,6 +2926,7 @@
/obj/item/crowbar,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/item/crowbar,
/obj/effect/spawner/random/decoration/glowstick,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
@@ -2986,17 +2936,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
-"kH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/door/airlock/external/ruin{
- name = "External Access"
- },
-/turf/open/floor/plating,
-/area/ruin/space/ancientstation/charlie/engie)
"kI" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/corner{
@@ -3042,6 +2981,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/west,
/obj/effect/decal/cleanable/dirt,
+/obj/item/crowbar,
/obj/effect/spawner/random/decoration/glowstick,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
@@ -3083,6 +3023,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
+"kT" = (
+/obj/structure/grille/broken,
+/obj/item/stack/rods,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"kU" = (
/obj/machinery/light/directional/east,
/obj/structure/table/reinforced,
@@ -3168,6 +3113,9 @@
name = "N2 Input"
},
/obj/effect/turf_decal/tile/yellow/half/contrasted,
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
"li" = (
@@ -3199,12 +3147,6 @@
/obj/effect/mob_spawn/ghost_role/human/oldeng,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
-"lq" = (
-/obj/structure/alien/weeds,
-/obj/effect/decal/cleanable/blood/gibs/old,
-/mob/living/basic/alien,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"lr" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -3224,6 +3166,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
"lv" = (
@@ -3265,6 +3208,7 @@
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
"lF" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"lG" = (
@@ -3273,14 +3217,6 @@
},
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
-"lH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light_switch/directional/north,
-/obj/effect/turf_decal/tile/green/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"lI" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/button/door/directional/west{
@@ -3306,6 +3242,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
"lM" = (
@@ -3314,6 +3253,9 @@
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 8
},
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
"lO" = (
@@ -3365,28 +3307,11 @@
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
"lV" = (
-/obj/structure/grille/broken,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/medbay)
-"lW" = (
-/obj/structure/grille/broken,
/obj/item/shard{
icon_state = "medium"
},
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/medbay)
-"lY" = (
-/obj/machinery/door/airlock/atmos/glass{
- name = "Station Atmospherics"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/atmos)
+/turf/template_noop,
+/area/template_noop)
"lZ" = (
/obj/structure/alien/weeds,
/obj/structure/cable,
@@ -3425,17 +3350,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"mj" = (
-/obj/machinery/door/airlock/highsecurity,
-/obj/structure/alien/weeds,
-/obj/structure/cable,
-/obj/effect/decal/cleanable/xenoblood/xtracks,
-/obj/effect/decal/cleanable/blood/tracks,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "oldstation-aisat"
- },
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"mk" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -3451,14 +3365,10 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
-"mm" = (
-/obj/machinery/power/supermatter_crystal/shard,
-/obj/structure/closet/crate/engineering{
- name = "supermatter shard crate"
- },
-/turf/open/floor/iron/white/textured,
-/area/ruin/space/ancientstation/delta/proto)
"mn" = (
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
/turf/open/floor/iron/white/corner{
dir = 4
},
@@ -3519,9 +3429,10 @@
"mz" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/item/storage/backpack/old,
-/obj/structure/closet,
-/obj/effect/spawner/random/clothing/backpack,
+/obj/structure/table,
+/obj/item/crowbar,
+/obj/item/crowbar,
+/obj/effect/spawner/random/decoration/glowstick,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
"mA" = (
@@ -3589,16 +3500,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/mining)
-"mM" = (
-/obj/machinery/door/airlock/mining/glass{
- name = "Mining Equipment"
- },
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/mining)
"mN" = (
/obj/structure/closet,
/obj/effect/decal/cleanable/dirt,
@@ -3740,6 +3641,7 @@
dir = 10
},
/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
"nf" = (
@@ -3753,10 +3655,10 @@
/area/ruin/space/ancientstation/beta/hall)
"ng" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/pipedispenser/disposal/transit_tube,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/closet/crate/bin,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
"nh" = (
@@ -3776,6 +3678,9 @@
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
dir = 1
},
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
"nm" = (
@@ -3823,42 +3728,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
-"nv" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/atmos/glass{
- name = "Station Atmospherics"
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/beta/atmos)
"nw" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/structure/broken_flooring/side/directional/east,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/hall)
-"nx" = (
-/obj/item/shard,
-/obj/machinery/atmospherics/components/binary/pump/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
/obj/effect/decal/cleanable/glass,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/cable,
+/obj/item/shard,
+/obj/machinery/duct,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 10
+ dir = 8
},
-/obj/structure/broken_flooring/singular/directional/west,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/hall)
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"ny" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{
@@ -3893,33 +3771,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
-"nC" = (
-/obj/structure/closet/crate,
-/obj/item/cautery{
- pixel_x = 4
- },
-/obj/item/hemostat,
-/obj/item/circular_saw,
-/obj/item/scalpel{
- pixel_y = 12
- },
-/obj/item/retractor,
-/obj/item/surgical_drapes,
-/obj/machinery/light/small/broken/directional/west,
-/obj/item/tank/internals/anesthetic,
-/obj/item/clothing/mask/breath/medical,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
-"nD" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table/optable,
-/obj/machinery/light_switch/directional/east,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"nJ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/engineering{
@@ -3953,11 +3804,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
-"nN" = (
-/obj/effect/decal/cleanable/dirt,
-/mob/living/basic/alien/drone,
-/turf/open/floor/iron/white,
-/area/ruin/space/ancientstation/delta/rnd)
"nO" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -3998,32 +3844,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"nV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/science{
- name = "Artificial Program Core Room"
- },
-/obj/machinery/door/firedoor,
-/obj/structure/alien/weeds,
-/obj/structure/cable,
-/obj/effect/decal/cleanable/blood/tracks,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "oldstation-aisat"
- },
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/hall)
-"nW" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/directional/east,
-/obj/machinery/firealarm/directional/east,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood/tracks{
- dir = 1
- },
-/mob/living/basic/alien,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/hall)
"nX" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -4042,6 +3862,9 @@
dir = 8
},
/obj/structure/cable,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
"oa" = (
@@ -4056,6 +3879,14 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"ob" = (
+/obj/effect/turf_decal/tile/green/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/growing/tray,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"oc" = (
/obj/machinery/door/airlock/science,
/obj/effect/decal/cleanable/dirt,
@@ -4074,27 +3905,27 @@
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
"oe" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/stack/sheet/iron/fifty,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/rdconsole{
+ dir = 1
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
"of" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical/old,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/rnd/production/protolathe/offstation,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
"og" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
+/obj/machinery/door/window/right/directional/west{
+ state_open = 1
+ },
+/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"oh" = (
@@ -4103,53 +3934,21 @@
/obj/machinery/washing_machine,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
-"oi" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass,
-/obj/item/stack/sheet/glass,
-/obj/item/stock_parts/matter_bin,
-/obj/item/stock_parts/scanning_module{
- pixel_x = 2;
- pixel_y = 3
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
"oj" = (
-/obj/structure/table,
-/obj/item/stock_parts/manipulator,
-/obj/item/stock_parts/capacitor,
-/obj/item/stock_parts/micro_laser,
-/obj/item/stack/cable_coil,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
-"ok" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/firedoor/closed,
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical/old,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
-"ol" = (
-/obj/effect/decal/cleanable/dirt,
+"om" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/firedoor/closed,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
-"on" = (
-/obj/machinery/door/airlock/highsecurity,
-/obj/structure/alien/weeds,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "oldstation-aisat"
+/obj/machinery/power/energy_accumulator/tesla_coil,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
},
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/beta/supermatter)
"oo" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -4169,6 +3968,31 @@
/obj/effect/decal/cleanable/xenoblood/xgibs/larva/body,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"or" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/remains/human{
+ pixel_y = -4;
+ pixel_x = -4
+ },
+/obj/item/paper/fluff/ruins/oldstation/survivor_note{
+ pixel_x = 17;
+ pixel_y = 12
+ },
+/obj/item/organ/internal/cyberimp/arm/item_set/toolset{
+ pixel_x = 6;
+ pixel_y = 2
+ },
+/obj/item/organ/internal/cyberimp/cyberlink/nt_low,
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/floor/plating{
+ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
+ },
+/area/ruin/space/ancientstation/delta/hall)
+"ot" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/composters,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"ou" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -4183,17 +4007,6 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"ow" = (
-/obj/item/kirbyplants{
- icon_state = "plant-25"
- },
-/obj/effect/decal/cleanable/cobweb,
-/obj/machinery/light/small/broken/directional/west,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"oy" = (
/obj/structure/table,
/obj/item/tank/internals/oxygen,
@@ -4206,42 +4019,15 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
-"oB" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/glass,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"oD" = (
-/obj/effect/decal/cleanable/xenoblood/xgibs/core,
+/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
-"oE" = (
-/obj/item/stack/rods,
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
-"oF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/item/shard{
- icon_state = "medium"
- },
-/obj/effect/decal/cleanable/glass,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"oG" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/xenoblood,
+/obj/structure/table,
+/obj/machinery/cell_charger,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
"oH" = (
@@ -4256,13 +4042,6 @@
},
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
-"oJ" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/spawner/random/maintenance,
-/obj/effect/spawner/random/trash/garbage,
-/obj/structure/broken_flooring/corner/directional/west,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"oK" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/directional/east,
@@ -4299,6 +4078,9 @@
icon_state = "medium"
},
/obj/structure/broken_flooring/side/directional/south,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/hall)
"oQ" = (
@@ -4360,6 +4142,17 @@
},
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/hall)
+"pd" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/table,
+/obj/machinery/door/window/brigdoor/right/directional/east,
+/obj/machinery/computer/upload/borg{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"pf" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/machinery/portable_atmospherics/pump,
@@ -4372,6 +4165,16 @@
/obj/structure/broken_flooring/corner/directional/north,
/turf/open/floor/iron/airless,
/area/ruin/space/ancientstation/beta/hall)
+"pg" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/duct,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"ph" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/mirror/directional/north,
@@ -4380,6 +4183,9 @@
/obj/machinery/power/apc/auto_name/directional/east,
/obj/effect/mapping_helpers/apc/no_charge,
/obj/structure/cable,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
"pi" = (
@@ -4450,10 +4256,22 @@
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/charlie/kitchen)
+"py" = (
+/obj/effect/turf_decal/tile/green/anticorner/contrasted{
+ dir = 8
+ },
+/obj/machinery/vending/hydroseeds{
+ onstation = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"pz" = (
/obj/structure/rack,
/obj/effect/decal/cleanable/dirt,
-/obj/item/card/id/away/old/apc,
+/obj/item/card/id/advanced/old{
+ trim = /datum/id_trim/away/old/apc;
+ name = "Engineering Equipment Access"
+ },
/obj/item/crowbar,
/obj/item/stock_parts/cell/high,
/obj/machinery/door/window/right/directional/east{
@@ -4522,6 +4340,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/item/paper/fluff/ruins/oldstation/distro_guide,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
"qm" = (
@@ -4540,11 +4359,24 @@
/area/ruin/space/ancientstation/beta/supermatter)
"qn" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
-/obj/item/paper/fluff/ruins/oldstation/report,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/emcloset/anchored,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
+/obj/item/storage/box/emergency_eva,
/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/bridge)
+/area/ruin/space/ancientstation/charlie/dorms)
+"qz" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"qA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -4562,6 +4394,9 @@
"qH" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/plumbing/input,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/engine,
/area/ruin/space/ancientstation/delta/biolab)
"qK" = (
@@ -4574,6 +4409,9 @@
/obj/machinery/power/energy_accumulator/grounding_rod,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/supermatter)
+"rf" = (
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"rg" = (
/obj/machinery/door/firedoor,
/obj/effect/decal/cleanable/dirt,
@@ -4590,6 +4428,11 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"ri" = (
+/obj/structure/cable,
+/obj/item/solar_assembly,
+/turf/open/floor/iron/solarpanel/airless,
+/area/ruin/space/solars/ancientstation/charlie/solars)
"rl" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -4624,37 +4467,41 @@
/obj/machinery/gravity_generator/main/off,
/turf/open/floor/iron/diagonal,
/area/ruin/space/ancientstation/beta/gravity)
-"rN" = (
+"rJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table/glass,
-/obj/item/reagent_containers/cup/bottle{
- pixel_x = 4;
- list_reagents = list(/datum/reagent/growthserum=30);
- name = "Experimental solution";
- renamedByPlayer = 1;
- pixel_y = 8
- },
-/obj/item/reagent_containers/cup/bottle{
- pixel_x = -4;
- list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30);
- name = "Solution for Molly";
- renamedByPlayer = 1
- },
-/obj/item/reagent_containers/dropper{
- pixel_x = -7;
- pixel_y = 10
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
},
-/obj/effect/turf_decal/tile/purple/half/contrasted{
- dir = 1
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hall)
+"rQ" = (
+/obj/structure/closet/crate/medical{
+ opened = 1
},
-/turf/open/floor/iron/white/textured_edge,
-/area/ruin/space/ancientstation/delta/biolab)
+/obj/item/skillchip/bonsai,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"rR" = (
/obj/effect/decal/cleanable/generic,
/obj/item/stack/rods,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"rS" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Gravity Generator"
+ },
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/gravity)
"rT" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -4702,6 +4549,26 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"sh" = (
+/obj/item/radio/intercom/directional/south{
+ freerange = 1;
+ frequency = 1447;
+ listening = 0;
+ name = "Private Channel"
+ },
+/obj/item/radio/intercom/directional/east{
+ freerange = 1;
+ name = "Uncommon Channel";
+ frequency = 1363
+ },
+/obj/item/radio/intercom/directional/north{
+ freerange = 1;
+ listening = 0;
+ name = "Custom Channel"
+ },
+/obj/structure/ai_core/deactivated,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"si" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb,
@@ -4712,6 +4579,25 @@
/obj/structure/chair,
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
+"sm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/sec)
+"sn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"sq" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/obj/structure/cable,
@@ -4769,11 +4655,9 @@
"sJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/sink/kitchen/directional/west{
- desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
- name = "old sink";
- has_water_reclaimer = 0
- },
+/obj/structure/table,
+/obj/item/tank/internals/anesthetic,
+/obj/item/clothing/mask/breath/medical,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
"sL" = (
@@ -4784,15 +4668,21 @@
/area/ruin/space/ancientstation/delta/hall)
"sM" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old{
- dir = 1
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 8
},
+/obj/machinery/computer/security{
+ dir = 1
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
+"sO" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/chem_master/condimaster,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"sP" = (
/obj/machinery/space_heater,
/turf/open/floor/plating/rust,
@@ -4817,8 +4707,24 @@
},
/obj/machinery/airalarm/directional/west,
/obj/effect/mapping_helpers/airalarm/all_access,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
/turf/open/floor/iron/diagonal,
/area/ruin/space/ancientstation/beta/gravity)
+"ta" = (
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/engine/airless,
+/area/ruin/space/ancientstation/beta/supermatter)
+"tc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"td" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/duct,
@@ -4831,9 +4737,38 @@
},
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
+"tk" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/mob_spawn/ghost_role/human/oldexplorer,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
+"tm" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/directional/south,
+/obj/effect/decal/cleanable/dirt,
+/mob/living/basic/alien/drone,
+/obj/machinery/duct,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"tr" = (
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"tu" = (
+/obj/structure/grille/broken,
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/stack/rods,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"tv" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
@@ -4857,6 +4792,19 @@
"tC" = (
/turf/closed/mineral/gold,
/area/space/nearstation)
+"tH" = (
+/obj/machinery/door/airlock/engineering/glass,
+/obj/machinery/door/poddoor{
+ id = "ancient"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/engie)
"tJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -4876,13 +4824,44 @@
/area/ruin/space/ancientstation/charlie/kitchen)
"ua" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
+/obj/machinery/computer/records/security,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
+"ue" = (
+/obj/machinery/door/airlock/research{
+ name = "Research and Development"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
+"uh" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/layer4,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
+"ui" = (
+/obj/effect/decal/cleanable/shreds,
+/obj/structure/alien/weeds,
+/obj/structure/closet/crate/secure/science{
+ req_access = list("away_science")
+ },
+/obj/item/transfer_valve,
+/obj/item/raw_anomaly_core/bluespace,
+/obj/item/raw_anomaly_core/random,
+/obj/item/clothing/suit/toggle/labcoat/science,
+/obj/item/reagent_containers/cup/soda_cans/dr_gibb,
+/obj/item/mmi/posibrain,
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"uj" = (
/turf/closed/wall/r_wall,
/area/ruin/space/ancientstation/delta/proto)
@@ -4928,6 +4907,13 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"ur" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/duct,
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"uu" = (
/obj/structure/table/glass,
/obj/structure/closet/mini_fridge{
@@ -4979,6 +4965,10 @@
},
/turf/open/floor/engine/n2,
/area/ruin/space/ancientstation/beta/atmos)
+"uE" = (
+/obj/machinery/portable_atmospherics/canister/water_vapor,
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/charlie/hall)
"uG" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -5069,14 +5059,34 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"vt" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/research{
+ name = "Research and Development"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor/closed,
+/obj/machinery/duct,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"vy" = (
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
/turf/open/floor/engine,
/area/ruin/space/ancientstation/delta/biolab)
"vA" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/biolab)
+"vD" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/sleeper,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"vE" = (
/obj/structure/rack,
/obj/item/tank/internals/emergency_oxygen,
@@ -5109,17 +5119,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
-"vM" = (
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/door/airlock/external/ruin{
- name = "Engineering External Access"
- },
-/turf/open/floor/plating,
-/area/ruin/space/ancientstation/charlie/engie)
"vO" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/extinguisher_cabinet/directional/south,
@@ -5210,6 +5209,19 @@
/obj/item/ammo_box/a762,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"wh" = (
+/obj/machinery/door/airlock/engineering/glass,
+/obj/machinery/door/poddoor{
+ id = "ancient"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/engie)
"wi" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/command{
@@ -5234,6 +5246,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/duct,
+/obj/machinery/camera/autoname/directional/south{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/biolab)
"wn" = (
@@ -5286,33 +5301,23 @@
"wD" = (
/turf/closed/mineral/uranium,
/area/space/nearstation)
-"wE" = (
-/obj/machinery/door/airlock/engineering{
- name = "Supermatter Chamber"
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/supermatter)
-"wF" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/spawner/random/trash/botanical_waste,
-/obj/effect/turf_decal/tile/green/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hydro)
"wG" = (
/obj/effect/spawner/structure/window/hollow/middle,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/hydro)
-"wK" = (
-/obj/machinery/computer/pandemic{
- machine_stat = 1
+"wI" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/science{
+ name = "Artificial Program Core Room"
},
-/obj/effect/turf_decal/tile/purple/half/contrasted{
- dir = 1
+/obj/machinery/door/firedoor,
+/obj/structure/alien/weeds,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "oldstation-aisat"
},
-/turf/open/floor/iron/white/textured_edge,
-/area/ruin/space/ancientstation/delta/biolab)
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/hall)
"wL" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -5320,11 +5325,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
-"wO" = (
-/obj/machinery/growing/soil,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/grass,
-/area/ruin/space/ancientstation/charlie/hydro)
"wS" = (
/obj/item/stack/rods,
/obj/machinery/atmospherics/components/unary/vent_scrubber{
@@ -5333,6 +5333,31 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"wT" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/table,
+/obj/machinery/door/window/brigdoor/right/directional/east,
+/obj/machinery/computer/upload/ai{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
+"wU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"xb" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/airalarm/directional/west,
@@ -5343,21 +5368,21 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
-"xj" = (
-/obj/machinery/door/airlock/science{
- name = "Biolab"
- },
+"xo" = (
+/obj/item/storage/medkit/ancient,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/firedoor/closed,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/item/paper/fluff/ruins/oldstation/protosleep{
+ default_raw_text = "*Prototype Sleeper*
We have deliverted the lastest in medical technology to the medical bay for your use."
+ },
/obj/structure/cable,
-/obj/machinery/duct,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/effect/mapping_helpers/apc/no_charge,
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 4
},
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/biolab)
+/obj/structure/table/reinforced/rglass,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"xr" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -5385,40 +5410,82 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/sec)
+"xw" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Station Atmospherics"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/atmos)
"xD" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/stack/rods,
/obj/structure/broken_flooring/pile/directional/south,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/dorms)
+"xF" = (
+/obj/structure/table/optable,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
+"xG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light_switch/directional/north,
+/obj/effect/turf_decal/tile/green/half/contrasted{
+ dir = 1
+ },
+/obj/structure/closet/crate/bin,
+/obj/effect/spawner/random/trash/botanical_waste,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"xH" = (
/obj/effect/decal/cleanable/generic,
/obj/structure/cable,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
-"xM" = (
-/obj/machinery/door/window/right/directional/east{
- req_access = list("away_general")
- },
-/turf/open/floor/engine,
-/area/ruin/space/ancientstation/delta/biolab)
"xP" = (
/obj/machinery/light/small/directional/east,
/obj/structure/alien/weeds,
/obj/machinery/portable_atmospherics/scrubber,
/turf/open/floor/iron/dark,
/area/ruin/space/ancientstation/delta/ai)
+"xQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/seeds/potato,
+/obj/item/seeds/poppy,
+/obj/item/seeds/wheat,
+/obj/item/seeds/carrot,
+/obj/item/seeds/harebell,
+/obj/item/seeds/ambrosia,
+/obj/effect/spawner/random/food_or_drink/seed,
+/obj/item/seeds/grape,
+/obj/item/seeds/wheat/rice,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"xS" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/hall)
+"xY" = (
+/turf/template_noop,
+/area/space/nearstation)
"ye" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"yf" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light_switch/directional/east,
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"yj" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate,
@@ -5444,23 +5511,17 @@
/obj/structure/sign/warning/biohazard,
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/delta/biolab)
-"yu" = (
-/obj/machinery/door/airlock/engineering/glass,
-/obj/machinery/door/poddoor{
- id = "ancient"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/engie)
"yx" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"yz" = (
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"yE" = (
/obj/machinery/airalarm/directional/west,
/obj/effect/mapping_helpers/airalarm/all_access,
@@ -5472,8 +5533,17 @@
"yF" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/duct,
+/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
+"yG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/alien/weeds,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/hall)
"yO" = (
/obj/structure/rack,
/obj/item/storage/bag/ore,
@@ -5514,6 +5584,31 @@
/obj/machinery/light/broken/directional/east,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"zc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 5
+ },
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
+"zj" = (
+/obj/machinery/door/airlock/science{
+ name = "Biolab"
+ },
+/obj/machinery/door/firedoor/closed,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/biolab)
"zl" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet,
@@ -5535,20 +5630,6 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/atmos)
-"zn" = (
-/obj/machinery/door/airlock/engineering{
- name = "Gravity Generator"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/diagonal,
-/area/ruin/space/ancientstation/beta/gravity)
"zp" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
@@ -5560,6 +5641,14 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/diagonal,
/area/ruin/space/ancientstation/beta/gravity)
+"zq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/hall)
"zr" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 8
@@ -5676,19 +5765,16 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"Ap" = (
+/obj/structure/cable,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/ruin/space/solars/ancientstation/charlie/solars)
"Ar" = (
/obj/structure/transit_tube_pod{
dir = 4;
anchored = 0
},
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
- dir = 10
- },
-/obj/structure/cable,
/turf/template_noop,
/area/space/nearstation)
"Au" = (
@@ -5702,6 +5788,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
dir = 10
},
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
"Ax" = (
@@ -5754,6 +5843,14 @@
/obj/structure/mirror/directional/east,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/charlie/hall)
+"AS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hall)
"AV" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -5803,10 +5900,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
-"Bs" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/open/floor/engine/o2,
-/area/ruin/space/ancientstation/beta/atmos)
"Bt" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -5827,16 +5920,6 @@
initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
},
/area/ruin/space/ancientstation/delta/hall)
-"Bv" = (
-/obj/machinery/door/airlock/research{
- name = "Research and Development"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/machinery/door/firedoor/closed,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
"By" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/computer/monitor,
@@ -5863,6 +5946,18 @@
/obj/structure/cable,
/turf/template_noop,
/area/space/nearstation)
+"BD" = (
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Station Atmospherics"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/atmos)
"BH" = (
/obj/item/solar_assembly,
/obj/structure/cable,
@@ -5878,10 +5973,28 @@
/obj/machinery/duct,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"BN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/mob_spawn/ghost_role/human/oldcmo,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
"BP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"BQ" = (
+/obj/structure/table/reinforced/rglass,
+/obj/item/tank/internals/anesthetic,
+/obj/item/clothing/mask/breath/medical,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"BX" = (
/obj/effect/decal/cleanable/glass,
/obj/structure/cable,
@@ -5899,12 +6012,27 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
+"Ca" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/door/airlock/external/ruin{
+ name = "Engineering External Access"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/charlie/engie)
"Cc" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 4
},
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
"Ci" = (
@@ -5912,6 +6040,7 @@
name = "Engineering External Access"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
"Cj" = (
@@ -5928,6 +6057,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
"Cq" = (
@@ -5943,6 +6073,10 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"CJ" = (
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/charlie/hall)
"CK" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/reagent_containers/cup/beaker/oldstation,
@@ -5952,6 +6086,14 @@
/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"CQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/computer/crew,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
"CR" = (
/obj/machinery/power/smes{
input_level = 5000;
@@ -5982,25 +6124,6 @@
/obj/effect/spawner/structure/window/hollow/middle,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/kitchen)
-"Dd" = (
-/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/remains/human{
- pixel_y = -4;
- pixel_x = -4
- },
-/obj/item/paper/fluff/ruins/oldstation/survivor_note{
- pixel_x = 17;
- pixel_y = 12
- },
-/obj/item/organ/internal/cyberimp/arm/item_set/toolset{
- pixel_x = 6;
- pixel_y = 2
- },
-/obj/item/organ/internal/cyberimp/cyberlink/nt_high,
-/turf/open/floor/plating{
- initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
- },
-/area/ruin/space/ancientstation/delta/hall)
"Df" = (
/obj/structure/grille/broken,
/turf/open/floor/plating/airless,
@@ -6033,6 +6156,20 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
+"Ds" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/autolathe,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
+"Dv" = (
+/obj/machinery/door/airlock/highsecurity,
+/obj/structure/alien/weeds,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "oldstation-aisat"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"Dw" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -6051,6 +6188,15 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"Dy" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/spawner/random/trash/garbage,
+/obj/effect/spawner/random/maintenance,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/directional/west,
+/obj/effect/mapping_helpers/airalarm/all_access,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"DJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light_switch/directional/south,
@@ -6069,16 +6215,16 @@
/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
-"DW" = (
+"DX" = (
+/obj/item/clothing/mask/breath/medical,
+/turf/template_noop,
+/area/template_noop)
+"Ed" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/filingcabinet/chestdrawer{
- pixel_y = 3
- },
-/obj/effect/turf_decal/tile/purple/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/white/textured_edge,
-/area/ruin/space/ancientstation/delta/biolab)
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/modular_computer/preset/id,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
"Eg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -6095,6 +6241,12 @@
/obj/structure/chair,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"ED" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/rnd/destructive_analyzer,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"EE" = (
/obj/machinery/door/firedoor,
/obj/effect/decal/cleanable/dirt,
@@ -6189,26 +6341,27 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"Fd" = (
+"EZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/cafeteria,
-/area/ruin/space/ancientstation/charlie/kitchen)
-"Ff" = (
-/obj/structure/table/glass,
-/obj/item/storage/medkit/ancient,
/obj/effect/decal/cleanable/dirt,
-/obj/item/paper/fluff/ruins/oldstation/protosleep{
- default_raw_text = "*Prototype Sleeper*
We have deliverted the lastest in medical technology to the medical bay for your use."
- },
/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/effect/mapping_helpers/apc/no_charge,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 4
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
+"Fa" = (
+/obj/effect/turf_decal/tile/purple/half/contrasted,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/white/textured_edge{
+ dir = 1
},
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
+/area/ruin/space/ancientstation/delta/biolab)
+"Fd" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/iron/cafeteria,
+/area/ruin/space/ancientstation/charlie/kitchen)
"Fh" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating,
@@ -6218,6 +6371,14 @@
/obj/machinery/space_heater,
/turf/open/floor/plating/rust,
/area/ruin/space/ancientstation/delta/hall)
+"Fn" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/disease2/incubator,
+/turf/open/floor/iron/white/textured_edge,
+/area/ruin/space/ancientstation/delta/biolab)
"Fo" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/glass,
@@ -6262,6 +6423,13 @@
/obj/item/stack/rods,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"FE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/mob/living/basic/alien/drone,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"FH" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/machinery/portable_atmospherics/scrubber,
@@ -6359,6 +6527,12 @@
},
/turf/open/floor/plating/rust,
/area/ruin/space/ancientstation/charlie/hall)
+"Gh" = (
+/obj/structure/alien/weeds,
+/obj/effect/decal/cleanable/blood/gibs/old,
+/mob/living/basic/alien,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"Gi" = (
/obj/machinery/portable_atmospherics/canister/plasma,
/obj/effect/decal/cleanable/dirt,
@@ -6388,6 +6562,11 @@
/obj/structure/closet/firecloset/full,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"Gv" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/mecha_part_fabricator,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"Gz" = (
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/delta/hall)
@@ -6395,26 +6574,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"GJ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"GK" = (
/obj/machinery/door/airlock/maintenance_hatch{
name = "Storage Room"
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/hall)
-"GM" = (
-/obj/machinery/door/airlock/science{
- name = "Biolab"
- },
-/obj/machinery/door/firedoor/closed,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/biolab)
"GN" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -6474,6 +6643,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/side,
/area/ruin/space/ancientstation/delta/proto)
+"Ho" = (
+/obj/structure/table/reinforced/rglass,
+/obj/item/surgery_tray,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"Hp" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -6492,8 +6666,13 @@
/area/ruin/space/ancientstation/charlie/hall)
"Hr" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/card/id/away/old/robo,
/obj/effect/decal/cleanable/glass,
+/obj/item/card/id/advanced/old{
+ trim = /datum/id_trim/away/old/robo;
+ registered_name = "Ash Holm";
+ name = "Ash Holm";
+ assignment = "Charlie Station Roboticist"
+ },
/turf/open/floor/plating{
initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15"
},
@@ -6505,6 +6684,20 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/diagonal,
/area/ruin/space/ancientstation/beta/gravity)
+"Hx" = (
+/obj/structure/transit_tube{
+ dir = 4;
+ anchored = 0
+ },
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
+/turf/template_noop,
+/area/space/nearstation)
"HA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/yellow/half/contrasted,
@@ -6512,6 +6705,7 @@
/area/ruin/space/ancientstation/beta/atmos)
"HI" = (
/obj/machinery/light/small/directional/west,
+/obj/structure/mop_bucket/janitorialcart,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/hall)
"HJ" = (
@@ -6599,6 +6793,22 @@
},
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
+"Id" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/oldstation/damagereport,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/communications,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
+"Ih" = (
+/obj/structure/alien/weeds,
+/obj/item/robot_suit/prebuilt,
+/obj/structure/alien/weeds,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"Ii" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/airalarm/directional/north,
@@ -6610,6 +6820,10 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"Im" = (
+/obj/structure/curtain,
+/turf/open/floor/iron/white/textured_large,
+/area/ruin/space/ancientstation/delta/biolab)
"Ip" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/kitchen/fork{
@@ -6652,16 +6866,11 @@
/obj/effect/turf_decal/tile/green/half/contrasted{
dir = 1
},
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hydro)
-"IL" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/directional/south,
-/obj/effect/decal/cleanable/dirt,
-/mob/living/basic/alien/drone,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/hall)
"IM" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -6672,6 +6881,14 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"IR" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/light/small/broken/directional/west,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"IT" = (
/obj/machinery/power/solar,
/obj/structure/cable,
@@ -6691,19 +6908,10 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"IY" = (
-/obj/machinery/airalarm/directional/west,
-/obj/effect/mapping_helpers/airalarm/all_access,
-/obj/structure/table_frame,
-/obj/item/shard{
- icon_state = "medium"
- },
-/obj/item/defibrillator,
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/airless,
-/area/ruin/space/ancientstation/beta/medbay)
+"IZ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/closed/mineral/random,
+/area/space/nearstation)
"Ja" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -6725,11 +6933,31 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"Jc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
"Jd" = (
/obj/structure/transit_tube{
anchored = 0
},
/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 6
+ },
/turf/template_noop,
/area/space/nearstation)
"Jf" = (
@@ -6740,6 +6968,15 @@
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
+"Jj" = (
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/obj/structure/filingcabinet/chestdrawer{
+ pixel_y = 3
+ },
+/turf/open/floor/iron/white/textured_edge,
+/area/ruin/space/ancientstation/delta/biolab)
"Jo" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -6767,6 +7004,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/white/textured_large,
/area/ruin/space/ancientstation/delta/biolab)
+"Jv" = (
+/obj/structure/cable,
+/obj/structure/broken_flooring/side/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/hall)
"Jx" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -6921,6 +7164,32 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/mining)
+"Kj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/mob/living/basic/alien/drone,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
+"Ks" = (
+/obj/machinery/light/small/directional/west,
+/obj/structure/alien/weeds,
+/mob/living/basic/alien,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
+"Kt" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor/closed,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
+"Ku" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"Kv" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/oven/range,
@@ -6945,6 +7214,15 @@
/obj/effect/mapping_helpers/airalarm/all_access,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/hall)
+"KD" = (
+/obj/machinery/door/airlock/highsecurity,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
+"KF" = (
+/obj/item/shard,
+/turf/template_noop,
+/area/template_noop)
"KG" = (
/obj/machinery/light/directional/east,
/obj/structure/table/reinforced,
@@ -6988,6 +7266,30 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"KQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/greenglow,
+/obj/structure/table,
+/obj/item/cultivator{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/shovel/spade,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
+"KR" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Supermatter Chamber"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/supermatter)
+"KU" = (
+/obj/structure/cable,
+/turf/template_noop,
+/area/space/nearstation)
"KV" = (
/obj/machinery/firealarm/directional/south,
/obj/machinery/light_switch/directional/west,
@@ -6996,6 +7298,21 @@
/obj/item/paper/guides/jobs/engi/gravity_gen,
/turf/open/floor/iron/diagonal,
/area/ruin/space/ancientstation/beta/gravity)
+"KZ" = (
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 4
+ },
+/obj/item/kirbyplants{
+ icon_state = "plant-25"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/white/textured_edge{
+ dir = 8
+ },
+/area/ruin/space/ancientstation/delta/biolab)
+"Lc" = (
+/turf/closed/wall/rust,
+/area/space/nearstation)
"Le" = (
/obj/machinery/door/airlock/science,
/obj/effect/decal/cleanable/dirt,
@@ -7078,8 +7395,23 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/secure_closet/freezer/fridge/open,
/obj/machinery/light/small/directional/north,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"LD" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
+/turf/open/floor/iron/white/textured_edge{
+ dir = 8
+ },
+/area/ruin/space/ancientstation/delta/biolab)
"LG" = (
/obj/item/shard{
icon_state = "medium"
@@ -7189,10 +7521,33 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"MC" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/white/textured_large,
+/area/ruin/space/ancientstation/delta/biolab)
+"MG" = (
+/obj/machinery/door/airlock/highsecurity,
+/obj/structure/alien/weeds,
+/obj/structure/cable,
+/obj/effect/decal/cleanable/xenoblood/xtracks,
+/obj/effect/decal/cleanable/blood/tracks,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "oldstation-aisat"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"MH" = (
/obj/structure/girder/displaced,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"MI" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"MM" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -7221,8 +7576,14 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/machinery/duct,
+/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"MW" = (
+/obj/structure/alien/weeds,
+/mob/living/basic/alien/drone,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"MY" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -7246,6 +7607,17 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/supermatter)
+"Nj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hall)
"Np" = (
/obj/effect/decal/cleanable/xenoblood/xtracks{
dir = 10
@@ -7275,19 +7647,33 @@
dir = 8
},
/area/ruin/space/ancientstation/delta/biolab)
-"NB" = (
-/obj/item/shard,
-/obj/effect/decal/cleanable/glass,
-/obj/structure/table_frame,
+"NC" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 1
+ },
+/obj/item/kirbyplants{
+ icon_state = "plant-25"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron/airless,
/area/ruin/space/ancientstation/beta/medbay)
"NE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hall)
+"NF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/hall)
+/area/ruin/space/ancientstation/delta/rnd)
"NG" = (
/turf/closed/wall,
/area/ruin/space/ancientstation/delta/biolab)
@@ -7305,6 +7691,27 @@
/obj/item/toy/seashell,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/charlie/hall)
+"NN" = (
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
+ dir = 1
+ },
+/obj/item/pickaxe/drill,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/obj/item/pickaxe/drill,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/mining)
+"NQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/apc_control,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
"NU" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/textured_half,
@@ -7338,15 +7745,18 @@
dir = 8
},
/area/ruin/space/ancientstation/delta/biolab)
+"Of" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/rnd/production/circuit_imprinter/offstation,
+/obj/item/reagent_containers/dropper,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"Om" = (
/obj/effect/decal/cleanable/oil/slippery,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
-"Os" = (
-/obj/structure/door_assembly/door_assembly_eng,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/supermatter)
"Ox" = (
/turf/closed/wall,
/area/ruin/space/ancientstation/charlie/storage)
@@ -7378,6 +7788,17 @@
/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/charlie/hall)
+"OJ" = (
+/mob/living/basic/alien/drone,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/item/shard{
+ icon_state = "small"
+ },
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"OM" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -7391,10 +7812,6 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/biolab)
-"OQ" = (
-/obj/structure/girder,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ancientstation/beta/medbay)
"OR" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/broken_flooring/side/directional/north,
@@ -7429,6 +7846,11 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
+"OW" = (
+/obj/structure/alien/weeds,
+/mob/living/basic/alien/queen,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"Pa" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -7442,6 +7864,10 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"Pc" = (
+/obj/structure/girder,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/hall)
"Pd" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -7570,14 +7996,16 @@
dir = 4
},
/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
-"PD" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/bridge)
+"PE" = (
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/disease2/centrifuge,
+/turf/open/floor/iron/white/textured_edge,
+/area/ruin/space/ancientstation/delta/biolab)
"PG" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
@@ -7601,6 +8029,43 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"PL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/command/glass{
+ name = "Bridge"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
+"PQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/science{
+ name = "Artificial Program Core Room"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/alien/weeds,
+/obj/structure/cable,
+/obj/effect/decal/cleanable/blood/tracks,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "oldstation-aisat"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/hall)
+"PR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sink/kitchen/directional/west{
+ desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
+ name = "old sink";
+ has_water_reclaimer = 0
+ },
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"PS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -7610,18 +8075,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/hall)
-"PZ" = (
-/obj/item/kirbyplants{
- icon_state = "plant-25"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
+"Qb" = (
+/obj/effect/turf_decal/tile/green/half/contrasted,
+/obj/machinery/growing/tray,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/white/textured,
-/area/ruin/space/ancientstation/delta/biolab)
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
"Qh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -7634,6 +8093,9 @@
/obj/structure/cable,
/turf/open/floor/engine/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"Qj" = (
+/turf/open/floor/iron/white/textured_large,
+/area/ruin/space/ancientstation/delta/biolab)
"Ql" = (
/obj/machinery/door/airlock,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
@@ -7645,9 +8107,24 @@
/obj/machinery/duct,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/hall)
+"Qr" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"Qs" = (
/turf/closed/mineral/gibtonite,
/area/space/nearstation)
+"QB" = (
+/obj/machinery/door/airlock/research{
+ name = "Research and Development"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"QC" = (
/obj/machinery/atmospherics/components/unary/passive_vent/layer2{
dir = 8
@@ -7655,6 +8132,15 @@
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
+"QG" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/basic/alien/drone,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
+"QH" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/closed/wall,
+/area/ruin/space/ancientstation/beta/medbay)
"QK" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -7713,6 +8199,29 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
+"Rb" = (
+/obj/machinery/light/small/directional/south,
+/obj/effect/turf_decal/tile/green/half/contrasted,
+/obj/machinery/growing/tray,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
+"Rc" = (
+/obj/machinery/door/airlock/science{
+ name = "Biolab"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor/closed,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/duct,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/biolab)
"Rf" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
@@ -7740,6 +8249,18 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
+"Rs" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stack/sheet/iron/fifty,
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/sheet/glass,
+/obj/item/stack/sheet/glass,
+/turf/open/floor/iron/white,
+/area/ruin/space/ancientstation/delta/rnd)
"Rt" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/safety_internals/directional/north,
@@ -7794,6 +8315,23 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
+"RQ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/door/firedoor/closed,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medical Bay";
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/medbay)
"RV" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/east,
@@ -7807,6 +8345,7 @@
"RX" = (
/obj/machinery/door/airlock/external/ruin,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/beta/mining)
"Sb" = (
@@ -7834,6 +8373,18 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/hall)
+"Sq" = (
+/obj/item/shard,
+/obj/machinery/atmospherics/components/binary/pump/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/glass,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/cable,
+/obj/structure/broken_flooring/singular/directional/west,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/hall)
"Sr" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/green/half/contrasted,
@@ -7856,6 +8407,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
"Sz" = (
@@ -7903,19 +8455,6 @@
/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/charlie/hall)
-"SQ" = (
-/obj/effect/decal/cleanable/shreds,
-/obj/structure/alien/weeds,
-/obj/structure/closet/crate/secure/science{
- req_access = list("away_science")
- },
-/obj/item/transfer_valve,
-/obj/item/raw_anomaly_core/bluespace,
-/obj/item/raw_anomaly_core/random,
-/obj/item/clothing/suit/toggle/labcoat/science,
-/obj/item/reagent_containers/cup/soda_cans/dr_gibb,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"ST" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -7927,22 +8466,23 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
-"SV" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/research{
- name = "Research and Development"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/firedoor/closed,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/ruin/space/ancientstation/delta/rnd)
"SZ" = (
/turf/closed/mineral/bscrystal,
/area/space/nearstation)
"Td" = (
/turf/closed/mineral/random,
/area/ruin/space/ancientstation/beta/hall)
+"Tf" = (
+/obj/machinery/door/airlock/mining/glass{
+ name = "Mining Equipment"
+ },
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/beta/mining)
"Ti" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -7988,6 +8528,26 @@
"Tu" = (
/turf/open/floor/plating/rust,
/area/ruin/space/ancientstation/beta/hall)
+"Tv" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
+"Tw" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/door/airlock/external/ruin{
+ name = "External Access"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/charlie/engie)
"Tx" = (
/obj/structure/closet/radiation,
/obj/item/clothing/suit/utility/radiation,
@@ -8032,6 +8592,10 @@
},
/turf/open/floor/engine,
/area/ruin/space/ancientstation/delta/biolab)
+"TQ" = (
+/obj/structure/broken_flooring/corner/directional/west,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"TX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -8059,6 +8623,16 @@
/obj/structure/cable,
/turf/open/floor/iron/solarpanel/airless,
/area/ruin/space/solars/ancientstation/charlie/solars)
+"Uh" = (
+/obj/machinery/power/supermatter_crystal/shard,
+/obj/structure/closet/crate/engineering{
+ name = "supermatter shard crate";
+ secure = 1;
+ locked = 1;
+ icon_state = "engi_secure_crate"
+ },
+/turf/open/floor/iron/white/textured,
+/area/ruin/space/ancientstation/delta/proto)
"Uj" = (
/obj/structure/girder,
/turf/closed/mineral/random,
@@ -8073,6 +8647,9 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
+"Um" = (
+/turf/closed/mineral/random,
+/area/template_noop)
"Un" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/light_switch/directional/west{
@@ -8087,20 +8664,38 @@
/obj/effect/decal/cleanable/generic,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
-"Up" = (
-/obj/structure/closet/crate/medical,
-/obj/item/skillchip/bonsai,
-/obj/item/circuitboard/machine/sleeper,
-/turf/open/floor/plating/airless,
+"Uq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor/closed,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
+"Ut" = (
+/obj/machinery/defibrillator_mount/loaded/directional/south,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/operating{
+ dir = 1
+ },
+/turf/open/floor/iron/airless,
/area/ruin/space/ancientstation/beta/medbay)
"Uu" = (
/turf/closed/mineral/plasma,
/area/space/nearstation)
+"Uv" = (
+/obj/structure/door_assembly/door_assembly_eng,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ancientstation/beta/supermatter)
"UB" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
/obj/effect/mapping_helpers/apc/no_charge,
+/obj/machinery/camera/autoname/directional/north{
+ status = 0
+ },
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
"UG" = (
@@ -8122,9 +8717,44 @@
"UJ" = (
/turf/open/floor/iron/white/textured,
/area/ruin/space/ancientstation/delta/proto)
+"UK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/mob_spawn/ghost_role/human/oldchef,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
+"UN" = (
+/obj/structure/cable,
+/obj/machinery/power/solar,
+/turf/open/floor/iron/solarpanel/airless,
+/area/ruin/space/solars/ancientstation/charlie/solars)
"UP" = (
/turf/closed/mineral/random,
/area/space/nearstation)
+"UQ" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/table,
+/obj/machinery/door/window/brigdoor/right/directional/east,
+/obj/machinery/computer/aifixer{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
+"UR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper/fluff/ruins/oldstation/report,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/modular_computer/preset/command,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/bridge)
"UV" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -8146,6 +8776,28 @@
/obj/structure/closet/emcloset/anchored,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/hall)
+"Ve" = (
+/obj/effect/turf_decal/tile/green/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/growing/tray,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/hydro)
+"Vh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/item/stack/cable_coil{
+ amount = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/ancientstation/charlie/hall)
"Vk" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -8161,12 +8813,35 @@
/obj/machinery/griddle,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"Vq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"Vu" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/engie)
+"Vv" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Gravity Generator"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/access/all/away/general,
+/turf/open/floor/iron/diagonal,
+/area/ruin/space/ancientstation/beta/gravity)
"Vw" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -8179,6 +8854,18 @@
/obj/effect/mapping_helpers/airalarm/all_access,
/turf/open/floor/iron/white,
/area/ruin/space/ancientstation/delta/rnd)
+"VG" = (
+/obj/structure/alien/weeds,
+/obj/machinery/recharge_station,
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
+"VL" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/bot_assembly/hygienebot,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/rnd)
"VT" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/shard/plasma{
@@ -8193,6 +8880,11 @@
/obj/structure/window/reinforced/spawner/directional/south,
/turf/open/floor/engine,
/area/ruin/space/ancientstation/delta/biolab)
+"VZ" = (
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"Wd" = (
/obj/effect/decal/cleanable/xenoblood/xtracks{
dir = 5
@@ -8228,18 +8920,29 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/beta/atmos)
-"Ws" = (
-/obj/machinery/light/small/directional/west,
-/obj/structure/alien/weeds,
-/mob/living/basic/alien,
-/turf/open/floor/iron/dark,
-/area/ruin/space/ancientstation/delta/ai)
"Wu" = (
/obj/machinery/duct,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"Wv" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet,
+/obj/item/storage/backpack/duffelbag,
+/obj/effect/spawner/random/clothing/backpack,
+/obj/effect/spawner/random/clothing/backpack,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/charlie/dorms)
+"Ww" = (
+/obj/structure/alien/weeds,
+/mob/living/basic/alien/drone,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"WA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -8299,6 +9002,10 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/hall)
+"Xl" = (
+/obj/machinery/computer/old,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"Xt" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/diagonal,
@@ -8309,6 +9016,15 @@
},
/turf/open/floor/plating,
/area/ruin/space/ancientstation/delta/rnd)
+"Xx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/disease2/diseaseanalyser,
+/turf/open/floor/iron/white/textured_edge,
+/area/ruin/space/ancientstation/delta/biolab)
"Xy" = (
/obj/structure/alien/egg/burst,
/obj/effect/decal/cleanable/insectguts,
@@ -8339,6 +9055,15 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"XI" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/light/small/broken/directional/west,
+/obj/structure/table_frame,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ancientstation/beta/medbay)
"XJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -8377,10 +9102,10 @@
/area/ruin/space/ancientstation/beta/gravity)
"XX" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 1
},
+/obj/machinery/computer/warrant,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/sec)
"XY" = (
@@ -8399,6 +9124,13 @@
},
/turf/open/floor/iron/cafeteria,
/area/ruin/space/ancientstation/charlie/kitchen)
+"Yc" = (
+/obj/structure/alien/weeds,
+/obj/machinery/camera/autoname/directional/west{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"Yg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -8490,11 +9222,6 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/bridge)
-"YH" = (
-/obj/structure/lattice,
-/obj/item/stack/rods,
-/turf/template_noop,
-/area/space/nearstation)
"YJ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -8514,6 +9241,12 @@
/obj/structure/sign/poster/contraband/lamarr,
/turf/closed/wall/rust,
/area/ruin/space/ancientstation/delta/biolab)
+"YV" = (
+/obj/machinery/door/window/right/directional/east{
+ req_access = list("away_general")
+ },
+/turf/open/floor/engine,
+/area/ruin/space/ancientstation/delta/biolab)
"YW" = (
/turf/open/floor/iron/textured_half,
/area/ruin/space/ancientstation/beta/supermatter)
@@ -8522,23 +9255,18 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/ruin/space/ancientstation/charlie/hall)
-"Zb" = (
+"Za" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/old,
-/obj/item/paper/fluff/ruins/oldstation/damagereport,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/biogenerator,
/turf/open/floor/iron,
-/area/ruin/space/ancientstation/charlie/bridge)
+/area/ruin/space/ancientstation/charlie/hydro)
"Zc" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
},
/turf/open/floor/plating/airless,
/area/ruin/space/ancientstation/beta/supermatter)
-"Ze" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/engine/n2,
-/area/ruin/space/ancientstation/beta/atmos)
"Zg" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{
@@ -8551,6 +9279,10 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating/rust,
/area/ruin/space/ancientstation/delta/hall)
+"Zq" = (
+/obj/item/tank/internals/anesthetic,
+/turf/template_noop,
+/area/template_noop)
"Zs" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/wrench,
@@ -8565,6 +9297,34 @@
"Zt" = (
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/rnd)
+"Zx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 4
+ },
+/obj/structure/table/glass,
+/obj/item/reagent_containers/cup/bottle{
+ pixel_x = -4;
+ list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30);
+ name = "Solution for Molly";
+ renamedByPlayer = 1
+ },
+/obj/item/reagent_containers/cup/bottle{
+ pixel_x = 4;
+ list_reagents = list(/datum/reagent/growthserum=30);
+ name = "Experimental solution";
+ renamedByPlayer = 1;
+ pixel_y = 8
+ },
+/obj/item/extrapolator,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/dropper{
+ pixel_x = -7;
+ pixel_y = 10
+ },
+/turf/open/floor/iron/white/textured,
+/area/ruin/space/ancientstation/delta/biolab)
"ZA" = (
/obj/effect/spawner/structure/window/hollow/end{
dir = 1
@@ -8595,6 +9355,25 @@
},
/turf/open/floor/iron,
/area/ruin/space/ancientstation/delta/hall)
+"ZU" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/directional/east,
+/obj/machinery/firealarm/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 1
+ },
+/mob/living/basic/alien,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/ruin/space/ancientstation/delta/hall)
+"ZV" = (
+/obj/structure/alien/weeds,
+/obj/machinery/camera/autoname/directional/east{
+ status = 0
+ },
+/turf/open/floor/iron/dark,
+/area/ruin/space/ancientstation/delta/ai)
"ZY" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/airalarm/directional/west,
@@ -9576,8 +10355,8 @@ aa
aa
aa
aa
-aa
-aa
+lV
+dy
aa
aa
aa
@@ -9640,7 +10419,7 @@ aa
aa
aa
aa
-aa
+DX
aa
aa
aa
@@ -9707,8 +10486,8 @@ aa
aa
aa
aa
-aa
-aa
+KF
+Zq
aa
aa
aa
@@ -9765,15 +10544,15 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Ck
+Ck
+AK
+bF
+kT
+AK
+AK
+GJ
+rf
aa
aa
aa
@@ -9831,15 +10610,15 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Ck
+NC
+IR
+yz
+Qr
+Dy
+XI
+iX
+AK
aa
aa
aa
@@ -9897,15 +10676,15 @@ UP
Td
aa
dF
+Ck
+Xl
+Qr
+VZ
+yz
+Qr
+Qr
+xF
AK
-AK
-AK
-bF
-lV
-AK
-AK
-aa
-aa
aa
UP
UP
@@ -9964,14 +10743,14 @@ Uj
fT
gO
AK
-ow
-IY
-NB
-oE
-nC
+vD
+uh
+dE
+qz
+MI
+Qr
+Ut
Ck
-aa
-aa
UP
UP
Uu
@@ -10030,15 +10809,15 @@ jE
bH
hJ
AK
-Up
-bq
-oB
-oF
-oJ
-lW
-YH
-Jg
-UP
+rQ
+Qr
+zc
+Qr
+TQ
+Qr
+xF
+tu
+IZ
UP
UP
Uu
@@ -10096,22 +10875,22 @@ sA
bI
je
Ck
-Ff
+xo
dD
kb
eH
-nD
-AK
-aa
-aa
+yf
+BQ
+Ho
+QH
Jg
aa
aa
UP
UP
Yp
-lY
-nv
+BD
+xw
mH
mH
kX
@@ -10119,9 +10898,9 @@ kA
kL
le
pp
-mH
+er
bJ
-aa
+Um
UP
UP
aa
@@ -10164,12 +10943,12 @@ mY
AK
Ck
rr
-iy
+RQ
vd
Ck
-OQ
+Ck
Bz
-kQ
+Pc
kQ
kQ
gJ
@@ -10177,7 +10956,7 @@ Ax
Ax
kQ
jO
-nw
+Jv
gf
mH
ko
@@ -10186,7 +10965,7 @@ Dp
Wp
lf
mH
-UP
+Lc
UP
wD
wD
@@ -10221,10 +11000,10 @@ Md
rG
Md
zp
-zn
+Vv
eA
gw
-bw
+rS
gz
PS
gi
@@ -10243,7 +11022,7 @@ oV
nQ
BX
pc
-nx
+Sq
pf
bJ
TB
@@ -10291,7 +11070,7 @@ FT
RV
CR
sA
-zJ
+zq
mY
KC
nf
@@ -10368,9 +11147,9 @@ Vl
Vl
Zc
SK
-Os
+Uv
Lm
-wE
+KR
SK
Df
SK
@@ -10378,11 +11157,11 @@ gJ
kQ
kQ
bJ
-Bs
+av
Lh
Gi
pv
-Ze
+hc
mH
nr
aa
@@ -10556,9 +11335,9 @@ SZ
UP
jE
mW
-mV
+ay
Vl
-ES
+om
NU
YW
NU
@@ -10574,7 +11353,7 @@ Hj
Ci
tr
Sy
-Jg
+dH
aa
aa
aa
@@ -10640,7 +11419,7 @@ JL
Vl
Lj
GR
-Jg
+dH
aa
aa
aa
@@ -10654,9 +11433,9 @@ Ua
dH
Ua
aa
-aa
-aa
-aa
+UN
+dH
+Ua
aa
aa
aa
@@ -10706,7 +11485,7 @@ vO
SK
Jg
Jg
-Jg
+dH
aa
aa
aa
@@ -10719,10 +11498,10 @@ Jg
Ua
my
IT
-aa
-aa
-aa
-aa
+Jg
+Ua
+dH
+UN
aa
aa
aa
@@ -10762,7 +11541,7 @@ HI
FK
sP
Vl
-Sk
+ta
QT
Ns
Ul
@@ -10772,7 +11551,7 @@ Sb
Df
Jg
Jg
-Jg
+dH
aa
aa
aa
@@ -10786,9 +11565,9 @@ IT
dH
BH
aa
-aa
-aa
-aa
+Ua
+my
+ri
aa
aa
aa
@@ -10838,7 +11617,7 @@ LG
rm
UP
Jg
-aa
+dH
aa
aa
aa
@@ -10852,9 +11631,9 @@ Jg
dH
Jg
aa
-aa
-aa
-aa
+Jg
+dH
+Jg
aa
aa
aa
@@ -10904,7 +11683,7 @@ rm
rm
UP
Jg
-aa
+dH
aa
aa
aa
@@ -10918,9 +11697,9 @@ BH
dH
Ua
aa
-aa
-aa
-aa
+Ua
+my
+Ua
aa
aa
aa
@@ -10946,7 +11725,7 @@ aa
aa
aa
iT
-jV
+NN
yO
mL
mN
@@ -10970,7 +11749,7 @@ rm
rm
Jg
Jg
-aa
+dH
aa
aa
aa
@@ -10984,9 +11763,9 @@ Ua
my
Ua
aa
-aa
-aa
-aa
+Ua
+dH
+Ua
aa
aa
aa
@@ -11036,7 +11815,7 @@ Jg
Jg
Jg
Jg
-aa
+dH
aa
aa
aa
@@ -11050,9 +11829,9 @@ IT
dH
Ua
aa
-aa
-aa
-aa
+Ua
+my
+Ua
aa
aa
aa
@@ -11102,7 +11881,7 @@ aa
Jg
aa
Jg
-aa
+dH
aa
aa
aa
@@ -11116,9 +11895,9 @@ Jg
my
Jg
aa
-aa
-aa
-aa
+Jg
+my
+Jg
aa
aa
aa
@@ -11148,7 +11927,7 @@ mB
mG
cm
gh
-mM
+Tf
gi
mZ
mw
@@ -11180,16 +11959,16 @@ dH
my
dH
my
+Ap
+dH
+my
+my
Ua
aa
aa
aa
aa
aa
-aa
-aa
-aa
-aa
"}
(40,1,1) = {"
aa
@@ -11248,9 +12027,9 @@ Jg
dH
Jg
aa
-aa
-aa
-aa
+Jg
+dH
+Jg
aa
aa
aa
@@ -11314,9 +12093,9 @@ Ua
dH
Ua
aa
-aa
-aa
-aa
+UN
+my
+Ua
aa
aa
aa
@@ -11356,7 +12135,7 @@ aa
aa
aa
fB
-vM
+Ca
fB
aa
aa
@@ -11380,9 +12159,9 @@ Ua
my
Ua
aa
-aa
-aa
-aa
+Ua
+my
+Ua
aa
aa
aa
@@ -11446,9 +12225,9 @@ Ua
dH
IT
aa
-aa
-aa
-aa
+Ua
+dH
+UN
aa
aa
aa
@@ -11479,7 +12258,7 @@ aa
aa
aa
kQ
-zJ
+zq
mV
jE
aa
@@ -11512,9 +12291,9 @@ Jg
dH
Jg
aa
-aa
-aa
-aa
+Jg
+dH
+Jg
aa
aa
aa
@@ -11554,7 +12333,7 @@ eI
eI
fb
fD
-kH
+Tw
gV
Vu
eI
@@ -11578,9 +12357,9 @@ Ua
my
Ua
aa
-aa
-aa
-aa
+Ua
+dH
+Ua
aa
aa
aa
@@ -11643,10 +12422,10 @@ Jg
Ua
my
IT
-aa
-aa
-aa
-aa
+Jg
+UN
+dH
+Ua
aa
aa
aa
@@ -11710,9 +12489,9 @@ IT
dH
IT
aa
-aa
-aa
-aa
+UN
+dH
+Ua
aa
aa
aa
@@ -11934,8 +12713,8 @@ aa
aa
aa
aa
-aa
-aa
+aT
+aT
aT
aT
hi
@@ -11949,9 +12728,9 @@ eI
dl
dl
eI
-fG
+tH
gn
-yu
+wh
gX
eI
eI
@@ -12000,9 +12779,9 @@ aa
aa
aa
aa
-aT
-aT
bb
+uE
+CJ
aA
Mu
Gd
@@ -12024,7 +12803,7 @@ ih
FV
cW
FV
-FV
+rJ
bQ
aT
oh
@@ -12081,7 +12860,7 @@ UV
UV
eP
fh
-cP
+Nj
Pa
tz
fh
@@ -12103,9 +12882,9 @@ aa
aa
aa
aa
-UP
aa
aa
+UP
aa
aa
aa
@@ -12139,7 +12918,7 @@ as
as
as
hi
-FV
+AS
jJ
bZ
ey
@@ -12166,6 +12945,8 @@ kM
aG
nk
nk
+aG
+aG
aa
aa
Uu
@@ -12178,8 +12959,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(55,1,1) = {"
aa
@@ -12199,7 +12978,7 @@ aa
as
as
dW
-YF
+NQ
aV
YF
bj
@@ -12213,7 +12992,7 @@ IB
qc
eQ
xb
-wF
+py
gI
hr
Mh
@@ -12231,6 +13010,8 @@ gZ
kN
kD
mz
+qn
+eT
nk
aG
aa
@@ -12244,8 +13025,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(56,1,1) = {"
aa
@@ -12279,7 +13058,7 @@ do
qc
Vk
dR
-dp
+Qb
gI
Kv
ht
@@ -12297,6 +13076,8 @@ bN
bN
pi
pk
+bN
+bN
ns
aG
UP
@@ -12310,8 +13091,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(57,1,1) = {"
aa
@@ -12340,12 +13119,12 @@ sq
FV
jJ
wG
-dp
+ob
dR
dR
dQ
dR
-wO
+Rb
gI
LA
hu
@@ -12363,6 +13142,8 @@ bN
kO
bN
lr
+bN
+tk
pm
mc
UP
@@ -12376,8 +13157,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(58,1,1) = {"
aa
@@ -12395,7 +13174,7 @@ aa
aa
aa
am
-PD
+Ed
aJ
bi
dc
@@ -12406,10 +13185,10 @@ Oz
FV
jJ
wG
-dp
+Ve
dR
-ep
-eR
+eq
+Za
dR
Sr
Yj
@@ -12429,6 +13208,8 @@ bN
bN
bN
pl
+bN
+bN
mc
mc
UP
@@ -12442,8 +13223,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(59,1,1) = {"
aa
@@ -12461,21 +13240,21 @@ aa
aa
aa
am
-Zb
+Id
aK
bi
dk
bz
bz
bz
-dL
+PL
UV
cp
wG
dq
dR
-eq
-bC
+xQ
+KQ
OU
Sr
gt
@@ -12495,6 +13274,8 @@ Aa
kP
bT
kp
+bN
+BN
xD
mc
UP
@@ -12508,8 +13289,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(60,1,1) = {"
aa
@@ -12527,7 +13306,7 @@ aa
aa
aa
am
-qn
+UR
aL
aI
ei
@@ -12538,10 +13317,10 @@ zr
zy
OT
wG
-dp
+ob
dR
-er
-jX
+ot
+sO
dR
Sr
Ss
@@ -12561,6 +13340,8 @@ kE
bN
pj
bN
+bN
+bN
po
nk
UP
@@ -12574,8 +13355,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(61,1,1) = {"
aa
@@ -12604,12 +13383,12 @@ sq
cq
OT
wG
-dp
+Ve
dR
dR
dQ
dR
-wO
+Rb
pw
Yk
lx
@@ -12627,6 +13406,8 @@ bN
ln
bN
kp
+bN
+UK
pk
Fh
aa
@@ -12640,8 +13421,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(62,1,1) = {"
aa
@@ -12675,7 +13454,7 @@ dr
gE
dO
dR
-dp
+Qb
gY
hx
td
@@ -12693,6 +13472,8 @@ bN
bN
bN
bN
+bN
+bN
ns
aG
aa
@@ -12706,8 +13487,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(63,1,1) = {"
aa
@@ -12727,7 +13506,7 @@ aa
as
as
BY
-hV
+CQ
aX
hV
bn
@@ -12737,7 +13516,7 @@ bR
rU
ey
cQ
-lH
+xG
hI
eS
gF
@@ -12759,6 +13538,8 @@ QQ
jB
pV
jP
+dn
+Wv
aG
aG
aa
@@ -12772,8 +13553,6 @@ aa
aa
aa
aa
-aa
-aa
"}
(64,1,1) = {"
aa
@@ -12826,8 +13605,8 @@ aG
nk
nk
aG
-aa
-aa
+nk
+aG
aa
aa
aa
@@ -12933,7 +13712,7 @@ cg
hi
Mf
KM
-FV
+iY
du
FV
Ka
@@ -12947,8 +13726,8 @@ cq
mh
FV
hj
-FV
-ia
+iY
+Vh
FV
hi
lQ
@@ -13081,7 +13860,7 @@ bd
eJ
cW
ia
-FV
+rJ
hi
aa
aa
@@ -13337,7 +14116,7 @@ eV
fs
fO
fO
-fO
+sm
hB
hX
im
@@ -13395,7 +14174,7 @@ aa
aa
aa
Ar
-ZZ
+Hx
aa
eJ
eJ
@@ -13460,7 +14239,7 @@ aa
aa
ZZ
aa
-HK
+xY
aa
aa
aa
@@ -13526,7 +14305,7 @@ aa
aa
aa
aa
-HK
+KU
aa
aa
aa
@@ -13729,7 +14508,7 @@ sg
bE
bE
zL
-UP
+zL
bE
bE
Cp
@@ -13796,7 +14575,7 @@ bE
Yg
Fo
Hr
-Dd
+or
Gz
Rt
bE
@@ -13855,7 +14634,7 @@ aa
aa
aa
bE
-En
+Tv
RD
cX
Gz
@@ -13873,7 +14652,7 @@ Gr
Gz
lB
jr
-GH
+tc
bE
aa
aa
@@ -14003,7 +14782,7 @@ Hb
oU
yE
dw
-cD
+sn
jr
od
Gz
@@ -14175,26 +14954,26 @@ aa
aa
ad
ad
-ag
+VG
aM
cC
bh
-cz
-cz
-cz
+pd
+wT
+UQ
ad
ad
aa
bE
cD
-Ao
+ur
wx
di
eE
fx
-kw
+Ku
gR
-ca
+ED
Mw
zG
hY
@@ -14240,26 +15019,26 @@ aa
aa
aa
ad
+Ih
af
-ag
aB
ag
ag
ag
cG
cZ
-SQ
+ui
ad
bE
bE
-dG
+Kj
Ao
wx
+Rs
kw
-eF
oG
gG
-nN
+QG
oe
Mw
ca
@@ -14310,7 +15089,7 @@ ad
ad
ad
ad
-bo
+KD
ad
ad
ad
@@ -14318,11 +15097,11 @@ ad
ad
df
bE
-cD
+EZ
ov
wx
ec
-fa
+kw
kq
gM
oH
@@ -14374,16 +15153,16 @@ aa
ad
ag
aH
-ag
+Yc
cH
ag
ag
ag
db
ag
-on
+Dv
df
-dg
+wI
cD
Ao
wx
@@ -14392,10 +15171,10 @@ kw
oI
lF
hS
-zG
+Of
Xv
-ca
SI
+Vq
ip
iF
DJ
@@ -14442,30 +15221,30 @@ ag
ap
aC
dd
-ao
+MW
ge
hL
ld
lZ
-mj
+MG
nL
-nV
+PQ
oo
MS
-Bv
+gj
Eg
jL
mk
-ca
+NF
jL
ca
-ok
+Kt
ca
ea
NZ
ca
mo
-jc
+ue
ST
cD
Iu
@@ -14508,30 +15287,30 @@ ad
ad
ad
ad
-bo
+KD
ad
ad
ad
ad
ad
-df
+yG
Gz
En
Ao
-SV
+vt
SM
yF
mI
nS
nS
nS
-ol
+Uq
Ke
rV
ir
lT
Ke
-jd
+QB
QR
wC
Hl
@@ -14571,13 +15350,13 @@ aa
aa
ad
ah
-ao
+Ww
aD
dB
ag
ai
jC
-aq
+jw
aN
ad
bE
@@ -14585,10 +15364,10 @@ bE
op
Ao
wx
-di
+wU
oD
og
-lF
+nw
iq
eB
wx
@@ -14598,7 +15377,7 @@ Ps
bD
bD
bD
-ST
+Jc
cD
uj
Ii
@@ -14643,20 +15422,20 @@ ai
ai
ai
ag
-de
+OW
ag
ad
aa
bE
oq
-IL
+tm
bD
+Ds
kw
-fu
-hE
+OJ
gP
kw
-oi
+VL
bD
QO
lM
@@ -14717,9 +15496,9 @@ bE
En
Ao
wx
+Gv
kw
-fv
-lF
+gK
gQ
kw
oj
@@ -14786,7 +15565,7 @@ bD
eD
fw
Vy
-kw
+PR
jW
sJ
bD
@@ -14799,7 +15578,7 @@ bD
Yr
cD
uj
-mm
+Uh
KG
uj
kU
@@ -14900,14 +15679,14 @@ aa
aa
aa
ad
-ao
-ag
+MW
+ZV
aC
aN
ag
ai
xP
-ag
+ZV
dB
ad
aa
@@ -14920,7 +15699,7 @@ Jp
rh
OM
OM
-vU
+pg
QR
rg
QR
@@ -14970,7 +15749,7 @@ ad
ad
ad
ad
-bo
+KD
ad
ad
ad
@@ -14979,10 +15758,10 @@ ad
aa
bE
ou
-En
+Tv
jx
Xz
-gD
+FE
nP
oK
sL
@@ -14992,7 +15771,7 @@ nT
Wk
Se
uJ
-nW
+ZU
nY
Yh
od
@@ -15035,10 +15814,10 @@ aa
ad
ar
aE
-lq
-ag
+Gh
+aq
gk
-Ws
+Ks
vX
ad
aa
@@ -15052,7 +15831,7 @@ NG
GX
GX
yr
-xj
+Rc
rp
rp
rp
@@ -15168,7 +15947,7 @@ aa
ad
ad
ad
-bA
+sh
ad
ad
ad
@@ -15179,7 +15958,7 @@ Vb
yj
Fi
YO
-wK
+PE
Jq
UG
GX
@@ -15245,14 +16024,14 @@ bE
bE
bE
GX
-DW
+Fn
rl
FW
GX
NG
-GM
+zj
md
-xM
+YV
Go
Yl
rC
@@ -15311,7 +16090,7 @@ aa
aa
aa
vA
-rN
+Xx
Pg
zI
PA
@@ -15377,17 +16156,17 @@ aa
aa
aa
vA
-PZ
-Ob
-Ob
-EH
-Ob
-HN
-HJ
-NA
-Ob
-Ob
-Ay
+Jj
+MC
+MC
+MC
+MC
+Qj
+Im
+Qj
+MC
+MC
+Fa
vA
aa
aa
@@ -15442,19 +16221,19 @@ aa
aa
aa
aa
-vJ
-ON
-ON
-NG
-GX
-NG
-ON
-GX
-GX
-NG
-ON
-ON
-WM
+vA
+Zx
+KZ
+LD
+EH
+Ob
+HN
+HJ
+NA
+LD
+Ob
+Ay
+vA
aa
aa
aa
@@ -15508,19 +16287,19 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+vJ
+ON
+ON
+NG
+GX
+NG
+ON
+GX
+GX
+NG
+ON
+ON
+WM
aa
aa
aa
diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm
index 83bcd0cfc87b..12e55043d40d 100644
--- a/_maps/map_files/Blueshift/Blueshift.dmm
+++ b/_maps/map_files/Blueshift/Blueshift.dmm
@@ -607,12 +607,6 @@
/obj/effect/spawner/liquids_spawner,
/turf/open/floor/lowered/iron/pool/cobble/side,
/area/station/common/pool)
-"agJ" = (
-/obj/effect/turf_decal/stripes{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/upper)
"agL" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -7428,9 +7422,8 @@
/turf/open/floor/iron/dark,
/area/station/security/prison/upper)
"bwW" = (
-/obj/structure/flora/bush/jungle/b/style_2,
-/obj/structure/flora/bush/flowers_pp,
/obj/structure/window/reinforced/fulltile,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"bwY" = (
@@ -14713,13 +14706,6 @@
/obj/structure/sign/poster/random/directional/north,
/turf/open/floor/plating,
/area/station/hallway/secondary/construction)
-"cMo" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/rock/pile/jungle/style_4,
-/turf/open/misc/asteroid,
-/area/station/hallway/primary/upper)
"cMq" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -15093,10 +15079,8 @@
/turf/open/floor/wood,
/area/station/commons/dorms/room5)
"cQg" = (
-/obj/effect/turf_decal/stripes{
- dir = 6
- },
-/turf/open/floor/plating,
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/carpet/blue,
/area/station/maintenance/port/upper)
"cQn" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
@@ -19591,12 +19575,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/closed/wall,
/area/station/medical/power_station)
-"dKI" = (
-/obj/structure/flora/bush/jungle/b/style_2,
-/obj/structure/flora/bush/flowers_pp/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"dKK" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -23502,10 +23480,7 @@
/turf/open/floor/mineral/plastitanium/red,
/area/station/science/robotics/lab)
"ezM" = (
-/obj/effect/turf_decal/stripes{
- dir = 10
- },
-/turf/open/floor/plating,
+/turf/open/floor/carpet/blue,
/area/station/maintenance/port/upper)
"ezN" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -24330,6 +24305,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/spawner/xmastree,
/turf/open/floor/iron,
/area/station/hallway/primary/upper)
"eGI" = (
@@ -25824,13 +25800,6 @@
/obj/effect/mapping_helpers/airlock/access/all/science/rd,
/turf/open/floor/iron/dark,
/area/station/science/server)
-"eUH" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/ocean/glowweed,
-/turf/open/misc/asteroid,
-/area/station/hallway/primary/upper)
"eUL" = (
/obj/structure/chair/pew/left{
dir = 4
@@ -34090,8 +34059,6 @@
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
"gBx" = (
-/obj/structure/flora/bush/jungle,
-/obj/structure/flora/bush/flowers_yw/style_3,
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/grass,
/area/station/hallway/primary/upper)
@@ -36395,6 +36362,7 @@
},
/obj/machinery/status_display/ai/directional/east,
/obj/machinery/light/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/hallway/primary/upper)
"hbb" = (
@@ -38491,12 +38459,6 @@
/obj/structure/window/spawner/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/department/security/greater)
-"hwe" = (
-/obj/structure/flora/bush/jungle/a/style_2,
-/obj/structure/flora/bush/flowers_yw/style_2,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"hwi" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -45004,10 +44966,6 @@
/obj/effect/turf_decal/tile/bar/opposingcorners,
/turf/open/floor/iron,
/area/station/service/bar)
-"iKG" = (
-/obj/item/circuitboard/mecha/ripley/main,
-/turf/open/floor/plating,
-/area/station/maintenance/port/upper)
"iKI" = (
/obj/structure/railing{
dir = 6
@@ -45178,12 +45136,6 @@
"iMc" = (
/turf/closed/wall/r_wall,
/area/station/common/pool)
-"iMf" = (
-/obj/structure/flora/bush/jungle/c/style_3,
-/obj/structure/flora/bush/flowers_br,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"iMj" = (
/obj/structure/closet,
/obj/effect/turf_decal/delivery,
@@ -46072,12 +46024,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet/blue,
/area/station/command/captain_dining)
-"iWF" = (
-/obj/structure/flora/bush/jungle/c/style_3,
-/obj/structure/flora/bush/flowers_yw/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"iWJ" = (
/obj/structure/bed,
/obj/item/bedsheet/medical,
@@ -50012,12 +49958,6 @@
/obj/effect/landmark/start/assistant,
/turf/open/floor/iron/dark,
/area/station/common/gaskiosk)
-"jJh" = (
-/obj/structure/flora/bush/jungle/c/style_3,
-/obj/structure/flora/bush/flowers_pp/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"jJi" = (
/obj/structure/railing,
/obj/effect/turf_decal/stripes,
@@ -53306,12 +53246,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/prison/workout)
-"knr" = (
-/obj/structure/flora/bush/jungle/a,
-/obj/structure/flora/bush/flowers_br/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"knt" = (
/obj/structure/chair/pew/right{
dir = 8
@@ -55174,12 +55108,6 @@
dir = 8
},
/area/station/science)
-"kER" = (
-/obj/structure/flora/bush/jungle/a/style_3,
-/obj/structure/flora/bush/flowers_br/style_2,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"kFd" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/mining{
@@ -58494,6 +58422,10 @@
dir = 9
},
/area/station/hallway/secondary/exit)
+"loV" = (
+/obj/effect/spawner/xmastree,
+/turf/open/floor/stone,
+/area/station/hallway/primary/central)
"loW" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -65819,11 +65751,11 @@
},
/area/station/common/wrestling/arena)
"mMJ" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
+/obj/structure/flora/bush/jungle/a/style_2,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
},
-/obj/structure/flora/rock/pile/jungle/style_5,
-/turf/open/misc/asteroid,
+/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"mMK" = (
/obj/machinery/shieldgen,
@@ -66112,13 +66044,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"mPK" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/item/toy/seashell,
-/turf/open/misc/asteroid,
-/area/station/hallway/primary/upper)
"mPL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/stairs{
@@ -66669,12 +66594,6 @@
},
/turf/open/floor/engine/hull/reinforced,
/area/space/nearstation)
-"mVh" = (
-/obj/structure/flora/bush/jungle/b,
-/obj/structure/flora/bush/flowers_yw,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"mVi" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -73923,12 +73842,8 @@
/turf/open/floor/iron,
/area/station/science/ordnance/testlab)
"oqO" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/ocean/seaweed,
-/mob/living/basic/carp/passive,
-/turf/open/misc/asteroid,
+/obj/structure/flora/bush/sparsegrass/style_random,
+/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"oqT" = (
/obj/machinery/door/airlock/security/glass{
@@ -78081,11 +77996,7 @@
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
"pgY" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/machinery/light/directional/north,
-/turf/open/misc/asteroid,
+/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"phg" = (
/obj/structure/closet/emcloset,
@@ -78223,9 +78134,8 @@
/turf/open/floor/iron,
/area/station/common/wrestling/arena)
"pit" = (
-/obj/structure/flora/bush/jungle/c,
-/obj/structure/flora/bush/flowers_pp/style_2,
/obj/structure/window/reinforced/fulltile,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"piw" = (
@@ -80260,12 +80170,6 @@
/mob/living/basic/slime,
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"pCO" = (
-/obj/effect/turf_decal/stripes{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/upper)
"pCQ" = (
/obj/effect/turf_decal/delivery,
/obj/structure/tank_dispenser,
@@ -80509,8 +80413,8 @@
/turf/open/floor/iron,
/area/station/tcommsat/computer)
"pFO" = (
-/obj/effect/turf_decal/stripes,
-/turf/open/floor/plating,
+/mob/living/basic/carp/passive,
+/turf/open/floor/carpet/blue,
/area/station/maintenance/port/upper)
"pFS" = (
/obj/item/radio/intercom/directional/north,
@@ -81329,12 +81233,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/crew_quarters/dorms)
-"pNa" = (
-/obj/effect/turf_decal/stripes{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/upper)
"pNb" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -83272,12 +83170,6 @@
},
/turf/open/floor/engine/hull,
/area/space/nearstation)
-"qiS" = (
-/obj/effect/turf_decal/stripes{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/upper)
"qjb" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -85443,12 +85335,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"qDe" = (
-/obj/structure/flora/bush/jungle/a/style_2,
-/obj/structure/flora/bush/flowers_yw/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"qDf" = (
/obj/effect/turf_decal/siding/thinplating/dark{
dir = 1
@@ -88798,12 +88684,8 @@
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
"rko" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/rock/pile/jungle,
-/obj/item/toy/seashell,
-/turf/open/misc/asteroid,
+/obj/structure/flora/bush/flowers_br,
+/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"rkp" = (
/obj/structure/cable,
@@ -93522,9 +93404,10 @@
/turf/open/floor/plating,
/area/station/security/checkpoint/customs/auxiliary)
"sgt" = (
-/obj/structure/flora/bush/jungle/b,
-/obj/structure/flora/bush/flowers_br,
-/obj/structure/window/reinforced/fulltile,
+/obj/structure/flora/bush/sparsegrass/style_random,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"sgv" = (
@@ -99120,14 +99003,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/command/captain_dining)
-"tiA" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/ocean/glowweed,
-/mob/living/basic/carp/passive,
-/turf/open/misc/asteroid,
-/area/station/hallway/primary/upper)
"tiD" = (
/obj/machinery/computer/prisoner/management{
dir = 8
@@ -104102,6 +103977,7 @@
},
/obj/machinery/status_display/evac/directional/west,
/obj/machinery/light/directional/west,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/upper)
"ugJ" = (
@@ -114435,12 +114311,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/fore)
-"wdN" = (
-/obj/structure/flora/bush/jungle/b/style_2,
-/obj/structure/flora/bush/flowers_br/style_3,
-/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
-/area/station/hallway/primary/upper)
"wdS" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -114664,11 +114534,8 @@
/turf/open/floor/plating,
/area/station/maintenance/fore/upper)
"wfr" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/ocean/longseaweed,
-/turf/open/misc/asteroid,
+/mob/living/carbon/human/species/monkey,
+/turf/open/floor/grass,
/area/station/hallway/primary/upper)
"wfs" = (
/obj/structure/rack/shelf,
@@ -121311,10 +121178,8 @@
/turf/open/floor/iron/smooth_large,
/area/station/cargo/storage)
"xtV" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/turf/open/misc/asteroid,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/closed/wall/r_wall,
/area/station/hallway/primary/upper)
"xtX" = (
/obj/machinery/door/airlock/external,
@@ -122979,15 +122844,6 @@
dir = 1
},
/area/station/science/research)
-"xLg" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/rock/pile/jungle/style_3,
-/obj/structure/flora/ocean/coral,
-/obj/machinery/light/directional/south,
-/turf/open/misc/asteroid,
-/area/station/hallway/primary/upper)
"xLh" = (
/obj/structure/table/wood/fancy/green,
/obj/item/flashlight/lamp/green{
@@ -123873,11 +123729,8 @@
/turf/open/floor/grass,
/area/station/hallway/primary/central/aft)
"xVz" = (
-/obj/effect/spawner/liquids_spawner{
- reagent_list = list(/datum/reagent/water=600)
- },
-/obj/structure/flora/rock/style_3,
-/turf/open/misc/asteroid,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/closed/wall/r_wall,
/area/station/hallway/primary/upper)
"xVF" = (
/obj/effect/turf_decal/tile/neutral{
@@ -157198,7 +157051,7 @@ jKx
bBd
bOT
gCJ
-gCJ
+loV
gCJ
dGC
bGm
@@ -217271,11 +217124,11 @@ ulI
ulI
ulI
wMx
-agJ
-bgP
-bgP
+pFO
ezM
-wMx
+ezM
+ezM
+xsa
ulI
pyO
pyO
@@ -217528,11 +217381,11 @@ ybT
fEG
bVe
wMx
-pCO
-ybT
-ybT
+ezM
+ezM
+ezM
pFO
-wMx
+xsa
oIL
pyO
vzG
@@ -217785,11 +217638,11 @@ wmI
wMx
aNm
aNm
-pCO
-ybT
-iKG
-pFO
-aNm
+ezM
+ezM
+ezM
+ezM
+xsa
nUr
vQK
qNG
@@ -218042,11 +217895,11 @@ ybT
sZG
cmY
aNm
-pNa
-qiS
-qiS
+ezM
+pFO
+ezM
cQg
-aNm
+xsa
ulI
kNf
pcs
@@ -218299,10 +218152,10 @@ aNm
flY
wMx
aNm
-aNm
-aNm
-wMx
-aNm
+xsa
+xsa
+xsa
+xsa
aNm
ulI
fDI
@@ -221982,9 +221835,9 @@ pQF
tYT
tYT
tYT
-mzu
-mVh
-iMf
+xVz
+gBx
+gBx
gBx
ukH
qJk
@@ -222240,9 +222093,9 @@ cfl
cfl
cfl
bwW
-wfr
-cMo
-tiA
+sgt
+pgY
+oqO
mzu
coT
gST
@@ -222496,11 +222349,11 @@ eRh
cfl
eLB
cfl
-kER
+gBx
rko
wfr
-xtV
-jJh
+pgY
+gBx
cfl
cfl
gyk
@@ -222753,11 +222606,11 @@ eRh
mkE
wMo
wMo
-hwe
+gBx
pgY
-xVz
-xLg
-sgt
+pgY
+oqO
+gBx
cfl
cfl
lcX
@@ -223010,11 +222863,11 @@ eRh
cfl
uGh
cfl
-wdN
+gBx
oqO
-mPK
-xtV
-qDe
+wfr
+pgY
+gBx
cfl
cfl
gyk
@@ -223269,8 +223122,8 @@ cfl
cfl
pit
mMJ
-xtV
-eUH
+pgY
+rko
mzu
ugc
uol
@@ -223524,10 +223377,10 @@ pQF
akt
akt
akt
-mzu
-iWF
-knr
-dKI
+xtV
+gBx
+gBx
+gBx
ukH
wiK
wiK
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 63453f1774a3..82cec3c519f6 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -1540,6 +1540,11 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white/textured,
/area/station/science/xenobiology)
+"ayU" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/security/detectives_office)
"azm" = (
/obj/effect/turf_decal/trimline/dark_blue/filled/line{
dir = 1
@@ -16286,7 +16291,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
/obj/machinery/door/airlock/maintenance{
- name = "Detective Office Maintenance"
+ name = "Detective's Office Maintenance"
},
/obj/effect/mapping_helpers/airlock/access/any/security/detective,
/turf/open/floor/plating,
@@ -19516,7 +19521,7 @@
/obj/machinery/door/airlock/maintenance{
name = "Law Office Maintenance"
},
-/obj/effect/mapping_helpers/airlock/access/any/security/detective,
+/obj/effect/mapping_helpers/airlock/access/any/service/lawyer,
/turf/open/floor/plating,
/area/station/service/lawoffice)
"gtA" = (
@@ -41633,6 +41638,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
+/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
name = "Private Interrogation"
},
@@ -50031,6 +50037,10 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/iron/dark,
/area/station/security/execution/transfer)
+"qoA" = (
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/wood,
+/area/station/service/lawoffice)
"qoB" = (
/obj/structure/sign/poster/random/directional/south,
/obj/effect/spawner/random/structure/crate,
@@ -51265,6 +51275,11 @@
/obj/effect/landmark/start/quartermaster,
/turf/open/floor/wood,
/area/station/command/heads_quarters/qm)
+"qJG" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/security/detectives_office)
"qKk" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -53549,10 +53564,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
+/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/service{
name = "Law Office Quarters"
},
-/obj/effect/mapping_helpers/airlock/access/any/security/detective,
+/obj/effect/mapping_helpers/airlock/access/any/service/lawyer,
/turf/open/floor/iron/dark/textured,
/area/station/service/lawoffice)
"rzs" = (
@@ -59628,6 +59644,10 @@
"txI" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/disposal/incinerator)
+"txJ" = (
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/wood,
+/area/station/security/detectives_office)
"txT" = (
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/nt_rep)
@@ -71790,6 +71810,10 @@
/obj/machinery/vending/access/command,
/turf/open/floor/wood,
/area/station/command/meeting_room)
+"xrT" = (
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/wood,
+/area/station/service/lawoffice)
"xrX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -73146,6 +73170,10 @@
/obj/machinery/photocopier,
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"xOB" = (
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/wood,
+/area/station/service/lawoffice)
"xOH" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/department/engineering/central)
@@ -100455,7 +100483,7 @@ mUw
mUw
xhv
mUw
-mUw
+xOB
dIW
mUw
iua
@@ -100971,9 +100999,9 @@ mUw
bpe
dor
dIW
-mUw
+qoA
pVB
-mUw
+xrT
fPN
wfE
dwJ
@@ -101999,9 +102027,9 @@ mHH
tbg
tFs
hjG
-hPT
+qJG
rKe
-hPT
+ayU
fPN
fhe
dwJ
@@ -102511,7 +102539,7 @@ tbg
tbg
qid
tbg
-tbg
+txJ
hjG
hPT
jUt
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 25569a0663fb..75b2cdf82042 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -374,15 +374,20 @@
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
"ahr" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 4
- },
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance,
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
/turf/open/floor/iron/dark,
-/area/station/hallway/primary/central)
+/area/station/maintenance/port)
"ahD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -2857,8 +2862,11 @@
pixel_y = 7;
pixel_x = -8
},
+/obj/machinery/cassette/adv_cassette_deck{
+ pixel_y = 8
+ },
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"aWl" = (
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/plating/airless,
@@ -9014,6 +9022,13 @@
},
/turf/open/floor/iron/white,
/area/station/science/robotics/lab)
+"dph" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
"dpn" = (
/obj/effect/spawner/random/food_or_drink/donkpockets,
/obj/structure/table/glass,
@@ -9291,6 +9306,7 @@
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/item/kirbyplants/random,
+/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/white,
/area/station/science/explab)
"dtB" = (
@@ -10722,11 +10738,12 @@
/turf/open/floor/iron/white,
/area/station/medical/chemistry)
"dVR" = (
-/obj/machinery/light/small/directional/north,
/obj/machinery/computer/security/telescreen/entertainment/directional/east,
/obj/machinery/vending/wardrobe/curator_wardrobe,
+/obj/machinery/light/small/directional/east,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"dWd" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -15737,7 +15754,7 @@
"fKG" = (
/obj/effect/landmark/blobstart,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"fKP" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -18170,8 +18187,11 @@
/turf/open/floor/wood,
/area/station/smithing)
"gDv" = (
-/obj/item/kirbyplants,
/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"gDT" = (
@@ -19525,7 +19545,7 @@
pixel_y = 8
},
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"haE" = (
/obj/structure/mirror/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -20548,6 +20568,10 @@
/obj/machinery/telecomms/bus/preset_four,
/turf/open/floor/circuit/telecomms/mainframe,
/area/station/tcommsat/server)
+"hqF" = (
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron/vaporwave,
+/area/station/service/library/private)
"hqL" = (
/obj/machinery/light_switch/directional/east,
/obj/machinery/shower/directional/west{
@@ -23169,7 +23193,7 @@
pixel_x = -4
},
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"ilx" = (
/obj/structure/closet/emcloset,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -26023,13 +26047,12 @@
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"jfa" = (
-/obj/effect/decal/cleanable/cobweb,
/obj/structure/table/wood,
/obj/machinery/cassette/dj_station{
pixel_y = 12
},
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"jff" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -29181,9 +29204,6 @@
/turf/open/floor/plating,
/area/station/hallway/primary/central)
"kir" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment{
@@ -29490,11 +29510,10 @@
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
"knK" = (
-/obj/structure/table/wood,
-/obj/machinery/cassette/adv_cassette_deck,
+/obj/structure/filingcabinet,
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"knP" = (
/obj/machinery/light/directional/west,
/obj/machinery/computer/camera_advanced/base_construction/aux{
@@ -32451,6 +32470,10 @@
/obj/structure/cable/layer3,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/storage/satellite)
+"loa" = (
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/iron/vaporwave,
+/area/station/service/library/private)
"lof" = (
/obj/structure/window/reinforced/spawner/directional/north{
pixel_y = 1
@@ -32685,7 +32708,7 @@
},
/obj/item/storage/photo_album/library,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"lrZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -34658,10 +34681,9 @@
"maB" = (
/obj/structure/destructible/cult/item_dispenser/archives/library,
/obj/item/clothing/under/suit/red,
-/obj/effect/decal/cleanable/cobweb,
-/obj/item/book/codex_gigas,
+/obj/item/book/kindred,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"maF" = (
/obj/structure/closet/secure_closet/nanotrasen_representative,
/turf/open/floor/carpet/green,
@@ -34770,7 +34792,7 @@
/area/station/security/prison/visit)
"mda" = (
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"mdo" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -47717,6 +47739,9 @@
"qzS" = (
/obj/structure/table/wood,
/obj/machinery/newscaster/directional/west,
+/obj/machinery/cassette/adv_cassette_deck{
+ pixel_y = 8
+ },
/turf/open/floor/wood,
/area/station/service/library)
"qAc" = (
@@ -48625,6 +48650,9 @@
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"qQu" = (
@@ -49216,20 +49244,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"qZn" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock/maintenance,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 8
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/port)
"qZD" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 8
@@ -50281,10 +50295,6 @@
},
/turf/open/floor/iron/dark,
/area/station/command/bridge)
-"rur" = (
-/obj/machinery/newscaster/directional/west,
-/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
"rut" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=14.2-Central-CrewQuarters";
@@ -51141,8 +51151,30 @@
/turf/open/floor/iron,
/area/station/engineering/atmos)
"rIa" = (
-/obj/machinery/photocopier{
- pixel_y = 3
+/obj/structure/table/wood,
+/obj/item/device/walkman{
+ pixel_y = 4;
+ pixel_x = -6
+ },
+/obj/item/device/walkman{
+ pixel_y = 4;
+ pixel_x = -6
+ },
+/obj/item/device/walkman{
+ pixel_y = 4;
+ pixel_x = -6
+ },
+/obj/item/device/cassette_tape/blank{
+ pixel_y = 3;
+ pixel_x = 5
+ },
+/obj/item/device/cassette_tape/blank{
+ pixel_y = 3;
+ pixel_x = 5
+ },
+/obj/item/device/cassette_tape/blank{
+ pixel_y = 3;
+ pixel_x = 5
},
/turf/open/floor/wood,
/area/station/service/library)
@@ -52624,7 +52656,7 @@
},
/obj/item/storage/fancy/candle_box,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"sgc" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin{
@@ -55305,6 +55337,9 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"tdI" = (
+/turf/closed/wall,
+/area/station/service/library/private)
"tdP" = (
/obj/effect/turf_decal/bot_white/left,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -56464,15 +56499,6 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
-"txz" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central)
"txG" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{
dir = 5
@@ -56583,6 +56609,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"tAH" = (
@@ -59966,7 +59993,7 @@
name = "Forbidden Knowledge"
},
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
"uJs" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/cigarettes,
@@ -67389,7 +67416,7 @@
req_access = list("library")
},
/turf/open/floor/engine/cult,
-/area/station/service/library)
+/area/station/service/library/private)
"xrf" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -67680,11 +67707,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
-"xxk" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk,
-/turf/open/floor/iron/dark,
-/area/station/hallway/primary/central)
"xxp" = (
/obj/machinery/airalarm/directional/west,
/obj/effect/mapping_helpers/burnt_floor,
@@ -69937,8 +69959,9 @@
/obj/structure/chair/comfy/brown{
dir = 1
},
+/obj/effect/landmark/start/librarian,
/turf/open/floor/iron/vaporwave,
-/area/station/service/library)
+/area/station/service/library/private)
(1,1,1) = {"
aaa
@@ -90379,12 +90402,12 @@ nPu
mjr
nxz
ueD
-sVY
-sVY
-sVY
-sVY
-sVY
-pOa
+tdI
+tdI
+tdI
+tdI
+tdI
+tdI
hdx
cIW
pOa
@@ -90636,14 +90659,14 @@ tmB
wcL
yfT
klf
-sVY
+tdI
jfa
mda
-rur
+mda
knK
-pOa
+tdI
kir
-vXH
+clp
pOa
wKe
aez
@@ -90893,12 +90916,12 @@ inH
flQ
mjr
fUM
-sVY
+tdI
ils
ymh
+mda
aWj
-sVY
-pOa
+tdI
sQY
nPt
qSk
@@ -91150,12 +91173,12 @@ tot
bsu
mjr
wih
-sVY
+tdI
maB
+loa
mda
haA
-sVY
-vXH
+tdI
sQY
tWq
pOa
@@ -91410,9 +91433,9 @@ qRf
xrd
fKG
mda
+mda
lrL
-sVY
-clp
+tdI
etn
ayH
pOa
@@ -91664,13 +91687,13 @@ sVY
sVY
sVY
sVY
-sVY
+tdI
dVR
sfO
+hqF
uJm
-sVY
-pOa
-qZn
+tdI
+sQY
pOa
pOa
bMY
@@ -91921,12 +91944,12 @@ sVY
jPo
apB
ooP
-sVY
-sVY
-sVY
-sVY
-sVY
-xxk
+tdI
+tdI
+tdI
+tdI
+tdI
+tdI
ahr
bMY
sTe
@@ -92183,7 +92206,7 @@ usA
jWg
tKu
bBA
-txz
+xuS
wYe
bMY
kua
@@ -92697,7 +92720,7 @@ wcN
uyr
fDk
vVV
-htd
+dph
tAG
gDv
oNP
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 363d3383b24f..6b504af71e97 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -345,7 +345,7 @@
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"bF" = (
-/obj/machinery/computer/rdconsole,
+/obj/machinery/computer/rdconsole/unlocked,
/turf/open/floor/iron,
/area/station/science)
"bH" = (
diff --git a/_maps/map_files/debug/shiptest.dmm b/_maps/map_files/debug/shiptest.dmm
index 48f19b748324..c68625a35fb7 100644
--- a/_maps/map_files/debug/shiptest.dmm
+++ b/_maps/map_files/debug/shiptest.dmm
@@ -365,7 +365,7 @@
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"bF" = (
-/obj/machinery/computer/rdconsole,
+/obj/machinery/computer/rdconsole/unlocked,
/turf/open/floor/iron,
/area/station/science)
"bG" = (
diff --git a/_maps/shuttles/ert_deathsquad.dmm b/_maps/shuttles/ert_deathsquad.dmm
new file mode 100644
index 000000000000..1336cff54dfe
--- /dev/null
+++ b/_maps/shuttles/ert_deathsquad.dmm
@@ -0,0 +1,371 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/effect/turf_decal/stripes/red/box,
+/obj/structure/fans/tiny,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "rightdoor"
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"b" = (
+/obj/machinery/button/door/directional/east{
+ req_access = list(188);
+ id = "rightdoor"
+ },
+/obj/machinery/light/red/dim/directional/east,
+/obj/machinery/computer/mech_bay_power_console{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"c" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/plasma/spawner/directional/north,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered/deathsquad)
+"e" = (
+/turf/open/space/basic,
+/area/template_noop)
+"f" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1;
+ name = "tactical chair"
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"g" = (
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "cockpit"
+ },
+/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered/deathsquad)
+"i" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8;
+ name = "tactical chair"
+ },
+/obj/machinery/light/red/dim/directional/east,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"j" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/obj/docking_port/mobile/ert{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered/deathsquad)
+"k" = (
+/obj/effect/landmark/ert_shuttle_brief_spawn,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"l" = (
+/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "cockpit"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered/deathsquad)
+"m" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/stand_clear/red{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"n" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 10
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8;
+ name = "tactical chair"
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"o" = (
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes,
+/obj/machinery/computer/shuttle/ert/deathsquad,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/powered/deathsquad)
+"p" = (
+/obj/effect/turf_decal/stripes/red/box,
+/obj/structure/fans/tiny,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "leftdoor"
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"q" = (
+/obj/machinery/teleport/station,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"r" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered/deathsquad)
+"s" = (
+/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/area/shuttle/ert/powered/deathsquad)
+"u" = (
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"w" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/light/red/dim/directional/west,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"x" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"y" = (
+/obj/effect/turf_decal/caution/red{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"A" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/machinery/button/door/directional/west{
+ id = "leftdoor";
+ req_access = list(188)
+ },
+/obj/machinery/light/red/dim/directional/west,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"B" = (
+/obj/machinery/computer/teleporter{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"C" = (
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"D" = (
+/obj/item/storage/box/syndie_kit/imp_deathrattle/nanotrasen,
+/obj/structure/rack,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"E" = (
+/obj/structure/rack,
+/obj/item/stack/cable_coil/five,
+/obj/item/weldingtool/experimental,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"F" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "cockpit";
+ req_access = list(188)
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"H" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/caution/stand_clear/red{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"I" = (
+/obj/effect/turf_decal/delivery/red,
+/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/elite,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"K" = (
+/obj/machinery/mech_bay_recharge_port{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/end,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"N" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 6
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"O" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/computer/security,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/powered/deathsquad)
+"P" = (
+/obj/machinery/teleport/hub,
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"R" = (
+/obj/machinery/door/airlock/hatch{
+ id_tag = "infiltrator_bridge";
+ name = "Infiltrator Bridge"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/specops,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"T" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/machinery/vending/wallmed/directional/north,
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"U" = (
+/turf/closed/wall/r_wall/syndicate,
+/area/shuttle/ert/powered/deathsquad)
+"Y" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/ert/powered/deathsquad)
+"Z" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert/deathsquad{
+ x_offset = -1;
+ y_offset = 7
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/powered/deathsquad)
+
+(1,1,1) = {"
+e
+e
+U
+s
+U
+U
+p
+U
+U
+U
+e
+"}
+(2,1,1) = {"
+U
+U
+U
+U
+N
+w
+H
+A
+P
+c
+r
+"}
+(3,1,1) = {"
+l
+O
+Y
+U
+T
+C
+u
+u
+q
+c
+r
+"}
+(4,1,1) = {"
+l
+o
+f
+R
+x
+D
+E
+k
+B
+c
+j
+"}
+(5,1,1) = {"
+g
+Z
+F
+U
+x
+C
+u
+y
+I
+c
+r
+"}
+(6,1,1) = {"
+U
+U
+U
+U
+n
+i
+m
+b
+K
+c
+r
+"}
+(7,1,1) = {"
+e
+e
+U
+s
+U
+U
+a
+U
+U
+U
+e
+"}
diff --git a/_maps/shuttles/ert_dropship-clown.dmm b/_maps/shuttles/ert_dropship-clown.dmm
new file mode 100644
index 000000000000..291b37a06098
--- /dev/null
+++ b/_maps/shuttles/ert_dropship-clown.dmm
@@ -0,0 +1,389 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/structure/chair/comfy/lime{
+ dir = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"b" = (
+/obj/structure/rack,
+/obj/item/storage/backpack/duffelbag/clown/cream_pie,
+/obj/item/storage/backpack/duffelbag/clown/cream_pie{
+ pixel_x = 0;
+ pixel_y = 9
+ },
+/obj/item/storage/backpack/duffelbag/clown/cream_pie{
+ pixel_x = 0;
+ pixel_y = 9
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"e" = (
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{
+ x_offset = 0;
+ y_offset = 10
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"f" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "ert_dropship_bridge-clown";
+ req_access = list("cent_general")
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"g" = (
+/obj/machinery/light/directional/west,
+/obj/vehicle/sealed/mecha/honker/dark/loaded/not_evil,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"h" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"l" = (
+/obj/machinery/computer/shuttle/ert,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"m" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"p" = (
+/obj/structure/sign/poster/contraband/clown/directional/north,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"r" = (
+/obj/structure/railing{
+ dir = 1;
+ custom_materials = list(/datum/material/bananium = 100)
+ },
+/obj/vehicle/sealed/car/clowncar{
+ dir = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"s" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"t" = (
+/obj/structure/chair/plastic{
+ dir = 8
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"u" = (
+/obj/effect/landmark/ert_shuttle_brief_spawn,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"w" = (
+/turf/closed/wall/mineral/bananium,
+/area/shuttle/ert/powered)
+"x" = (
+/obj/structure/chair/comfy/black{
+ dir = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"y" = (
+/turf/open/space/basic,
+/area/template_noop)
+"z" = (
+/obj/structure/toilet{
+ dir = 1
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"A" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_dropship_bridge-clown"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"C" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/machinery/light/directional/east,
+/obj/item/sbeacondrop/clownbomb{
+ pixel_x = -4;
+ pixel_y = 13
+ },
+/obj/item/sbeacondrop/clownbomb{
+ pixel_x = 7;
+ pixel_y = 10
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"D" = (
+/mob/living/simple_animal/bot/secbot/honkbot,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"E" = (
+/obj/structure/chair/comfy/beige{
+ dir = 8
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"F" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_dropship_bridge-clown"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"G" = (
+/obj/machinery/holopad,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"H" = (
+/obj/structure/chair/comfy/teal{
+ dir = 8
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"K" = (
+/obj/structure/table/reinforced,
+/obj/item/toy/windup_toolbox{
+ pixel_x = 1;
+ pixel_y = 13
+ },
+/obj/item/bikehorn{
+ pixel_x = -5;
+ pixel_y = 4
+ },
+/obj/item/bikehorn{
+ pixel_x = -2;
+ pixel_y = 5
+ },
+/obj/item/bikehorn{
+ pixel_x = 2;
+ pixel_y = 7
+ },
+/obj/item/bikehorn/airhorn{
+ pixel_x = -9;
+ pixel_y = 3
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"M" = (
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/machinery/door/airlock/bananium/glass,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"N" = (
+/obj/machinery/computer/security,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"O" = (
+/obj/machinery/button/door/directional/south{
+ id = "ert_dropship_doors-clown";
+ req_access = list("cent_general")
+ },
+/obj/machinery/light/directional/south,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"P" = (
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"Q" = (
+/obj/machinery/vending/wallmed/directional/north,
+/obj/structure/rack,
+/obj/item/pneumatic_cannon/pie/selfcharge,
+/obj/item/pneumatic_cannon/pie/selfcharge{
+ pixel_x = 6;
+ pixel_y = -6
+ },
+/obj/item/pneumatic_cannon/pie/selfcharge{
+ pixel_x = -2;
+ pixel_y = 1
+ },
+/obj/item/pneumatic_cannon/pie/selfcharge{
+ pixel_x = -10;
+ pixel_y = 6
+ },
+/obj/item/pneumatic_cannon/pie/selfcharge{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/obj/item/pneumatic_cannon/pie/selfcharge{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"R" = (
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"S" = (
+/obj/structure/chair/comfy/carp{
+ dir = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"T" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "ert_dropship_doors-clown"
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"U" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"V" = (
+/obj/structure/table/reinforced,
+/obj/item/inspector/clown/bananium,
+/obj/item/megaphone/clown,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"W" = (
+/obj/structure/railing{
+ dir = 1;
+ custom_materials = list(/datum/material/bananium = 100)
+ },
+/obj/machinery/portable_atmospherics/canister/helium,
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"X" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/turf/open/floor/mineral/bananium,
+/area/shuttle/ert/powered)
+"Y" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/obj/docking_port/mobile/ert{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+
+(1,1,1) = {"
+y
+y
+w
+w
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
+(2,1,1) = {"
+A
+A
+w
+w
+p
+R
+R
+R
+R
+P
+r
+g
+b
+h
+U
+"}
+(3,1,1) = {"
+F
+N
+V
+w
+P
+t
+E
+H
+s
+P
+P
+P
+D
+h
+U
+"}
+(4,1,1) = {"
+F
+l
+z
+M
+O
+w
+m
+m
+w
+Q
+u
+G
+P
+h
+Y
+"}
+(5,1,1) = {"
+F
+e
+f
+w
+P
+S
+a
+x
+X
+P
+P
+P
+P
+h
+U
+"}
+(6,1,1) = {"
+A
+A
+w
+w
+p
+R
+R
+R
+R
+P
+W
+C
+K
+h
+U
+"}
+(7,1,1) = {"
+y
+y
+w
+w
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
diff --git a/_maps/shuttles/ert_dropship-janitor.dmm b/_maps/shuttles/ert_dropship-janitor.dmm
new file mode 100644
index 000000000000..d521d1926ae4
--- /dev/null
+++ b/_maps/shuttles/ert_dropship-janitor.dmm
@@ -0,0 +1,459 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"b" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet/crate,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"c" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"d" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/rack,
+/obj/item/watertank/janitor{
+ pixel_x = 7;
+ pixel_y = 4
+ },
+/obj/item/watertank/janitor{
+ pixel_x = 1;
+ pixel_y = 0
+ },
+/obj/item/watertank/janitor{
+ pixel_x = -5;
+ pixel_y = -4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"e" = (
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{
+ x_offset = 0;
+ y_offset = 10
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"f" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "ert_dropship_bridge-janitor";
+ req_access = list("cent_general")
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"g" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/light/directional/west,
+/obj/structure/closet/crate,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/mob/living/basic/bot/cleanbot,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"h" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"i" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"j" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"l" = (
+/obj/machinery/computer/shuttle/ert,
+/obj/effect/turf_decal/stripes,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"m" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"n" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/powered)
+"p" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"q" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"r" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet/crate/engineering,
+/obj/structure/liquid_pump,
+/obj/structure/liquid_pump,
+/obj/structure/liquid_pump,
+/obj/item/wrench/caravan,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"s" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"t" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"u" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/landmark/ert_shuttle_brief_spawn,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"v" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"w" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/powered)
+"x" = (
+/obj/effect/turf_decal/stripes/blue,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"y" = (
+/turf/open/space/basic,
+/area/template_noop)
+"z" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"A" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_dropship_bridge-janitor"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"C" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/machinery/light/directional/east,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"D" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"E" = (
+/obj/effect/turf_decal/caution/stand_clear/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"F" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_dropship_bridge-janitor"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"G" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/box,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"H" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 4
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"J" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"K" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_x = -7;
+ pixel_y = 0
+ },
+/obj/machinery/recharger{
+ pixel_x = 2;
+ pixel_y = 0
+ },
+/obj/item/storage/toolbox/emergency{
+ pixel_x = 1;
+ pixel_y = 15
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"L" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"M" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/machinery/door/airlock/shuttle/glass,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"N" = (
+/obj/machinery/computer/security,
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"O" = (
+/obj/machinery/button/door/directional/south{
+ id = "ert_dropship_doors-janitor";
+ req_access = list("cent_general")
+ },
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/stripes/blue{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"P" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"Q" = (
+/obj/machinery/vending/wallmed/directional/north,
+/obj/structure/rack,
+/obj/item/storage/medkit{
+ pixel_x = 0;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/stripes/blue,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"R" = (
+/obj/effect/turf_decal/caution/stand_clear/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 4
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"S" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/ert/powered)
+"T" = (
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/blue/box,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "ert_dropship_doors-janitor"
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"U" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"V" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"W" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"X" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"Y" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/obj/docking_port/mobile/ert{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+
+(1,1,1) = {"
+y
+y
+w
+S
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
+(2,1,1) = {"
+A
+A
+w
+n
+p
+E
+j
+j
+E
+X
+r
+g
+b
+h
+U
+"}
+(3,1,1) = {"
+F
+N
+V
+w
+P
+t
+t
+t
+t
+x
+L
+v
+D
+h
+U
+"}
+(4,1,1) = {"
+F
+l
+z
+M
+O
+w
+m
+m
+w
+Q
+u
+G
+c
+h
+Y
+"}
+(5,1,1) = {"
+F
+e
+f
+w
+P
+a
+a
+a
+a
+x
+i
+q
+d
+h
+U
+"}
+(6,1,1) = {"
+A
+A
+w
+n
+s
+R
+H
+H
+R
+J
+W
+C
+K
+h
+U
+"}
+(7,1,1) = {"
+y
+y
+w
+S
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
diff --git a/_maps/shuttles/ert_dropship.dmm b/_maps/shuttles/ert_dropship.dmm
new file mode 100644
index 000000000000..b796890ea2b4
--- /dev/null
+++ b/_maps/shuttles/ert_dropship.dmm
@@ -0,0 +1,430 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"b" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"c" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"d" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"e" = (
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{
+ x_offset = 0;
+ y_offset = 10
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"f" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "ert_dropship_bridge";
+ req_access = list("cent_general")
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"g" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/light/directional/west,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"h" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"i" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"j" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"l" = (
+/obj/machinery/computer/shuttle/ert,
+/obj/effect/turf_decal/stripes,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"m" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"n" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/powered)
+"p" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"q" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"r" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"s" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"t" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"u" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/landmark/ert_shuttle_brief_spawn,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"v" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"w" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/powered)
+"x" = (
+/obj/effect/turf_decal/stripes/blue,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"y" = (
+/turf/open/space/basic,
+/area/template_noop)
+"z" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"A" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_dropship_bridge"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"C" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/machinery/light/directional/east,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"D" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"E" = (
+/obj/effect/turf_decal/caution/stand_clear/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"F" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_dropship_bridge"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"G" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/box,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"H" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 4
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"J" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"K" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_x = -7;
+ pixel_y = 0
+ },
+/obj/machinery/recharger{
+ pixel_x = 2;
+ pixel_y = 0
+ },
+/obj/item/storage/toolbox/emergency{
+ pixel_x = 1;
+ pixel_y = 15
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"L" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"M" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/machinery/door/airlock/shuttle/glass,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"N" = (
+/obj/machinery/computer/security,
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/powered)
+"O" = (
+/obj/machinery/button/door/directional/south{
+ id = "ert_dropship_doors";
+ req_access = list("cent_general")
+ },
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/stripes/blue{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"P" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"Q" = (
+/obj/machinery/vending/wallmed/directional/north,
+/obj/structure/rack,
+/obj/item/storage/medkit{
+ pixel_x = 0;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/stripes/blue,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"R" = (
+/obj/effect/turf_decal/caution/stand_clear/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 4
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"S" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/ert/powered)
+"T" = (
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/blue/box,
+/obj/machinery/door/poddoor{
+ dir = 8;
+ id = "ert_dropship_doors"
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"U" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+"V" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/powered)
+"W" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/powered)
+"X" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert/powered)
+"Y" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/obj/docking_port/mobile/ert{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/powered)
+
+(1,1,1) = {"
+y
+y
+w
+S
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
+(2,1,1) = {"
+A
+A
+w
+n
+p
+E
+j
+j
+E
+X
+r
+g
+b
+h
+U
+"}
+(3,1,1) = {"
+F
+N
+V
+w
+P
+t
+t
+t
+t
+x
+L
+v
+D
+h
+U
+"}
+(4,1,1) = {"
+F
+l
+z
+M
+O
+w
+m
+m
+w
+Q
+u
+G
+c
+h
+Y
+"}
+(5,1,1) = {"
+F
+e
+f
+w
+P
+a
+a
+a
+a
+x
+i
+q
+d
+h
+U
+"}
+(6,1,1) = {"
+A
+A
+w
+n
+s
+R
+H
+H
+R
+J
+W
+C
+K
+h
+U
+"}
+(7,1,1) = {"
+y
+y
+w
+S
+T
+T
+T
+T
+T
+T
+w
+w
+w
+w
+y
+"}
diff --git a/_maps/shuttles/ert_generic.dmm b/_maps/shuttles/ert_generic.dmm
new file mode 100644
index 000000000000..b3363c9b2edb
--- /dev/null
+++ b/_maps/shuttles/ert_generic.dmm
@@ -0,0 +1,1970 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ad" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_shuttle_breakroom"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/engineering)
+"ao" = (
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/structure/chair/plastic{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"ap" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 9
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"ar" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/power/smes/full,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"as" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/bridge)
+"aB" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"aH" = (
+/obj/structure/sign/warning/vacuum/directional/east,
+/obj/effect/turf_decal/stripes{
+ dir = 6
+ },
+/obj/machinery/light/small/blacklight/directional/east,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"aL" = (
+/obj/machinery/door/airlock/shuttle/glass,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"aN" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"aR" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/light/dim/directional/east,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"bd" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 6
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"bv" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"bx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/landmark/ert_shuttle_spawn,
+/obj/machinery/light/warm/dim/directional/west,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"bW" = (
+/obj/machinery/door/airlock/shuttle,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"ce" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"cq" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/engineering)
+"dG" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_x = -7;
+ pixel_y = 0
+ },
+/obj/machinery/recharger{
+ pixel_x = 2;
+ pixel_y = 0
+ },
+/obj/item/storage/toolbox/emergency{
+ pixel_x = 1;
+ pixel_y = 15
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"dX" = (
+/obj/effect/turf_decal/stripes/red/full,
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1
+ },
+/obj/item/reagent_containers/cup/beaker/cryoxadone{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"dY" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"ee" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"eo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/machinery/power/terminal,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"fH" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/marker_beacon/burgundy,
+/turf/open/space/basic,
+/area/shuttle/ert/cargo)
+"fT" = (
+/obj/structure/sign/warning/vacuum/directional/west,
+/obj/effect/turf_decal/stripes{
+ dir = 10
+ },
+/obj/machinery/light/small/blacklight/directional/west,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"gf" = (
+/obj/structure/closet/emcloset/anchored,
+/obj/item/bodybag/environmental/nanotrasen,
+/obj/item/bodybag/environmental/nanotrasen,
+/obj/item/bodybag/environmental/nanotrasen,
+/obj/item/storage/box/oxygen_candles,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"gl" = (
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/box,
+/obj/machinery/door/poddoor{
+ id = "ert_shuttle_cargo_outer"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/cargo)
+"gF" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/light/dim/directional/east,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"hd" = (
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"hu" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/shuttle/ert/cargo)
+"hF" = (
+/obj/machinery/door/airlock/external/glass{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"hJ" = (
+/obj/machinery/door/airlock/shuttle/glass,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/bridge)
+"im" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"iE" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/effect/turf_decal/box/red,
+/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"jw" = (
+/obj/machinery/portable_atmospherics/scrubber/huge/movable/cargo,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"kc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"kl" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/warm/dim/directional/east,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"ko" = (
+/obj/structure/closet/crate/solarpanel_small,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"kS" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/newscaster/directional/south,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"ln" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/stripes/line,
+/obj/item/storage/box/smart_metal_foam,
+/obj/item/storage/box/smart_metal_foam{
+ pixel_x = 5;
+ pixel_y = 2
+ },
+/obj/item/storage/box/smart_metal_foam{
+ pixel_x = -3;
+ pixel_y = 4
+ },
+/obj/item/holosign_creator/atmos,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"lW" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/rack,
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 0;
+ pixel_y = 5
+ },
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = -5;
+ pixel_y = 4
+ },
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 4;
+ pixel_y = 6
+ },
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 4;
+ pixel_y = 5
+ },
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = -2;
+ pixel_y = 5
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"mv" = (
+/obj/structure/chair/office/tactical,
+/obj/effect/turf_decal/stripes/blue/line{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"mz" = (
+/obj/machinery/door/airlock/shuttle,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/stripes,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"mM" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_shuttle_security"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/armory)
+"mZ" = (
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{
+ x_offset = 0;
+ y_offset = 10
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"nq" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/caution/stand_clear/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 1
+ },
+/obj/machinery/door/poddoor{
+ id = "ert_shuttle_cargo"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/cargo)
+"nt" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"nx" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/west,
+/obj/machinery/light/warm/directional/west,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"nC" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"nN" = (
+/obj/machinery/computer/records/security{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"nU" = (
+/obj/structure/rack,
+/obj/structure/rack,
+/obj/item/storage/box/zipties{
+ pixel_x = -7;
+ pixel_y = 2
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"oT" = (
+/obj/machinery/computer/shuttle/ert,
+/obj/effect/turf_decal/stripes,
+/obj/effect/turf_decal/stripes{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"oW" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/bridge)
+"pl" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"pm" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"pv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 1
+ },
+/obj/machinery/door/poddoor{
+ id = "ert_shuttle_cargo"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/cargo)
+"pB" = (
+/obj/structure/table/woodentable,
+/obj/item/flashlight/lamp/bananalamp{
+ pixel_x = 8;
+ pixel_y = 17
+ },
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/item/food/pie/cream{
+ pixel_x = -4;
+ pixel_y = 0
+ },
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"pE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/firealarm/directional/west,
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"pO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"qN" = (
+/obj/machinery/clonepod,
+/obj/effect/turf_decal/stripes/end{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/purple,
+/area/shuttle/ert/clonerybay)
+"qP" = (
+/obj/structure/tank_dispenser,
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"qQ" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden/layer2,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"qT" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/folder/blue{
+ pixel_x = -6;
+ pixel_y = 6
+ },
+/obj/item/pen{
+ pixel_x = -6;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/cup/glass/mug/nanotrasen{
+ pixel_x = 9;
+ pixel_y = 9
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"qZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/firealarm/directional/east,
+/obj/effect/landmark/ert_shuttle_spawn,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"rc" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/plasteel/twenty{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/stack/sheet/plasteel/twenty{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/stack/rods/fifty{
+ pixel_x = 1;
+ pixel_y = 0
+ },
+/obj/item/stack/rods/fifty{
+ pixel_x = 3;
+ pixel_y = -1
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"rM" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/sleeper{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold/cyan,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"rQ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/east,
+/obj/effect/landmark/ert_shuttle_spawn,
+/obj/machinery/light/warm/dim/directional/east,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"sR" = (
+/obj/machinery/atmospherics/components/binary/pump/on/supply/hidden/layer4{
+ dir = 1;
+ pixel_x = 0;
+ pixel_y = 0
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/binary/pump/on/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"sU" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/vending/wallmed/directional/west,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"tM" = (
+/obj/machinery/computer/cloning{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/purple,
+/area/shuttle/ert/clonerybay)
+"uL" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/power/port_gen/pacman/super,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/light/dim/directional/west,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"uR" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"vl" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"vm" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"vo" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert)
+"vQ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/machinery/power/terminal,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"vT" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"wN" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/cargo)
+"wO" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/mineral/uranium{
+ amount = 50
+ },
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/item/inducer,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"xb" = (
+/obj/machinery/door/airlock/shuttle/glass,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"xy" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/rack,
+/obj/item/storage/medkit/fire{
+ pixel_x = 0;
+ pixel_y = 12
+ },
+/obj/item/storage/medkit/fire{
+ pixel_x = 0;
+ pixel_y = 9
+ },
+/obj/item/storage/medkit/brute{
+ pixel_x = 0;
+ pixel_y = 6
+ },
+/obj/item/storage/medkit/brute{
+ pixel_x = 0;
+ pixel_y = 3
+ },
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"xS" = (
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"yg" = (
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"yw" = (
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/item/chair/plastic,
+/obj/machinery/light/warm/dim/directional/north,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"yB" = (
+/obj/item/crowbar/large/heavy,
+/obj/machinery/light/warm/dim/directional/west,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"yG" = (
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_shuttle_clonebay"
+ },
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/clonerybay)
+"yJ" = (
+/obj/machinery/flasher/directional/east{
+ id = "ert_shuttle_flash"
+ },
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/chair,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"yU" = (
+/obj/machinery/computer/aifixer{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/mineral/titanium/tiled/purple,
+/area/shuttle/ert/clonerybay)
+"zy" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_shuttle_clonebay"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/clonerybay)
+"zC" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/rack,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = -1;
+ pixel_y = 0
+ },
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = 5;
+ pixel_y = -1
+ },
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = 5;
+ pixel_y = 4
+ },
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = 1;
+ pixel_y = 2
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"zX" = (
+/obj/structure/closet/wardrobe/white,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"AL" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/clonerybay)
+"AM" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold/cyan{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"Bd" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/computer/crew,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"Bu" = (
+/obj/machinery/light/warm/directional/west,
+/obj/machinery/dna_scannernew,
+/obj/effect/turf_decal/stripes/end,
+/turf/open/floor/mineral/titanium/tiled/purple,
+/area/shuttle/ert/clonerybay)
+"BE" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"BP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"Cb" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 1
+ },
+/obj/machinery/button/door/directional/east{
+ name = "Cargo Hold Blastdoors";
+ id = "ert_shuttle_cargo";
+ req_access = list("cent_general")
+ },
+/obj/machinery/door/poddoor{
+ id = "ert_shuttle_cargo"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/cargo)
+"Cm" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"Cq" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"CD" = (
+/obj/structure/table/reinforced,
+/obj/effect/spawner/random/food_or_drink/donkpockets{
+ pixel_x = -7;
+ pixel_y = 23
+ },
+/obj/effect/spawner/random/food_or_drink/donkpockets{
+ pixel_x = -7;
+ pixel_y = 27
+ },
+/obj/machinery/coffeemaker,
+/obj/item/reagent_containers/cup/glass/mug/nanotrasen{
+ pixel_x = 5;
+ pixel_y = 13
+ },
+/obj/item/reagent_containers/cup/glass/mug/nanotrasen{
+ pixel_x = 11;
+ pixel_y = 13
+ },
+/obj/item/coffee_cartridge{
+ pixel_x = -7;
+ pixel_y = 9
+ },
+/obj/item/coffee_cartridge{
+ pixel_x = -7;
+ pixel_y = 11
+ },
+/obj/item/coffee_cartridge{
+ pixel_x = -7;
+ pixel_y = 13
+ },
+/obj/item/coffee_cartridge{
+ pixel_x = -7;
+ pixel_y = 15
+ },
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"Di" = (
+/obj/structure/chair/office/tactical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"Du" = (
+/obj/machinery/power/shuttle_engine/heater,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/ert/medical)
+"DB" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"DD" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/ert)
+"DK" = (
+/turf/template_noop,
+/area/template_noop)
+"DP" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/obj/item/folder/white{
+ pixel_x = 6;
+ pixel_y = 5
+ },
+/obj/item/pen/fourcolor{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/obj/item/storage/box/bodybags,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"EB" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/computer/records/medical,
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"EO" = (
+/obj/structure/chair/office/tactical{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"EU" = (
+/obj/machinery/atmospherics/components/unary/passive_vent/layer2{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/cargo)
+"Fi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"Fl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"FI" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/ert)
+"FL" = (
+/obj/item/storage/box/stingbangs{
+ pixel_x = 8;
+ pixel_y = 42
+ },
+/obj/item/storage/box/flashbangs{
+ pixel_x = 8;
+ pixel_y = 34
+ },
+/obj/item/storage/box/flashes{
+ pixel_x = -7;
+ pixel_y = 42
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"FX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"GB" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"Hk" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 1;
+ pixel_y = 15
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 1;
+ pixel_y = 11
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 1;
+ pixel_y = 6
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 1;
+ pixel_y = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"Hl" = (
+/obj/docking_port/mobile/ert{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/cargo)
+"Ho" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"Hu" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 5
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"Hv" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/machinery/door/window/brigdoor/right/directional{
+ req_access = list("cent_general")
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"HN" = (
+/obj/machinery/computer/apc_control{
+ req_access = list("cent_general")
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"HZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"Ie" = (
+/obj/effect/turf_decal/stripes{
+ dir = 5
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"Il" = (
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/machinery/recharge_station,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert)
+"Iq" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/medical)
+"JT" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/cargo)
+"JZ" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/flasher{
+ id = "ert_shuttle_flash"
+ },
+/obj/item/storage/secure/briefcase{
+ pixel_x = 0;
+ pixel_y = 12
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"Ku" = (
+/obj/structure/table/reinforced,
+/obj/item/flashlight/lamp,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"KA" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/rack,
+/obj/item/storage/medkit/regular{
+ pixel_x = 0;
+ pixel_y = 13
+ },
+/obj/item/storage/medkit/regular{
+ pixel_x = 0;
+ pixel_y = 10
+ },
+/obj/item/storage/medkit/o2{
+ pixel_x = 0;
+ pixel_y = 7
+ },
+/obj/item/storage/medkit/o2{
+ pixel_x = 0;
+ pixel_y = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold/cyan,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"KK" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/medical)
+"KL" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/engineering)
+"Ln" = (
+/obj/effect/turf_decal/stripes/blue{
+ dir = 10
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"LO" = (
+/obj/machinery/door/airlock/external/glass{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"LW" = (
+/obj/structure/table/reinforced,
+/obj/item/restraints/handcuffs/cable/zipties{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/item/assembly/flash/handheld{
+ pixel_x = 7;
+ pixel_y = -1
+ },
+/obj/item/storage/fancy/donut_box{
+ pixel_x = 0;
+ pixel_y = 16;
+ open_status = 0
+ },
+/obj/item/spess_knife{
+ pixel_x = -7;
+ pixel_y = -3
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"LZ" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"Mp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/sign/flag/nanotrasen/directional/north,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"Mq" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/rack,
+/obj/item/storage/medkit/advanced{
+ pixel_x = 0;
+ pixel_y = 13
+ },
+/obj/item/storage/medkit/advanced{
+ pixel_x = 0;
+ pixel_y = 10
+ },
+/obj/structure/rack,
+/obj/item/storage/medkit/toxin{
+ pixel_x = 0;
+ pixel_y = 7
+ },
+/obj/item/storage/medkit/toxin{
+ pixel_x = 0;
+ pixel_y = 4
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"Mu" = (
+/obj/machinery/computer/security,
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"MA" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"NV" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"Ot" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "ert_shuttle_bridge";
+ name = "Bridge Blastdoors";
+ pixel_x = 0;
+ pixel_y = -12;
+ req_access = list("cent_general")
+ },
+/obj/machinery/button/door{
+ id = "ert_shuttle_clonebay";
+ name = "Cloner Bay Blastdoors";
+ pixel_x = -7;
+ pixel_y = 8;
+ req_access = list("cent_general")
+ },
+/obj/machinery/button/door{
+ id = "ert_shuttle_security";
+ name = "Brig Blastdoors";
+ pixel_x = 7;
+ pixel_y = 8;
+ req_access = list("cent_general")
+ },
+/obj/machinery/button/door{
+ id = "ert_shuttle_breakroom";
+ name = "Breakroom Blastdoors";
+ pixel_x = -7;
+ pixel_y = -2;
+ req_access = list("cent_general")
+ },
+/obj/machinery/button/door{
+ id = "ert_shuttle_medbay";
+ name = "Medbay Blastdoors";
+ pixel_x = 7;
+ pixel_y = -2;
+ req_access = list("cent_general")
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"ON" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"Pt" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/structure/table/optable,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"Ql" = (
+/obj/structure/fireaxecabinet/directional/east,
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"QQ" = (
+/obj/structure/table/reinforced,
+/obj/item/aicard,
+/obj/machinery/light/warm/directional/west,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"QX" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/cell/hyper{
+ pixel_x = 10;
+ pixel_y = 11
+ },
+/obj/item/stock_parts/cell/hyper{
+ pixel_x = 10;
+ pixel_y = 7
+ },
+/obj/machinery/light/dim/directional/west,
+/obj/machinery/cell_charger,
+/obj/item/cargo_teleporter,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"Rg" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"Rj" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/structure/cable,
+/obj/machinery/power/terminal,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/bridge)
+"Rq" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/box/blue,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"RH" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ id = "ert_shuttle_bridge"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/bridge)
+"RL" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/computer/atmos_alert,
+/turf/open/floor/mineral/titanium/tiled/blue,
+/area/shuttle/ert/bridge)
+"Tv" = (
+/obj/machinery/atmospherics/components/unary/cryo_cell{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"UE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/landmark/ert_shuttle_spawn,
+/obj/machinery/light/warm/dim/directional/east,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"UQ" = (
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman/super,
+/obj/item/stack/sheet/mineral/uranium/five,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"UX" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"VJ" = (
+/obj/machinery/door/airlock/external/glass{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"Wc" = (
+/obj/structure/chair/office/tactical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/blue{
+ dir = 8;
+ pixel_x = 0;
+ pixel_y = 0
+ },
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/ert)
+"Wg" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/atmospherics/pipe/smart/manifold/cyan,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"Wl" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/armory)
+"Wu" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/ert/armory)
+"WE" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/computer/operating{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"WP" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/reagent_dispensers/foamtank,
+/obj/item/extinguisher/advanced{
+ pixel_x = -5;
+ pixel_y = 1
+ },
+/obj/item/extinguisher/advanced{
+ pixel_x = 1;
+ pixel_y = 0
+ },
+/obj/item/extinguisher/advanced{
+ pixel_x = 7;
+ pixel_y = 0
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"Xd" = (
+/obj/structure/sign/poster/contraband/missing_gloves/directional/north,
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4,
+/turf/open/floor/plating,
+/area/shuttle/ert/engineering)
+"Xf" = (
+/obj/effect/turf_decal/stripes{
+ dir = 9
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock)
+"Xm" = (
+/obj/structure/table/reinforced,
+/obj/machinery/microwave{
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/engineering)
+"Xq" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/stasis{
+ dir = 4
+ },
+/obj/machinery/light/warm/directional/west,
+/obj/machinery/defibrillator_mount/directional/west,
+/obj/item/defibrillator/loaded,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"XG" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_shuttle_medbay"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/medical)
+"XH" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/closet/crate/freezer/blood,
+/obj/machinery/iv_drip,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"XO" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/table/reinforced/rglass,
+/obj/item/clothing/gloves/latex/surgical,
+/obj/item/storage/backpack/duffelbag/med/surgery{
+ pixel_x = -1;
+ pixel_y = 13
+ },
+/obj/item/clothing/mask/surgical,
+/obj/item/healthanalyzer/advanced,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"XQ" = (
+/obj/machinery/firealarm/directional/east,
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/clonerybay)
+"XS" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"XT" = (
+/obj/effect/spawner/structure/window/reinforced/shuttle,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ dir = 4;
+ id = "ert_shuttle_bridge"
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/ert/bridge)
+"Ys" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/landmark/ert_shuttle_brief_spawn,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+"Yw" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/structure/cable,
+/obj/machinery/iv_drip/saline,
+/obj/machinery/atmospherics/pipe/smart/manifold/cyan,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/shuttle/ert/medical)
+"YB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/power/port_gen/pacman/super,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/airalarm/directional/west,
+/turf/open/floor/mineral/titanium/tiled/yellow,
+/area/shuttle/ert/cargo)
+"YD" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/ert/airlock)
+"YL" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/mineral/titanium/tiled,
+/area/shuttle/ert/cargo)
+"Zl" = (
+/obj/structure/fans/tiny,
+/obj/effect/turf_decal/stripes/box,
+/obj/machinery/button/door/directional/east{
+ id = "ert_shuttle_cargo_outer";
+ name = "Cargo Hold Blastdoors";
+ req_access = list("cent_general")
+ },
+/obj/machinery/door/poddoor{
+ id = "ert_shuttle_cargo_outer"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/cargo)
+"Zn" = (
+/obj/machinery/door/airlock/external/glass{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/obj/effect/turf_decal/stripes{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/ert/airlock/secondary)
+"ZB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/effect/landmark/ert_shuttle_spawn,
+/obj/machinery/light/warm/dim/directional/west,
+/turf/open/floor/catwalk_floor/flat_white,
+/area/shuttle/ert)
+
+(1,1,1) = {"
+DK
+DK
+AL
+AL
+AL
+AL
+AL
+AL
+hF
+YD
+KL
+ad
+ad
+KL
+KL
+KL
+KL
+KL
+KL
+KL
+DK
+"}
+(2,1,1) = {"
+DK
+DK
+zy
+qN
+tM
+Bu
+yU
+AL
+Xf
+fT
+KL
+Xm
+CD
+KL
+Xd
+gf
+yB
+UQ
+aN
+cq
+DK
+"}
+(3,1,1) = {"
+DK
+DK
+zy
+hd
+hd
+im
+vQ
+AL
+dY
+xS
+KL
+yw
+kS
+KL
+Hk
+HZ
+yg
+pB
+aN
+cq
+DK
+"}
+(4,1,1) = {"
+DK
+DK
+yG
+zX
+DP
+XQ
+ee
+AL
+VJ
+YD
+KL
+ao
+pl
+mz
+sR
+vm
+kl
+ar
+aN
+cq
+DK
+"}
+(5,1,1) = {"
+XT
+XT
+as
+oW
+as
+as
+xb
+FI
+Cq
+qP
+DD
+vo
+bW
+JT
+JT
+JT
+JT
+wN
+JT
+JT
+JT
+"}
+(6,1,1) = {"
+RH
+Ot
+QQ
+RL
+NV
+as
+MA
+bx
+pm
+pm
+pE
+ZB
+MA
+JT
+QX
+ko
+wO
+YB
+uL
+wN
+EU
+"}
+(7,1,1) = {"
+RH
+Mu
+vl
+HN
+Rj
+as
+MA
+bd
+Wc
+Di
+Di
+Hu
+MA
+pv
+Fl
+XS
+FX
+XS
+YL
+gl
+fH
+"}
+(8,1,1) = {"
+RH
+oT
+aB
+vT
+ce
+hJ
+MA
+mv
+qT
+LW
+dG
+Rq
+Ys
+nq
+zC
+lW
+WP
+rc
+ln
+gl
+hu
+"}
+(9,1,1) = {"
+RH
+mZ
+vl
+Bd
+nC
+as
+MA
+Ln
+EO
+EO
+EO
+ap
+MA
+Cb
+BP
+kc
+pO
+kc
+Ho
+Zl
+fH
+"}
+(10,1,1) = {"
+RH
+Ku
+LZ
+EB
+vl
+as
+Mp
+UE
+pm
+pm
+qZ
+rQ
+MA
+JT
+aR
+jw
+Ql
+GB
+gF
+JT
+Hl
+"}
+(11,1,1) = {"
+XT
+XT
+as
+oW
+as
+as
+xb
+FI
+nt
+Il
+DD
+vo
+aL
+JT
+JT
+JT
+JT
+JT
+JT
+JT
+JT
+"}
+(12,1,1) = {"
+DK
+DK
+mM
+nU
+FL
+nx
+Wu
+Wl
+Zn
+BE
+Iq
+XO
+UX
+sU
+Xq
+rM
+Wg
+Tv
+Du
+KK
+DK
+"}
+(13,1,1) = {"
+DK
+DK
+mM
+Rg
+JZ
+Fi
+eo
+Wl
+Cm
+ON
+Iq
+Pt
+UX
+DB
+qQ
+uR
+AM
+dX
+Du
+KK
+DK
+"}
+(14,1,1) = {"
+DK
+DK
+mM
+yJ
+Hv
+bv
+nN
+Wl
+Ie
+aH
+Iq
+WE
+XH
+Mq
+xy
+KA
+Yw
+iE
+Du
+KK
+DK
+"}
+(15,1,1) = {"
+DK
+DK
+Wl
+Wl
+Wl
+Wl
+Wl
+Wl
+LO
+BE
+Iq
+XG
+XG
+XG
+Iq
+XG
+XG
+XG
+Iq
+Iq
+DK
+"}
diff --git a/_maps/~monkestation/hunter_events/wonderland.dmm b/_maps/~monkestation/hunter_events/wonderland.dmm
index feedc3e24048..fb5e024b2b3a 100644
--- a/_maps/~monkestation/hunter_events/wonderland.dmm
+++ b/_maps/~monkestation/hunter_events/wonderland.dmm
@@ -7,11 +7,11 @@
dir = 4
},
/obj/item/toy/plush/goatplushie,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"aR" = (
/obj/item/clothing/shoes/costume_2021/doll_shoes,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"bf" = (
/obj/structure/chess/blackrook,
@@ -23,7 +23,7 @@
/area/ruin/space/has_grav/wonderland)
"bZ" = (
/obj/item/clothing/head/costume_2021/doll_hat,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"cj" = (
/obj/structure/chess/blackbishop,
@@ -61,7 +61,7 @@
/area/ruin/space/has_grav/wonderland)
"gc" = (
/obj/structure/blood_fountain,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"gw" = (
/obj/structure/chess/blackrook,
@@ -70,7 +70,7 @@
"hK" = (
/obj/structure/flora/bush/flowers_br/style_2,
/obj/structure/flora/tree/jungle,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"jT" = (
/obj/structure/chess/whiteking,
@@ -88,12 +88,12 @@
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_br/style_2,
/mob/living/basic/rabbit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"oC" = (
/obj/structure/chair/wood,
/obj/item/clothing/head/collectable/tophat,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"oF" = (
/turf/open/floor/black,
@@ -105,7 +105,7 @@
"rr" = (
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_br/style_2,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"sr" = (
/obj/item/grenade/jack,
@@ -122,26 +122,26 @@
/area/ruin/space/has_grav/wonderland)
"wY" = (
/mob/living/basic/rabbit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"yW" = (
/obj/structure/flora/bush/flowers_pp/style_2,
/obj/item/clothing/under/costume_2021/doll_suit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Av" = (
/obj/structure/flora/bush/flowers_yw,
/mob/living/basic/rabbit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"AH" = (
/obj/structure/flora/bush/flowers_yw,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Ck" = (
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_br,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Cw" = (
/obj/structure/chess/whitebishop,
@@ -155,11 +155,11 @@
/area/space)
"FO" = (
/obj/structure/flora/tree/jungle,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Gl" = (
/obj/structure/mineral_door/wood,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Gs" = (
/obj/structure/table/wood,
@@ -176,7 +176,7 @@
/area/ruin/space/has_grav/wonderland)
"Jy" = (
/obj/structure/flora/tree/dead/style_6,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"JP" = (
/obj/structure/chess/whitebishop,
@@ -192,11 +192,11 @@
/area/ruin/space/has_grav/wonderland)
"Mo" = (
/obj/structure/flora/tree/dead,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Mw" = (
/obj/structure/flora/bush/flowers_br/style_2,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"PU" = (
/obj/structure/chess/redqueen,
@@ -206,12 +206,12 @@
"RW" = (
/obj/structure/flora/bush/flowers_pp/style_2,
/mob/living/basic/rabbit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Se" = (
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_pp,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Sy" = (
/turf/open/floor/wood/large,
@@ -219,12 +219,12 @@
"Tc" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/cup/glass/mug,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"UO" = (
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_pp/style_2,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Wb" = (
/turf/open/misc/ashplanet/wateryrock{
@@ -241,27 +241,27 @@
/area/ruin/space/has_grav/wonderland)
"Xr" = (
/obj/structure/closet/crate/grave/filled,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Xt" = (
/obj/structure/chair/wood{
dir = 1
},
/obj/effect/landmark/wonderland_mark,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Xv" = (
/obj/structure/flora/bush/flowers_yw,
/obj/structure/flora/bush/flowers_br,
/mob/living/basic/rabbit,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"XC" = (
/obj/structure/chair/wood{
dir = 8
},
/obj/item/toy/plush/goatplushie,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"Yf" = (
/obj/effect/landmark/wonderchess_mark,
@@ -273,10 +273,10 @@
/area/ruin/space/has_grav/wonderland)
"Yp" = (
/obj/structure/flora/bush/flowers_pp/style_2,
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
"ZA" = (
-/turf/open/misc/grass/jungle,
+/turf/open/misc/grass/jungle/planet,
/area/ruin/space/has_grav/wonderland)
(1,1,1) = {"
diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index 02faa4f529df..6be8af3db530 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -336,7 +336,8 @@
ACCESS_VIROLOGY, \
ACCESS_WEAPONS, \
ACCESS_XENOBIOLOGY, \
-) /* monkestation edit: add permabrig-only access */
+ ACCESS_BRIG_PHYSICIAN, \
+) // monkestation edit: add permabrig-only access. also added brig physician
/// Command staff/secure accesses, think bridge/armoury, ai_upload, notably access to modify ID cards themselves. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_COMMAND)
#define COMMAND_ACCESS list( \
@@ -366,7 +367,10 @@
ACCESS_HOP, \
ACCESS_QM, \
ACCESS_RD, \
+ ACCESS_BLUESHIELD, \
+ ACCESS_NT_REPRESENTATVE, \
)
+// MONKESTATION ADDITION: Added blueshield and nt rep above
/// Captains private rooms. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_CAPTAIN)
#define CAPTAIN_ACCESS list( \
@@ -462,7 +466,10 @@
ACCESS_PSYCHOLOGY, \
ACCESS_SURGERY, \
ACCESS_VIROLOGY, \
+ ACCESS_BRIG_PHYSICIAN, \
)
+//MONKESTATION ADDITION: Added brig physcian access to above
+
/// Name for the Research region.
#define REGION_RESEARCH "Research"
/// Used to seed the accesses_by_region list in SSid_access. A list of all research regional accesses that are overseen by the RD.
@@ -529,7 +536,11 @@
ACCESS_RC_ANNOUNCE, \
ACCESS_TELEPORTER, \
ACCESS_VAULT, \
+ ACCESS_BLUESHIELD, \
+ ACCESS_NT_REPRESENTATVE, \
)
+// MONKESTATION ADDITION: Added blueshield and nt rep to command region above
+
/// Name for the Centcom region.
#define REGION_CENTCOM "Central Command"
/// Used to seed the accesses_by_region list in SSid_access. A list of all CENTCOM_ACCESS regional accesses.
diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm
index 32c88cee80cc..694d60dc1162 100644
--- a/code/__DEFINES/economy.dm
+++ b/code/__DEFINES/economy.dm
@@ -62,6 +62,7 @@
#define CIV_JOB_GROW 12
#define CIV_JOB_ATMOS 13
#define CIV_JOB_RANDOM 14
+#define CIV_JOB_SCI_HEAD 15
//By how much should the station's inflation value be multiplied by when dividing the civilian bounty's reward?
#define BOUNTY_MULTIPLIER 10
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 570a9a164355..e4a250ed0fdc 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -294,7 +294,7 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list(
#define is_bartender_job(job_type) (istype(job_type, /datum/job/bartender))
#define is_captain_job(job_type) (istype(job_type, /datum/job/captain))
#define is_chaplain_job(job_type) (istype(job_type, /datum/job/chaplain))
-#define is_clown_job(job_type) (istype(job_type, /datum/job/clown) || istype(job_type, /datum/job/yellowclown))
+#define is_clown_job(job_type) (istype(job_type, /datum/job/clown) || istype(job_type, /datum/job/yellowclown) || istype(job_type, /datum/job/ert/clown)) //monkestation edit: adds ERT clowns cus why not
#define is_detective_job(job_type) (istype(job_type, /datum/job/detective))
#define is_scientist_job(job_type) (istype(job_type, /datum/job/scientist))
#define is_security_officer_job(job_type) (istype(job_type, /datum/job/security_officer))
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index fbf8c92621cd..f0e61c8282c0 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -192,7 +192,7 @@
#define DEPARTMENT_CENTRAL_COMMAND "Central Command"
#define DEPARTMENT_BITFLAG_LATE (1<<12)
-#define DEPARTMENT_LATE "Late Join"
+#define DEPARTMENT_LATE "Late Arrival"
/* Job datum job_flags */
/// Whether the mob is announced on arrival.
diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm
index 9805d40645e4..097a7214e891 100644
--- a/code/__DEFINES/mobfactions.dm
+++ b/code/__DEFINES/mobfactions.dm
@@ -21,6 +21,8 @@
#define FACTION_CLOWN "clowns"
/// Headslugs
#define FACTION_CREATURE "creature"
+/// Cats
+#define FACTION_CAT "cat"
/// Faithless and shadowpeople
#define FACTION_FAITHLESS "faithless"
/// Gnomes
diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm
index 63aa502c20c9..f455985e6853 100644
--- a/code/__DEFINES/projectiles.dm
+++ b/code/__DEFINES/projectiles.dm
@@ -52,6 +52,12 @@
#define CALIBER_ARROW "arrow"
/// The caliber used by the harpoon gun.
#define CALIBER_HARPOON "harpoon"
+/// The caliber used by the rebar crossbow.
+#define CALIBER_REBAR "sharpened rod"
+/// The caliber used by the rebar crossbow when forced to hold 2 rods.
+#define CALIBER_REBAR_FORCED "sharpened rod"
+/// The caliber used by the syndicate rebar crossbow.
+#define CALIBER_REBAR_SYNDIE "sharpened rod"
/// The caliber used by the meat hook.
#define CALIBER_HOOK "hook"
/// The caliber used by the changeling tentacle mutation.
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index 1ca02fa93e6d..a0e25692f4e8 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -57,6 +57,9 @@
#define RADIO_CHANNEL_CTF_GREEN "Green Team"
#define RADIO_CHANNEL_CTF_YELLOW "Yellow Team"
+#define RADIO_CHANNEL_UNCOMMON "Uncommon"
+#define RADIO_KEY_UNCOMMON "f"
+#define RADIO_TOKEN_UNCOMMON ":f"
#define MIN_FREE_FREQ 1201 // -------------------------------------------------
// Frequencies are always odd numbers and range from 1201 to 1599.
@@ -76,6 +79,7 @@
#define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange
#define FREQ_SECURITY 1359 // Security comms frequency, red
#define FREQ_RADIO 1361 //monkestation edit
+#define FREQ_UNCOMMON 1363 //monkestation addition, Light gray
#define FREQ_HOLOGRID_SOLUTION 1433
#define FREQ_STATUS_DISPLAYS 1435
diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm
index b246a89c14a4..357f33169a18 100644
--- a/code/__DEFINES/rust_g.dm
+++ b/code/__DEFINES/rust_g.dm
@@ -15,25 +15,36 @@
// On Windows, looks in the standard places for `rust_g.dll`.
// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of
// `librust_g.so` (preferred) or `rust_g` (old).
+// On OpenDream, `rust_g64.dll` / `librust_g64.so` are used instead.
/* This comment bypasses grep checks */ /var/__rust_g
+#ifndef OPENDREAM
+#define RUST_G_BASE "rust_g"
+#else
+#define RUST_G_BASE "rust_g64"
+#endif
+
/proc/__detect_rust_g()
if (world.system_type == UNIX)
- if (fexists("./librust_g.so"))
+ if (fexists("./lib[RUST_G_BASE].so"))
// No need for LD_LIBRARY_PATH badness.
- return __rust_g = "./librust_g.so"
- else if (fexists("./rust_g"))
+ return __rust_g = "./lib[RUST_G_BASE].so"
+#ifndef OPENDREAM
+ else if (fexists("./[RUST_G_BASE]"))
// Old dumb filename.
- return __rust_g = "./rust_g"
- else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g"))
+ return __rust_g = "./[RUST_G_BASE]"
+ else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/[RUST_G_BASE]"))
// Old dumb filename in `~/.byond/bin`.
- return __rust_g = "rust_g"
+ return __rust_g = RUST_G_BASE
+#endif
else
// It's not in the current directory, so try others
- return __rust_g = "librust_g.so"
+ return __rust_g = "lib[RUST_G_BASE].so"
else
- return __rust_g = "rust_g"
+ return __rust_g = RUST_G_BASE
+
+#undef RUST_G_BASE
#define RUST_G (__rust_g || __detect_rust_g())
#endif
diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm
index f8320c44c380..fd2395e21aff 100644
--- a/code/__DEFINES/span.dm
+++ b/code/__DEFINES/span.dm
@@ -126,6 +126,7 @@
#define span_tinynotice(str) ("" + str + "")
#define span_tinynoticeital(str) ("" + str + "")
#define span_unconscious(str) ("" + str + "")
+#define span_uncommonradio(str) ("" + str + "")
#define span_userdanger(str) ("" + str + "")
#define span_warning(str) ("" + str + "")
#define span_yell(str) ("" + str + "")
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index db1506f1be9b..227c01a69162 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -437,7 +437,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Blowing kisses actually does damage to the victim
#define TRAIT_KISS_OF_DEATH "kiss_of_death"
/// Syndie kisses can apply burn damage
-/* #define TRAIT_SYNDIE_KISS "syndie_kiss" */
+#define TRAIT_SYNDIE_KISS "syndie_kiss"
/// Used to activate french kissing
#define TRAIT_GARLIC_BREATH "kiss_of_garlic_death"
/// Addictions don't tick down, basically they're permanently addicted
diff --git a/code/__DEFINES/~monkestation/admin.dm b/code/__DEFINES/~monkestation/admin.dm
index 9edb809cbaba..64ddc4de5ccd 100644
--- a/code/__DEFINES/~monkestation/admin.dm
+++ b/code/__DEFINES/~monkestation/admin.dm
@@ -16,3 +16,5 @@
#define AHELP_CLOSEREASON_NONE 0
#define AHELP_CLOSEREASON_IC 1
#define AHELP_CLOSEREASON_MENTOR 2
+
+#define ADMIN_SUSINFO(user) "[ADMIN_LOOKUP(user)] [ADMIN_PP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]"
diff --git a/code/__DEFINES/~monkestation/atom_hud.dm b/code/__DEFINES/~monkestation/atom_hud.dm
index 8014d3e4d567..002e44dc5593 100644
--- a/code/__DEFINES/~monkestation/atom_hud.dm
+++ b/code/__DEFINES/~monkestation/atom_hud.dm
@@ -2,6 +2,14 @@
#define SECHUD_BLUESHIELD "hudblueshield"
#define SECHUD_BARBER "hudbarber"
#define SECHUD_EXPLORER "hudexplorer"
+#define SECHUD_CHIEF_MEDICAL_OFFICER_AWAY "hudchiefmedicalofficer_away"
+#define SECHUD_CHEF_AWAY "hudchef_away"
+#define SECHUD_EXPLORER_AWAY "hudexplorer_away"
+#define SECHUD_SCIENTIST_AWAY "hudscientist_away"
+#define SECHUD_SECURITY_OFFICER_AWAY "hudsecurityofficer_away"
+#define SECHUD_STATION_ENGINEER_AWAY "hudstationengineer_away"
+#define SECHUD_APC_AWAY "hudapc_away"
+#define SECHUD_ROBOTICIST_AWAY "hudroboticist_away"
#define SECHUD_SIGNAL_TECHINICAN "hudsignaltech"
#define SECHUD_CONTRACTOR "hudsyndicatecontractor"
#define SECHUD_SYNDIECLOWN "hudsyndicateclown"
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 16c440f96684..0e70672fd92e 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -34,9 +34,11 @@
/// Runs byond's html encoding sanitization proc, after replacing new-lines and tabs for the # character.
-/proc/sanitize(text)
+/proc/sanitize(text, encode = TRUE)
var/static/regex/regex = regex(@"[\n\t]", "g")
- return html_encode(regex.Replace(text, "#"))
+ . = replacetext(text, regex, "#")
+ if(encode)
+ return html_encode(.)
/// Runs STRIP_HTML_SIMPLE and sanitize.
diff --git a/code/__HELPERS/~monkestation-helpers/clients.dm b/code/__HELPERS/~monkestation-helpers/clients.dm
index 6f824905e3da..3ee482320d98 100644
--- a/code/__HELPERS/~monkestation-helpers/clients.dm
+++ b/code/__HELPERS/~monkestation-helpers/clients.dm
@@ -20,3 +20,29 @@
RETURN_TYPE(/datum/admins)
var/client/client = CLIENT_FROM_VAR(doohickey)
return client?.holder
+
+/proc/should_be_interviewing(mob/target)
+ . = FALSE
+ if(QDELETED(target))
+ return
+ . = target.client?.interviewee
+ var/ckey = target.ckey
+ if(ckey)
+ if(ckey in GLOB.interviews.approved_ckeys)
+ return FALSE
+ var/datum/interview/interview = GLOB.interviews.open_interviews[ckey]
+ if(interview && interview.status != INTERVIEW_APPROVED)
+ return TRUE
+ if(ckey in GLOB.interviews.cooldown_ckeys)
+ return TRUE
+
+/proc/interview_safety(mob/target, context)
+ . = should_be_interviewing(target)
+ if(.)
+ message_admins(span_danger("WARNING: [ADMIN_SUSINFO(target)] has seemingly bypassed an interview! (context: [context]) note: this detection is still wip, tell absolucy if it's causing false positives"))
+ log_admin_private("[key_name(target)] has seemingly bypassed an interview! (context: [context])")
+ if(isnewplayer(target))
+ var/mob/dead/new_player/dingbat = target
+ if(dingbat.ready == PLAYER_READY_TO_PLAY)
+ dingbat.ready = PLAYER_NOT_READY
+ qdel(dingbat.client)
diff --git a/code/__HELPERS/~monkestation-helpers/roundend.dm b/code/__HELPERS/~monkestation-helpers/roundend.dm
index f3c34f4615b9..082c3aaeca38 100644
--- a/code/__HELPERS/~monkestation-helpers/roundend.dm
+++ b/code/__HELPERS/~monkestation-helpers/roundend.dm
@@ -4,28 +4,35 @@
/datum/controller/subsystem/ticker/proc/distribute_rewards()
var/hour = round((world.time - SSticker.round_start_time) / 36000)
var/minute = round(((world.time - SSticker.round_start_time) - (hour * 36000)) / 600)
- var/added_xp = round(25 + (minute**0.85))
+ var/added_xp = round(25 + (minute ** 0.85))
for(var/client/client as anything in GLOB.clients)
- if(!istype(client) || QDELING(client))
- continue
- if(!QDELETED(client?.prefs))
- client?.prefs?.adjust_metacoins(client?.ckey, 75, "Played a Round")
- client?.prefs?.adjust_metacoins(client?.ckey, client?.reward_this_person, "Special Bonus")
- // WHYYYYYY
- if(QDELETED(client))
- continue
- if(client?.mob?.mind?.assigned_role)
- add_jobxp(client, added_xp, client?.mob?.mind?.assigned_role?.title)
+ distribute_rewards_to_client(client, added_xp)
+
+/datum/controller/subsystem/ticker/proc/distribute_rewards_to_client(client/client, added_xp)
+ if(!istype(client) || QDELING(client))
+ return
+ var/datum/player_details/details = get_player_details(client)
+ if(!QDELETED(client?.prefs))
+ client?.prefs?.adjust_metacoins(client?.ckey, 75, "Played a Round")
+ var/bonus = details?.roundend_monkecoin_bonus
+ if(bonus)
+ client?.prefs?.adjust_metacoins(client?.ckey, bonus, "Special Bonus")
+ // WHYYYYYY
if(QDELETED(client))
- continue
- if(length(client?.applied_challenges))
- var/mob/living/client_mob = client?.mob
- if(!istype(client_mob) || QDELING(client_mob) || client_mob?.stat == DEAD)
+ return
+ if(client?.mob?.mind?.assigned_role)
+ add_jobxp(client, added_xp, client?.mob?.mind?.assigned_role?.title)
+ if(QDELETED(client))
+ return
+ var/list/applied_challenges = details?.applied_challenges
+ if(LAZYLEN(applied_challenges))
+ var/mob/living/client_mob = client?.mob
+ if(!istype(client_mob) || QDELING(client_mob) || client_mob?.stat == DEAD)
+ return
+ var/total_payout = 0
+ for(var/datum/challenge/listed_challenge as anything in applied_challenges)
+ if(listed_challenge.failed)
continue
- var/total_payout = 0
- for(var/datum/challenge/listed_challenge as anything in client?.applied_challenges)
- if(listed_challenge.failed)
- continue
- total_payout += listed_challenge.challenge_payout
- if(total_payout)
- client?.prefs?.adjust_metacoins(client?.ckey, total_payout, "Challenge rewards.")
+ total_payout += listed_challenge.challenge_payout
+ if(total_payout)
+ client?.prefs?.adjust_metacoins(client?.ckey, total_payout, "Challenge rewards.")
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index bcb83d5d97e5..c60c9105f541 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -400,7 +400,7 @@ GLOBAL_LIST_INIT(maint_fauna, list(//fauna: there be critters living in yer main
#define maint_uncommon_weight 900
#define maint_rarity_weight 99
#define maint_oddity_weight 4 //1 out of 10,000 would give metastation (180 spawns) a 2 in 111 chance of spawning an oddity per round, similar to xeno egg, monkestation edit: from 1 to 4
-#define maint_holiday_weight 3500 // When holiday loot is enabled, it'll give every loot item a 25% chance of being a holiday item
+#define maint_holiday_weight 2500 // When holiday loot is enabled, it'll give every loot item a 25% chance of being a holiday item
#define maint_fauna_weight 150 //monkestation edit: adds friendly maintenance bees, also allows for other maintenance fauna to be coded in.
//Loot pool used by default maintenance loot spawners
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 42ce3dbd17bb..7734282dd4d7 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -291,6 +291,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_JAILBIRD" = TRAIT_JAILBIRD,
"TRAIT_JOLLY" = TRAIT_JOLLY,
"TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH,
+ "TRAIT_SYNDIE_KISS" = TRAIT_SYNDIE_KISS,
"TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT,
"TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES,
"TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES,
diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm
index e2ead5de016a..d5bee6641c3d 100644
--- a/code/_onclick/hud/new_player.dm
+++ b/code/_onclick/hud/new_player.dm
@@ -169,6 +169,7 @@
if(!new_client.readied_store)
new_client.readied_store = new(new_player)
new_client.readied_store.ui_interact(new_player)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(interview_safety), new_player, "readied up"), 1 SECONDS, TIMER_UNIQUE)
else
new_player.ready = PLAYER_NOT_READY
base_icon_state = "not_ready"
@@ -299,11 +300,10 @@
/atom/movable/screen/lobby/button/intents/Click(location, control, params)
. = ..()
- if(!hud.mymob.client.challenge_menu)
- var/datum/challenge_selector/new_tgui = new(hud.mymob)
- new_tgui.ui_interact(hud.mymob)
- else
- hud.mymob.client.challenge_menu.ui_interact(hud.mymob)
+ var/datum/player_details/details = get_player_details(hud.mymob)
+ details.challenge_menu ||= new(details)
+ details.challenge_menu.ui_interact(hud.mymob)
+
/atom/movable/screen/lobby/button/discord
icon = 'icons/hud/lobby/bottom_buttons.dmi'
icon_state = "discord"
diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm
index 259545b93e31..ec0280045213 100644
--- a/code/controllers/subsystem/materials.dm
+++ b/code/controllers/subsystem/materials.dm
@@ -27,7 +27,7 @@ SUBSYSTEM_DEF(materials)
new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, check_density = FALSE, category = CAT_TILES),
new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS),
- new /datum/stack_recipe("Railing", /obj/structure/railing, one_per_turf = FALSE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
+ new /datum/stack_recipe("Railing", /obj/structure/railing, one_per_turf = FALSE, on_solid_ground = TRUE, check_direction = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
)
///List of stackcrafting recipes for materials using rigid recipes
var/list/rigid_stack_recipes = list(
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 853f49bd7a99..7593cec6f9e6 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -402,6 +402,10 @@ SUBSYSTEM_DEF(ticker)
for(var/i in GLOB.new_player_list)
var/mob/dead/new_player/player = i
if(player.ready == PLAYER_READY_TO_PLAY && player.mind)
+ if(interview_safety(player, "readied up"))
+ player.ready = PLAYER_NOT_READY
+ QDEL_IN(player.client, 0)
+ continue
GLOB.joined_player_list += player.ckey
var/chosen_title = player.client?.prefs.alt_job_titles[player.mind.assigned_role.title] || player.mind.assigned_role.title
var/atom/destination = player.mind.assigned_role.get_roundstart_spawn_point(chosen_title)
@@ -522,27 +526,33 @@ SUBSYSTEM_DEF(ticker)
return output
+/datum/controller/subsystem/ticker/proc/transfer_single_character(mob/dead/new_player/player)
+ var/mob/living = player.transfer_character()
+ if(!living)
+ return
+ qdel(player)
+ ADD_TRAIT(living, TRAIT_NO_TRANSFORM, SS_TICKER_TRAIT)
+ if(living.client)
+ var/atom/movable/screen/splash/splash = new(null, living.client, TRUE)
+ splash.Fade(TRUE)
+ living.client?.init_verbs()
+ . = living
+ var/datum/player_details/details = get_player_details(living)
+ if(details)
+ SSchallenges.apply_challenges(details)
+ for(var/processing_reward_bitflags in bitflags_to_reward)//you really should use department bitflags if possible
+ if(living.mind.assigned_role.departments_bitflags & processing_reward_bitflags)
+ details.roundend_monkecoin_bonus += 150
+ for(var/processing_reward_jobs in jobs_to_reward)//just in case you really only want to reward a specific job
+ if(living.job == processing_reward_jobs)
+ details.roundend_monkecoin_bonus += 150
+
/datum/controller/subsystem/ticker/proc/transfer_characters()
var/list/livings = list()
for(var/mob/dead/new_player/player as anything in GLOB.new_player_list)
- var/mob/living = player.transfer_character()
- if(living)
- qdel(player)
- ADD_TRAIT(living, TRAIT_NO_TRANSFORM, SS_TICKER_TRAIT)
- if(living.client)
- var/atom/movable/screen/splash/S = new(null, living.client, TRUE)
- S.Fade(TRUE)
- living.client.init_verbs()
- livings += living
- if(living.client && length(living.client?.active_challenges))
- SSchallenges.apply_challenges(living.client)
- for(var/processing_reward_bitflags in bitflags_to_reward)//you really should use department bitflags if possible
- if(living.mind.assigned_role.departments_bitflags & processing_reward_bitflags)
- living.client.reward_this_person += 150
- for(var/processing_reward_jobs in jobs_to_reward)//just in case you really only want to reward a specific job
- if(living.job == processing_reward_jobs)
- living.client.reward_this_person += 150
- if(livings.len)
+ livings += transfer_single_character(player)
+ list_clear_nulls(livings)
+ if(length(livings))
addtimer(CALLBACK(src, PROC_REF(release_characters), livings), 3 SECONDS, TIMER_CLIENT_TIME)
/datum/controller/subsystem/ticker/proc/release_characters(list/livings)
diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm
index 4e57287dba8e..1c71975d1494 100644
--- a/code/datums/components/crafting/equipment.dm
+++ b/code/datums/components/crafting/equipment.dm
@@ -198,3 +198,14 @@
tool_paths = list(/obj/item/bikehorn)
time = 40 SECONDS
category = CAT_EQUIPMENT
+
+/datum/crafting_recipe/rebar_quiver
+ name = "Rebar Storage Quiver"
+ result = /obj/item/storage/bag/rebar_quiver
+ time = 10
+ reqs = list(
+ /obj/item/tank/internals/oxygen = 1,
+ /obj/item/stack/cable_coil = 15,
+ )
+ category = CAT_EQUIPMENT
+ tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER)
diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm
index ae6bdda72e4b..c8f680d36778 100644
--- a/code/datums/components/crafting/ranged_weapon.dm
+++ b/code/datums/components/crafting/ranged_weapon.dm
@@ -224,6 +224,33 @@
time = 5 SECONDS
category = CAT_WEAPON_RANGED
+/datum/crafting_recipe/rebarxbow
+ name = "Heated Rebar Crossbow"
+ result = /obj/item/gun/ballistic/rifle/rebarxbow
+ reqs = list(
+ /obj/item/stack/rods = 6,
+ /obj/item/stack/cable_coil = 12,
+ /obj/item/inducer = 1,
+ )
+ tool_behaviors = list(TOOL_WELDER)
+ time = 5 SECONDS
+ category = CAT_WEAPON_RANGED
+
+/datum/crafting_recipe/rebarxbowforced
+ name = "Forced Rebar Crossbow"
+ desc = "A much quicker reload... for a chance of shooting yourself when you fire it."
+ result = /obj/item/gun/ballistic/rifle/rebarxbow/forced
+ reqs = list(
+ /obj/item/gun/ballistic/rifle/rebarxbow = 1,
+ )
+ blacklist = list(
+ /obj/item/gun/ballistic/rifle/rebarxbow/forced,
+ /obj/item/gun/ballistic/rifle/rebarxbow/syndie,
+ )
+ tool_behaviors = list(TOOL_CROWBAR)
+ time = 1 SECONDS
+ category = CAT_WEAPON_RANGED
+
/datum/crafting_recipe/pipegun_prime
name = "Regal Pipegun"
always_available = FALSE
@@ -306,8 +333,7 @@
/obj/item/stack/rods = 4,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/capacitor = 1,
- /obj/item/clothing/glasses/regular = 1,
- /obj/item/reagent_containers/cup/glass/drinkingglass = 1,
+ /obj/item/reagent_containers/cup/glass/drinkingglass = 2,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
time = 10 SECONDS
@@ -351,7 +377,7 @@
/obj/item/gun/energy/disabler/smoothbore = 1,
/obj/item/stack/sheet/mineral/gold = 5,
/obj/item/stock_parts/cell/hyper = 1,
- /datum/reagent/reaction_agent/speed_agent = 10,
+ /datum/reagent/consumable/red_queen = 10, //monke edit
)
tool_behaviors = list(TOOL_SCREWDRIVER)
time = 20 SECONDS
diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm
index e7ad919c1de6..4ecaee1fbc2b 100644
--- a/code/datums/components/crafting/weapon_ammo.dm
+++ b/code/datums/components/crafting/weapon_ammo.dm
@@ -12,6 +12,36 @@
time = 0.5 SECONDS
category = CAT_WEAPON_AMMO
+/datum/crafting_recipe/paperball
+ name = "Paper Ball"
+ result = /obj/item/ammo_casing/rebar/paperball
+ reqs = list(
+ /obj/item/paper = 1,
+ )
+ time = 0.1 SECONDS
+ category = CAT_WEAPON_AMMO
+
+/datum/crafting_recipe/rebarsyndie
+ name = "jagged iron rod"
+ always_available = FALSE
+ result = /obj/item/ammo_casing/rebar/syndie
+ reqs = list(
+ /obj/item/stack/rods = 1,
+ )
+ tool_behaviors = list(TOOL_WIRECUTTER)
+ time = 0.5 SECONDS
+ time = 0.1 SECONDS
+ category = CAT_WEAPON_AMMO
+
+/datum/crafting_recipe/healium_bolt
+ name = "healium crystal crossbow bolt"
+ result = /obj/item/ammo_casing/rebar/healium
+ reqs = list(
+ /obj/item/grenade/gas_crystal/healium_crystal = 1
+ )
+ time = 0.1 SECONDS
+ category = CAT_WEAPON_AMMO
+
/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
result = /obj/item/ammo_casing/shotgun/pulseslug
diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm
index e52ac35e186b..3ffd95de4d8a 100644
--- a/code/datums/components/fullauto.dm
+++ b/code/datums/components/fullauto.dm
@@ -8,8 +8,12 @@
var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/autofire_stat = AUTOFIRE_STAT_IDLE
var/mouse_parameters
- var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots.
- var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
+ /// Time between individual shots.
+ var/autofire_shot_delay = 0.3 SECONDS
+ /// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
+ var/mouse_status = AUTOFIRE_MOUSEUP
+ /// Should dual wielding be allowed?
+ var/allow_akimbo
///windup autofire vars
///Whether the delay between shots increases over time, simulating a spooling weapon
@@ -26,7 +30,7 @@
var/timerid
COOLDOWN_DECLARE(next_shot_cd)
-/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown)
+/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown, allow_akimbo = TRUE)
. = ..()
if(!isgun(parent))
return COMPONENT_INCOMPATIBLE
@@ -34,6 +38,7 @@
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up))
if(autofire_shot_delay)
src.autofire_shot_delay = autofire_shot_delay
+ src.allow_akimbo = allow_akimbo
if(windup_autofire)
src.windup_autofire = windup_autofire
src.windup_autofire_reduction_multiplier = windup_autofire_reduction_multiplier
@@ -291,21 +296,21 @@
return COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS
-/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, params)
+/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
SIGNAL_HANDLER
if(semicd || shooter.incapacitated())
return NONE
if(!can_shoot())
shoot_with_empty_chamber(shooter)
return NONE
- INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params)
+ INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, allow_akimbo, params)
return COMPONENT_AUTOFIRE_SHOT_SUCCESS //All is well, we can continue shooting.
-/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params)
+/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, allow_akimbo, params)
var/obj/item/gun/akimbo_gun = shooter.get_inactive_held_item()
var/bonus_spread = 0
- if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM)
+ if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo)
if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter))
bonus_spread = dual_wield_spread
addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1)
diff --git a/code/datums/components/gun_crank.dm b/code/datums/components/gun_crank.dm
index 3768615907db..ad980f93829c 100644
--- a/code/datums/components/gun_crank.dm
+++ b/code/datums/components/gun_crank.dm
@@ -12,9 +12,11 @@
var/charge_sound_cooldown_time
/// Are we currently charging
var/is_charging = FALSE
+ /// Should you be able to move while charging, use IGNORE_USER_LOC_CHANGE if you want to move and crank
+ var/charge_move = NONE
COOLDOWN_DECLARE(charge_sound_cooldown)
-/datum/component/gun_crank/Initialize(charging_cell, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS)
+/datum/component/gun_crank/Initialize(charging_cell, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS, charge_move = NONE)
. = ..()
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
@@ -25,6 +27,7 @@
src.cooldown_time = cooldown_time
src.charge_sound = charge_sound
src.charge_sound_cooldown_time = charge_sound_cooldown_time
+ src.charge_move = charge_move
/datum/component/gun_crank/RegisterWithParent()
. = ..()
@@ -51,7 +54,7 @@
playsound(source, charge_sound, 40)
source.balloon_alert(user, "charging...")
SEND_SIGNAL(source, COMSIG_GUN_CRANKING, user) // monkestation edit
- if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_GUNCRANK))
+ if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_GUNCRANK, timed_action_flags = charge_move))
is_charging = FALSE
return
charging_cell.give(charge_amount)
diff --git a/code/datums/components/life_link.dm b/code/datums/components/life_link.dm
index 34cdd0504c6b..3e38bdfb9c54 100644
--- a/code/datums/components/life_link.dm
+++ b/code/datums/components/life_link.dm
@@ -129,16 +129,14 @@
if(isnull(holder))
return
holder.icon_state = "hud[RoundHealth(host)]"
- var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir)
- holder.pixel_y = size_check.Height() - world.icon_size
+ holder.pixel_y = mob_parent.get_cached_height() - world.icon_size
/// Update our vital status on the medical hud
/datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent)
var/image/holder = mob_parent.hud_list?[STATUS_HUD]
if(isnull(holder))
return
- var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir)
- holder.pixel_y = size_check.Height() - world.icon_size
+ holder.pixel_y = mob_parent.get_cached_height() - world.icon_size
if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH))
holder.icon_state = "huddead"
else
diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm
index bae87faf6158..0baf76866983 100644
--- a/code/datums/components/seethrough_mob.dm
+++ b/code/datums/components/seethrough_mob.dm
@@ -55,9 +55,8 @@
for(var/atom/movable/screen/plane_master/seethrough as anything in our_hud.get_true_plane_masters(SEETHROUGH_PLANE))
seethrough.unhide_plane(fool)
- var/icon/current_mob_icon = icon(fool.icon, fool.icon_state)
render_source_atom.pixel_x = -fool.pixel_x
- render_source_atom.pixel_y = ((current_mob_icon.Height() - 32) * 0.5)
+ render_source_atom.pixel_y = ((fool.get_cached_height() - world.icon_size) * 0.5)
initial_render_target_value = fool.render_target
fool.render_target = "*transparent_bigmob[personal_uid]"
diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm
index 9077b361f7b8..51298592d8f9 100644
--- a/code/datums/components/supermatter_crystal.dm
+++ b/code/datums/components/supermatter_crystal.dm
@@ -152,6 +152,8 @@
return
if(istype(item, /obj/item/melee/roastingstick))
return FALSE
+ if(istype(item, /obj/item/toy/crayon/spraycan))
+ return FALSE
if(istype(item, /obj/item/clothing/mask/cigarette))
var/obj/item/clothing/mask/cigarette/cig = item
var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY)
diff --git a/code/datums/elements/befriend_petting.dm b/code/datums/elements/befriend_petting.dm
index c2006051397e..3037ecb4a6bf 100644
--- a/code/datums/elements/befriend_petting.dm
+++ b/code/datums/elements/befriend_petting.dm
@@ -36,7 +36,7 @@
if ((user.istate & ISTATE_HARM))
return // We'll deal with this later
if (owner.stat == DEAD)
- var/additional_text = HAS_TRAIT(user, TRAIT_NAIVE) || HAS_TRAIT(user.mind, TRAIT_NAIVE) ? "It looks like [owner.p_theyre()] sleeping." : "[owner.p_they(capitalized = TRUE)] seem[owner.p_s()] to be dead."
+ var/additional_text = HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "It looks like [owner.p_theyre()] sleeping." : "[owner.p_they(capitalized = TRUE)] seem[owner.p_s()] to be dead."
to_chat(user, span_warning("[owner] feels cold to the touch. [additional_text]"))
return
if (owner.stat != CONSCIOUS)
diff --git a/code/datums/elements/decals/_decal.dm b/code/datums/elements/decals/_decal.dm
index 71dd8abdf30f..2f6f2bcf391b 100644
--- a/code/datums/elements/decals/_decal.dm
+++ b/code/datums/elements/decals/_decal.dm
@@ -113,7 +113,7 @@
return TRUE
/datum/element/decal/Detach(atom/source)
- UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON))
+ UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON, COMSIG_ATOM_DECALS_ROTATING))
SSdcs.UnregisterSignal(source, COMSIG_ATOM_DIR_CHANGE)
source.update_appearance(UPDATE_OVERLAYS)
if(isitem(source))
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index 1ab5594e9497..4a461c4bec96 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -20,6 +20,12 @@
var/datum/map_template/ert_template
/// If we should actually _use_ the ert_template custom shuttle
var/use_custom_shuttle = TRUE
+ //MONKESTATION EDIT START
+ //If we want a custom name for the poll title
+ var/poll_title = "Emergency Response Team"
+ //If we want a custom poll icon
+ var/poll_icon = /obj/item/clothing/head/helmet/space/ert
+ //MONKESTATION EDIT END
/datum/ert/New()
if (!polldesc)
@@ -126,3 +132,144 @@
mission = "Having heard the station's request for aid, assist the crew in defending themselves."
polldesc = "an independent station defense militia"
random_names = TRUE
+
+//MONKESTATION EDIT START
+/datum/ert/code
+ leader_role = /datum/antagonist/ert/generic/commander
+ roles = list(
+ /datum/antagonist/ert/generic,
+ )
+ teamsize = 6
+ opendoors = FALSE
+ polldesc = "an Uncoded Emergency Response Team"
+ ert_template = /datum/map_template/shuttle/ert/dropship
+
+/datum/ert/code/green
+ leader_role = /datum/antagonist/ert/generic/commander
+ roles = list(
+ /datum/antagonist/ert/generic/medical,
+ /datum/antagonist/ert/generic/security,
+ /datum/antagonist/ert/generic/engineer,
+ /datum/antagonist/ert/generic/janitor,
+ /datum/antagonist/ert/generic/chaplain,
+ )
+ code = "Green"
+ polldesc = NONE
+ opendoors = FALSE
+ ert_template = /datum/map_template/shuttle/ert/generic
+
+/datum/ert/code/green/with_clown
+ teamsize = 7
+ roles = list(
+ /datum/antagonist/ert/generic/medical,
+ /datum/antagonist/ert/generic/security,
+ /datum/antagonist/ert/generic/engineer,
+ /datum/antagonist/ert/generic/janitor,
+ /datum/antagonist/ert/generic/chaplain,
+ /datum/antagonist/ert/generic/clown, // Honk
+ )
+
+/datum/ert/code/blue
+ leader_role = /datum/antagonist/ert/generic/commander/blue
+ roles = list(
+ /datum/antagonist/ert/generic/medical/blue,
+ /datum/antagonist/ert/generic/security/blue,
+ /datum/antagonist/ert/generic/engineer/blue,
+ /datum/antagonist/ert/generic/janitor/blue,
+ /datum/antagonist/ert/generic/chaplain/blue,
+ )
+ code = "Blue"
+ polldesc = NONE
+ opendoors = FALSE
+ ert_template = /datum/map_template/shuttle/ert/generic
+
+/datum/ert/code/blue/with_clown
+ teamsize = 7
+ roles = list(
+ /datum/antagonist/ert/generic/medical/blue,
+ /datum/antagonist/ert/generic/security/blue,
+ /datum/antagonist/ert/generic/engineer/blue,
+ /datum/antagonist/ert/generic/janitor/blue,
+ /datum/antagonist/ert/generic/chaplain/blue,
+ /datum/antagonist/ert/generic/clown/funny, // Honk
+ )
+
+/datum/ert/code/red
+ leader_role = /datum/antagonist/ert/generic/commander/red
+ roles = list(
+ /datum/antagonist/ert/generic/medical/red,
+ /datum/antagonist/ert/generic/security/red,
+ /datum/antagonist/ert/generic/engineer/red,
+ /datum/antagonist/ert/generic/janitor/red,
+ /datum/antagonist/ert/generic/chaplain/red,
+ )
+ code = "Red"
+ polldesc = NONE
+ opendoors = TRUE
+ ert_template = /datum/map_template/shuttle/ert/generic
+
+/datum/ert/code/red/with_clown
+ teamsize = 7
+ roles = list(
+ /datum/antagonist/ert/generic/medical/red,
+ /datum/antagonist/ert/generic/security/red,
+ /datum/antagonist/ert/generic/engineer/red,
+ /datum/antagonist/ert/generic/janitor/red,
+ /datum/antagonist/ert/generic/chaplain/red,
+ /datum/antagonist/ert/generic/clown/funnier, // Honk
+ )
+
+/datum/ert/code/honk
+ leader_role = /datum/antagonist/ert/generic/clown/funny
+ roles = list(
+ /datum/antagonist/ert/generic/clown,
+ )
+ code = "Honk"
+ polldesc = NONE
+ opendoors = FALSE
+ ert_template = /datum/map_template/shuttle/ert/dropship/clown
+
+/datum/ert/code/purple
+ leader_role = /datum/antagonist/ert/generic/janitor/blue
+ roles = list(
+ /datum/antagonist/ert/generic/janitor,
+ )
+ opendoors = FALSE
+ ert_template = /datum/map_template/shuttle/ert/dropship/janitor
+ mission = "Clean up EVERYTHING."
+ poll_icon = /obj/item/clothing/head/helmet/space/ert/janitor
+ polldesc = "a Nanotrasen Janitorial Response Team"
+
+/datum/ert/code/lambda
+ leader_role = /datum/antagonist/ert/generic/chaplain/red
+ roles = list(
+ /datum/antagonist/ert/generic/chaplain/red,
+ )
+ code = "Lambda"
+ polldesc = NONE
+ opendoors = FALSE
+ teamsize = 5
+ poll_icon = /obj/item/clothing/head/helmet/space/ert/chaplain
+ ert_template = /datum/map_template/shuttle/ert/dropship
+
+/datum/ert/code/epsilon
+ leader_role = /datum/antagonist/ert/generic/deathsquad
+ roles = list(
+ /datum/antagonist/ert/generic/deathsquad,
+ )
+ opendoors = FALSE
+ rename_team = "Deathsquad"
+ code = "Epsilon"
+ mission = "Leave no witnesses."
+ teamsize = 5
+ poll_title = "Deathsquad"
+ poll_icon = /obj/item/clothing/mask/gas/sechailer/swat
+ polldesc = "an elite Nanotrasen Strike Team"
+ ert_template = /datum/map_template/shuttle/ert/deathsquad
+
+/datum/ert/code/epsilon/dust
+ leader_role = /datum/antagonist/ert/generic/deathsquad/dust
+ roles = list(
+ /datum/antagonist/ert/generic/deathsquad/dust,
+ )
+//MONKESTATION EDIT END
diff --git a/code/datums/id_trim/centcom.dm b/code/datums/id_trim/centcom.dm
index c8adf5925c22..53382c658cda 100644
--- a/code/datums/id_trim/centcom.dm
+++ b/code/datums/id_trim/centcom.dm
@@ -173,7 +173,7 @@
/// Trim for generic ERT janitors. No universal ID card changing access.
/datum/id_trim/centcom/ert/janitor
assignment = JOB_ERT_JANITOR
- trim_state = "trim_ert_janitor"
+ trim_state = "trim_janitor"
subdepartment_color = COLOR_SERVICE_LIME
sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER
diff --git a/code/datums/status_effects/debuffs/tower_of_babel.dm b/code/datums/status_effects/debuffs/tower_of_babel.dm
index bc3df34f2be4..1ba46d0b87b5 100644
--- a/code/datums/status_effects/debuffs/tower_of_babel.dm
+++ b/code/datums/status_effects/debuffs/tower_of_babel.dm
@@ -15,7 +15,8 @@
owner.add_blocked_language(GLOB.all_languages - random_language, source = LANGUAGE_BABEL)
// this lets us bypass tongue language restrictions except for people who have stuff like mute,
// no tongue, tongue tied, etc. curse of babel shouldn't let people who have a tongue disability speak
- ADD_TRAIT(owner, TRAIT_TOWER_OF_BABEL, trait_source)
+ if(owner.mind)
+ ADD_TRAIT(owner.mind, TRAIT_TOWER_OF_BABEL, trait_source)
owner.add_mood_event(id, /datum/mood_event/tower_of_babel)
return ..()
@@ -25,7 +26,8 @@
owner.remove_blocked_language(GLOB.all_languages, source = LANGUAGE_BABEL)
owner.remove_all_languages(source = LANGUAGE_BABEL)
owner.update_atom_languages()
- REMOVE_TRAIT(owner, TRAIT_TOWER_OF_BABEL, trait_source)
+ if(owner.mind)
+ REMOVE_TRAIT(owner.mind, TRAIT_TOWER_OF_BABEL, trait_source)
return ..()
// Used by wizard magic and tower of babel event
diff --git a/code/datums/status_effects/stacking_effect.dm b/code/datums/status_effects/stacking_effect.dm
index 9a682000eb78..783d9334b215 100644
--- a/code/datums/status_effects/stacking_effect.dm
+++ b/code/datums/status_effects/stacking_effect.dm
@@ -128,8 +128,7 @@
if(underlay_file)
status_underlay = mutable_appearance(underlay_file, "[underlay_state][stacks]")
- var/icon/I = icon(owner.icon, owner.icon_state, owner.dir)
- var/icon_height = I.Height()
+ var/icon_height = owner.get_cached_height()
if(status_overlay)
status_overlay.pixel_x = -owner.pixel_x
diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm
index 03c9bf2aed6e..9db51ee5ad4b 100644
--- a/code/datums/weather/weather_types/snow_storm.dm
+++ b/code/datums/weather/weather_types/snow_storm.dm
@@ -39,7 +39,7 @@
if(isobserver(player))
return TRUE
- if(HAS_TRAIT(player, TRAIT_DETECT_STORM))
+ if(HAS_MIND_TRAIT(player, TRAIT_DETECT_STORM))
return TRUE
if(istype(get_area(player), /area/mine))
diff --git a/code/game/communications.dm b/code/game/communications.dm
index b6c606f0a5c5..320b03d0d041 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(radiochannels, list(
RADIO_CHANNEL_CTF_GREEN = FREQ_CTF_GREEN,
RADIO_CHANNEL_CTF_YELLOW = FREQ_CTF_YELLOW,
RADIO_CHANNEL_RADIO = RADIO_KEY_RADIO,
+ RADIO_CHANNEL_UNCOMMON = FREQ_UNCOMMON, //monkestation addition
))
GLOBAL_LIST_INIT(reverseradiochannels, list(
@@ -130,6 +131,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list(
"[FREQ_CTF_GREEN]" = RADIO_CHANNEL_CTF_GREEN,
"[FREQ_CTF_YELLOW]" = RADIO_CHANNEL_CTF_YELLOW,
"[FREQ_RADIO]" = RADIO_CHANNEL_RADIO,
+ "[FREQ_UNCOMMON]" = RADIO_CHANNEL_UNCOMMON, //monkestation addition
))
/datum/radio_frequency
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 48ddf2749558..3f2dde1cc0ab 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -194,8 +194,7 @@ Medical HUD! Basic mode needs suit sensors on.
return
holder.icon_state = "hud[RoundHealth(src)]"
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
//for carbon suit sensors
/mob/living/carbon/med_hud_set_health()
@@ -208,8 +207,7 @@ Medical HUD! Basic mode needs suit sensors on.
if (isnull(holder))
return
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
if(sensors)
SET_PLANE_EXPLICIT(sensors, ABOVE_LIGHTING_PLANE, src)
@@ -225,9 +223,8 @@ Medical HUD! Basic mode needs suit sensors on.
if (isnull(holder))
return
- var/icon/I = icon(icon, icon_state, dir)
var/virus_threat = check_virus()
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(HAS_TRAIT(src, TRAIT_XENO_HOST))
holder.icon_state = "hudxeno"
else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
@@ -263,8 +260,7 @@ FAN HUDs! For identifying other fans on-sight.
/mob/living/carbon/human/proc/fan_hud_set_fandom()
var/image/holder = hud_list[FAN_HUD]
- var/icon/hud_icon = icon(icon, icon_state, dir)
- holder.pixel_y = hud_icon.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hudfan_no"
var/obj/item/clothing/under/undershirt = w_uniform
@@ -294,8 +290,7 @@ Security HUDs! Basic mode shows only the job.
/mob/living/carbon/human/proc/sec_hud_set_ID()
var/image/holder = hud_list[ID_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
var/sechud_icon_state = wear_id?.get_sechud_job_icon_state()
if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN))
sechud_icon_state = "hudno_id"
@@ -303,7 +298,7 @@ Security HUDs! Basic mode shows only the job.
sec_hud_set_security_status()
//monkestation edit start
var/image/permit_holder = hud_list[PERMIT_HUD]
- permit_holder.pixel_y = I.Height() - world.icon_size
+ permit_holder.pixel_y = get_cached_height() - world.icon_size
var/permit_icon_state = wear_id?.get_gun_permit_iconstate()
if(!permit_icon_state)
permit_icon_state = "hudfan_no"
@@ -320,29 +315,25 @@ Security HUDs! Basic mode shows only the job.
for(var/obj/item/implant/I in implants)
if(istype(I, /obj/item/implant/tracking))
holder = hud_list[IMPTRACK_HUD]
- var/icon/IC = icon(icon, icon_state, dir)
- holder.pixel_y = IC.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_tracking"
set_hud_image_active(IMPTRACK_HUD)
else if(istype(I, /obj/item/implant/chem))
holder = hud_list[IMPCHEM_HUD]
- var/icon/IC = icon(icon, icon_state, dir)
- holder.pixel_y = IC.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_chem"
set_hud_image_active(IMPCHEM_HUD)
if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
holder = hud_list[IMPLOYAL_HUD]
- var/icon/IC = icon(icon, icon_state, dir)
- holder.pixel_y = IC.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_loyal"
set_hud_image_active(IMPLOYAL_HUD)
/mob/living/carbon/human/proc/sec_hud_set_security_status()
var/image/holder = hud_list[WANTED_HUD]
- var/icon/sec_icon = icon(icon, icon_state, dir)
- holder.pixel_y = sec_icon.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
var/perp_name = get_face_name(get_id_name(""))
if(!perp_name || !GLOB.manifest)
@@ -376,8 +367,7 @@ Diagnostic HUDs!
/mob/living/proc/hud_set_nanite_indicator()
var/image/holder = hud_list[NANITE_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = null
if(HAS_TRAIT(src, TRAIT_NANITE_MONITORING))
holder.icon_state = "nanite_ping"
@@ -403,8 +393,7 @@ Diagnostic HUDs!
//Sillycone hooks
/mob/living/silicon/proc/diag_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD)
holder.icon_state = "huddiagdead"
else
@@ -412,8 +401,7 @@ Diagnostic HUDs!
/mob/living/silicon/proc/diag_hud_set_status()
var/image/holder = hud_list[DIAG_STAT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
switch(stat)
if(CONSCIOUS)
holder.icon_state = "hudstat"
@@ -425,8 +413,7 @@ Diagnostic HUDs!
//Borgie battery tracking!
/mob/living/silicon/robot/proc/diag_hud_set_borgcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = (cell.charge/cell.maxcharge)
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
@@ -436,8 +423,7 @@ Diagnostic HUDs!
//borg-AI shell tracking
/mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech
var/image/holder = hud_list[DIAG_TRACK_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(!shell) //Not an AI shell
holder.icon_state = null
set_hud_image_inactive(DIAG_TRACK_HUD)
@@ -451,8 +437,7 @@ Diagnostic HUDs!
//AI side tracking of AI shell control
/mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech
var/image/holder = hud_list[DIAG_TRACK_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(!deployed_shell)
holder.icon_state = null
set_hud_image_inactive(DIAG_TRACK_HUD)
@@ -465,15 +450,13 @@ Diagnostic HUDs!
~~~~~~~~~~~~~~~~~~~~~*/
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth()
var/image/holder = hud_list[DIAG_MECH_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(atom_integrity/max_integrity)]"
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = cell.charge/cell.maxcharge
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
@@ -482,8 +465,7 @@ Diagnostic HUDs!
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat()
var/image/holder = hud_list[DIAG_STAT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(internal_damage)
holder.icon_state = "hudwarn"
set_hud_image_active(DIAG_STAT_HUD)
@@ -494,8 +476,7 @@ Diagnostic HUDs!
///Shows tracking beacons on the mech
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking()
var/image/holder = hud_list[DIAG_TRACK_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
var/new_icon_state //This var exists so that the holder's icon state is set only once in the event of multiple mech beacons.
for(var/obj/item/mecha_parts/mecha_tracking/T in trackers)
if(T.ai_beacon) //Beacon with AI uplink
@@ -508,8 +489,7 @@ Diagnostic HUDs!
///Shows inbuilt camera on the mech; if the camera's view range was affected by an EMP, shows a red blip while it's affected
/obj/vehicle/sealed/mecha/proc/diag_hud_set_camera()
var/image/holder = hud_list[DIAG_CAMERA_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(chassis_camera.is_emp_scrambled)
holder.icon_state = "hudcamera_empd"
return
@@ -520,14 +500,12 @@ Diagnostic HUDs!
~~~~~~~~~~*/
/mob/living/simple_animal/bot/proc/diag_hud_set_bothealth()
var/image/holder = hud_list[DIAG_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
/mob/living/simple_animal/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed
var/image/holder = hud_list[DIAG_STAT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(bot_mode_flags & BOT_MODE_ON)
holder.icon_state = "hudstat"
else if(stat) //Generally EMP causes this
@@ -537,8 +515,7 @@ Diagnostic HUDs!
/mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation
var/image/holder = hud_list[DIAG_BOT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(client) //If the bot is player controlled, it will not be following mode logic!
holder.icon_state = "hudsentient"
return
@@ -559,8 +536,7 @@ Diagnostic HUDs!
/mob/living/simple_animal/bot/mulebot/proc/diag_hud_set_mulebotcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
- var/icon/I = icon(icon, icon_state, dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = (cell.charge/cell.maxcharge)
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
@@ -577,3 +553,19 @@ Diagnostic HUDs!
var/image/holder = hud_list[DIAG_AIRLOCK_HUD]
holder.icon_state = "electrified"
set_hud_image_active(DIAG_AIRLOCK_HUD)
+
+#define CACHED_WIDTH_INDEX "width"
+#define CACHED_HEIGHT_INDEX "height"
+/atom/proc/get_cached_width()
+ if (isnull(icon))
+ return 0
+ var/list/dimensions = get_icon_dimensions(icon)
+ return dimensions[CACHED_WIDTH_INDEX]
+
+/atom/proc/get_cached_height()
+ if (isnull(icon))
+ return 0
+ var/list/dimensions = get_icon_dimensions(icon)
+ return dimensions[CACHED_HEIGHT_INDEX]
+#undef CACHED_WIDTH_INDEX
+#undef CACHED_HEIGHT_INDEX
diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm
index bc412aa4492d..9eda1dfc5f04 100644
--- a/code/game/machinery/civilian_bounties.dm
+++ b/code/game/machinery/civilian_bounties.dm
@@ -328,7 +328,7 @@
COOLDOWN_START(src, next_nag_time, nag_cooldown)
/obj/item/bounty_cube/proc/set_up(datum/bounty/my_bounty, obj/item/card/id/holder_id)
- bounty_value = my_bounty.reward
+ bounty_value = round(my_bounty.reward)
bounty_name = my_bounty.name
bounty_holder = holder_id.registered_name
bounty_holder_job = holder_id.assignment
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index 168a3f9b0883..eafdb46f9c32 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -447,8 +447,7 @@
var/size_matrix = matrix()
if(size_calc_target)
layer = size_calc_target.layer + 0.01
- var/icon/I = icon(size_calc_target.icon, size_calc_target.icon_state, size_calc_target.dir)
- size_matrix = matrix() * (I.Height()/world.icon_size)
+ size_matrix = matrix() * (size_calc_target.get_cached_height() /world.icon_size)
transform = size_matrix //scale the bleed overlay's size based on the target's icon size
var/matrix/M = transform
if(shrink)
diff --git a/code/game/objects/items/cards/card_ids.dm b/code/game/objects/items/cards/card_ids.dm
new file mode 100644
index 000000000000..505ae50aab2b
--- /dev/null
+++ b/code/game/objects/items/cards/card_ids.dm
@@ -0,0 +1,14 @@
+/obj/item/card/id/away/old/cmo
+ name = "Charlie Station Chief Medical Officer's ID card"
+ desc = "A faded Charlie Station ID card. You can make out the rank \"Chief Medical Officer\"."
+ trim = /datum/id_trim/away/old/cmo
+
+/obj/item/card/id/away/old/chef
+ name = "Charlie Station Chef's ID card"
+ desc = "A faded Charlie Station ID card. You can make out the rank \"Chef\"."
+ trim = /datum/id_trim/away/old/chef
+
+/obj/item/card/id/away/old/explorer
+ name = "Charlie Station Explorer's ID card"
+ desc = "A faded Charlie Station ID card. You can make out the rank \"Explorer\"."
+ trim = /datum/id_trim/away/old/explorer
diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm
index 21e13d86cad4..f9db8013ca17 100644
--- a/code/game/objects/items/control_wand.dm
+++ b/code/game/objects/items/control_wand.dm
@@ -3,17 +3,19 @@
#define WAND_EMERGENCY "emergency"
/obj/item/door_remote
- icon_state = "gangtool-white"
+ icon_state = "remote_omni_open"
inhand_icon_state = "electronic"
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
- icon = 'icons/obj/device.dmi'
+ icon = 'icons/obj/devices/remote.dmi' //monkestation edit
name = "control wand"
desc = "Remotely controls airlocks."
w_class = WEIGHT_CLASS_TINY
var/mode = WAND_OPEN
var/region_access = REGION_GENERAL
var/list/access_list
+ //monkestation addition: remote type for the purpose of updating the icon
+ var/remote_type = "omni"
/obj/item/door_remote/Initialize(mapload)
. = ..()
@@ -28,6 +30,7 @@
mode = WAND_EMERGENCY
if(WAND_EMERGENCY)
mode = WAND_OPEN
+ icon_state = "remote_[remote_type]_[mode]" //monkestation addition
balloon_alert(user, "mode: [desc[mode]]")
// Airlock remote works by sending NTNet packets to whatever it's pointed at.
@@ -85,44 +88,50 @@
/obj/item/door_remote/omni
name = "omni door remote"
- desc = "This control wand can access any door on the station."
- icon_state = "gangtool-yellow"
+ desc = "Remotely controls airlocks. This remote can access any door on the station." //monkestation edit
region_access = REGION_ALL_STATION
/obj/item/door_remote/captain
name = "command door remote"
- icon_state = "gangtool-yellow"
+ icon_state = "remote_command_open" //monkestation edit
+ remote_type = "command" //monkestation edit
region_access = REGION_COMMAND
/obj/item/door_remote/chief_engineer
name = "engineering door remote"
- icon_state = "gangtool-orange"
+ icon_state = "remote_engi_open" //monkestation edit
+ remote_type = "engi" //monkestation edit
region_access = REGION_ENGINEERING
/obj/item/door_remote/research_director
name = "research door remote"
- icon_state = "gangtool-purple"
+ icon_state = "remote_sci_open" //monkestation edit
+ remote_type = "sci" //monkestation edit
region_access = REGION_RESEARCH
/obj/item/door_remote/head_of_security
name = "security door remote"
- icon_state = "gangtool-red"
+ icon_state = "remote_security_open" //monkestation edit
+ remote_type = "security" //monkestation edit
region_access = REGION_SECURITY
/obj/item/door_remote/quartermaster
name = "supply door remote"
desc = "Remotely controls airlocks. This remote has additional Vault access."
- icon_state = "gangtool-green"
+ icon_state = "remote_cargo_open" //monkestation edit
+ remote_type = "cargo" //monkestation edit
region_access = REGION_SUPPLY
/obj/item/door_remote/chief_medical_officer
name = "medical door remote"
- icon_state = "gangtool-blue"
+ icon_state = "remote_med_open" //monkestation edit
+ remote_type = "med" //monkestation edit
region_access = REGION_MEDBAY
/obj/item/door_remote/civilian
name = "civilian+supply door remote"
- icon_state = "gangtool-white"
+ icon_state = "remote_civilian_open" //monkestation edit
+ remote_type = "civilian" //monkestation edit
region_access = (REGION_GENERAL && REGION_SUPPLY) //monkestation addition
#undef WAND_OPEN
diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm
index 3171bd2d8ef1..b82418721413 100644
--- a/code/game/objects/items/cosmetics.dm
+++ b/code/game/objects/items/cosmetics.dm
@@ -13,6 +13,9 @@
/// A trait that's applied while someone has this lipstick applied, and is removed when the lipstick is removed
var/lipstick_trait
+ ///Defines if lipstick color can be spawned as a random lipstick
+ var/lipstick_random = TRUE
+
/obj/item/lipstick/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
@@ -24,8 +27,10 @@
update_appearance(UPDATE_ICON)
/obj/item/lipstick/update_icon_state()
- icon_state = "lipstick[open ? "_uncap" : null]"
- inhand_icon_state = "lipstick[open ? "open" : null]"
+ var/initial_icon_state = icon_state
+ icon_state = "[icon_state][open ? "_uncap" : null]"
+ inhand_icon_state = "[icon_state][open ? "open" : null]"
+ icon_state = initial_icon_state
return ..()
/obj/item/lipstick/update_overlays()
@@ -65,6 +70,14 @@
desc = "An incredibly potent tube of lipstick made from the venom of the dreaded Yellow Spotted Space Lizard, as deadly as it is chic. Try not to smear it!"
lipstick_trait = TRAIT_KISS_OF_DEATH
+/obj/item/lipstick/syndie
+ name = "syndie lipstick"
+ desc = "Syndicate branded lipstick with a killer dose of kisses. Observe safety regulations!"
+ icon_state = "slipstick"
+ lipstick_color = COLOR_SYNDIE_RED
+ lipstick_trait = TRAIT_SYNDIE_KISS
+ lipstick_random = FALSE
+
/obj/item/lipstick/random
name = "lipstick"
icon_state = "random_lipstick"
@@ -78,7 +91,8 @@
for(var/obj/item/lipstick/lipstick_path as anything in (typesof(/obj/item/lipstick) - src.type))
if(!initial(lipstick_path.lipstick_color))
continue
- possible_colors[initial(lipstick_path.lipstick_color)] = initial(lipstick_path.name)
+ if(lipstick_path.lipstick_random)
+ possible_colors[initial(lipstick_path.lipstick_color)] = initial(lipstick_path.name)
lipstick_color = pick(possible_colors)
name = possible_colors[lipstick_color]
update_appearance()
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 21517203f5f8..51f5977f92b2 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -325,7 +325,7 @@
var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods)
// Independent radios, on the CentCom frequency, reach all independent radios
- if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW))
+ if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_UNCOMMON))
signal.data["compression"] = 0
signal.transmission_method = TRANSMISSION_SUPERSPACE
signal.levels = list(0)
diff --git a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm
new file mode 100644
index 000000000000..04cee4e18a79
--- /dev/null
+++ b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm
@@ -0,0 +1,13 @@
+/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo
+ name = "SYNDICATE REBAR CROSSBOW AMMO CRAFTING MANUAL"
+ desc = "This book will self destruct upon being read a second time."
+ crafting_recipe_types = list(
+ /datum/crafting_recipe/rebarsyndie
+ )
+ uses = 1
+ remarks = list(
+ "AIM FOR THE LEGS TO CRIPPLE YOUR FOES",
+ "USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO",
+ "BE AWARE OF THE SCOPE'S BLIND SPOTS",
+ "READ THIS BOOK AGAIN TO DUST IT.",
+ )
diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm
index 1b9d9ff27d09..616673f72a93 100644
--- a/code/game/objects/items/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/grenades/spawnergrenade.dm
@@ -71,3 +71,15 @@
inhand_icon_state = null
spawner_type = /mob/living/basic/clown/mutant
deliveryamt = 5
+
+/obj/item/grenade/spawnergrenade/cat
+ name = "Catnade"
+ desc = "You can hear faint meowing and the sounds of claws on metal coming from within."
+ spawner_type = list(/mob/living/simple_animal/hostile/feral, /mob/living/simple_animal/hostile/feraltabby)
+ deliveryamt = 5
+
+/obj/item/grenade/spawnergrenade/cat/syndicate
+ name = "Syndicatnade"
+ desc = "You can hear aggressive meowing and the sounds of sharpened claws on metal coming from within."
+ spawner_type = /mob/living/simple_animal/hostile/syndicat
+ deliveryamt = 3
diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm
index 8f24ae13d876..36f326189fd0 100644
--- a/code/game/objects/items/hand_items.dm
+++ b/code/game/objects/items/hand_items.dm
@@ -548,6 +548,12 @@
color = COLOR_BLACK
kiss_type = /obj/projectile/kiss/death
+/obj/item/hand_item/kisser/syndie
+ name = "syndie kiss"
+ desc = "oooooo you like syndicate ur a syndiekisser"
+ color = COLOR_SYNDIE_RED
+ kiss_type = /obj/projectile/kiss/syndie
+
/obj/projectile/kiss
name = "kiss"
icon = 'icons/mob/simple/animal.dmi'
@@ -559,13 +565,17 @@
damage_type = BRUTE
damage = 0 // love can't actually hurt you
armour_penetration = 100 // but if it could, it would cut through even the thickest plate
+ var/silent_blown = FALSE
/obj/projectile/kiss/fire(angle, atom/direct_target)
- if(firer)
+ if(firer && !silent_blown)
name = "[name] blown by [firer]"
+
return ..()
/obj/projectile/kiss/Impact(atom/A)
+ def_zone = BODY_ZONE_HEAD // let's keep it PG, people
+
if(damage > 0 || !isliving(A)) // if we do damage or we hit a nonliving thing, we don't have to worry about a harmless hit because we can't wrongly do damage anyway
return ..()
@@ -619,7 +629,6 @@
living_target.visible_message("[living_target] [other_msg]", span_userdanger("Whoa! [self_msg]"))
/obj/projectile/kiss/on_hit(atom/target, blocked, pierce_hit)
- def_zone = BODY_ZONE_HEAD // let's keep it PG, people
. = ..()
if(isliving(target))
var/mob/living/living_target = target
@@ -641,6 +650,18 @@
var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot(ORGAN_SLOT_HEART)
dont_go_breakin_my_heart.apply_organ_damage(999)
+// Based on energy gun characteristics
+/obj/projectile/kiss/syndie
+ name = "syndie kiss"
+ color = COLOR_SYNDIE_RED
+ impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
+ damage_type = BURN
+ armor_flag = LASER
+ armour_penetration = 0
+ damage = 25
+ wound_bonus = -20
+ bare_wound_bonus = 40
+ silent_blown = TRUE
/obj/projectile/kiss/french
name = "french kiss (is that a hint of garlic?)"
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 2ba0ab73eab0..e6893f9d73e4 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \
+ new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \
))
/obj/item/stack/rods
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index e994da442d5a..0fa0dbcb662e 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -489,6 +489,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_MELEE),
+ new /datum/stack_recipe("metallic hydrogen bolts", /obj/item/ammo_casing/rebar/hydrogen, req_amount = 1, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_AMMO),
))
/obj/item/stack/sheet/mineral/metal_hydrogen
@@ -507,6 +508,10 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
. = ..()
. += GLOB.metalhydrogen_recipes
+GLOBAL_LIST_INIT(zaukerite_recipes, list(
+ new /datum/stack_recipe("zaukerite shard", /obj/item/ammo_casing/rebar/zaukerite, req_amount=1, res_amount=1, category = CAT_WEAPON_AMMO),
+ ))
+
/obj/item/stack/sheet/mineral/zaukerite
name = "zaukerite"
icon_state = "zaukerite"
@@ -517,3 +522,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT)
merge_type = /obj/item/stack/sheet/mineral/zaukerite
material_type = /datum/material/zaukerite
+
+/obj/item/stack/sheet/mineral/zaukerite/get_main_recipes()
+ . = ..()
+ . += GLOB.zaukerite_recipes
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 28ba42ec8649..83053da43c3e 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -201,12 +201,23 @@
icon_state = "backpack-virology"
inhand_icon_state = "viropack"
+//MONKESTATION EDIT START// adds generic backpack and touches up the sprites
/obj/item/storage/backpack/ert
+ name = "emergency response team backpack"
+ desc = "A spacious backpack with lots of pockets."
+ icon_state = "ert_plain"
+ inhand_icon_state = "securitypack"
+ resistance_flags = FIRE_PROOF
+ alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER
+
+/obj/item/storage/backpack/ert/Initialize(mapload)
+ . = ..()
+ atom_storage.max_total_storage = 25 //lots of pockets
+
+/obj/item/storage/backpack/ert/commander
name = "emergency response team commander backpack"
desc = "A spacious backpack with lots of pockets, worn by the Commander of an Emergency Response Team."
icon_state = "ert_commander"
- inhand_icon_state = "securitypack"
- resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/ert/security
name = "emergency response team security backpack"
@@ -233,6 +244,12 @@
desc = "A spacious backpack with lots of pockets, worn by Clowns of an Emergency Response Team."
icon_state = "ert_clown"
+/obj/item/storage/backpack/ert/generic
+ name = "emergency response team backpack"
+ desc = "A spacious backpack with lots of pockets"
+ icon_state = "ert_generic"
+//MONKESTATION EDIT STOP
+
/obj/item/storage/backpack/saddlepack
name = "saddlepack"
desc = "A backpack designed to be saddled on a mount or carried on your back, and switch between the two on the fly. It's quite spacious, at the cost of making you feel like a literal pack mule."
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index dc35fcbab53c..bdac9fec7ce4 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -281,7 +281,7 @@
desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet."
icon = 'icons/obj/mining.dmi'
icon_state = "sheetsnatcher"
- worn_icon_state = "satchel"
+ worn_icon_state = "construction_bag" //monkestation edit
var/capacity = 300; //the number of sheets it can carry.
@@ -573,4 +573,28 @@
for(var/i in 1 to 40)
new /obj/item/ammo_casing/caseless/harpoon(src)
+/obj/item/storage/bag/rebar_quiver
+ name = "Rebar Storage Quiver"
+ icon = 'icons/obj/weapons/guns/bows/quivers.dmi'
+ icon_state = "rebar_quiver"
+ worn_icon_state = "rebar_quiver"
+ inhand_icon_state = "rebar_quiver"
+ desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow."
+ slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE
+ resistance_flags = FLAMMABLE
+
+/obj/item/storage/bag/rebar_quiver/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
+ atom_storage.max_slots = 10
+ atom_storage.max_total_storage = 15
+ atom_storage.set_holdable(list(
+ /obj/item/ammo_casing/rebar,
+ /obj/item/ammo_casing/rebar/syndie,
+ /obj/item/ammo_casing/rebar/healium,
+ /obj/item/ammo_casing/rebar/hydrogen,
+ /obj/item/ammo_casing/rebar/zaukerite,
+ /obj/item/ammo_casing/rebar/paperball,
+ ))
+
#undef ORE_BAG_BALOON_COOLDOWN
diff --git a/code/game/objects/items/storage/boxes/science_boxes.dm b/code/game/objects/items/storage/boxes/science_boxes.dm
index 754a0cb2f5b4..99c652fdbb12 100644
--- a/code/game/objects/items/storage/boxes/science_boxes.dm
+++ b/code/game/objects/items/storage/boxes/science_boxes.dm
@@ -106,7 +106,7 @@
new /obj/item/circuitboard/machine/protolathe/offstation(src)
new /obj/item/circuitboard/machine/destructive_analyzer(src)
new /obj/item/circuitboard/machine/circuit_imprinter/offstation(src)
- new /obj/item/circuitboard/computer/rdconsole(src)
+ new /obj/item/circuitboard/computer/rdconsole/unlocked(src)
/obj/item/storage/box/stabilized //every single stabilized extract from xenobiology
name = "box of stabilized extracts"
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 869b4c659fd6..84d50c607702 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -334,6 +334,14 @@
icon_state = "syndiebox"
illustration = "writing_syndie"
+/obj/item/storage/box/syndie_kit/rebarxbowsyndie
+ name = "Boxed Rebar Crossbow"
+ desc = "A scoped weapon with low armor penetration, but devestating against flesh. Features instruction manual for making specialty ammo."
+
+/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents()
+ new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src)
+ new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src)
+
/obj/item/storage/box/syndie_kit/origami_bundle
name = "origami kit"
desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"."
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index c1907409d199..09161eb70ff8 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -30,7 +30,6 @@
/obj/item/gbp_punchcard,
/obj/item/implanter,
/obj/item/lighter,
- /obj/item/lipstick,
/obj/item/match,
/obj/item/paper,
/obj/item/pen,
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 1fe02b6a007e..0030e5543b4e 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -439,7 +439,7 @@
/obj/structure/flora/tree/pine/xmas/presents
icon_state = "pinepresents"
desc = "A wondrous decorated Christmas tree. It has presents!"
- var/gift_type = /obj/item/a_gift/anything
+ var/gift_type = /obj/item/a_gift
var/unlimited = FALSE
var/static/list/took_presents //shared between all xmas trees
@@ -462,9 +462,15 @@
if(!unlimited)
took_presents[user.ckey] = TRUE
+ if(prob(50))
+ user.put_in_hands(new gift_type(drop_location()))
+ return
+ if(prob(1))
+ new /mob/living/carbon/human/species/monkey/angry(drop_location())
+ to_chat(user, span_warning("A live monkey crawls out of the gift... its PISSED!!!"))
+ return
+ user.put_in_hands(new /obj/item/a_gift/anything(drop_location()))
- var/obj/item/G = new gift_type(src)
- user.put_in_hands(G)
/obj/structure/flora/tree/pine/xmas/presents/unlimited
desc = "A wonderous decorated Christmas tree. It has a seemly endless supply of presents!"
diff --git a/code/game/say.dm b/code/game/say.dm
index 8eb2b780228d..d35b4971f6dd 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -19,7 +19,8 @@ GLOBAL_LIST_INIT(freqtospan, list(
"[FREQ_CTF_BLUE]" = "blueteamradio",
"[FREQ_CTF_GREEN]" = "greenteamradio",
"[FREQ_CTF_YELLOW]" = "yellowteamradio",
- "[FREQ_RADIO]" = "radioradio"
+ "[FREQ_RADIO]" = "radioradio",
+ "[FREQ_UNCOMMON]" = "uncommonradio"
))
/atom/movable/proc/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = FALSE, message_range = 7, datum/saymode/saymode = null)
diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm
index b43d6b01d49b..3ca4a3120320 100644
--- a/code/modules/admin/callproc/callproc.dm
+++ b/code/modules/admin/callproc/callproc.dm
@@ -219,6 +219,17 @@ GLOBAL_PROTECT(LastAdminCalledProc)
if(target == GLOBAL_PROC)
return call("/proc/[procname]")(arglist(arguments))
else if(target != world)
+ // monkestation start: anti-lag
+ if(isatom(target) && procname == "Shake")
+ var/confirmation = UNLINT(tgui_alert(
+ user = usr,
+ message = "Are you SURE you want to call Shake()?\nThis has a VERY HIGH CHANCE of causing immense lag or even a crash!",
+ title = "OH GOD WHY",
+ buttons = list("I'm sure!", "Nope."),
+ ))
+ if(confirmation != "I'm sure!")
+ return
+ // monkestation end
return call(target, procname)(arglist(arguments))
else
log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]")
diff --git a/code/modules/admin/smites/curse_of_babel.dm b/code/modules/admin/smites/curse_of_babel.dm
index 4098cbf928c0..dacc797c4150 100644
--- a/code/modules/admin/smites/curse_of_babel.dm
+++ b/code/modules/admin/smites/curse_of_babel.dm
@@ -1,3 +1,4 @@
+/* monkestation removal. if you REALLY want to do this for some reason, call the proc yourself.
/// Strikes the target with a lightning bolt
/datum/smite/curse_of_babel
name = "Curse of Babel"
@@ -15,3 +16,4 @@
target.apply_status_effect(/datum/status_effect/tower_of_babel, duration)
to_chat(target, span_userdanger("The gods have punished you for your sins!"), confidential = TRUE)
+monkestation end */
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 73d8ef375b98..dc0a72d7f7d5 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -252,7 +252,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
else
SSplexora.aticket_new(src, msg_raw, is_bwoink, urgent) // monkestation edit: PLEXORA
MessageNoRecipient(msg_raw, urgent)
- send_message_to_tgs(msg, urgent)
+ send_message_to_tgs(html_decode(msg), urgent)
GLOB.ahelp_tickets.active_tickets += src
/datum/admin_help/proc/format_embed_discord(message)
@@ -798,7 +798,7 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new)
if(user_client.current_ticket)
user_client.current_ticket.TimeoutVerb()
if(urgent)
- var/sanitized_message = sanitize(copytext_char(message, 1, MAX_MESSAGE_LEN))
+ var/sanitized_message = sanitize(trim(message, MAX_MESSAGE_LEN), encode = FALSE)
user_client.current_ticket.send_message_to_tgs(sanitized_message, urgent = TRUE)
user_client.current_ticket.MessageNoRecipient(message, urgent)
return
diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm
index 988f6ca344e8..786effac83e1 100644
--- a/code/modules/admin/verbs/ert.dm
+++ b/code/modules/admin/verbs/ert.dm
@@ -141,7 +141,7 @@
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
var/index = 0
- var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", alert_pic = /obj/item/card/id/advanced/centcom/ert, role_name_text = "emergency response team")
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", alert_pic = ertemplate.poll_icon, role_name_text = "[ertemplate.poll_title]") //monkestation edit: adds custom poll titles
var/teamSpawned = FALSE
// This list will take priority over spawnpoints if not empty
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index a172f3d84542..89849d2915c6 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -294,6 +294,7 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller)
summon_magic(holder.mob, survivor_probability)
+/* monkestation removal: if you REALLY want to do this for some reason, call the proc yourself.
if("towerOfBabel")
if(!is_funmin)
return
@@ -305,6 +306,7 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller)
if(!is_funmin)
return
holder.tower_of_babel_undo()
+monkestation end */
if("events")
if(!is_funmin)
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index 056e72fc1a05..9bdf5646898a 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -48,8 +48,7 @@
if(!owner)
return
var/image/holder = owner.hud_list[GLAND_HUD]
- var/icon/I = icon(owner.icon, owner.icon_state, owner.dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = owner.get_cached_height() - world.icon_size
if(active_mind_control)
holder.icon_state = "hudgland_active"
else if(mind_control_uses)
diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm
index 804dd2bffaca..c2c071a7355d 100644
--- a/code/modules/antagonists/changeling/powers/transform.dm
+++ b/code/modules/antagonists/changeling/powers/transform.dm
@@ -117,8 +117,7 @@
. = ..()
if(hud_icon)
var/image/holder = user.hud_list[ID_HUD]
- var/icon/I = icon(user.icon, user.icon_state, user.dir)
- holder.pixel_y = I.Height() - world.icon_size
+ holder.pixel_y = user.get_cached_height() - world.icon_size
holder.icon_state = hud_icon
/**
diff --git a/code/modules/antagonists/clown_ops/clownop.dm b/code/modules/antagonists/clown_ops/clownop.dm
index 5353875491e4..79d64bb47007 100644
--- a/code/modules/antagonists/clown_ops/clownop.dm
+++ b/code/modules/antagonists/clown_ops/clownop.dm
@@ -16,14 +16,12 @@
message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].")
log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].")
-/datum/antagonist/nukeop/clownop/apply_innate_effects(mob/living/mob_override)
+/datum/antagonist/nukeop/clownop/on_gain()
. = ..()
- var/mob/living/L = owner.current || mob_override
- ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
+ ADD_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT)
-/datum/antagonist/nukeop/clownop/remove_innate_effects(mob/living/mob_override)
- var/mob/living/L = owner.current || mob_override
- REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
+/datum/antagonist/nukeop/clownop/on_removal()
+ REMOVE_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT)
return ..()
/datum/antagonist/nukeop/clownop/equip_op()
@@ -48,14 +46,12 @@
challengeitem = /obj/item/nuclear_challenge/clownops
suicide_cry = "HAPPY BIRTHDAY!!"
-/datum/antagonist/nukeop/leader/clownop/apply_innate_effects(mob/living/mob_override)
+/datum/antagonist/nukeop/leader/clownop/on_gain()
. = ..()
- var/mob/living/L = owner.current || mob_override
- ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
+ ADD_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT)
-/datum/antagonist/nukeop/leader/clownop/remove_innate_effects(mob/living/mob_override)
- var/mob/living/L = owner.current || mob_override
- REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT)
+/datum/antagonist/nukeop/leader/clownop/on_removal()
+ REMOVE_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT)
return ..()
/datum/antagonist/nukeop/leader/clownop/equip_op()
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index 2c3248a0445a..518a1cd28e18 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -77,21 +77,21 @@
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
/datum/antagonist/ert/security/red
- outfit = /datum/outfit/centcom/ert/security/alert
+ outfit = /datum/outfit/centcom/ert/security/red
/datum/antagonist/ert/engineer
role = "Engineer"
outfit = /datum/outfit/centcom/ert/engineer
/datum/antagonist/ert/engineer/red
- outfit = /datum/outfit/centcom/ert/engineer/alert
+ outfit = /datum/outfit/centcom/ert/engineer/red
/datum/antagonist/ert/medic
role = "Medical Officer"
outfit = /datum/outfit/centcom/ert/medic
/datum/antagonist/ert/medic/red
- outfit = /datum/outfit/centcom/ert/medic/alert
+ outfit = /datum/outfit/centcom/ert/medic/red
/datum/antagonist/ert/commander
role = "Commander"
@@ -99,7 +99,7 @@
plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander
/datum/antagonist/ert/commander/red
- outfit = /datum/outfit/centcom/ert/commander/alert
+ outfit = /datum/outfit/centcom/ert/commander/red
/datum/antagonist/ert/janitor
role = "Janitor"
diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm
index 6bab5ebb6fc6..f4218b9b1e88 100644
--- a/code/modules/antagonists/heretic/heretic_antag.dm
+++ b/code/modules/antagonists/heretic/heretic_antag.dm
@@ -7,6 +7,8 @@
* Used in creating spooky-text for heretic ascension announcements.
*/
/proc/generate_heretic_text(length = 25)
+ if(!isnum(length)) // stupid thing so we can use this directly in replacetext
+ length = 25
. = ""
for(var/i in 1 to length)
. += pick("!", "$", "^", "@", "&", "#", "*", "(", ")", "?")
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index 19098b052105..dc942ee81e1c 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -690,6 +690,14 @@
cost = 2
priority = MAX_KNOWLEDGE_PRIORITY + 1 // Yes, the final ritual should be ABOVE the max priority.
required_atoms = list(/mob/living/carbon/human = 3)
+ /// The typepath of the achievement to grant upon successful ascension.
+ var/datum/award/achievement/misc/ascension_achievement
+ /// The text of the ascension announcement.
+ /// %NAME% is replaced with the heretic's real name,
+ /// and %SPOOKY% is replaced with output from [generate_heretic_text]
+ var/announcement_text
+ /// The sound that's played for the ascension announcement.
+ var/announcement_sound
/datum/heretic_knowledge/ultimate/on_research(mob/user, datum/antagonist/heretic/our_heretic)
. = ..()
@@ -752,6 +760,15 @@
header = "A Heretic is Ascending!",
notify_flags = NOTIFY_CATEGORY_DEFAULT,
)
+ priority_announce(
+ text = replacetext(replacetext(announcement_text, "%NAME%", user.real_name), "%SPOOKY%", GLOBAL_PROC_REF(generate_heretic_text)),
+ title = generate_heretic_text(),
+ sound = announcement_sound,
+ color_override = "pink",
+ )
+
+ if(!isnull(ascension_achievement))
+ user.client?.give_award(ascension_achievement, user)
return TRUE
/datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms)
diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
index 185bb382eb85..01ebcc0cd0ed 100644
--- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
@@ -188,6 +188,9 @@
for the Nightwatcher brought forth the rite to mankind! His gaze continues, as now I am one with the flames, \
WITNESS MY ASCENSION, THE ASHY LANTERN BLAZES ONCE MORE!"
route = PATH_ASH
+ ascension_achievement = /datum/award/achievement/misc/ash_ascension
+ announcement_text = "%SPOOKY% Fear the blaze, for the Ashlord, %NAME% has ascended! The flames shall consume all! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_ash.ogg'
/// A static list of all traits we apply on ascension.
var/static/list/traits_to_apply = list(
TRAIT_BOMBIMMUNE,
@@ -212,13 +215,6 @@
/datum/heretic_knowledge/ultimate/ash_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_ash.ogg',
- color_override = "pink",
- )
-
var/datum/action/cooldown/spell/fire_sworn/circle_spell = new(user.mind)
circle_spell.Grant(user)
@@ -234,6 +230,4 @@
var/datum/action/cooldown/spell/aoe/fiery_rebirth/fiery_rebirth = locate() in user.actions
fiery_rebirth?.cooldown_time *= 0.16
- user.client?.give_award(/datum/award/achievement/misc/ash_ascension, user)
- if(length(traits_to_apply))
- user.add_traits(traits_to_apply, MAGIC_TRAIT)
+ user.add_traits(traits_to_apply, type)
diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm
index 1c800944ce54..9c9d924fb54e 100644
--- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm
@@ -397,6 +397,9 @@
gain_text = "The Torn Champion is freed! I will become the blade reunited, and with my greater ambition, \
I AM UNMATCHED! A STORM OF STEEL AND SILVER IS UPON US! WITNESS MY ASCENSION!"
route = PATH_BLADE
+ ascension_achievement = /datum/award/achievement/misc/blade_ascension
+ announcement_text = "%SPOOKY% Master of blades, the Torn Champion's disciple, %NAME% has ascended! Their steel is that which will cut reality in a maelstom of silver! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_blade.ogg'
/datum/heretic_knowledge/ultimate/blade_final/is_valid_sacrifice(mob/living/carbon/human/sacrifice)
. = ..()
@@ -407,14 +410,7 @@
/datum/heretic_knowledge/ultimate/blade_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_blade.ogg',
- color_override = "pink",
- )
- user.client?.give_award(/datum/award/achievement/misc/blade_ascension, user)
- user.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_NEVER_WOUNDED), name)
+ user.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_NEVER_WOUNDED), type)
RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade))
user.apply_status_effect(/datum/status_effect/protective_blades/recharging, null, 8, 30, 0.25 SECONDS, 1 MINUTES)
@@ -442,3 +438,8 @@
if(target.stat != DEAD)
// And! Get some free healing for a portion of the bonus damage dealt.
source.heal_overall_damage(bonus_damage / 2, bonus_damage / 2)
+ // monkestation start: heal pain on lifesteal too
+ source.cause_pain(BODY_ZONES_ALL, -(bonus_damage / 2), BRUTE)
+ source.cause_pain(BODY_ZONES_ALL, -(bonus_damage / 2), BURN)
+ source.adjust_pain_shock(-bonus_damage)
+ // monkestation end
diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm
index a1e8c381ce78..58decbe606ff 100644
--- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm
@@ -234,6 +234,9 @@
I closed my eyes with my head laid against their form. I was safe. \
WITNESS MY ASCENSION!"
route = PATH_COSMIC
+ ascension_achievement = /datum/award/achievement/misc/cosmic_ascension
+ announcement_text = "%SPOOKY% A Star Gazer has arrived into the station, %NAME% has ascended! This station is the domain of the Cosmos! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg'
/// A static list of command we can use with our mob.
var/static/list/star_gazer_commands = list(
/datum/pet_command/idle,
@@ -252,12 +255,6 @@
/datum/heretic_knowledge/ultimate/cosmic_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg',
- color_override = "pink",
- )
var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc)
star_gazer_mob.maxHealth = INFINITY
star_gazer_mob.health = INFINITY
diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
index bc88fa654bdd..03fe70fb9908 100644
--- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
@@ -308,21 +308,15 @@
Reality will bend to THE LORD OF THE NIGHT or be unraveled! WITNESS MY ASCENSION!"
required_atoms = list(/mob/living/carbon/human = 4)
route = PATH_FLESH
+ ascension_achievement = /datum/award/achievement/misc/flesh_ascension
+ announcement_text = "%SPOOKY% Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, %NAME% has ascended! Fear the ever twisting hand! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg'
/datum/heretic_knowledge/ultimate/flesh_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg',
- color_override = "pink",
- )
-
var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind)
worm_spell.Grant(user)
- user.client?.give_award(/datum/award/achievement/misc/flesh_ascension, user)
-
var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
var/datum/heretic_knowledge/limited_amount/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_grasp)
grasp_ghoul.limit *= 3
diff --git a/code/modules/antagonists/heretic/knowledge/knock_lore.dm b/code/modules/antagonists/heretic/knowledge/knock_lore.dm
index 16425bf3a15f..ec75455bfd48 100644
--- a/code/modules/antagonists/heretic/knowledge/knock_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/knock_lore.dm
@@ -197,6 +197,8 @@
Reality will soon be torn, the Spider Gate opened! WITNESS ME!"
required_atoms = list(/mob/living/carbon/human = 3)
route = PATH_KNOCK
+ announcement_text = "Delta-class dimensional anomaly detec%SPOOKY% Reality rended, torn. Gates open, doors open, %NAME% has ascended! Fear the tide! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_knock.ogg'
/datum/heretic_knowledge/ultimate/knock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc)
. = ..()
@@ -220,14 +222,6 @@
/datum/heretic_knowledge/ultimate/knock_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_knock.ogg',
- color_override = "pink",
- )
- user.client?.give_award(/datum/award/achievement/misc/knock_ascension, user)
-
// buffs
var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind)
transform_spell.Grant(user)
diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
index b3392810bf0e..c76dc4cf4f84 100644
--- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
@@ -190,6 +190,10 @@
for where the Ringleader had started the parade, I shall continue it unto the suns demise \
WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!"
route = PATH_MOON
+ ascension_achievement = /datum/award/achievement/misc/moon_ascension
+ announcement_text = "%SPOOKY% Laugh, for the ringleader %NAME% has ascended! \
+ The truth shall finally devour the lie! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_moon.ogg'
/datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice)
@@ -202,17 +206,7 @@
/datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \
- The truth shall finally devour the lie! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_moon.ogg',
- color_override = "pink",
- )
-
- user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user)
- ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src))
-
+ ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, type)
RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
var/amount_of_lunatics = 0
diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
index dbe9e4d77178..61828cf612aa 100644
--- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
@@ -111,9 +111,8 @@
var/turf/mover_turf = get_turf(source)
if(HAS_TRAIT(mover_turf, TRAIT_RUSTY))
ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
- return
-
- REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
+ else
+ REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
/**
* Signal proc for [COMSIG_LIVING_LIFE].
@@ -129,16 +128,20 @@
return
// Heals all damage + Stamina
- source.adjustBruteLoss(-2, FALSE)
- source.adjustFireLoss(-2, FALSE)
- source.adjustToxLoss(-2, FALSE, forced = TRUE) // Slimes are people to
- source.adjustOxyLoss(-0.5, FALSE)
- source.stamina.adjust(2)
+ var/delta_time = DELTA_WORLD_TIME(SSmobs)
+ var/needs_update = FALSE // Optimization, if nothing changes then don't update our owner's health.
+ needs_update += source.adjustBruteLoss(-2 * delta_time, updating_health = FALSE)
+ needs_update += source.adjustFireLoss(-2 * delta_time, updating_health = FALSE)
+ needs_update += source.adjustToxLoss(-2 * delta_time, updating_health = FALSE, forced = TRUE) // Slimes are people too
+ needs_update += source.adjustOxyLoss(-0.5 * delta_time, updating_health = FALSE)
+ if(needs_update)
+ source.updatehealth()
+ source.stamina.adjust(2 * delta_time)
// Reduces duration of stuns/etc
- source.AdjustAllImmobility(-0.5 SECONDS)
+ source.AdjustAllImmobility(-0.5 SECONDS * delta_time)
// Heals blood loss
if(source.blood_volume < BLOOD_VOLUME_NORMAL)
- source.blood_volume += 2.5 * seconds_per_tick
+ source.blood_volume += 2.5 * delta_time
/datum/heretic_knowledge/mark/rust_mark
name = "Mark of Rust"
@@ -222,6 +225,9 @@
gain_text = "Champion of rust. Corruptor of steel. Fear the dark, for the RUSTBRINGER has come! \
The Blacksmith forges ahead! Rusted Hills, CALL MY NAME! WITNESS MY ASCENSION!"
route = PATH_RUST
+ ascension_achievement = /datum/award/achievement/misc/rust_ascension
+ announcement_text = "%SPOOKY% Fear the decay, for the Rustbringer, %NAME% has ascended! None shall escape the corrosion! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_rust.ogg'
/// If TRUE, then immunities are currently active.
var/immunities_active = FALSE
/// A typepath to an area that we must finish the ritual in.
@@ -241,6 +247,12 @@
TRAIT_SHOCKIMMUNE,
TRAIT_SLEEPIMMUNE,
TRAIT_STUNIMMUNE,
+ // monkestation addition: pain system
+ TRAIT_ABATES_SHOCK,
+ TRAIT_ANALGESIA,
+ TRAIT_NO_PAIN_EFFECTS,
+ TRAIT_NO_SHOCK_BUILDUP,
+ // monkestation end
)
/datum/heretic_knowledge/ultimate/rust_final/on_research(mob/user, datum/antagonist/heretic/our_heretic)
@@ -261,12 +273,6 @@
/datum/heretic_knowledge/ultimate/rust_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_rust.ogg',
- color_override = "pink",
- )
new /datum/rust_spread(loc)
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
@@ -305,11 +311,15 @@
if(!HAS_TRAIT(our_turf, TRAIT_RUSTY))
return
- source.adjustBruteLoss(-4, FALSE)
- source.adjustFireLoss(-4, FALSE)
- source.adjustToxLoss(-4, FALSE, forced = TRUE)
- source.adjustOxyLoss(-4, FALSE)
- source.stamina.adjust(20)
+ var/delta_time = DELTA_WORLD_TIME(SSmobs)
+ var/needs_update = FALSE
+ needs_update += source.adjustBruteLoss(-4 * delta_time, updating_health = FALSE)
+ needs_update += source.adjustFireLoss(-4 * delta_time, updating_health = FALSE)
+ needs_update += source.adjustToxLoss(-4 * delta_time, updating_health = FALSE, forced = TRUE)
+ needs_update += source.adjustOxyLoss(-4 * delta_time, updating_health = FALSE)
+ if(needs_update)
+ source.updatehealth()
+ source.stamina.adjust(20 * delta_time)
/**
* #Rust spread datum
diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm
index f4aebf1a0c76..ca4033931c12 100644
--- a/code/modules/antagonists/heretic/knowledge/void_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm
@@ -183,6 +183,9 @@
The Aristocrat stands before me, beckoning. We will play a waltz to the whispers of dying reality, \
as the world is destroyed before our eyes. The void will return all to nothing, WITNESS MY ASCENSION!"
route = PATH_VOID
+ ascension_achievement = /datum/award/achievement/misc/void_ascension
+ announcement_text = "%SPOOKY% The nobleman of void %NAME% has arrived, stepping along the Waltz that ends worlds! %SPOOKY%"
+ announcement_sound = 'sound/ambience/antag/heretic/ascend_void.ogg'
///soundloop for the void theme
var/datum/looping_sound/void_loop/sound_loop
///Reference to the ongoing voidstrom that surrounds the heretic
@@ -202,14 +205,7 @@
/datum/heretic_knowledge/ultimate/void_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- priority_announce(
- text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]",
- title = "[generate_heretic_text()]",
- sound = 'sound/ambience/antag/heretic/ascend_void.ogg',
- color_override = "pink",
- )
- user.client?.give_award(/datum/award/achievement/misc/void_ascension, user)
- ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT)
+ ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, type)
// Let's get this show on the road!
sound_loop = new(user, TRUE, TRUE)
diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm
index 647841f6931c..d01a79cf9871 100644
--- a/code/modules/antagonists/nightmare/nightmare_species.dm
+++ b/code/modules/antagonists/nightmare/nightmare_species.dm
@@ -24,7 +24,12 @@
TRAIT_NODISMEMBER,
TRAIT_NOHUNGER,
TRAIT_NOBLOOD,
- TRAIT_NO_PAIN_EFFECTS, // monkestation edit
+ // monkestation addition: pain system
+ TRAIT_ABATES_SHOCK,
+ TRAIT_ANALGESIA,
+ TRAIT_NO_PAIN_EFFECTS,
+ TRAIT_NO_SHOCK_BUILDUP,
+ // monkestation end
)
mutantheart = /obj/item/organ/internal/heart/nightmare
diff --git a/code/modules/bitrunning/designs.dm b/code/modules/bitrunning/designs.dm
index f20497c8dd46..bcf958ab63e6 100644
--- a/code/modules/bitrunning/designs.dm
+++ b/code/modules/bitrunning/designs.dm
@@ -75,6 +75,18 @@
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
+//MONKESTATION ADDITION START
+/datum/design/board/bitrunning_order
+ name = "Bitrunning Vendor Console"
+ desc = "Allows for the construction of circuit boards used to build a Bitrunning Vendor Console."
+ id = "bitrunning_order"
+ build_path = /obj/item/circuitboard/computer/order_console/bitrunning
+
+ category = list(
+ RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
+//MONKESTATION ADDITION END
/datum/techweb_node/bitrunning
id = "bitrunning"
@@ -85,5 +97,6 @@
"byteforge",
"quantum_console",
"netpod",
+ "bitrunning_order", //MONKESTATION ADDITION
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm
index 92ccafc40f89..b88a2bc37a36 100644
--- a/code/modules/cargo/bounty.dm
+++ b/code/modules/cargo/bounty.dm
@@ -44,8 +44,11 @@
switch(bounty_num)
if(CIV_JOB_BASIC)
chosen_type = pick(subtypesof(/datum/bounty/item/assistant))
- if(CIV_JOB_ROBO)
- chosen_type = pick(subtypesof(/datum/bounty/item/mech))
+ if(CIV_JOB_ROBO) //monkestation edit: bot bounties
+ if(prob(50))
+ chosen_type = pick(subtypesof(/datum/bounty/item/mech))
+ else
+ chosen_type = pick(subtypesof(/datum/bounty/item/bot))
if(CIV_JOB_CHEF)
chosen_type = pick(subtypesof(/datum/bounty/item/chef) + subtypesof(/datum/bounty/reagent/chef))
if(CIV_JOB_SEC)
@@ -67,6 +70,17 @@
chosen_type = pick(subtypesof(/datum/bounty/item/science))
else
chosen_type = pick(subtypesof(/datum/bounty/item/slime))
+ if(CIV_JOB_SCI_HEAD) //monkestation addition : RD bounties. 50% for science bounty, 50% for robo bounty.
+ if(prob(50))
+ if(prob(50))
+ chosen_type = pick(subtypesof(/datum/bounty/item/science))
+ else
+ chosen_type = pick(subtypesof(/datum/bounty/item/slime))
+ else
+ if(prob(50))
+ chosen_type = pick(subtypesof(/datum/bounty/item/mech))
+ else
+ chosen_type = pick(subtypesof(/datum/bounty/item/bot))
if(CIV_JOB_ENG)
chosen_type = pick(subtypesof(/datum/bounty/item/engineering))
if(CIV_JOB_MINE)
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index c5c22c997064..f5e75b2855df 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -226,6 +226,22 @@
crate_name = "energy gun crate"
crate_type = /obj/structure/closet/crate/secure/plasma
+/datum/supply_pack/security/armory/laser_carbine
+ name = "Laser Carbine Crate"
+ desc = "Contains three laser carbines, capable of rapidly firing weak lasers."
+ cost = CARGO_CRATE_VALUE * 9
+ contains = list(/obj/item/gun/energy/laser/carbine = 3)
+ crate_name = "laser carbine crate"
+ crate_type = /obj/structure/closet/crate/secure/plasma
+
+/datum/supply_pack/security/armory/disabler_smg
+ name = "Disabler SMG Crate"
+ desc = "Contains three disabler SMGs, capable of rapidly firing weak disabler beams."
+ cost = CARGO_CRATE_VALUE * 7
+ contains = list(/obj/item/gun/energy/disabler/smg = 3)
+ crate_name = "disabler smg crate"
+ crate_type = /obj/structure/closet/crate/secure/plasma
+
/datum/supply_pack/security/armory/exileimp
name = "Exile Implants Crate"
desc = "Contains five Exile implants."
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 4b59a2f8e738..7d726960b5be 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -275,9 +275,6 @@
/// Does this client have typing indicators enabled?
var/typing_indicators = FALSE
- /// used for rewarding players monkecoins at round end
- var/reward_this_person = 0
-
/// Does this client's mob need to rebuild its plane masters after login?
/// This is currently only used so a client can switch between 515 and 516 without breaking their rendering.
var/rebuild_plane_masters = FALSE
diff --git a/code/modules/client/player_details.dm b/code/modules/client/player_details.dm
index 658d6f578887..8187dc723e3c 100644
--- a/code/modules/client/player_details.dm
+++ b/code/modules/client/player_details.dm
@@ -27,6 +27,12 @@ GLOBAL_LIST_EMPTY_TYPED(player_details, /datum/player_details)
src.ckey = ckey(player_key)
achievements = new(src.ckey)
+/datum/player_details/Destroy(force)
+ if(!force)
+ stack_trace("Something is trying to delete player details for [ckey]")
+ return QDEL_HINT_LETMELIVE
+ return ..()
+
/// Returns the full version string (i.e 515.1642) of the BYOND version and build.
/datum/player_details/proc/full_byond_version()
if(!byond_version)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 9df9c53233b6..679c04335989 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -576,6 +576,9 @@
acid = 50
// MONKESTATION ADDITION START
+/obj/item/clothing/gloves/chameleon
+ clothing_traits = list(TRAIT_CAN_SIGN_ON_COMMS)
+
/obj/item/clothing/gloves/chameleon/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour != TOOL_MULTITOOL)
return ..()
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index 73e6af9a90a3..9fca789ebd65 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -50,7 +50,7 @@
l_pocket = /obj/item/switchblade
additional_radio = /obj/item/encryptionkey/heads/captain
-/datum/outfit/centcom/ert/commander/alert
+/datum/outfit/centcom/ert/commander/red
name = "ERT Commander - High Alert"
backpack_contents = list(
@@ -76,7 +76,7 @@
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
additional_radio = /obj/item/encryptionkey/heads/hos
-/datum/outfit/centcom/ert/security/alert
+/datum/outfit/centcom/ert/security/red
name = "ERT Security - High Alert"
l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin
@@ -104,7 +104,7 @@
l_pocket = /obj/item/healthanalyzer/advanced
additional_radio = /obj/item/encryptionkey/heads/cmo
-/datum/outfit/centcom/ert/medic/alert
+/datum/outfit/centcom/ert/medic/red
name = "ERT Medic - High Alert"
backpack_contents = list(
@@ -133,7 +133,7 @@
l_pocket = /obj/item/rcd_ammo/large
additional_radio = /obj/item/encryptionkey/heads/ce
-/datum/outfit/centcom/ert/engineer/alert
+/datum/outfit/centcom/ert/engineer/red
name = "ERT Engineer - High Alert"
backpack_contents = list(
@@ -283,7 +283,7 @@
..()
if(visualsOnly)
return
- ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT)
+ ADD_TRAIT(H.mind, TRAIT_NAIVE, INNATE_TRAIT)
H.dna.add_mutation(/datum/mutation/human/clumsy)
for(var/datum/mutation/human/clumsy/M in H.dna.mutations)
M.mutadone_proof = TRUE
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 709bbb594f97..ed75f2d2769f 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -493,6 +493,7 @@
max_integrity = 200
resistance_flags = FLAMMABLE
armor_type = /datum/armor/vest_durathread
+ body_parts_covered = CHEST|ARMS //Monke: Durathread covers arms.
dog_fashion = null
/datum/armor/vest_durathread
diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm
index 7d1f5f52e462..66b768ee9cdf 100644
--- a/code/modules/clothing/suits/costume.dm
+++ b/code/modules/clothing/suits/costume.dm
@@ -27,7 +27,7 @@
icon_state = "pirate"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|ARMS
- allowed = list(/obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/cup/glass/bottle/rum)
+ allowed = list(/obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/cup/glass/bottle/rum, /obj/item/gun/energy/laser/musket, /obj/item/gun/energy/disabler/smoothbore)
species_exception = list(/datum/species/golem)
/obj/item/clothing/suit/costume/pirate/armored
diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm
index 4b8db2052995..deeb3d290c09 100644
--- a/code/modules/clothing/suits/jacket.dm
+++ b/code/modules/clothing/suits/jacket.dm
@@ -62,7 +62,7 @@
inhand_icon_state = "hostrench"
resistance_flags = NONE
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/radio)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio)
species_exception = list(/datum/species/golem/bone) //bad to the bone
/obj/item/clothing/suit/jacket/leather/biker
@@ -98,7 +98,7 @@
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable."
icon_state = "militaryjacket"
inhand_icon_state = null
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio) //monkestation edit
/obj/item/clothing/suit/jacket/letterman
name = "letterman jacket"
@@ -119,6 +119,7 @@
desc = "Oddly, this jacket seems to have a large S on the back..."
icon_state = "letterman_s"
inhand_icon_state = null
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio) //monkestation edit
species_exception = list(/datum/species/golem)
/obj/item/clothing/suit/jacket/letterman_nanotrasen
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index cf7aed8ec995..cb7a3dc7947c 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -161,8 +161,11 @@
/obj/item/tank/internals/emergency_oxygen,
/obj/item/tank/internals/plasmaman,
/obj/item/t_scanner,
+ /obj/item/gun/ballistic/rifle/boltaction/pipegun,
/obj/item/gun/ballistic/rifle/boltaction/pipegun/prime,
/obj/item/tank/internals/oxygen, //monkestation edit
+ /obj/item/storage/bag/rebar_quiver,
+ /obj/item/gun/ballistic/rifle/rebarxbow,
)
resistance_flags = NONE
species_exception = list(/datum/species/golem)
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 51a85dbac59d..1388818efbf0 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -469,6 +469,10 @@
/obj/item/pipe_dispenser,
/obj/item/storage/bag/construction,
/obj/item/t_scanner,
+ /obj/item/construction/rld,
+ /obj/item/construction/rtd,
+ /obj/item/gun/ballistic/rifle/rebarxbow,
+ /obj/item/storage/bag/rebar_quiver,
)
armor_type = /datum/armor/wintercoat_engineering
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm
index 2ed48e066dde..967f95abd70d 100644
--- a/code/modules/clothing/under/jobs/centcom.dm
+++ b/code/modules/clothing/under/jobs/centcom.dm
@@ -61,6 +61,7 @@
icon_state = "military"
inhand_icon_state = "bl_suit"
armor_type = /datum/armor/centcom_military
+ can_adjust = FALSE //monkestation edit
/datum/armor/centcom_military
melee = 10
diff --git a/code/modules/events/wizard/blobies.dm b/code/modules/events/wizard/blobies.dm
index 0a9c96d51354..5d9045fea067 100644
--- a/code/modules/events/wizard/blobies.dm
+++ b/code/modules/events/wizard/blobies.dm
@@ -4,10 +4,12 @@
typepath = /datum/round_event/wizard/blobies
max_occurrences = 3
description = "Spawns a blob spore on every corpse."
- min_wizard_trigger_potency = 3
+//monkestation edit start
+ min_wizard_trigger_potency = 5
max_wizard_trigger_potency = 7
/datum/round_event/wizard/blobies/start()
-
for(var/mob/living/carbon/human/H in GLOB.dead_mob_list)
- new /mob/living/basic/blob_minion/spore/minion(H.loc) // Creates zombies which ghosts can control
+ if(is_station_level(H.loc))
+ new /mob/living/basic/blob_minion/spore/minion(H.loc) // Creates zombies which ghosts can control
+//monkestation edit end
diff --git a/code/modules/events/wizard/tower_of_babel.dm b/code/modules/events/wizard/tower_of_babel.dm
index 316d7520e8e5..31742cec7ae9 100644
--- a/code/modules/events/wizard/tower_of_babel.dm
+++ b/code/modules/events/wizard/tower_of_babel.dm
@@ -1,3 +1,4 @@
+/* monkestation removal. if you REALLY want to do this for some reason, call the proc yourself.
/datum/round_event_control/wizard/tower_of_babel
name = "Tower of Babel"
weight = 3
@@ -10,4 +11,4 @@
/datum/round_event/wizard/tower_of_babel/start()
GLOB.tower_of_babel = new /datum/tower_of_babel()
-
+monkestation end */
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 6f8273f8ce3e..ea1426515a5d 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -693,7 +693,7 @@
/datum/holiday/xmas
name = CHRISTMAS
- begin_day = 23
+ begin_day = 8 // monkestation edit
begin_month = DECEMBER
end_day = 27
holiday_hat = /obj/item/clothing/head/costume/santa
@@ -816,7 +816,8 @@
list(
/obj/item/toy/xmas_cracker = 3,
/obj/item/clothing/head/costume/santa = 1,
- /obj/item/a_gift/anything = 1
+ /obj/item/a_gift/anything = 1,
+ /obj/item/a_gift = 4
) = maint_holiday_weight,
)
diff --git a/code/modules/jobs/job_types/ert/ert_generic.dm b/code/modules/jobs/job_types/ert/ert_generic.dm
index 4758ac75b285..87af77b3198a 100644
--- a/code/modules/jobs/job_types/ert/ert_generic.dm
+++ b/code/modules/jobs/job_types/ert/ert_generic.dm
@@ -1,2 +1,38 @@
/datum/job/ert_generic
- title = "ERT Generic"
+ title = "Emergency Response Officer" //monkestation edit
+
+//MONKESTATION EDIT START
+/datum/job/ert/generic
+ title = "Emergency Response Officer"
+ liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM)
+
+/datum/job/ert/commander
+ title = JOB_ERT_COMMANDER
+ liver_traits = list(TRAIT_ROYAL_METABOLISM)
+
+/datum/job/ert/security
+ title = JOB_ERT_OFFICER
+ liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+
+/datum/job/ert/medical
+ title = JOB_ERT_MEDICAL_DOCTOR
+ liver_traits = list(TRAIT_MEDICAL_METABOLISM)
+
+/datum/job/ert/engineer
+ title = JOB_ERT_ENGINEER
+ liver_traits = list(TRAIT_ENGINEER_METABOLISM)
+
+/datum/job/ert/janitor
+ title = JOB_ERT_JANITOR
+
+/datum/job/ert/chaplain
+ title = JOB_ERT_CHAPLAIN
+
+/datum/job/ert/clown
+ title = JOB_ERT_CLOWN
+ liver_traits = list(TRAIT_COMEDY_METABOLISM)
+
+/datum/job/ert/deathsquad
+ title = JOB_ERT_DEATHSQUAD
+ liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) //from humble beginnings sipping quadsec and harm batoning clowns
+
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
index b8ba0f237606..8e15aa246a4e 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -31,7 +31,7 @@
liver_traits = list(TRAIT_ROYAL_METABOLISM, TRAIT_BALLMER_SCIENTIST)
display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR
- bounty_types = CIV_JOB_SCI
+ bounty_types = CIV_JOB_SCI_HEAD
mail_goodies = list(
/obj/item/storage/box/monkeycubes = 30,
diff --git a/code/modules/language/language_manuals.dm b/code/modules/language/language_manuals.dm
index 15fff94b251f..a0158606393c 100644
--- a/code/modules/language/language_manuals.dm
+++ b/code/modules/language/language_manuals.dm
@@ -20,7 +20,7 @@
user.grant_language(language)
user.remove_blocked_language(language, source=LANGUAGE_ALL)
- ADD_TRAIT(user, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects
+ ADD_TRAIT(user.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects
use_charge(user)
diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm
index 25ffbab8dd85..6fc6640fe077 100644
--- a/code/modules/mapping/access_helpers.dm
+++ b/code/modules/mapping/access_helpers.dm
@@ -502,6 +502,11 @@
access_list += list(ACCESS_CENT_CAPTAIN)
return access_list
+/obj/effect/mapping_helpers/airlock/access/any/admin/specops/get_access()
+ var/list/access_list = ..()
+ access_list += list(ACCESS_CENT_SPECOPS)
+ return access_list
+
/obj/effect/mapping_helpers/airlock/access/any/admin/bar/get_access()
var/list/access_list = ..()
access_list += list(ACCESS_CENT_CAPTAIN)
diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm
index dab230b26d2d..a67a9fb483cf 100644
--- a/code/modules/mining/lavaland/tendril_loot.dm
+++ b/code/modules/mining/lavaland/tendril_loot.dm
@@ -508,7 +508,7 @@
cure_curse_of_babel(user) // removes tower of babel if we have it
user.grant_all_languages(source=LANGUAGE_BABEL)
user.remove_blocked_language(GLOB.all_languages, source = LANGUAGE_ALL)
- ADD_TRAIT(user, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects
+ ADD_TRAIT(user.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects
new /obj/effect/decal/cleanable/ash(get_turf(user))
qdel(src)
diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm
index c6831a2fa638..fe7081d07548 100644
--- a/code/modules/mob/dead/new_player/latejoin_menu.dm
+++ b/code/modules/mob/dead/new_player/latejoin_menu.dm
@@ -117,7 +117,7 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new)
/datum/latejoin_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
- if(!ui.user.client || ui.user.client.interviewee || !isnewplayer(ui.user))
+ if(!ui.user.client || should_be_interviewing(ui.user) || !isnewplayer(ui.user))
return TRUE
var/mob/dead/new_player/owner = ui.user
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 6286383fa318..6fb429925942 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -67,6 +67,10 @@
ready = PLAYER_NOT_READY
return FALSE
+ if(interview_safety(src, "attempting to observe"))
+ qdel(client)
+ return FALSE
+
var/less_input_message
if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP])
less_input_message = " - Notice: Observer freelook is currently disabled."
@@ -143,6 +147,10 @@
return JOB_AVAILABLE
/mob/dead/new_player/proc/AttemptLateSpawn(rank)
+ if(interview_safety(src, "attempting to latejoin"))
+ qdel(client)
+ return FALSE
+
var/error = IsJobUnavailable(rank)
if(error != JOB_AVAILABLE)
tgui_alert(usr, get_job_unavailable_error_message(error, rank))
@@ -189,14 +197,15 @@
SSjob.EquipRank(character, job, character.client)
job.after_latejoin_spawn(character)
- if(character.client && length(character.client?.active_challenges))
- SSchallenges.apply_challenges(character.client)
- for(var/processing_reward_bitflags in SSticker.bitflags_to_reward)//you really should use department bitflags if possible
- if(character.mind.assigned_role.departments_bitflags & processing_reward_bitflags)
- character.client.reward_this_person += 425
- for(var/processing_reward_jobs in SSticker.jobs_to_reward)//just in case you really only want to reward a specific job
- if(character.job == processing_reward_jobs)
- character.client.reward_this_person += 425
+ var/datum/player_details/details = get_player_details(character)
+ if(details)
+ SSchallenges.apply_challenges(details)
+ for(var/processing_reward_bitflags in SSticker.bitflags_to_reward)//you really should use department bitflags if possible
+ if(character.mind.assigned_role.departments_bitflags & processing_reward_bitflags)
+ details.roundend_monkecoin_bonus += 425
+ for(var/processing_reward_jobs in SSticker.jobs_to_reward)//just in case you really only want to reward a specific job
+ if(character.job == processing_reward_jobs)
+ details.roundend_monkecoin_bonus += 425
#define IS_NOT_CAPTAIN 0
#define IS_ACTING_CAPTAIN 1
#define IS_FULL_CAPTAIN 2
diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm
index d5f2ab6b5db0..606f2187094f 100644
--- a/code/modules/mob/dead/observer/login.dm
+++ b/code/modules/mob/dead/observer/login.dm
@@ -1,4 +1,7 @@
/mob/dead/observer/Login()
+ if(interview_safety(src, "observing"))
+ qdel(client)
+ return FALSE
. = ..()
if(!. || !client)
return FALSE
diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm
index e5092601c294..dbed737bdf4b 100644
--- a/code/modules/mob/living/basic/basic.dm
+++ b/code/modules/mob/living/basic/basic.dm
@@ -234,7 +234,7 @@
. = ..()
if(stat != DEAD)
return
- . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be [HAS_TRAIT(user.mind, TRAIT_NAIVE) ? "asleep" : "dead"].")
+ . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "asleep" : "dead"].")
/mob/living/basic/proc/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE)
face_atom(target)
diff --git a/code/modules/mob/living/basic/bots/bot_hud.dm b/code/modules/mob/living/basic/bots/bot_hud.dm
index cbadab01360e..3bd24f9f1485 100644
--- a/code/modules/mob/living/basic/bots/bot_hud.dm
+++ b/code/modules/mob/living/basic/bots/bot_hud.dm
@@ -1,13 +1,11 @@
/mob/living/basic/bot/proc/diag_hud_set_bothealth()
var/image/holder = hud_list[DIAG_HUD]
- var/icon/icon_image = icon(icon, icon_state, dir)
- holder.pixel_y = icon_image.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
/mob/living/basic/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed
var/image/holder = hud_list[DIAG_STAT_HUD]
- var/icon/our_icon = icon(icon, icon_state, dir)
- holder.pixel_y = our_icon.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(bot_mode_flags & BOT_MODE_ON)
holder.icon_state = "hudstat"
return
@@ -18,8 +16,7 @@
/mob/living/basic/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation
var/image/holder = hud_list[DIAG_BOT_HUD]
- var/icon/icon_image = icon(icon, icon_state, dir)
- holder.pixel_y = icon_image.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(client) //If the bot is player controlled, it will not be following mode logic!
holder.icon_state = "hudsentient"
return
diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
index 2cdf99b9d2ed..b6f904a249c0 100644
--- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
+++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
@@ -99,6 +99,7 @@
///blood we can clean
var/static/list/cleanable_blood = typecacheof(list(
/obj/effect/decal/cleanable/blood,
+ /obj/effect/decal/cleanable/xenoblood, // monkestation addition
))
///pests we hunt
var/static/list/huntable_pests = typecacheof(list(
@@ -110,6 +111,11 @@
/obj/item/trash,
/obj/item/food/deadmouse,
/obj/effect/decal/remains,
+ //monkestation addition: start
+ /obj/item/cigbutt,
+ /obj/item/storage/box/foodpack,
+ /obj/item/ammo_casing,
+ //monkestation addition: end
))
///drawings we hunt
var/static/list/cleanable_drawings = typecacheof(list(/obj/effect/decal/cleanable/crayon))
diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm
index f42a439f1e15..d9ebbb8b1ca2 100644
--- a/code/modules/mob/living/basic/drone/_drone.dm
+++ b/code/modules/mob/living/basic/drone/_drone.dm
@@ -214,14 +214,12 @@
/mob/living/basic/drone/med_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
- var/icon/hud_icon = icon(icon, icon_state, dir)
- holder.pixel_y = hud_icon.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
/mob/living/basic/drone/med_hud_set_status()
var/image/holder = hud_list[DIAG_STAT_HUD]
- var/icon/hud_icon = icon(icon, icon_state, dir)
- holder.pixel_y = hud_icon.Height() - world.icon_size
+ holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD)
holder.icon_state = "huddead2"
else if(incapacitated())
diff --git a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm
index 65d16cfb490d..a4ea855ff410 100644
--- a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm
+++ b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm
@@ -9,7 +9,7 @@ GLOBAL_LIST_INIT(magicarp_spell_types, list(
/obj/projectile/magic/resurrection = "vital",
/obj/projectile/magic/spellblade = "vorpal",
/obj/projectile/magic/teleport = "warping",
- /obj/projectile/magic/babel = "babbling",
+ /* /obj/projectile/magic/babel = "babbling", [monkestation removal: staff of babel is admin-only now] */
))
/// A reduced list of spells for magicarp spawned in xenobiology, less disruptive
@@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list(
/obj/projectile/magic/resurrection = COLOR_CARP_PALE_GREEN,
/obj/projectile/magic/spellblade = COLOR_CARP_SILVER,
/obj/projectile/magic/teleport = COLOR_CARP_GRAPE,
- /obj/projectile/magic/babel = COLOR_CARP_BROWN,
+ /* /obj/projectile/magic/babel = COLOR_CARP_BROWN, [monkestation removal: staff of babel is admin-only now] */
))
/**
diff --git a/code/modules/mob/living/carbon/carbon_say.dm b/code/modules/mob/living/carbon/carbon_say.dm
index c84f83a30e5e..3e4c29fa0e83 100644
--- a/code/modules/mob/living/carbon/carbon_say.dm
+++ b/code/modules/mob/living/carbon/carbon_say.dm
@@ -10,6 +10,6 @@
var/obj/item/organ/internal/tongue/spoken_with = get_organ_slot(ORGAN_SLOT_TONGUE)
if(spoken_with)
// the tower of babel needs to bypass the tongue language restrictions without giving omnitongue
- return HAS_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path)
+ return HAS_MIND_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path)
return initial(language_path.flags) & TONGUELESS_SPEECH
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 9755634c3422..046837b18a9f 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -120,7 +120,7 @@
var/obj/item/clothing/glasses/G = get_item_by_slot(ITEM_SLOT_EYES)
var/are_we_in_weekend_at_bernies = G?.tint && buckled && istype(buckled, /obj/vehicle/ridden/wheelchair)
- if(isliving(user) && (HAS_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies))
+ if(isliving(user) && (HAS_MIND_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies))
just_sleeping = TRUE
if(!just_sleeping)
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 9b0fe7b38226..498f0171f5f1 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -24,7 +24,12 @@
TRAIT_RESISTHIGHPRESSURE,
TRAIT_RESISTLOWPRESSURE,
TRAIT_TOXIMMUNE,
+ // monkestation addition: pain system
+ TRAIT_ABATES_SHOCK,
+ TRAIT_ANALGESIA,
TRAIT_NO_PAIN_EFFECTS,
+ TRAIT_NO_SHOCK_BUILDUP,
+ // monkestation end
// HIGH FUNCTIONING UNIQUE
TRAIT_NOBLOOD,
TRAIT_SUCCUMB_OVERRIDE,
@@ -103,7 +108,12 @@
TRAIT_RESISTHIGHPRESSURE,
TRAIT_RESISTLOWPRESSURE,
TRAIT_TOXIMMUNE,
+ // monkestation addition: pain system
+ TRAIT_ABATES_SHOCK,
+ TRAIT_ANALGESIA,
TRAIT_NO_PAIN_EFFECTS,
+ TRAIT_NO_SHOCK_BUILDUP,
+ // monkestation end
// INFECTIOUS UNIQUE
TRAIT_STABLEHEART, // Replacement for noblood. Infectious zombies can bleed but don't need their heart.
TRAIT_STABLELIVER, // Not necessary but for consistency with above
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 2debc27d52f5..47d142a54871 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -257,6 +257,9 @@
return
var/kiss_type = /obj/item/hand_item/kisser
+ if(HAS_TRAIT(user, TRAIT_SYNDIE_KISS))
+ kiss_type = /obj/item/hand_item/kisser/syndie
+
if(HAS_TRAIT(user, TRAIT_KISS_OF_DEATH))
kiss_type = /obj/item/hand_item/kisser/death
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 52f2b9eba7f4..7eddf9ddce70 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -712,9 +712,7 @@
/// Returns what the body_position_pixel_y_offset should be if the current size were `value`
/mob/living/proc/get_pixel_y_offset_standing(value)
- var/icon/living_icon = icon(icon)
- var/height = living_icon.Height()
- return (value-1) * height * 0.5
+ return (value - 1) * get_cached_height() * 0.5
/mob/living/proc/update_density()
if(HAS_TRAIT(src, TRAIT_UNDENSE))
@@ -804,7 +802,7 @@
if(!livingdoll.filtered)
livingdoll.filtered = TRUE
var/icon/mob_mask = icon(icon, icon_state)
- if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size)
+ if(get_cached_height() > world.icon_size || get_cached_width() > world.icon_size)
var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite"
mob_mask = icon('icons/hud/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll
livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask))
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index 7025795385d9..f68d18969d10 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -28,6 +28,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
// Misc
RADIO_KEY_AI_PRIVATE = RADIO_CHANNEL_AI_PRIVATE, // AI Upload channel
+ RADIO_KEY_UNCOMMON = RADIO_CHANNEL_UNCOMMON,
//kinda localization -- rastaf0
@@ -56,7 +57,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
"в" = MODE_KEY_DEADMIN,
// Misc
- "щ" = RADIO_CHANNEL_AI_PRIVATE
+ "щ" = RADIO_CHANNEL_AI_PRIVATE,
+ "f" = RADIO_CHANNEL_UNCOMMON
))
/**
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index c6d6b6a5e9d7..fc64fee3ef00 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -3,6 +3,10 @@
if(!. || !client)
return FALSE
+ if(interview_safety(src, "client in living mob"))
+ qdel(client)
+ return FALSE
+
//Mind updates
sync_mind()
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index a3f79cf4f1df..879503f2b7b1 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -298,7 +298,8 @@
visible_message(span_boldnotice("[src] blows apart!"))
do_sparks(3, TRUE, src)
var/atom/location_destroyed = drop_location()
- if(prob(50))
+
+ if(prob(50) && (bot_type != HONK_BOT))
drop_part(robot_arm, location_destroyed)
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/feral.dm b/code/modules/mob/living/simple_animal/hostile/feral.dm
new file mode 100644
index 000000000000..307e31892fbe
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/feral.dm
@@ -0,0 +1,76 @@
+/mob/living/simple_animal/hostile/feral
+ name = "feral cat"
+ desc = "Kitty!! Wait, no no DON'T BITE-"
+ health = 30
+ maxHealth = 30
+ melee_damage_lower = 7
+ melee_damage_upper = 15
+ icon = 'icons/mob/simple/pets.dmi'
+ icon_state = "cat2"
+ icon_living = "cat2"
+ icon_dead = "cat2_dead"
+ held_state = "cat2"
+ speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
+ speak_emote = list("purrs", "meows")
+ emote_hear = list("meows.", "mews.")
+ emote_see = list("shakes their head.", "shivers.")
+ speak_chance = 1
+ turns_per_move = 5
+ mob_size = MOB_SIZE_SMALL
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ bodytemp_cold_damage_limit = 200
+ bodytemp_heat_damage_limit = 400
+ unsuitable_atmos_damage = 0.5
+ animal_species = /mob/living/simple_animal/pet/cat
+ butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1)
+ response_help_continuous = "pets"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "kicks"
+ response_harm_simple = "kick"
+ faction = list(FACTION_CAT, ROLE_SYNDICATE)
+ attack_verb_continuous = "claws"
+ attack_verb_simple = "claw"
+ attack_sound = 'sound/weapons/slash.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
+ footstep_type = FOOTSTEP_MOB_CLAW
+
+/mob/living/simple_animal/hostile/feraltabby
+ name = "feral cat"
+ desc = "Kitty!! Wait, no no DON'T BITE-"
+ health = 45
+ maxHealth = 45
+ melee_damage_lower = 10
+ melee_damage_upper = 20
+ icon = 'icons/mob/simple/pets.dmi'
+ icon_state = "cat"
+ icon_living = "cat"
+ icon_dead = "cat_dead"
+ held_state = "cat"
+ speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
+ speak_emote = list("purrs", "meows")
+ emote_hear = list("meows.", "mews.")
+ emote_see = list("shakes their head.", "shivers.")
+ speak_chance = 1
+ turns_per_move = 5
+ mob_size = MOB_SIZE_SMALL
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ bodytemp_cold_damage_limit = 200
+ bodytemp_heat_damage_limit = 400
+ unsuitable_atmos_damage = 0.5
+ animal_species = /mob/living/simple_animal/pet/cat
+ childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1)
+ butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1)
+ response_help_continuous = "pets"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "kicks"
+ response_harm_simple = "kick"
+ faction = list(FACTION_CAT, ROLE_SYNDICATE)
+ attack_verb_continuous = "claws"
+ attack_verb_simple = "claw"
+ attack_sound = 'sound/weapons/slash.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
+ footstep_type = FOOTSTEP_MOB_CLAW
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicat.dm b/code/modules/mob/living/simple_animal/hostile/syndicat.dm
new file mode 100644
index 000000000000..0f02bc3cd091
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/syndicat.dm
@@ -0,0 +1,46 @@
+/mob/living/simple_animal/hostile/syndicat
+ name = "Syndie Cat"
+ desc = "OH GOD! RUN!! IT CAN SMELL THE DISK!"
+ icon = 'icons/mob/simple/pets.dmi'
+ icon_state = "syndicat"
+ icon_living = "syndicat"
+ icon_dead = "syndicat_dead"
+ held_state = "syndicat"
+ speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
+ speak_emote = list("purrs", "meows")
+ emote_hear = list("meows.", "mews.")
+ emote_see = list("shakes their head.", "shivers.")
+ speak_chance = 1
+ turns_per_move = 5
+ mob_size = MOB_SIZE_SMALL
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ bodytemp_cold_damage_limit = TCMB
+ bodytemp_heat_damage_limit = T0C + 40
+ unsuitable_atmos_damage = 0
+ animal_species = /mob/living/simple_animal/pet/cat
+ childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1)
+ butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1)
+ response_help_continuous = "pets"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "kicks"
+ response_harm_simple = "kick"
+ health = 80
+ maxHealth = 80
+ melee_damage_lower = 20
+ melee_damage_upper = 35
+ faction = list(FACTION_CAT, ROLE_SYNDICATE)
+ can_be_held = TRUE
+ attack_verb_continuous = "claws"
+ attack_verb_simple = "claw"
+ attack_sound = 'sound/weapons/slash.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
+ footstep_type = FOOTSTEP_MOB_CLAW
+
+/mob/living/simple_animal/hostile/syndicat/Initialize(mapload)
+ . = ..()
+ var/obj/item/implant/toinstall = list(/obj/item/implant/weapons_auth, /obj/item/implant/explosive)
+ for(var/obj/item/implant/original_implants as anything in toinstall)
+ var/obj/item/implant/copied_implant = new original_implants.type
+ copied_implant.implant(src, silent = TRUE, force = TRUE)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 9ff9a0cf3def..76256c94d708 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -211,7 +211,7 @@
/mob/living/simple_animal/examine(mob/user)
. = ..()
if(stat == DEAD)
- if(HAS_TRAIT(user, TRAIT_NAIVE))
+ if(HAS_MIND_TRAIT(user, TRAIT_NAIVE))
. += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be asleep.")
else
. += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be dead.")
diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm
index 5381a26e88bd..39deff090871 100644
--- a/code/modules/mod/modules/modules_service.dm
+++ b/code/modules/mod/modules/modules_service.dm
@@ -80,3 +80,21 @@
mod.wearer.RemoveElement(/datum/element/waddling)
if(is_clown_job(mod.wearer.mind?.assigned_role))
mod.wearer.clear_mood_event("clownshoes")
+
+// recharging cleaner spray module
+/obj/item/mod/module/mister/cleaner
+ name = "MOD janitorial mister module"
+ desc = "An space cleaner mister, able to clean up messes quickly. Synthesizes its own supply over time (if active)."
+ device = /obj/item/reagent_containers/spray/mister/janitor
+ volume = 100
+ active_power_cost = DEFAULT_CHARGE_DRAIN
+
+/obj/item/mod/module/mister/cleaner/Initialize(mapload)
+ . = ..()
+ reagents.flags = AMOUNT_VISIBLE
+ reagents.add_reagent(/datum/reagent/space_cleaner, volume)
+
+/obj/item/mod/module/mister/cleaner/on_active_process(seconds_per_tick)
+ var/refill_add = min(volume - reagents.total_volume, 2 * seconds_per_tick)
+ if(refill_add > 0)
+ reagents.add_reagent(/datum/reagent/space_cleaner, refill_add)
diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm
index 873177819cbe..931bf1d2fdfc 100644
--- a/code/modules/plumbing/plumbers/pill_press.dm
+++ b/code/modules/plumbing/plumbers/pill_press.dm
@@ -1,7 +1,5 @@
///the minimum size of a pill or patch
#define MIN_VOLUME 5
-///the maximum size a pill or patch can be
-#define MAX_VOLUME 50
///max amount of pills allowed on our tile before we start storing them instead
#define MAX_FLOOR_PRODUCTS 10
@@ -12,16 +10,16 @@
icon_state = "pill_press"
///category for plumbing RCD
category="Storage"
- /// current operating product (pills or patches)
- var/product = "pill"
/// selected size of the product
var/current_volume = 10
+ /// maximum printable volume of the product
+ var/max_volume = 50
/// prefix for the product name
var/product_name = "factory"
/// All packaging types wrapped up in 1 big list
var/static/list/packaging_types = null
///The type of packaging to use
- var/packaging_type
+ var/obj/item/reagent_containers/packaging_type
///Category of packaging
var/packaging_category
/// list of products stored in the machine, so we dont have 610 pills on one tile
@@ -53,34 +51,28 @@
packaging_types += list(category_item)
- packaging_type = REF(GLOB.chem_master_containers[CAT_PILLS][1])
- decode_category()
+ packaging_type = GLOB.chem_master_containers[CAT_PILLS][1] //monkestation edit: reaplces GLOB.reagent_containers with GLOB.chem_master_containers
+ max_volume = initial(packaging_type.volume)
+ current_volume = clamp(current_volume, MIN_VOLUME, max_volume)
AddComponent(/datum/component/plumbing/simple_demand, bolt, layer)
+/obj/machinery/plumbing/pill_press/Destroy(force)
+ QDEL_LAZYLIST(stored_products)
+ return ..()
+
/obj/machinery/plumbing/pill_press/examine(mob/user)
. = ..()
. += span_notice("The [name] currently has [stored_products.len] stored. There needs to be less than [MAX_FLOOR_PRODUCTS] on the floor to continue dispensing.")
-/// decode product category from it's type path and returns the decoded typepath
-/obj/machinery/plumbing/pill_press/proc/decode_category()
- var/obj/item/reagent_containers/container = locate(packaging_type)
- if(ispath(container, /obj/item/reagent_containers/pill/patch))
- packaging_category = CAT_PATCHES
- else if(ispath(container, /obj/item/reagent_containers/pill))
- packaging_category = CAT_PILLS
- else
- packaging_category = CAT_TUBES
- return container
-
/obj/machinery/plumbing/pill_press/process(seconds_per_tick)
if(!is_operational)
return
//shift & check to account for floating point inaccuracies
if(reagents.total_volume >= current_volume)
- var/obj/item/reagent_containers/container = locate(packaging_type)
- container = new container(src)
+ var/obj/item/reagent_containers/container = new packaging_type(src)
+
var/suffix
switch(packaging_category)
if(CAT_PILLS)
@@ -122,7 +114,6 @@
var/list/data = list()
data["min_volume"] = MIN_VOLUME
- data["max_volume"] = MAX_VOLUME
data["packaging_types"] = packaging_types
return data
@@ -131,8 +122,9 @@
var/list/data = list()
data["current_volume"] = current_volume
+ data["max_volume"] = max_volume
data["product_name"] = product_name
- data["packaging_type"] = packaging_type
+ data["packaging_type"] = REF(packaging_type)
data["packaging_category"] = packaging_category
return data
@@ -142,21 +134,57 @@
if(.)
return
- . = TRUE
switch(action)
if("change_current_volume")
- current_volume = round(clamp(text2num(params["volume"]), MIN_VOLUME, MAX_VOLUME))
+ var/value = params["volume"]
+ if(isnull(value))
+ return FALSE
+
+ value = text2num(value)
+ if(isnull(value))
+ return FALSE
+
+ current_volume = clamp(value, MIN_VOLUME, max_volume)
+ return TRUE
+
if("change_product_name")
var/formatted_name = html_encode(params["name"])
if (length(formatted_name) > MAX_NAME_LEN)
product_name = copytext(formatted_name, 1, MAX_NAME_LEN + 1)
else
product_name = formatted_name
+ return TRUE
+
if("change_product")
- packaging_type = params["ref"]
- var/obj/item/reagent_containers/container = decode_category()
- current_volume = clamp(current_volume, MIN_VOLUME, initial(container.volume))
+ var/container = params["ref"]
+ if(!container)
+ return FALSE
+
+ //is a valid option
+ var/container_found = FALSE
+ for(var/list/category as anything in packaging_types)
+ if(container_found)
+ break
+ for(var/list/package_item as anything in category["products"])
+ if(container == package_item["ref"])
+ container_found = TRUE
+ break
+ if(!container_found)
+ return FALSE
+
+ //decode container & its category
+ packaging_type = locate(container)
+ if(ispath(packaging_type, /obj/item/reagent_containers/pill/patch))
+ packaging_category = CAT_PATCHES
+ else if(ispath(packaging_type, /obj/item/reagent_containers/pill))
+ packaging_category = CAT_PILLS
+ else
+ packaging_category = "Bottles"
+
+ //get new volumes
+ max_volume = initial(packaging_type.volume)
+ current_volume = clamp(current_volume, MIN_VOLUME, max_volume)
+ return TRUE
#undef MIN_VOLUME
-#undef MAX_VOLUME
#undef MAX_FLOOR_PRODUCTS
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 49bae89b563c..4eda376ffe69 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -276,7 +276,7 @@
///security level and shuttle lockdowns for [/proc/begin_the_end()]
/proc/narsie_start_destroy_station()
- SSsecurity_level.set_level(SEC_LEVEL_DELTA)
+ SSsecurity_level.set_level(SEC_LEVEL_LAMBDA)
SSshuttle.registerHostileEnvironment(GLOB.cult_narsie)
SSshuttle.lockdown = TRUE
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_apocalypse)), 1 MINUTES)
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
index 9d785ba091f2..eb897905f9d2 100644
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm
@@ -40,6 +40,69 @@
icon_state = "40mmHE"
projectile_type = /obj/projectile/bullet/a40mm
+/obj/item/ammo_casing/rebar
+ name = "Sharpened Iron Rod"
+ desc = "A Sharpened Iron rod. It's Pointy!"
+ caliber = CALIBER_REBAR
+ icon_state = "rod_sharp"
+ base_icon_state = "rod_sharp"
+ projectile_type = /obj/projectile/bullet/rebar
+
+/obj/item/ammo_casing/rebar/syndie
+ name = "Jagged Iron Rod"
+ desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you."
+ caliber = CALIBER_REBAR
+ icon_state = "rod_jagged"
+ base_icon_state = "rod_jagged"
+ projectile_type = /obj/projectile/bullet/rebar/syndie
+
+/obj/item/ammo_casing/rebar/zaukerite
+ name = "Zaukerite Sliver"
+ desc = "A sliver of a zaukerite crystal. Due to its irregular, jagged edges, removal of an embedded zaukerite sliver should only be done by trained surgeons."
+ caliber = CALIBER_REBAR
+ icon_state = "rod_zaukerite"
+ base_icon_state = "rod_zaukerite"
+ projectile_type = /obj/projectile/bullet/rebar/zaukerite
+
+/obj/item/ammo_casing/rebar/hydrogen
+ name = "Metallic Hydrogen Bolt"
+ desc = "An ultra-sharp rod made from pure metallic hydrogen. Armor may as well not exist."
+ caliber = CALIBER_REBAR
+ icon_state = "rod_hydrogen"
+ base_icon_state = "rod_hydrogen"
+ projectile_type = /obj/projectile/bullet/rebar/hydrogen
+
+/obj/item/ammo_casing/rebar/healium
+ name = "Healium Crystal Bolt"
+ desc = "Who needs a syringe gun, anyway?"
+ caliber = CALIBER_REBAR
+ icon_state = "rod_healium"
+ base_icon_state = "rod_healium"
+ projectile_type = /obj/projectile/bullet/rebar/healium
+
+/obj/item/ammo_casing/rebar/supermatter
+ name = "Supermatter Bolt"
+ desc = "Wait, how is the bow capable of firing this without dusting?"
+ caliber = CALIBER_REBAR
+ icon_state = "rod_supermatter"
+ base_icon_state = "rod_supermatter"
+ projectile_type = /obj/projectile/bullet/rebar/supermatter
+
+/obj/item/ammo_casing/rebar/paperball
+ name = "Paper Ball"
+ desc = "Doink!"
+ caliber = CALIBER_REBAR
+ icon_state = "paperball"
+ base_icon_state = "paperball"
+ projectile_type = /obj/projectile/bullet/paperball
+
+/obj/item/ammo_casing/rebar/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/caseless, TRUE)
+
+/obj/item/ammo_casing/rebar/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]"
/obj/item/ammo_casing/a223
name = ".223 bullet casing"
diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm
index 42ba3abee6ff..f740447fd8da 100644
--- a/code/modules/projectiles/ammunition/energy/laser.dm
+++ b/code/modules/projectiles/ammunition/energy/laser.dm
@@ -16,6 +16,11 @@
e_cost = 62.5
select_name = "kill"
+/obj/item/ammo_casing/energy/lasergun/carbine
+ projectile_type = /obj/projectile/beam/laser/carbine
+ e_cost = 25 // 40 shots
+ select_name = "kill"
+
/obj/item/ammo_casing/energy/lasergun/old
projectile_type = /obj/projectile/beam/laser
e_cost = 200
@@ -30,6 +35,8 @@
/obj/item/ammo_casing/energy/laser/musket/prime
projectile_type = /obj/projectile/beam/laser/musket/prime
+ pellets = 3
+ variance = 10
/obj/item/ammo_casing/energy/laser/practice
projectile_type = /obj/projectile/beam/practice
diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm
index 77ca619f094a..9e4aea73f6ff 100644
--- a/code/modules/projectiles/ammunition/energy/stun.dm
+++ b/code/modules/projectiles/ammunition/energy/stun.dm
@@ -25,6 +25,11 @@
fire_sound = 'sound/weapons/taser2.ogg'
harmful = FALSE
+/obj/item/ammo_casing/energy/disabler/smg
+ projectile_type = /obj/projectile/beam/disabler/weak
+ e_cost = 40
+ fire_sound = 'sound/weapons/taser3.ogg'
+
/obj/item/ammo_casing/energy/disabler/hos
e_cost = 60
diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm
index 67afbed5b41d..1fa7c9d1ab7d 100644
--- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm
@@ -32,3 +32,20 @@
max_ammo = 1
caliber = CALIBER_HARPOON
ammo_type = /obj/item/ammo_casing/caseless/harpoon
+
+/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal
+ name = "single round magazine"
+ max_ammo = 1
+ caliber = CALIBER_REBAR
+ ammo_type = /obj/item/ammo_casing/rebar
+
+/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force
+ name = "two round magazine"
+ max_ammo = 2
+ caliber = CALIBER_REBAR_FORCED
+ ammo_type = /obj/item/ammo_casing/rebar
+
+/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie
+ max_ammo = 3
+ caliber = CALIBER_REBAR_SYNDIE
+ ammo_type = /obj/item/ammo_casing/rebar
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
index 4f05d6a6eff2..7edfc7dab7b9 100644
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ b/code/modules/projectiles/guns/ballistic/rifle.dm
@@ -162,6 +162,88 @@
if(.)
name = "\improper Regal Obrez" // wear it loud and proud
+/obj/item/gun/ballistic/rifle/rebarxbow
+ name = "Heated Rebar Crossbow"
+ desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \
+ Additionally, can fire specialty ammo made from the materials in the atmos crystalizer - zaukerite, metallic hydrogen, and healium crytals all work. \
+ Very slow to reload - you can craft the crossbow with a crowbar to try loosen the crossbar, but risks a misfire, or worse..."
+ icon = 'icons/obj/weapons/guns/ballistic.dmi'
+ icon_state = "rebarxbow"
+ inhand_icon_state = "rebarxbow"
+ worn_icon_state = "rebarxbow"
+ rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
+ mag_display = FALSE
+ empty_indicator = TRUE
+ bolt_type = BOLT_TYPE_LOCKING
+ semi_auto = FALSE
+ internal_magazine = TRUE
+ can_modify_ammo = FALSE
+ slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE
+ bolt_wording = "bowstring"
+ magazine_wording = "rod"
+ cartridge_wording = "rod"
+ misfire_probability = 25
+ initial_caliber = CALIBER_REBAR
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal
+ fire_sound = 'sound/items/xbow_lock.ogg'
+ can_be_sawn_off = FALSE
+ tac_reloads = FALSE
+ var/draw_time = 3 SECONDS
+ SET_BASE_PIXEL(0, 0)
+
+/obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null)
+ if (bolt_locked)
+ drop_bolt(user)
+ return
+ balloon_alert(user, "bowstring loosened")
+ playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
+ handle_chamber(empty_chamber = FALSE, from_firing = FALSE, chamber_next_round = FALSE)
+ bolt_locked = TRUE
+ update_appearance()
+
+/obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null)
+ if(!do_after(user, draw_time, target = src))
+ return
+ playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE)
+ balloon_alert(user, "bowstring drawn")
+ chamber_round()
+ bolt_locked = FALSE
+ update_appearance()
+
+/obj/item/gun/ballistic/rifle/rebarxbow/can_shoot()
+ if (bolt_locked)
+ return FALSE
+ return ..()
+
+/obj/item/gun/ballistic/rifle/rebarxbow/examine(mob/user)
+ . = ..()
+ . += "The crossbow is [bolt_locked ? "not ready" : "ready"] to fire."
+
+/obj/item/gun/ballistic/rifle/rebarxbow/forced
+ name = "Stressed Rebar Crossbow"
+ desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. Hopefully, it was worth it."
+ // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing.
+ can_misfire = TRUE
+ draw_time = 1.5
+ misfire_probability = 25
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force
+
+/obj/item/gun/ballistic/rifle/rebarxbow/syndie
+ name = "Syndicate Rebar Crossbow"
+ desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \
+ Holds three shots without a chance of exploding, and features a built in scope. Compatable with all known crossbow ammunition."
+ icon_state = "rebarxbowsyndie"
+ inhand_icon_state = "rebarxbowsyndie"
+ worn_icon_state = "rebarxbowsyndie"
+ w_class = WEIGHT_CLASS_NORMAL
+ initial_caliber = CALIBER_REBAR
+ draw_time = 1
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie
+
+/obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth
+
/obj/item/gun/ballistic/rifle/boltaction/pipegun
name = "pipegun"
desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired."
diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm
index 70a726d81d2b..57519a98ab9c 100644
--- a/code/modules/projectiles/guns/energy/crank_guns.dm
+++ b/code/modules/projectiles/guns/energy/crank_guns.dm
@@ -15,7 +15,6 @@
/obj/item/gun/energy/laser/musket/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_wielded = 10)
AddComponent( \
/datum/component/gun_crank, \
charging_cell = get_cell(), \
@@ -23,6 +22,7 @@
cooldown_time = 3 SECONDS, \
charge_sound = 'sound/weapons/laser_crank.ogg', \
charge_sound_cooldown_time = 1.8 SECONDS, \
+ charge_move = IGNORE_USER_LOC_CHANGE, \
)
/obj/item/gun/energy/laser/musket/prime
@@ -62,6 +62,7 @@
cooldown_time = 2 SECONDS, \
charge_sound = 'sound/weapons/laser_crank.ogg', \
charge_sound_cooldown_time = 1.8 SECONDS, \
+ charge_move = IGNORE_USER_LOC_CHANGE, \
)
/obj/item/gun/energy/disabler/smoothbore/add_seclight_point()
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index a8349b751a74..707dc86974d6 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -41,6 +41,7 @@
name = "tactical energy gun"
desc = "Military issue energy gun, is able to fire stun rounds."
icon_state = "energytac"
+ cell_type = /obj/item/stock_parts/cell/upgraded //monkestation ADDITION
ammo_x_offset = 2
ammo_type = list(/obj/item/ammo_casing/energy/electrode/spec, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index ad5a5ce92795..4ecb1b1d2cd1 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -23,6 +23,16 @@
desc = "An older model of the basic lasergun, no longer used by Nanotrasen's private security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
ammo_x_offset = 3
+/obj/item/gun/energy/laser/carbine
+ name = "laser carbine"
+ desc = "A modified laser gun which can shoot far faster, but each shot is far less damaging."
+ icon_state = "laser_carbine"
+ ammo_type = list(/obj/item/ammo_casing/energy/lasergun/carbine)
+
+/obj/item/gun/energy/laser/carbine/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE)
+
/obj/item/gun/energy/laser/retro/old
name ="laser gun"
icon_state = "retro"
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 635570fbb15c..e099176ddd01 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -40,6 +40,26 @@
overlay_x = 15, \
overlay_y = 10)
+/obj/item/gun/energy/disabler/smg
+ name = "disabler smg"
+ desc = "An automatic disabler variant, as opposed to the conventional model, boasts a higher ammunition capacity at the cost of slightly reduced beam effectiveness."
+ icon_state = "disabler_smg"
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler/smg)
+ shaded_charge = 1
+
+/obj/item/gun/energy/disabler/smg/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE)
+
+/obj/item/gun/energy/disabler/add_seclight_point()
+ AddComponent(\
+ /datum/component/seclite_attachable, \
+ light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \
+ light_overlay = "flight", \
+ overlay_x = 15, \
+ overlay_y = 13, \
+ )
+
/obj/item/gun/energy/disabler/cyborg
name = "cyborg disabler"
desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating."
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index cbf47d7cdba7..d47c2c05a5be 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -281,7 +281,7 @@
hitx = target.pixel_x + rand(-8, 8)
hity = target.pixel_y + rand(-8, 8)
- if((isturf(target) || (isobj(target) && target.density)) && hitsound_wall)
+ if(isturf(target_turf) && hitsound_wall)
var/volume = clamp(vol_by_damage() + 20, 0, 100)
if(suppressed)
volume = 5
@@ -293,11 +293,7 @@
if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75))
var/turf/closed/wall/target_wall = target_turf
target_wall.add_dent(WALL_DENT_SHOT, hitx, hity)
- if(isturf(target) && hitsound_wall)
- var/volume = clamp(vol_by_damage() + 20, 0, 100)
- if(suppressed)
- volume = 5
- playsound(loc, hitsound_wall, volume, TRUE, -1)
+
return BULLET_ACT_HIT
var/mob/living/living_target = target
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 3266a8a309ee..f4ad04bbcb49 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -28,6 +28,11 @@
wound_bonus = -30
bare_wound_bonus = 40
+/obj/projectile/beam/laser/carbine
+ icon_state = "carbine_laser"
+ impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser
+ damage = 10
+
//overclocked laser, does a bit more damage but has much higher wound power (-0 vs -20)
/obj/projectile/beam/laser/hellfire
name = "hellfire laser"
@@ -59,15 +64,15 @@
name = "low-power laser"
icon_state = "laser_musket"
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
- damage = 25
- stamina = 40
+ damage = 28
+ stamina = 35
light_color = COLOR_STRONG_VIOLET
weak_against_armour = TRUE
/obj/projectile/beam/laser/musket/prime
name = "mid-power laser"
- damage = 30
- stamina = 45
+ damage = 25
+ stamina = 20
weak_against_armour = FALSE
/obj/projectile/beam/weak
@@ -142,9 +147,9 @@
. = ..()
if (!QDELETED(target) && (isturf(target) || isstructure(target)))
if(isobj(target))
- SSexplosions.med_mov_atom += target
+ SSexplosions.low_mov_atom += target //monkestation edit
else
- SSexplosions.medturf += target
+ SSexplosions.lowturf += target //monkestation edit
/obj/projectile/beam/pulse/shotgun
damage = 30
@@ -152,6 +157,7 @@
/obj/projectile/beam/pulse/heavy
name = "heavy pulse laser"
icon_state = "pulse1_bl"
+ damage = 100 //monkestation addition
projectile_piercing = ALL
var/pierce_hits = 2
@@ -159,7 +165,7 @@
if(pierce_hits <= 0)
projectile_piercing = NONE
pierce_hits -= 1
- ..()
+ return ..()
/obj/projectile/beam/emitter
name = "emitter beam"
diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm
index c0fa5e2766c7..775d3e8e8a72 100644
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ b/code/modules/projectiles/projectile/bullets/rifle.dm
@@ -47,6 +47,134 @@
embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10)
wound_falloff_tile = -5
+// Rebar (Rebar Crossbow)
+/obj/projectile/bullet/rebar
+ name = "rebar"
+ icon_state = "rebar"
+ damage = 30
+ speed = 0.4
+ dismemberment = 1 //because a 1 in 100 chance to just blow someones arm off is enough to be cool but also not enough to be reliable
+ armour_penetration = 10
+ wound_bonus = -20
+ bare_wound_bonus = 20
+ embedding = list("embed_chance" = 60, "fall_chance" = 2, "jostle_chance" = 2, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" = 10)
+ embed_falloff_tile = -5
+ wound_falloff_tile = -2
+ shrapnel_type = /obj/item/ammo_casing/rebar
+
+/obj/projectile/bullet/rebar/proc/handle_drop(datum/source, obj/item/ammo_casing/rebar/newcasing)
+
+/obj/projectile/bullet/rebar/syndie
+ name = "rebar"
+ icon_state = "rebar"
+ damage = 55
+ speed = 0.4
+ dismemberment = 2 //It's a budget sniper rifle.
+ armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor.
+ wound_bonus = 10
+ bare_wound_bonus = 20
+ embedding = list("embed_chance" = 80, "fall_chance" = 1, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 3, "jostle_pain_mult" = 2, "rip_time" = 14)
+ embed_falloff_tile = -3
+ shrapnel_type = /obj/item/ammo_casing/rebar/syndie
+
+/obj/projectile/bullet/rebar/zaukerite
+ name = "zaukerite shard"
+ icon_state = "rebar_zaukerite"
+ damage = 60
+ speed = 0.6
+ dismemberment = 10
+ damage_type = TOX
+ eyeblur = 5
+ armour_penetration = 20 // not nearly as good, as its not as sharp.
+ wound_bonus = 10
+ bare_wound_bonus = 40
+ embedding = list("embed_chance" =100, "fall_chance" = 0, "jostle_chance" = 5, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.8, "pain_mult" = 6, "jostle_pain_mult" = 2, "rip_time" = 30)
+ embed_falloff_tile = 0 // very spiky.
+ shrapnel_type = /obj/item/ammo_casing/rebar/zaukerite
+
+/obj/projectile/bullet/rebar/hydrogen
+ name = "metallic hydrogen bolt"
+ icon_state = "rebar_hydrogen"
+ damage = 40
+ speed = 0.6
+ dismemberment = 0 //goes through clean.
+ damage_type = BRUTE
+ armour_penetration = 30 //very pointy.
+ projectile_piercing = PASSMOB //felt this might have been a nice compromise for the lower damage for the difficulty of getting it
+ wound_bonus = -15
+ bare_wound_bonus = 10
+ embedding = list("embed_chance" = 50, "fall_chance" = 2, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.6, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" =18)
+ embed_falloff_tile = -3
+ shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen
+
+/obj/projectile/bullet/rebar/healium
+ name = "healium bolt"
+ icon_state = "rebar_healium"
+ damage = 0
+ speed = 0.4
+ dismemberment = 0
+ damage_type = BRUTE
+ armour_penetration = 100
+ wound_bonus = -100
+ bare_wound_bonus = -100
+ embedding = list(embed_chance = 0)
+ embed_falloff_tile = -3
+ shrapnel_type = /obj/item/ammo_casing/rebar/healium
+
+/obj/projectile/bullet/rebar/healium/on_hit(atom/target, blocked = 0, pierce_hit)
+ . = ..()
+ if(!iscarbon(target))
+ return BULLET_ACT_HIT
+ var/mob/living/breather = target
+ breather.SetSleeping(3 SECONDS)
+ breather.adjustFireLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC)
+ breather.adjustToxLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC)
+ breather.adjustBruteLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC)
+ breather.adjustOxyLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC, required_respiration_type = ALL)
+
+ return BULLET_ACT_HIT
+
+
+/obj/projectile/bullet/rebar/supermatter
+ name = "supermatter bolt"
+ icon_state = "rebar_supermatter"
+ damage = 0
+ speed = 0.4
+ dismemberment = 0
+ damage_type = TOX
+ armour_penetration = 100
+ shrapnel_type = /obj/item/ammo_casing/rebar/supermatter
+
+/obj/projectile/bullet/rebar/supermatter/on_hit(atom/target, blocked = 0, pierce_hit)
+ . = ..()
+ if(isliving(target))
+ var/mob/living/victim = target
+ victim.investigate_log("has been dusted by [src].", INVESTIGATE_DEATHS)
+ dust_feedback(target)
+ victim.dust()
+
+ else if(!isturf(target)&& !isliving(target))
+ dust_feedback(target)
+ qdel(target)
+
+ return BULLET_ACT_HIT
+
+
+/obj/projectile/bullet/rebar/supermatter/proc/dust_feedback(atom/target)
+ playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE)
+ visible_message(span_danger("[target] is hit by [src], turning [target.p_them()] to dust in a brilliant flash of light!"))
+
+/obj/projectile/bullet/paperball
+ desc = "Doink!"
+ damage = 1 // It's a damn toy.
+ range = 10
+ shrapnel_type = null
+ embedding = null
+ name = "paper ball"
+ desc = "doink!"
+ damage_type = BRUTE
+ icon_state = "paperball"
+
/obj/projectile/bullet/a223
name = ".223 bullet"
damage = 35
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 202b29287d9d..c4fa6c7a6185 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -355,7 +355,24 @@ GLOBAL_LIST_INIT(chem_master_containers, list(
return TRUE
if(action == "selectContainer")
- selected_container = params["ref"]
+ var/target_ref = params["ref"]
+ var/obj/item/reagent_containers/target = locate(target_ref)
+
+ //is this even a valid type path
+ if(!ispath(target))
+ return FALSE
+
+ //are we printing a valid container
+ var/container_found = FALSE
+ for(var/category in printable_containers)
+ if(target in printable_containers[category])
+ container_found = TRUE
+ break
+ if(!container_found)
+ return FALSE
+
+ //set the container
+ selected_container = target_ref
return TRUE
if(action == "create")
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 10fdb6fe2115..2aaabee0d68b 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -30,7 +30,7 @@ Nothing else in the console has ID requirements.
/// The stored design disk, if present
var/obj/item/disk/design_disk/d_disk
/// Determines if the console is locked, and consequently if actions can be performed with it
- var/locked = FALSE
+ var/locked = TRUE //Monkestation edit.
/// Used for compressing data sent to the UI via static_data as payload size is of concern
var/id_cache = list()
/// Sequence var for the id cache
diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm
index fa2838a27945..240d54601db1 100644
--- a/code/modules/spells/spell_types/right_and_wrong.dm
+++ b/code/modules/spells/spell_types/right_and_wrong.dm
@@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(summoned_magic, list(
/obj/item/gun/magic/wand/fireball,
/obj/item/gun/magic/staff/healing,
/obj/item/gun/magic/staff/door,
- /obj/item/gun/magic/staff/babel,
+ /* /obj/item/gun/magic/staff/babel, [monkestation removal: this is admin only now] */
/obj/item/scrying,
/obj/item/warp_whistle,
/obj/item/immortality_talisman,
diff --git a/code/modules/spells/spell_types/tower_of_babel.dm b/code/modules/spells/spell_types/tower_of_babel.dm
index 0f70700c0973..e04fde85e2dd 100644
--- a/code/modules/spells/spell_types/tower_of_babel.dm
+++ b/code/modules/spells/spell_types/tower_of_babel.dm
@@ -12,10 +12,12 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel)
deadchat_broadcast("The [span_name("Tower of Babel")] has stricken the station, people will struggle to communicate.", message_type=DEADCHAT_ANNOUNCEMENT)
for(var/mob/living/carbon/target in GLOB.player_list)
+ if(!target.mind)
+ return
if(IS_WIZARD(target) && !badmin)
// wizards are not only immune but can speak all languages to taunt their victims over the radio
target.grant_all_languages(source=LANGUAGE_BABEL)
- ADD_TRAIT(target, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT)
+ ADD_TRAIT(target.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT)
to_chat(target, span_reallybig(span_hypnophrase("You feel a magical force improving your speech patterns!")))
continue
@@ -44,8 +46,10 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel)
// silicon mobs are immune
if(!iscarbon(to_curse))
return
+ if(!to_curse.mind)
+ return
- if(to_curse.can_block_magic(MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND) || HAS_TRAIT(to_curse, TRAIT_TOWER_OF_BABEL))
+ if(to_curse.can_block_magic(MAGIC_RESISTANCE | MAGIC_RESISTANCE_MIND) || HAS_MIND_TRAIT(to_curse, TRAIT_TOWER_OF_BABEL))
to_chat(to_curse, span_notice("You have a strange feeling for a moment, but then it passes."))
return
@@ -56,9 +60,11 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel)
/proc/cure_curse_of_babel(mob/living/carbon/to_cure)
if(!iscarbon(to_cure))
return
+ if(!to_cure.mind)
+ return
// anyone who has this trait from another source is immune to being cursed by tower of babel
- if(!HAS_TRAIT_FROM(to_cure, TRAIT_TOWER_OF_BABEL, TRAUMA_TRAIT))
+ if(!HAS_TRAIT_FROM(to_cure.mind, TRAIT_TOWER_OF_BABEL, TRAUMA_TRAIT))
return
to_cure.remove_status_effect(/datum/status_effect/tower_of_babel/magical)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 91cf1def26f4..ee7fcdda86e5 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -654,7 +654,7 @@
if(burn)
set_burn_dam(round(max(burn_dam - burn, 0), DAMAGE_PRECISION))
- if(HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING))
+ if(HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING) && !HAS_TRAIT(owner, TRAIT_DEFIB_BLACKLISTED)) //monkestation edit
if(owner.health > 0)
owner.revive(0)
owner.cure_husk(0) // If it has REVIVESBYHEALING, it probably can't be cloned. No husk cure.
@@ -667,7 +667,7 @@
//monkestation edit start
if(owner.stat == DEAD && HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING))
- if(owner.health > 50)
+ if(!HAS_TRAIT(owner, TRAIT_DEFIB_BLACKLISTED) && owner.health > 50)
owner.revive(FALSE)
//monkestation edit end
diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm
index 2f1754428c92..af5b1dc6c2f2 100644
--- a/code/modules/uplink/uplink_items/dangerous.dm
+++ b/code/modules/uplink/uplink_items/dangerous.dm
@@ -99,3 +99,16 @@
cost = 13
surplus = 50
purchasable_from = ~UPLINK_CLOWN_OPS
+
+/datum/uplink_item/dangerous/cat
+ name = "Feral cat grenade"
+ desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!"
+ cost = 5
+ item = /obj/item/grenade/spawnergrenade/cat
+ surplus = 30
+
+/datum/uplink_item/dangerous/rebarxbowsyndie
+ name = "Syndicate Rebar Crossbow"
+ desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included."
+ item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie
+ cost = 12
diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm
index 86492961450a..640685892bbf 100644
--- a/code/modules/uplink/uplink_items/nukeops.dm
+++ b/code/modules/uplink/uplink_items/nukeops.dm
@@ -521,6 +521,14 @@
surplus = 35
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
+/datum/uplink_item/dangerous/syndicat
+ name = "Syndie cat grenade"
+ desc = "This grenade is filled with 3 trained angry cats in special syndicate modsuits. Upon activation, the Syndicate cats are awoken and unleashed unto unlucky bystanders."
+ item = /obj/item/grenade/spawnergrenade/cat/syndicate
+ cost = 20
+ surplus = 50
+ purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
+
/datum/uplink_item/explosives/pinata
name = "Weapons Grade Pinata Kit"
desc = "A pinata filled with both candy and explosives as well as two belts to carry them on, crack it open and see what you get!"
diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm
index 8a2d71d87665..9ea9661de90f 100644
--- a/code/modules/uplink/uplink_items/stealthy.dm
+++ b/code/modules/uplink/uplink_items/stealthy.dm
@@ -28,6 +28,12 @@
item = /obj/item/pen/edagger
cost = 2
+/datum/uplink_item/stealthy_weapons/slipstick
+ name = "Syndie Lipstick"
+ desc = "Stylish way to kiss to death, isn't it syndiekisser?"
+ item = /obj/item/lipstick/syndie
+ cost = 12
+
/datum/uplink_item/stealthy_weapons/traitor_chem_bottle
name = "Poison Kit"
desc = "An assortment of deadly chemicals packed into a compact box. Comes with a syringe for more precise application."
diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
index 0e147ec37665..dc32e7b925d9 100644
--- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
@@ -81,13 +81,17 @@
return
/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
if(drill.do_after_mecha(src, user, 60 / drill.drill_level))
drill.log_message("Drilled through [src]", LOG_MECHA)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
dismantle_wall(TRUE, FALSE)
/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
if(drill.drill_level >= DRILL_HARDENED)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
if(drill.do_after_mecha(src, user, 120 / drill.drill_level))
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
drill.log_message("Drilled through [src]", LOG_MECHA)
dismantle_wall(TRUE, FALSE)
else
@@ -95,7 +99,9 @@
/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user)
for(var/turf/closed/mineral/M in range(drill.chassis,1))
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
if(get_dir(drill.chassis,M)&drill.chassis.dir)
+ playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit
M.gets_drilled()
drill.log_message("[user] drilled through [src]", LOG_MECHA)
drill.move_ores()
diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm
index 8ccb7a73b4fe..ae87aff1457c 100644
--- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm
@@ -36,8 +36,68 @@
return
if(!cargo_holder)
return
+ if(isliving(target)) //monkestation edit: also threw this if statement up here used to be at the very bottom
+ var/mob/living/M = target
+ if(M.stat == DEAD)
+ return
+
+ if(!(source.istate && ISTATE_HARM)) //monkestation edit
+ step_away(M,chassis)
+ if(killer_clamp)
+ target.visible_message(span_danger("[chassis] tosses [target] like a piece of paper!"), \
+ span_userdanger("[chassis] tosses you like a piece of paper!"))
+ else
+ to_chat(source, "[icon2html(src, source)][span_notice("You push [target] out of the way.")]")
+ chassis.visible_message(span_notice("[chassis] pushes [target] out of the way."), \
+ span_notice("[chassis] pushes you aside."))
+ return ..()
+ if((source.istate && ISTATE_HARM) && ishuman(M))//meme clamp here: monkestation edit that comment was here before
+ if(!killer_clamp)
+ to_chat(source, span_notice("You longingly wish to tear [M]'s arms off."))
+ return
+ var/mob/living/carbon/C = target
+ var/torn_off = FALSE
+ var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM)
+ if(affected != null)
+ affected.dismember(damtype)
+ torn_off = TRUE
+ affected = C.get_bodypart(BODY_ZONE_R_ARM)
+ if(affected != null)
+ affected.dismember(damtype)
+ torn_off = TRUE
+ if(!torn_off)
+ to_chat(source, span_notice("[M]'s arms are already torn off, you must find a challenger worthy of the kill clamp!"))
+ return
+ playsound(src, get_dismember_sound(), 80, TRUE)
+ target.visible_message(span_danger("[chassis] rips [target]'s arms off!"), \
+ span_userdanger("[chassis] rips your arms off!"))
+ log_combat(source, M, "removed both arms with a real clamp,", "[name]", "(COMBAT MODE: [uppertext((source.istate & ISTATE_HARM))] (DAMTYPE: [uppertext(damtype)])")
+ return ..()
+
+ playsound(src, clampsound, 40, TRUE) //monkestation addition
+ M.take_overall_damage(clamp_damage)
+ if(!M) //get gibbed stoopid
+ return
+ M.adjustOxyLoss(round(clamp_damage/2))
+ M.updatehealth()
+ target.visible_message(span_danger("[chassis] squeezes [target]!"), \
+ span_userdanger("[chassis] squeezes you!"),\
+ span_hear("You hear something crack."))
+ log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])")
+ return ..()
+
if(ismecha(target))
var/obj/vehicle/sealed/mecha/M = target
+ //MONKESTATION EDIT START
+ if(source.istate && ISTATE_HARM && killer_clamp)
+ playsound(src, clampsound, 40, TRUE) //monkestation addition
+ M.take_damage(300, BRUTE)
+ target.visible_message(span_danger("[chassis] squeezes [target]!"), \
+ span_userdanger("[chassis] squeezes you!"),\
+ span_hear("You hear something crack."))
+ log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])")
+ return
+ //MONKESTATION EDIT STOP
var/have_ammo
for(var/obj/item/mecha_ammo/box in cargo_holder.cargo)
if(istype(box, /obj/item/mecha_ammo) && box.rounds)
@@ -81,53 +141,6 @@
to_chat(source, "[icon2html(src, source)][span_notice("[target] successfully loaded.")]")
log_message("Loaded [clamptarget]. Cargo compartment capacity: [cargo_holder.cargo_capacity - LAZYLEN(cargo_holder.cargo)]", LOG_MECHA)
- else if(isliving(target))
- var/mob/living/M = target
- if(M.stat == DEAD)
- return
-
- if(!(source.istate & ISTATE_HARM))
- step_away(M,chassis)
- if(killer_clamp)
- target.visible_message(span_danger("[chassis] tosses [target] like a piece of paper!"), \
- span_userdanger("[chassis] tosses you like a piece of paper!"))
- else
- to_chat(source, "[icon2html(src, source)][span_notice("You push [target] out of the way.")]")
- chassis.visible_message(span_notice("[chassis] pushes [target] out of the way."), \
- span_notice("[chassis] pushes you aside."))
- return ..()
- else if((source.istate & ISTATE_SECONDARY) && iscarbon(M))//meme clamp here
- if(!killer_clamp)
- to_chat(source, span_notice("You longingly wish to tear [M]'s arms off."))
- return
- var/mob/living/carbon/C = target
- var/torn_off = FALSE
- var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM)
- if(affected != null)
- affected.dismember(damtype)
- torn_off = TRUE
- affected = C.get_bodypart(BODY_ZONE_R_ARM)
- if(affected != null)
- affected.dismember(damtype)
- torn_off = TRUE
- if(!torn_off)
- to_chat(source, span_notice("[M]'s arms are already torn off, you must find a challenger worthy of the kill clamp!"))
- return
- playsound(src, get_dismember_sound(), 80, TRUE)
- target.visible_message(span_danger("[chassis] rips [target]'s arms off!"), \
- span_userdanger("[chassis] rips your arms off!"))
- log_combat(source, M, "removed both arms with a real clamp,", "[name]", "(COMBAT MODE: [uppertext((source.istate & ISTATE_HARM))] (DAMTYPE: [uppertext(damtype)])")
- return ..()
-
- M.take_overall_damage(clamp_damage)
- if(!M) //get gibbed stoopid
- return
- M.adjustOxyLoss(round(clamp_damage/2))
- M.updatehealth()
- target.visible_message(span_danger("[chassis] squeezes [target]!"), \
- span_userdanger("[chassis] squeezes you!"),\
- span_hear("You hear something crack."))
- log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])")
return ..()
diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml
index cf9a8f7a98d2..5fd33b0fc7de 100644
--- a/html/changelogs/archive/2024-12.yml
+++ b/html/changelogs/archive/2024-12.yml
@@ -88,3 +88,186 @@
- rscdel: Removed the old bubble room up top for extra space to expand Centcom.
- qol: Pretty up medical centcom while trimming the wasted space as well as add
extra stuff.
+2024-12-08:
+ Absolucy:
+ - bugfix: The recursive symptom varient should now work as intended rather than
+ cascading horribly.
+ - bugfix: The "Quantumly Entangled" (bluespace) symptom varient should work properly
+ now.
+ - bugfix: Symptoms being deleted properly cleanup their attached varients now.
+ - bugfix: Clown operative leaders now properly spawn with their gear.
+ - bugfix: Anime quirk appearance prefs now properly transfer when becoming a roundstart
+ nuke/clown operative.
+ - bugfix: Clean up the inventory/items of players becoming roundstart nuke/clown
+ operatives more thoroughly and quietly.
+ - refactor: Cleaned up code related to roundstart nuke/clown operatives.
+ - bugfix: Heretics healing on rust via Leeching Walk or rust ascension now properly
+ updates health.
+ - qol: Heretics healing on rust via Leeching Walk or rust ascension scales with
+ the world's delta time, making its rate independent of subsystem lag.
+ - admin: Added a warning+confirmation if an admin try to run a specifically laggy
+ proc.
+ Absolucy, SmArtKar, Kapu:
+ - code_imp: Implemented caching for icon sizes which should significantly improve
+ mob health performance due to HUDs constantly fetching icons.
+ Gw0sty:
+ - rscadd: Gave Chameleon gloves the property to transmit radio for sign language.
+ - rscadd: Research directors now get a mixture of scientist and roboticist bounties.
+ - rscadd: Added craft able cleanbot variation, Scrubs Junior, a cleanbot that medical
+ doctors can access.
+ - rscadd: New bounty types for roboticists, bots, requiring various station bots
+ that do not spawn roundstart.
+ - bugfix: Renamed Late Join to Late Arrival
+ - qol: Cleanbots will now burn cigarbutts, loose ammo casings, and food wrappers
+ SirNightKnight:
+ - bugfix: Fixed Nanotrasen Representative's alt title options excluding the original
+ title once picked.
+ Uristthedorf:
+ - balance: Durathread vests now cover your arms.
+ - image: Worn durathread vest sprites show your arms being covered.
+ Wisemonster:
+ - spellcheck: Clarified NT representative's description as being more an "Observe
+ and report" role, and that they cannot give orders to command (They can still
+ make suggestions).
+2024-12-10:
+ Absolucy:
+ - bugfix: Fixed not being able to select container/pill/patch type in ChemMasters.
+ Gw0sty:
+ - rscadd: R&D consoles are now locked by default when built.
+ Loiosh42:
+ - bugfix: You can now print AP shells at the ammo workbench
+ Shoddd:
+ - bugfix: Wonderland grass no longer has chasms underneath
+ - rscadd: Satyr headbutt now checks for hands and mobility
+ SirNightKnight:
+ - balance: Rebalance debilitated to be more tame.
+2024-12-12:
+ Absolucy:
+ - rscdel: Removed the Tower of Babel wizard event.
+ - rscdel: Staff of Babel is now admin-only.
+ - rscadd: 3+ living ascended heretics will automatically raise the alert level to
+ Lambda.
+ - bugfix: Nar'sie and Ratvar now properly raise the alert level to Lambda.
+ - qol: Ascended heretics are now in their own category in the ghost orbit menu.
+ - refactor: Cleaned up code relating to heretic ascension announcements and traits.
+ - bugfix: Syndicate implants are now properly hidden from HUDs/scanners.
+ - qol: Rearranged the curator's radio booth / private study on MetaStation, hopefully
+ making it less of a cramped eyesore.
+ Absolucy, JohnFulpWillard:
+ - bugfix: Shaft Miners and Explorers are now alerted of icemoon storms, Clowns are
+ naive, and Curators are immune to the Tower of Babel again.
+2024-12-13:
+ Absolucy:
+ - refactor: Challenge and monkecoin reward code is now more resilient.
+2024-12-14:
+ SentientVoid:
+ - rscadd: The Blueshift aquarium has been altered and moved to maintenance. It has
+ been replaced with the monke box.
+ Syndicat-Meow:
+ - rscadd: Added Disabler SMG available to be ordered from cargo
+ - image: added sprite for Disabler SMG
+ - rscadd: Added Laser Carbine available to be ordered from cargo
+ - image: added sprite for the Laser Carbine
+ - rscadd: Added Syndicate Lipstick! Finish off your opponents with a deadly kiss
+ of death!
+ - rscadd: Added a new trait that comes from using the lipstick
+ - image: added sprite for syndicate lipstick
+ - rscadd: Added two new crossbows one being craftable by crew using and engineering
+ inducer!
+ - rscadd: Added special ammo for the crossbows and a book for stronger normal ammo
+ and their crafting recipes
+ - image: Added sprites of crossbows and ammo
+ - code_imp: changed some code about autofire and minor changes to relavant code
+ - sound: Added a new sound for the crossbow
+ - admin: Added an admin only crossbow bolt =)
+ - rscadd: Added angry cats in a can for 5 TC
+ - rscadd: Added angry cat in a red suit
+ - rscadd: Tossed 3 red suit angry cats in a can for 20 TC
+ - image: Added sprites for the Syndicate Cat
+ ThePooba:
+ - rscadd: adds a Rayne co. medkit that you buy from the company import, you can
+ healthscan people with it and it hates your guts
+ - rscadd: adds bloody drips unusual effect
+ - balance: christmas earlier
+ - qol: smoothbore disabler now needs red queen instead of the reagent that deletes
+ itself
+ - qol: laser musket doesnt need glasses anymore and instead needs another drinking
+ glass
+ - balance: prime laser muskets no longer require twohanded and also shoot better
+ lasers
+ - balance: smoothbore disablers can crank on the run
+ - qol: more suits can hold muskets and pipeguns
+ - bugfix: Fixes a few bugs
+ Wisemonster:
+ - bugfix: Fixed some loadout clothing not updating after alt-clicking while worn
+2024-12-15:
+ Absolucy:
+ - bugfix: Fixed railing stacking.
+ - bugfix: Fixed some double-encodes related to relaying admin/mentor messages to
+ discord.
+ - rscadd: Added christmas tree spawners to Blueshift - one north of science on the
+ upper floor, one west of botany on the lower floor.
+ SirNightKnight:
+ - rscadd: Nanotrasen has found the budget to improve on it's Emergency Response
+ Corps.
+ - balance: Nanotrasen has re-evaluated it's pulse weaponry and has lowered the explosive
+ impact of pulse beams after finding the resulting damage too costly to repair.
+ - balance: FEAR THE DEATH-RIPLEY!!
+ - bugfix: Shuttle decals properly rotate on shuttle move.
+ - bugfix: ' Made the tactical combat uniforms unadjustable so their sprite doesn''t
+ break.'
+ - sound: The newers ERTs now have a greet sound.
+ - code_imp: Changed the logic ordering of the mech hydraulic clamp.
+ Siro:
+ - rscadd: Added an ability for dead oozelings, "Membrane Murmur", allowing them
+ to vocalize a short-range cry for help from their core every so often.
+ TheColorCyan:
+ - bugfix: Random lipstick now has proper icon upon spawn.
+ - rscdel: Syndie lipstick can no longer spawn as a random lipstick color.
+2024-12-16:
+ Shoddd:
+ - bugfix: bitrunning vending console now researchable
+2024-12-17:
+ Absolucy:
+ - bugfix: Fixed suiciding as a centcom ghost player spawning an extra catatonic
+ body.
+2024-12-18:
+ Absolucy:
+ - admin: Admins will get notified whenever a player responds to OPFOR chat (if there
+ is a handling admin, and they aren't afk, only they will be notified)
+ - admin: Added a yes/no confirmation to the "Request OPFOR" admin verb.
+ - qol: Players will be notified when an admin responds to their OPFOR chat.
+ - bugfix: Fixed some missing colored chat spans.
+ - bugfix: OPFOR roundend reports won't show blank sections if the opfor had objectives
+ or equipment if none of them were actually approved.
+ Gw0sty:
+ - rscadd: Engi Wire knowledge can now see Air alarms and vending machines wires
+ - rscadd: Robo Wire knowledge can now see Modsuit and Mulebot wires
+ - bugfix: Made red HOS mantle show up instead of the blue
+ - bugfix: Spraypaint the sm should now work! I don't know why you still would!
+ - bugfix: Bronze can now be ejected from autolathes.
+ - bugfix: Maintence door in artsci is now visible to our robotic overloads on metastation
+ - balance: Made the multi cell wall charger not charge at KW instead of W
+ ThePooba:
+ - rscdel: Eeble plush removed.
+2024-12-19:
+ Absolucy:
+ - bugfix: Zombies and nightmares should now properly be immune to pain.
+ - balance: The Cybersun Juggernaut suit now provides the wearer with immunity to
+ pain and its effects.
+ - balance: Florida Man is now immune to pain and its effects.
+ - balance: Ascended rust heretics, while on rusted tiles, are immune to pain and
+ its effects.
+ - balance: Ascended blade heretic lifesteal now heals pain and reduce shock buildup.
+ - balance: Bloodsuckers are now fully immune to pain and its effects while Fortitude
+ is active.
+ - balance: Bloodsuckers now heal off pain while in torpor.
+ - balance: Bloodsuckers gain a 50% *increase* in pain from the debuff applied while
+ out during Sol.
+ - code_imp: Added some additional sanity checks to pain code, to prevent potential
+ runtime errors.
+ - balance: Clown spawner artifacts will no longer spawn another spawner if the previous
+ one still exists.
+ ThePooba:
+ - bugfix: nerfs christmas presents and allows the real chrimas presents to spawn
+ - bugfix: blob zombie event wont spawn you on asteroids and shit anymore
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index 9021e8c7dd51..64c5582f515f 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/back/backpack.dmi b/icons/mob/clothing/back/backpack.dmi
index e9345f018b0a..db64416b77df 100644
Binary files a/icons/mob/clothing/back/backpack.dmi and b/icons/mob/clothing/back/backpack.dmi differ
diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
index e4feec31ca20..4f3192c6e1ee 100644
Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ
diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi
index 4c9c39bed485..dbe7305b75a5 100644
Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ
diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi
index f44de438a8bc..7700c4d85028 100644
Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ
diff --git a/icons/mob/inhands/equipment/mining_lefthand.dmi b/icons/mob/inhands/equipment/mining_lefthand.dmi
index 1f0baf469717..ecd179993ddf 100644
Binary files a/icons/mob/inhands/equipment/mining_lefthand.dmi and b/icons/mob/inhands/equipment/mining_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/mining_righthand.dmi b/icons/mob/inhands/equipment/mining_righthand.dmi
index d73d407da4da..097acff8b0c2 100644
Binary files a/icons/mob/inhands/equipment/mining_righthand.dmi and b/icons/mob/inhands/equipment/mining_righthand.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index e5b0ae7984ea..451b083540ef 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index ab01445414a2..12a27b6d5ef5 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/inhands/pets_held_lh.dmi b/icons/mob/inhands/pets_held_lh.dmi
index 1a864db13410..4ed721c4a368 100644
Binary files a/icons/mob/inhands/pets_held_lh.dmi and b/icons/mob/inhands/pets_held_lh.dmi differ
diff --git a/icons/mob/inhands/pets_held_rh.dmi b/icons/mob/inhands/pets_held_rh.dmi
index 39332a7e18e4..3e4404b4faab 100644
Binary files a/icons/mob/inhands/pets_held_rh.dmi and b/icons/mob/inhands/pets_held_rh.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi
index 590e3ff2ed06..4a204d07d351 100644
Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi
index 5980b17fbe4a..bf0ae03a3cfe 100644
Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ
diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi
index e156a233e732..44a25f5407ed 100644
Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ
diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi
index b35d033f84d1..73594f2f7243 100644
Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ
diff --git a/icons/obj/cosmetic.dmi b/icons/obj/cosmetic.dmi
index 8cb1e38ad88e..ee7a7ce1d04d 100644
Binary files a/icons/obj/cosmetic.dmi and b/icons/obj/cosmetic.dmi differ
diff --git a/icons/obj/storage/backpack.dmi b/icons/obj/storage/backpack.dmi
index a504e9c9e415..652f750907a4 100644
Binary files a/icons/obj/storage/backpack.dmi and b/icons/obj/storage/backpack.dmi differ
diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi
index b7a793d72091..13ebe894bf1f 100644
Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ
diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi
index bdc1c596aee2..b3f48a4b3782 100644
Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ
diff --git a/icons/obj/weapons/guns/bows/quivers.dmi b/icons/obj/weapons/guns/bows/quivers.dmi
index 74a7b4bc8bb5..615f96ee6af6 100644
Binary files a/icons/obj/weapons/guns/bows/quivers.dmi and b/icons/obj/weapons/guns/bows/quivers.dmi differ
diff --git a/icons/obj/weapons/guns/energy.dmi b/icons/obj/weapons/guns/energy.dmi
index b40c7cc1d48d..275d26493829 100644
Binary files a/icons/obj/weapons/guns/energy.dmi and b/icons/obj/weapons/guns/energy.dmi differ
diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi
index 4e57ac40c940..bfb47f5d0acb 100644
Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 0ca3d84d02e2..a3c93789cf0e 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -237,5 +237,6 @@ h1.alert, h2.alert {color: #000000;}
.orange {color: #b8761a;}
.yellow {color: #c7b72c;}
.cyan {color: #0ea1e6;}
+.uncommonradio {color: #78a1b1;}
// MONKESTATION ADDITION END
"}
diff --git a/monkestation/code/datums/components/crafting/robot.dm b/monkestation/code/datums/components/crafting/robot.dm
new file mode 100644
index 000000000000..4aac9aa661ed
--- /dev/null
+++ b/monkestation/code/datums/components/crafting/robot.dm
@@ -0,0 +1,14 @@
+/datum/crafting_recipe/cleanbot_jr
+ name = "Scrubs Junior"
+ desc = "A little cleaning robot, he graduated from medical school!"
+ result = /mob/living/basic/bot/cleanbot/medbay/jr
+ reqs = list(
+ /obj/item/reagent_containers/cup/bucket = 1,
+ /obj/item/assembly/prox_sensor = 1,
+ /obj/item/assembly/health = 1,
+ /obj/item/bodypart/arm/right/robot = 1,
+
+ )
+ parts = list(/obj/item/reagent_containers/cup/bucket = 1)
+ time = 5 SECONDS
+ category = CAT_ROBOT
diff --git a/monkestation/code/datums/id_trim/ruins.dm b/monkestation/code/datums/id_trim/ruins.dm
index 0635ac34baed..f10f534b3d40 100644
--- a/monkestation/code/datums/id_trim/ruins.dm
+++ b/monkestation/code/datums/id_trim/ruins.dm
@@ -1,2 +1,41 @@
+/obj/item/card/id/advanced/old
+ icon_state = "retro"
+ inhand_icon_state = "card-id"
+ worn_icon_state = "nothing"
+ lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
+
+/datum/id_trim/away/old/cmo
+ access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_COMMAND, ACCESS_AWAY_MEDICAL, ACCESS_AWAY_MAINTENANCE)
+ assignment = "Charlie Station Chief Medical Officer"
+ sechud_icon_state = SECHUD_CHIEF_MEDICAL_OFFICER_AWAY
+
+/datum/id_trim/away/old/chef
+ access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINTENANCE)
+ assignment = "Charlie Station Chef"
+ sechud_icon_state = SECHUD_CHEF_AWAY
+
+/datum/id_trim/away/old/explorer
+ access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SCIENCE, ACCESS_AWAY_MAINTENANCE, ACCESS_AWAY_SUPPLY, ACCESS_AWAY_GENERIC1, ACCESS_AWAY_GENERIC2, ACCESS_AWAY_GENERIC3, ACCESS_AWAY_GENERIC4) //purposefully has the most msc. access giving them a advantage for having less equipment than a normal explorer upon start.
+ assignment = "Charlie Station Explorer"
+ sechud_icon_state = SECHUD_EXPLORER_AWAY
+
+/datum/id_trim/away/old/sci
+ sechud_icon_state = SECHUD_SCIENTIST_AWAY
+ access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SCIENCE, ACCESS_RESEARCH)
+
+/datum/id_trim/away/old/sec
+ sechud_icon_state = SECHUD_SECURITY_OFFICER_AWAY
+
+/datum/id_trim/away/old/eng
+ sechud_icon_state = SECHUD_STATION_ENGINEER_AWAY
+
+/datum/id_trim/away/old/robo
+ sechud_icon_state = SECHUD_ROBOTICIST_AWAY
+ access = list(ACCESS_AWAY_GENERAL, ACCESS_ROBOTICS, ACCESS_ORDNANCE, ACCESS_RESEARCH, ACCESS_AWAY_SCIENCE)
+
+/datum/id_trim/away/old/apc
+ sechud_icon_state = SECHUD_APC_AWAY
+
/datum/id_trim/pirate/lustrous
sechud_icon_state = SECHUD_RADIANT
diff --git a/monkestation/code/datums/memory/key_memories.dm b/monkestation/code/datums/memory/key_memories.dm
new file mode 100644
index 000000000000..d03b2f8980fb
--- /dev/null
+++ b/monkestation/code/datums/memory/key_memories.dm
@@ -0,0 +1,8 @@
+/datum/memory/key/codewords
+ memory_flags = parent_type::memory_flags | MEMORY_NO_STORY
+
+/datum/memory/key/codewords/get_names()
+ return list("The code phrases used by the Syndicate: [jointext(GLOB.syndicate_code_phrase, ", ")].")
+
+/datum/memory/key/codewords/responses/get_names()
+ return list("The code responses used by the Syndicate: [jointext(GLOB.syndicate_code_response, ", ")].")
diff --git a/monkestation/code/datums/wires/airalarm.dm b/monkestation/code/datums/wires/airalarm.dm
new file mode 100644
index 000000000000..f0e76327fe47
--- /dev/null
+++ b/monkestation/code/datums/wires/airalarm.dm
@@ -0,0 +1,5 @@
+/datum/wires/airalarm/can_reveal_wires(mob/user)
+ if(HAS_TRAIT(user, TRAIT_KNOW_ENGI_WIRES))
+ return TRUE
+
+ return ..()
diff --git a/monkestation/code/datums/wires/mod.dm b/monkestation/code/datums/wires/mod.dm
new file mode 100644
index 000000000000..8834f7633342
--- /dev/null
+++ b/monkestation/code/datums/wires/mod.dm
@@ -0,0 +1,5 @@
+/datum/wires/mod/can_reveal_wires(mob/user)
+ if(HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES))
+ return TRUE
+
+ return ..()
diff --git a/monkestation/code/datums/wires/mulebot.dm b/monkestation/code/datums/wires/mulebot.dm
new file mode 100644
index 000000000000..0f94e9228c15
--- /dev/null
+++ b/monkestation/code/datums/wires/mulebot.dm
@@ -0,0 +1,5 @@
+/datum/wires/mulebot/can_reveal_wires(mob/user)
+ if(HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES))
+ return TRUE
+
+ return ..()
diff --git a/monkestation/code/datums/wires/vending.dm b/monkestation/code/datums/wires/vending.dm
new file mode 100644
index 000000000000..3e5d92fcce26
--- /dev/null
+++ b/monkestation/code/datums/wires/vending.dm
@@ -0,0 +1,5 @@
+/datum/wires/vending/can_reveal_wires(mob/user)
+ if(HAS_TRAIT(user, TRAIT_KNOW_ENGI_WIRES))
+ return TRUE
+
+ return ..()
diff --git a/monkestation/code/game/machinery/exp_cloner.dm b/monkestation/code/game/machinery/exp_cloner.dm
index 1dd46217facd..c9efbc167d1c 100644
--- a/monkestation/code/game/machinery/exp_cloner.dm
+++ b/monkestation/code/game/machinery/exp_cloner.dm
@@ -130,7 +130,7 @@
mob_occupant.mind.add_antag_datum(antag_object)
mob_occupant.grant_language(/datum/language/codespeak) // So you don't have to remember to grant each and every identical clone codespeak with the manual.
mob_occupant.remove_blocked_language(/datum/language/codespeak, source=LANGUAGE_ALL) // All the effects the codespeak manual would have.
- ADD_TRAIT(mob_occupant, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT)
+ ADD_TRAIT(mob_occupant.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT)
var/obj/item/implant/radio/syndicate/imp = new(src)
imp.implant(mob_occupant)
mob_occupant.faction |= ROLE_SYNDICATE
diff --git a/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm b/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm
index df453599a12a..10997d861408 100644
--- a/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -4,3 +4,7 @@
channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_MEDICAL = 1)
greyscale_config = /datum/greyscale_config/encryptionkey_security
greyscale_colors = "#820a16#280b1a"
+
+/obj/item/encryptionkey/headset_uncommon
+ name = "dusty encryption key"
+ channels = list(RADIO_CHANNEL_UNCOMMON = 1)
diff --git a/monkestation/code/game/objects/items/devices/radio/headset.dm b/monkestation/code/game/objects/items/devices/radio/headset.dm
index c266ed70b6b4..8be0cd0cbe8d 100644
--- a/monkestation/code/game/objects/items/devices/radio/headset.dm
+++ b/monkestation/code/game/objects/items/devices/radio/headset.dm
@@ -4,3 +4,22 @@
icon_state = "sec_headset"
worn_icon_state = "sec_headset"
keyslot = /obj/item/encryptionkey/headset_secmed
+
+/obj/item/radio/headset/headset_old
+ name = "old radio headset"
+ desc = "A headset years past its prime."
+
+/obj/item/radio/headset/headset_old/alt
+ name = "old security bowman headset"
+ desc = "A headset years past its prime. Protects ears from flashbangs."
+ keyslot = /obj/item/encryptionkey/headset_uncommon
+ icon_state = "med_headset_alt"
+ worn_icon_state = "med_headset_alt"
+
+/obj/item/radio/headset/headset_old/alt/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
+
+/obj/item/radio/headset/heads/headset_old
+ name = "\proper old commander headset"
+ desc = "A authoritative headset years past its prime. Dust cakes its old design."
diff --git a/monkestation/code/game/objects/items/plushies.dm b/monkestation/code/game/objects/items/plushies.dm
index 2ceb89b5135c..b1646442d8f5 100644
--- a/monkestation/code/game/objects/items/plushies.dm
+++ b/monkestation/code/game/objects/items/plushies.dm
@@ -61,7 +61,7 @@
icon = 'monkestation/icons/obj/plushes.dmi'
icon_state = "durrcell"
squeak_override = list('monkestation/sound/voice/durrcell-squeak.ogg'=1)
-
+/*
/obj/item/toy/plush/Eeble
name = "Eeble plushie"
attack_verb_simple = list("Eeble","prybar")
@@ -69,3 +69,4 @@
desc = "Eeble is Eeble"
icon = 'monkestation/icons/obj/plushes.dmi'
icon_state = "eeble"
+*/
diff --git a/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm b/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm
index b930b3c29ade..4266675ac77f 100644
--- a/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm
+++ b/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm
@@ -1,7 +1,7 @@
/obj/item/flashlight/lantern/rayne
name = "lantern"
- icon_state = "lantern"
- inhand_icon_state = "lantern"
+ icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi'
+ icon_state = "rayne_lantern"
lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi'
desc = "A lantern that hangs off the shoulder providing some warmth and lighting with an incandescent heat lamp. \
@@ -9,12 +9,10 @@
It is stamped with a Rayne Corp logo on the bottom."
light_outer_range = 5// luminosity when on
light_system = OVERLAY_LIGHT
- icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi'
- icon_state = "rayne_lantern"
- inhand_icon_state = "lantern" // todo
+ inhand_icon_state = "rayne_lantern"
worn_icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi'
worn_icon_state = "rayne_lantern_worn"
- slot_flags = ITEM_SLOT_NECK
+ slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_BELT
/obj/item/flashlight/lantern/rayne/process(seconds_per_tick)
diff --git a/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm b/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm
index 4d941386305e..9401893bae44 100644
--- a/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm
+++ b/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm
@@ -1,4 +1,129 @@
+#define RAYNE_MENDER_SPEECH "monkey_companies/rayne_mender.json"
+/// How long the gun should wait between speaking to lessen spam
+#define RAYNE_MENDER_SPEECH_COOLDOWN 5 SECONDS
+/// What color is the default kill mode for these guns, used to make sure the chat colors are right at roundstart
+#define DEFAULT_RUNECHAT_COLOR "#06507a"
+
+
/obj/item/storage/medkit/rayne
name = "Rayne Corp Health Analyzer Kit"
- icon = 'icons/obj/device.dmi'
+ icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi'
+ icon_state = "rayne_medkit"
+ inhand_icon_state = "coronerkit"
+ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
item_flags = NOBLUDGEON
+ var/speech_json_file = RAYNE_MENDER_SPEECH
+ COOLDOWN_DECLARE(last_speech)
+ damagetype_healed = HEAL_ALL_DAMAGE
+
+/obj/item/storage/medkit/rayne/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+ atom_storage.max_slots = 14
+ atom_storage.max_total_storage = 28
+
+/obj/item/storage/medkit/rayne/equipped(mob/user, slot, initial)
+ . = ..()
+ if(slot & ITEM_SLOT_HANDS)
+ speak_up("pickup")
+
+/obj/item/storage/medkit/rayne/dropped(mob/user, silent)
+ . = ..()
+ if(src in user.contents)
+ return // If they're still holding us or have us on them, dw about it
+ speak_up("putdown")
+
+/obj/item/storage/medkit/rayne/PopulateContents()
+ if(empty)
+ return
+ var/static/list/items_inside = list(
+ /obj/item/stack/medical/suture/medicated = 2,
+ /obj/item/stack/medical/mesh/advanced = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 2,
+ /obj/item/reagent_containers/hypospray/medipen/atropine = 2,
+ /obj/item/reagent_containers/syringe = 1,
+ /obj/item/reagent_containers/cup/bottle/formaldehyde = 1,
+ /obj/item/reagent_containers/hypospray/medipen/morphine = 1,
+ /obj/item/reagent_containers/hypospray/medipen/salbutamol = 1,
+ /obj/item/storage/pill_bottle/multiver = 1
+ )
+ generate_items_inside(items_inside,src)
+
+/obj/item/storage/medkit/rayne/attack(mob/living/M, mob/living/carbon/human/user)
+ if(!user.can_read(src) || user.is_blind())
+ return
+
+ flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning
+
+ if(ispodperson(M))
+ speak_up("podnerd")
+ return
+
+ user.visible_message(span_notice("[user] analyzes [M]'s vitals."))
+ playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50)
+ healthscan(user, M, 0, FALSE)
+ add_fingerprint(user)
+ judge_health(M)
+
+
+//This proc controls what the medkit says when scanning a person, and recommends a best course of treatment (barely)
+/obj/item/storage/medkit/rayne/proc/judge_health(mob/living/target)
+
+ var/obj/item/organ/internal/brain/targetbrain
+ if(target.on_fire)
+ speak_up("onfire")
+ return
+ if(ishuman(target))
+ if(!target.get_organ_slot(ORGAN_SLOT_BRAIN))
+ speak_up("nobrain")
+ return
+ else
+ targetbrain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ if(targetbrain.damage > 150)
+ speak_up("braindamage")
+ return
+
+ if((target?.blood_volume <= BLOOD_VOLUME_SAFE) && !HAS_TRAIT(target, TRAIT_NOBLOOD))
+ speak_up("lowblood")
+ return
+
+ var/brute = target.getBruteLoss()
+ var/oxy = target.getOxyLoss()
+ var/tox = target.getToxLoss()
+ var/burn = target.getFireLoss()
+ var/big = max(brute,oxy,burn,tox)
+ if((brute + burn) >= 350)
+ speak_up("fuckedup")
+ return
+ if(big >= 5)
+ if(brute == big)
+ speak_up("brute")
+ return
+ if(burn == big)
+ speak_up("burn")
+ return
+ if(tox == big)
+ speak_up("tox")
+ return
+ if(oxy == big)
+ speak_up("oxy")
+ return
+ if(target.stat == DEAD)
+ speak_up("dead")
+ return
+
+ speak_up("fine")
+ return
+
+
+
+/obj/item/storage/medkit/rayne/proc/speak_up(json_string, ignores_cooldown = FALSE)
+ if(!json_string)
+ return
+ if(!ignores_cooldown && !COOLDOWN_FINISHED(src, last_speech))
+ return
+ say(pick_list_replacements(speech_json_file, json_string))
+ playsound(src, 'sound/creatures/tourist/tourist_talk.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = rand(3.5))
+ Shake(2, 2, 1 SECONDS)
+ COOLDOWN_START(src, last_speech, RAYNE_MENDER_SPEECH)
diff --git a/monkestation/code/modules/ERT/ERT_outfits.dm b/monkestation/code/modules/ERT/ERT_outfits.dm
new file mode 100644
index 000000000000..432a00258836
--- /dev/null
+++ b/monkestation/code/modules/ERT/ERT_outfits.dm
@@ -0,0 +1,717 @@
+// this is going to be so much work but let's see how far i can get
+//-----------------
+// Ordering:
+// ROLES
+// *Generic
+// *Commander
+// *Medic
+// *Security Officer
+// *Engineer
+// *Janitor
+// *Chaplain
+// *Clown
+// OTHER
+
+/datum/antagonist/ert/generic
+ name = "Emergency Response Officer"
+ role = "Officer"
+ outfit = /datum/outfit/centcom/ert/generic
+ ert_job_path = /datum/job/ert/generic
+
+/datum/antagonist/ert/generic/greet()
+ ..()
+ owner.current.playsound_local(get_turf(owner.current), 'monkestation/sound/ambience/antag/ert.ogg', 100, 0, use_reverb = FALSE) //monkestation addition
+
+/datum/outfit/centcom/ert/generic
+ name = "Emergency Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic
+ box = /obj/item/storage/box/survival/ert
+ uniform = /obj/item/clothing/under/rank/centcom/officer
+ ears = /obj/item/radio/headset/headset_cent/alt
+ gloves = /obj/item/clothing/gloves/combat
+ mask = /obj/item/clothing/mask/gas/sechailer/swat/ert
+ shoes = /obj/item/clothing/shoes/combat
+ suit = /obj/item/clothing/suit/space/ert
+ suit_store = /obj/item/gun/energy/e_gun
+ head = /obj/item/clothing/head/helmet/space/ert
+ belt = /obj/item/tank/jetpack/oxygen/harness
+ back = /obj/item/storage/backpack/ert/generic
+ backpack_contents = list(
+ /obj/item/storage/medkit/regular = 1,
+ /obj/item/knife/combat = 1,
+ )
+ glasses = /obj/item/clothing/glasses/sunglasses
+ l_pocket = /obj/item/melee/baton/telescopic
+ r_pocket = /obj/item/restraints/handcuffs
+
+/datum/outfit/centcom/ert/generic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/cyberlink/nt_high/cyberlink = new()
+ cyberlink.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/chest/nutriment/plus/nutriment_pump = new()
+ nutriment_pump.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/commander
+ name = "Code Green Emergency Response Team Commander"
+ role = "Commander"
+ outfit = /datum/outfit/centcom/ert/generic/commander
+ plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander
+ ert_job_path = /datum/job/ert/commander
+
+/datum/outfit/centcom/ert/generic/commander
+ name = "Code Green Emergency Response Team Commander"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/commander
+ suit = /obj/item/clothing/suit/space/ert/commander
+ head = /obj/item/clothing/head/helmet/space/ert/commander
+ back = /obj/item/storage/backpack/ert/commander
+ backpack_contents = list(
+ /obj/item/storage/medkit/regular = 1,
+ /obj/item/knife/combat = 1,
+ /obj/item/pinpointer/nuke = 1,
+ )
+ glasses = /obj/item/clothing/glasses/sunglasses/big //bigger sunglasses means they are cooler and have more authority
+ additional_radio = /obj/item/encryptionkey/heads/captain
+ skillchips = list(/obj/item/skillchip/disk_verifier, /obj/item/skillchip/job/research_director)
+
+/datum/antagonist/ert/generic/commander/blue
+ name = "Code Blue Emergency Response Team Commander"
+ outfit = /datum/outfit/centcom/ert/generic/commander/blue
+
+/datum/outfit/centcom/ert/generic/commander/blue
+ name = "Code Blue Emergency Response Team Commander"
+
+ shoes = /obj/item/clothing/shoes/magboots
+ backpack_contents = list(
+ /obj/item/storage/medkit/regular = 1,
+ /obj/item/knife/combat = 1,
+ /obj/item/door_remote/omni = 1,
+ /obj/item/pinpointer/nuke = 1,
+ /obj/item/gun/ballistic/automatic/pistol/m1911 = 1,
+ /obj/item/ammo_box/magazine/m45 = 1,
+ )
+ l_hand = /obj/item/storage/lockbox/loyalty
+
+/datum/outfit/centcom/ert/generic/commander/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new()
+ sec_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/commander/red
+ name = "Code Red Emergency Response Team Commander"
+ outfit = /datum/outfit/centcom/ert/generic/commander/red
+
+/datum/outfit/centcom/ert/generic/commander/red
+ name = "Code Red Emergency Response Team Commander"
+
+ id = /obj/item/card/id/advanced/centcom/ert
+ suit = null
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/storage/belt/security/full/bola
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/commander
+ backpack_contents = list(
+ /obj/item/storage/medkit/advanced = 1,
+ /obj/item/knife/combat = 1,
+ /obj/item/door_remote/omni = 1,
+ /obj/item/pinpointer/nuke = 1,
+ /obj/item/storage/box/syndie_kit/imp_deathrattle/nanotrasen = 1,
+ /obj/item/gun/ballistic/automatic/pistol/m1911 = 1,
+ /obj/item/ammo_box/magazine/m45 = 2,
+ )
+ glasses = /obj/item/clothing/glasses/night
+ r_pocket = /obj/item/holosign_creator/security
+ l_hand = /obj/item/storage/lockbox/loyalty
+
+/datum/outfit/centcom/ert/generic/commander/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new()
+ sec_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/medical
+ name = "Code Green Medical Response Officer"
+ role = "Medical Officer"
+ outfit = /datum/outfit/centcom/ert/generic/medical
+ ert_job_path = /datum/job/ert/medical
+
+/datum/outfit/centcom/ert/generic/medical
+ name = "Code Green Medical Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/medical
+ gloves = /obj/item/clothing/gloves/latex/nitrile
+ suit = /obj/item/clothing/suit/space/ert/medical
+ suit_store = /obj/item/gun/energy/e_gun/mini
+ head = /obj/item/clothing/head/helmet/space/ert/medical
+ back = /obj/item/storage/backpack/ert/medical
+ backpack_contents = list(
+ /obj/item/storage/medkit/surgery = 1,
+ /obj/item/storage/belt/medical/paramedic = 1,
+ /obj/item/defibrillator/compact/loaded = 1,
+ /obj/item/emergency_bed = 1,
+ )
+ glasses = /obj/item/clothing/glasses/hud/health/sunglasses
+ additional_radio = /obj/item/encryptionkey/headset_med
+ skillchips = list(/obj/item/skillchip/entrails_reader)
+
+/datum/antagonist/ert/generic/medical/blue
+ name = "Code Blue Medical Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/medical
+
+/datum/outfit/centcom/ert/generic/medical/blue
+ name = "Code Blue Medical Response Officer"
+
+ shoes = /obj/item/clothing/shoes/magboots
+ gloves = /obj/item/clothing/gloves/latex/surgical
+ suit_store = /obj/item/gun/energy/e_gun
+ backpack_contents = list(
+ /obj/item/storage/medkit/advanced = 1,
+ /obj/item/storage/box/medipens = 1,
+ /obj/item/storage/belt/medical/ert = 1,
+ /obj/item/defibrillator/compact/loaded = 1,
+ /obj/item/reagent_containers/hypospray/cmo = 1, //this shouldn't cause any problems?
+ /obj/item/emergency_bed = 1,
+ /obj/item/healthanalyzer/advanced = 1,
+ )
+
+/datum/antagonist/ert/generic/medical/red
+ name = "Code Red Medical Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/medical/red
+
+/datum/outfit/centcom/ert/generic/medical/red
+ name = "Code Red Medical Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/medical
+ suit = null
+ gloves = /obj/item/clothing/gloves/latex/surgical
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/defibrillator/compact/combat/loaded/nanotrasen
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/medic
+ backpack_contents = list(
+ /obj/item/storage/medkit/advanced = 1,
+ /obj/item/storage/box/medipens = 1,
+ /obj/item/storage/belt/medical/paramedic = 1,
+ /obj/item/reagent_containers/hypospray/combat = 1,
+ /obj/item/pinpointer/crew = 1,
+ /obj/item/emergency_bed = 1,
+ /obj/item/healthanalyzer/advanced = 1,
+ )
+ glasses = /obj/item/clothing/glasses/night
+ r_pocket = /obj/item/holosign_creator/security
+ additional_radio = /obj/item/encryptionkey/heads/cmo
+
+/datum/outfit/centcom/ert/generic/medical/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/arm/item_set/surgery/surgery_toolset = new()
+ surgery_toolset.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/eyes/hud/medical/med_hud = new()
+ med_hud.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/brain/linked_surgery/serverlink = new()
+ serverlink.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/security
+ name = "Code Green Security Response Officer"
+ role = "Security Officer"
+ outfit = /datum/outfit/centcom/ert/generic/security
+ ert_job_path = /datum/job/ert/security
+
+/datum/outfit/centcom/ert/generic/security
+ name = "Code Green Security Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/security
+ suit = /obj/item/clothing/suit/space/ert/security
+ head = /obj/item/clothing/head/helmet/space/ert/security
+ back = /obj/item/storage/backpack/ert/security
+ backpack_contents = list(
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/flashbang = 2,
+ /obj/item/storage/belt/security/full/bola = 1,
+ )
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ r_pocket = /obj/item/holosign_creator/security
+ additional_radio = /obj/item/encryptionkey/headset_sec
+
+/datum/antagonist/ert/generic/security/blue
+ name = "Code Blue Security Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/security/blue
+
+/datum/outfit/centcom/ert/generic/security/blue
+ name = "Code Blue Security Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/security
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ shoes = /obj/item/clothing/shoes/magboots
+ suit = /obj/item/clothing/suit/space/ert/security
+ suit_store = /obj/item/gun/energy/laser
+ back = /obj/item/storage/backpack/ert/security
+ backpack_contents = list(
+ /obj/item/knife/combat = 1,
+ /obj/item/storage/box/teargas = 1,
+ /obj/item/grenade/flashbang = 2,
+ /obj/item/gun/energy/disabler = 1,
+ /obj/item/storage/belt/security/full/bola = 1,
+ )
+
+/datum/antagonist/ert/generic/security/red
+ name = "Code Red Security Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/security/red
+
+/datum/outfit/centcom/ert/generic/security/red
+ name = "Code Red Security Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/security
+ suit = null
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/storage/belt/security/full/bola
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/security
+ backpack_contents = list(
+ /obj/item/knife/combat = 1,
+ /obj/item/storage/box/teargas = 1,
+ /obj/item/storage/box/flashbangs = 1,
+ /obj/item/storage/box/stingbangs = 1,
+ /obj/item/shield/riot/tele = 1,
+ )
+ glasses = /obj/item/clothing/glasses/night
+ additional_radio = /obj/item/encryptionkey/heads/hos
+
+/datum/outfit/centcom/ert/generic/security/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new()
+ sec_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/engineer
+ name = "Code Green Engineering Response Officer"
+ role = "Engineering Officer"
+ outfit = /datum/outfit/centcom/ert/generic/engineer
+ ert_job_path = /datum/job/ert/engineer
+
+/datum/outfit/centcom/ert/generic/engineer
+ name = "Code Green Engineering Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/engineer
+ shoes = /obj/item/clothing/shoes/magboots
+ suit = /obj/item/clothing/suit/space/ert/engineer
+ suit_store = /obj/item/gun/energy/e_gun/mini
+ head = /obj/item/clothing/head/helmet/space/ert/engineer
+ back = /obj/item/storage/backpack/ert/engineer
+ backpack_contents = list(
+ /obj/item/storage/belt/utility/full/engi = 1,
+ /obj/item/construction/rcd/loaded = 1,
+ /obj/item/rcd_ammo/large = 1,
+ /obj/item/analyzer = 1,
+ /obj/item/extinguisher = 1,
+ /obj/item/pipe_dispenser = 1,
+ )
+ glasses = /obj/item/clothing/glasses/meson/engine
+ additional_radio = /obj/item/encryptionkey/headset_eng
+ skillchips = list(/obj/item/skillchip/job/engineer, /obj/item/skillchip/job/roboticist)
+
+/datum/antagonist/ert/generic/engineer/blue
+ name = "Code Blue Engineering Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/engineer/blue
+
+/datum/outfit/centcom/ert/generic/engineer/blue
+ name = "Code Blue Engineering Response Officer"
+
+ shoes = /obj/item/clothing/shoes/magboots/advance
+ suit_store = /obj/item/gun/energy/e_gun
+ back = /obj/item/storage/backpack/ert/engineer
+ backpack_contents = list(
+ /obj/item/storage/belt/utility/full/powertools = 1,
+ /obj/item/storage/box/rcd_upgrades = 1,
+ /obj/item/construction/rcd/loaded = 1,
+ /obj/item/rcd_ammo/large = 1,
+ /obj/item/analyzer/ranged = 1,
+ /obj/item/extinguisher/advanced = 1,
+ /obj/item/pipe_dispenser = 1,
+ )
+
+/datum/outfit/centcom/ert/generic/engineer/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic/diagnostic_hud = new()
+ diagnostic_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/engineer/red
+ name = "Code Red Engineering Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/engineer/red
+
+/datum/outfit/centcom/ert/generic/engineer/red
+ name = "Code Red Engineering Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/engineer
+ shoes = /obj/item/clothing/shoes/combat
+ suit = null
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/storage/bag/sheetsnatcher
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/engineer
+ backpack_contents = list(
+ /obj/item/construction/rcd/loaded/upgraded = 1,
+ /obj/item/rcd_ammo/large = 1,
+ /obj/item/analyzer/ranged = 1,
+ /obj/item/pipe_dispenser = 1,
+ /obj/item/holosign_creator/atmos = 1,
+ /obj/item/t_scanner = 1,
+ /obj/item/stack/cable_coil = 1,
+ )
+ glasses = /obj/item/clothing/glasses/meson/night
+ additional_radio = /obj/item/encryptionkey/heads/ce
+ r_pocket = /obj/item/holosign_creator/security
+
+/datum/outfit/centcom/ert/generic/engineer/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic/diagnostic_hud = new()
+ diagnostic_hud.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/arm/item_set/toolset/toolset_implant = new()
+ toolset_implant.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/janitor
+ name = "Code Green Janitorial Response Officer"
+ role = "Janitorial Officer"
+ outfit = /datum/outfit/centcom/ert/generic/janitor
+ ert_job_path = /datum/job/ert/janitor
+
+/datum/outfit/centcom/ert/generic/janitor
+ name = "Code Green Janitorial Response Officer"
+ id = /obj/item/card/id/advanced/centcom/ert/generic/janitor
+ shoes = /obj/item/clothing/shoes/magboots
+ suit = /obj/item/clothing/suit/space/ert/janitor
+ suit_store = /obj/item/gun/energy/e_gun/mini
+ head = /obj/item/clothing/head/helmet/space/ert/janitor
+ back = /obj/item/storage/backpack/ert/janitor
+ backpack_contents = list(
+ /obj/item/storage/belt/janitor/full = 1,
+ /obj/item/storage/box/lights/mixed = 1,
+ /obj/item/mop/advanced = 1,
+ /obj/item/pushbroom = 1,
+ /obj/item/reagent_containers/spray/drying = 1,
+ /obj/item/grenade/chem_grenade/cleaner = 2,
+ )
+ l_hand = /obj/item/storage/bag/trash
+ additional_radio = /obj/item/encryptionkey/headset_service
+ skillchips = list(/obj/item/skillchip/job/janitor)
+
+/datum/antagonist/ert/generic/janitor/blue
+ name = "Code Blue Janitorial Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/janitor/blue
+
+/datum/outfit/centcom/ert/generic/janitor/blue
+ name = "Code Blue Janitorial Response Officer"
+ shoes = /obj/item/clothing/shoes/magboots/advance
+ suit_store = /obj/item/gun/energy/e_gun
+ backpack_contents = list(
+ /obj/item/storage/belt/janitor/full/ert = 1,
+ /obj/item/mop/advanced = 1,
+ /obj/item/pushbroom = 1,
+ /obj/item/reagent_containers/spray/drying = 1,
+ /obj/item/grenade/chem_grenade/cleaner = 2,
+ /obj/item/scythe/compact = 1,
+ /obj/item/grenade/chem_grenade/antiweed = 1,
+ )
+ l_hand = /obj/item/storage/bag/trash/bluespace
+ additional_radio = /obj/item/encryptionkey/headset_service
+ skillchips = list(/obj/item/skillchip/job/janitor)
+
+/datum/antagonist/ert/generic/janitor/red
+ name = "Code Red Janitorial Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/janitor/red
+
+/datum/outfit/centcom/ert/generic/janitor/red
+ name = "Code Red Janitorial Response Officer"
+ id = /obj/item/card/id/advanced/centcom/ert/janitor
+ shoes = /obj/item/clothing/shoes/combat
+ suit = null
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/storage/belt/janitor/full/ert
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/janitor
+ backpack_contents = list(
+ /obj/item/mop/advanced = 1,
+ /obj/item/pushbroom = 1,
+ /obj/item/reagent_containers/spray/drying = 1,
+ /obj/item/grenade/clusterbuster/cleaner = 2,
+ /obj/item/scythe/compact = 1,
+ /obj/item/grenade/clusterbuster/antiweed = 1,
+ )
+ l_hand = /obj/item/storage/bag/trash/bluespace
+ glasses = /obj/item/clothing/glasses/night
+ additional_radio = /obj/item/encryptionkey/heads/hop
+
+/datum/antagonist/ert/generic/chaplain
+ name = "Code Green Religious Response Officer"
+ role = "Religious Officer"
+ outfit = /datum/outfit/centcom/ert/generic/chaplain
+ ert_job_path = /datum/job/ert/chaplain
+
+/datum/antagonist/ert/generic/chaplain/on_gain()
+ . = ..()
+ owner.holy_role = HOLY_ROLE_PRIEST
+
+/datum/outfit/centcom/ert/generic/chaplain
+ name = "Code Green Religious Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/chaplain
+ suit = /obj/item/clothing/suit/space/ert/chaplain
+ suit_store = /obj/item/gun/energy/disabler
+ head = /obj/item/clothing/head/helmet/space/ert/chaplain
+ back = /obj/item/storage/backpack/ert
+ backpack_contents = list(
+ /obj/item/storage/belt/security/full/bola = 1,
+ /obj/item/nullrod = 1,
+ /obj/item/book/bible = 1,
+ /obj/item/reagent_containers/cup/glass/bottle/holywater = 1,
+ )
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ r_pocket = /obj/item/holosign_creator/security
+ additional_radio = /obj/item/encryptionkey/headset_sec
+ skillchips = list(/obj/item/skillchip/entrails_reader)
+
+/datum/antagonist/ert/generic/chaplain/blue
+ name = "Code Blue Religious Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/chaplain/blue
+
+/datum/outfit/centcom/ert/generic/chaplain/blue
+ name = "Code Blue Religious Response Officer"
+
+ suit_store = /obj/item/gun/energy/e_gun
+ shoes = /obj/item/clothing/shoes/magboots
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ backpack_contents = list(
+ /obj/item/nullrod = 1,
+ /obj/item/book/bible = 1,
+ /obj/item/reagent_containers/cup/glass/bottle/holywater = 1,
+ /obj/item/grenade/flashbang = 2,
+ /obj/item/gun/energy/disabler = 1,
+ /obj/item/storage/belt/security/full/bola = 1,
+ )
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ additional_radio = /obj/item/encryptionkey/headset_sec
+ skillchips = list(/obj/item/skillchip/entrails_reader)
+
+/datum/antagonist/ert/generic/chaplain/red
+ name = "Code Red Religious Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/chaplain/red
+
+/datum/outfit/centcom/ert/generic/chaplain/red
+ name = "Code Red Religious Response Officer"
+ id = /obj/item/card/id/advanced/centcom/ert/chaplain
+ suit = null
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ suit_store = /obj/item/gun/energy/e_gun/stun
+ head = null
+ belt = /obj/item/nullrod/scythe/talking/chainsword
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/chaplain
+ backpack_contents = list(
+ /obj/item/book/bible = 1,
+ /obj/item/reagent_containers/cup/glass/bottle/holywater = 2,
+ /obj/item/reagent_containers/hypospray/combat/heresypurge = 1,
+ /obj/item/storage/box/flashbangs = 1,
+ /obj/item/storage/belt/security/full/bola = 1,
+ )
+ glasses = /obj/item/clothing/glasses/night
+ additional_radio = /obj/item/encryptionkey/heads/hos
+
+/datum/outfit/centcom/ert/generic/chaplain/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new()
+ sec_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/clown
+ name = "Code Honk Entertainment Response Officer"
+ role = "Entertainment Officer"
+ outfit = /datum/outfit/centcom/ert/generic/clown
+ plasmaman_outfit = /datum/outfit/plasmaman/party_comedian
+ ert_job_path = /datum/job/ert/clown
+
+/datum/antagonist/ert/generic/clown/New()
+ . = ..()
+ name_source = GLOB.clown_names //they are a clown after all
+
+/datum/outfit/centcom/ert/generic/clown
+ name = "Code Honk Entertainment Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/generic/clown
+ box = /obj/item/storage/box/survival/ert
+ uniform = /obj/item/clothing/under/rank/civilian/clown
+ gloves = /obj/item/clothing/gloves/combat
+ mask = /obj/item/clothing/mask/gas/clown_hat
+ shoes = /obj/item/clothing/shoes/clown_shoes
+ suit = /obj/item/clothing/suit/space/ert/clown
+ suit_store = null
+ head = /obj/item/clothing/head/helmet/space/ert/clown
+ belt = /obj/item/tank/jetpack/oxygen/harness
+ back = /obj/item/storage/backpack/ert/clown
+ backpack_contents = list(
+ /obj/item/stamp/clown = 1,
+ /obj/item/reagent_containers/spray/waterflower/lube = 1,
+ /obj/item/food/grown/banana = 1,
+ /obj/item/instrument/bikehorn = 1,
+ /obj/item/food/pie/cream = 3,
+ )
+ glasses = /obj/item/clothing/glasses/sunglasses
+ l_pocket = /obj/item/bikehorn
+ r_pocket = /obj/item/restraints/handcuffs/cable/zipties/fake
+ implants = list(/obj/item/implant/sad_trombone)
+
+/datum/outfit/centcom/ert/generic/clown/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ suit_store = pick(
+ /obj/item/tank/internals/emergency_oxygen/engi/clown/n2o,
+ /obj/item/tank/internals/emergency_oxygen/engi/clown/bz,
+ /obj/item/tank/internals/emergency_oxygen/engi/clown/helium,
+ )
+
+/datum/outfit/centcom/ert/generic/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+
+ H.dna.add_mutation(/datum/mutation/human/clumsy)
+ for(var/datum/mutation/human/clumsy/M in H.dna.mutations)
+ M.mutadone_proof = TRUE
+ var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN]
+ ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT)
+ fan.show_to(H)
+ H.faction |= FACTION_CLOWN
+ if(!ishuman(H))
+ return
+ var/obj/item/organ/internal/butt/butt = H.get_organ_slot(ORGAN_SLOT_BUTT)
+ if(butt)
+ butt.Remove(H, 1)
+ QDEL_NULL(butt)
+ butt = new/obj/item/organ/internal/butt/clown
+ butt.Insert(H)
+
+ var/obj/item/organ/internal/bladder/bladder = H.get_organ_slot(ORGAN_SLOT_BLADDER)
+ if(bladder)
+ bladder.Remove(H, 1)
+ QDEL_NULL(bladder)
+ bladder = new/obj/item/organ/internal/bladder/clown
+ bladder.Insert(H)
+
+/datum/antagonist/ert/generic/clown/funny
+ name = "Code Honk! Entertainment Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/clown/funny
+
+/datum/outfit/centcom/ert/generic/clown/funny
+ name = "Code Honk! Entertainment Response Officer"
+
+ backpack_contents = list(
+ /obj/item/stamp/clown = 1,
+ /obj/item/reagent_containers/spray/waterflower/lube = 1,
+ /obj/item/food/grown/banana = 1,
+ /obj/item/instrument/bikehorn = 1,
+ /obj/item/food/pie/cream = 3,
+ /obj/item/stack/sheet/mineral/bananium/five = 1,
+ )
+ l_pocket = /obj/item/bikehorn/golden
+
+/datum/outfit/centcom/ert/generic/clown/funny/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/chest/knockout/punch_implant = new()
+ punch_implant.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/clown/funnier
+ name = "Code HONK!! Entertainment Response Officer"
+ outfit = /datum/outfit/centcom/ert/generic/clown/funnier
+
+/datum/outfit/centcom/ert/generic/clown/funnier
+ name = "Code HONK!! Entertainment Response Officer"
+
+ id = /obj/item/card/id/advanced/centcom/ert/clown
+ shoes = /obj/item/clothing/shoes/clown_shoes/combat
+ suit = null
+ suit_store = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot
+ head = null
+ belt = /obj/item/storage/belt/military/snack/pie
+ back = /obj/item/mod/control/pre_equipped/responsory/generic/clown
+ backpack_contents = list(
+ /obj/item/stamp/clown = 1,
+ /obj/item/reagent_containers/spray/waterflower/superlube = 1,
+ /obj/item/food/grown/banana = 1,
+ /obj/item/instrument/bikehorn = 1,
+ /obj/item/megaphone/clown = 1,
+ /obj/item/stack/sheet/mineral/bananium/five = 1,
+ /obj/item/suppressor = 1,
+ /obj/item/ammo_box/magazine/toy/smgm45/riot = 3,
+
+ )
+ glasses = /obj/item/clothing/glasses/night
+ additional_radio = /obj/item/encryptionkey/heads/hop
+ l_pocket = /obj/item/bikehorn/golden
+
+/datum/outfit/centcom/ert/generic/clown/funnier/pre_equip(mob/living/carbon/human/H, visualsOnly)
+ return
+
+/datum/outfit/centcom/ert/generic/clown/funnier/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/chest/knockout/punch_implant = new()
+ punch_implant.Insert(H, drop_if_replaced = FALSE)
+
+//------
+// Other
+//------
+
+/datum/antagonist/ert/generic/deathsquad
+ name = "Elite Deathsquad Commando"
+ role = "Commando"
+ outfit = /datum/outfit/centcom/ert/generic/deathsquad
+ ert_job_path = /datum/job/ert/deathsquad
+
+/datum/antagonist/ert/generic/deathsquad/New()
+ . = ..()
+ name_source = GLOB.commando_names
+
+/datum/outfit/centcom/ert/generic/deathsquad
+ name = "Elite Deathsquad Commando"
+
+ id = /obj/item/card/id/advanced/black/deathsquad
+ box = /obj/item/storage/box/survival/ert
+ uniform = /obj/item/clothing/under/rank/centcom/military
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ mask = /obj/item/clothing/mask/gas/sechailer/swat
+ shoes = /obj/item/clothing/shoes/combat/swat
+ suit = null
+ suit_store = /obj/item/gun/energy/pulse/loyalpin
+ head = null
+ belt = /obj/item/storage/belt/military/assault
+ back = /obj/item/mod/control/pre_equipped/apocryphal/elite
+ backpack_contents = list(
+ /obj/item/storage/box/medipens/advanced = 1,
+ /obj/item/storage/box/c4 = 1,
+ /obj/item/storage/box/x4 = 1,
+ /obj/item/storage/box/flashbangs = 1,
+ /obj/item/storage/box/teargas = 1,
+ /obj/item/pinpointer/nuke = 1,
+ /obj/item/gun/ballistic/revolver/mateba = 1,
+ /obj/item/ammo_box/a357 = 3,
+ )
+ glasses = /obj/item/clothing/glasses/thermal
+ l_pocket = /obj/item/melee/energy/sword/saber/purple //I am going to end to this, once and for all!
+ r_pocket = /obj/item/shield/energy
+ additional_radio = /obj/item/encryptionkey/heads/captain
+ implants = list(/obj/item/implant/krav_maga)
+
+/datum/outfit/centcom/ert/generic/deathsquad/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ var/obj/item/organ/internal/cyberimp/brain/anti_drop/nodrop = new()
+ nodrop.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/brain/anti_stun/rebooter = new()
+ rebooter.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/chest/reviver/reviver_implant = new()
+ reviver_implant.Insert(H, drop_if_replaced = FALSE)
+ var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new()
+ sec_hud.Insert(H, drop_if_replaced = FALSE)
+
+/datum/antagonist/ert/generic/deathsquad/dust
+ name = "Elite Deathsquad Commando"
+ outfit = /datum/outfit/centcom/ert/generic/deathsquad/dust
+
+/datum/outfit/centcom/ert/generic/deathsquad/dust
+ name = "Elite Deathsquad Commando (Do or Die!)"
+ implants = list(/obj/item/implant/dust, /obj/item/implant/krav_maga)
+
+
diff --git a/monkestation/code/modules/ERT/ERT_shuttle.dm b/monkestation/code/modules/ERT/ERT_shuttle.dm
new file mode 100644
index 000000000000..4e74f31a05ea
--- /dev/null
+++ b/monkestation/code/modules/ERT/ERT_shuttle.dm
@@ -0,0 +1,87 @@
+////////////// Areas //////////////
+/area/shuttle/ert
+ name = "ERT Shuttle"
+ requires_power = TRUE
+ static_lighting = TRUE
+ ambience_index = AMBIENCE_ENGI
+ area_limited_icon_smoothing = /area/shuttle/ert
+
+/area/shuttle/ert/bridge
+ name = "ERT Shuttle Bridge"
+
+/area/shuttle/ert/engineering
+ name = "ERT Shuttle Engineering"
+
+/area/shuttle/ert/armory
+ name = "ERT Shuttle Armory"
+
+/area/shuttle/ert/cargo
+ name = "ERT Shuttle Cargo Hold"
+
+/area/shuttle/ert/medical
+ name = "ERT Shuttle Medbay"
+
+/area/shuttle/ert/clonerybay
+ name = "ERT Shuttle Cloner Bay"
+
+/area/shuttle/ert/airlock
+ name = "ERT Shuttle Airlock"
+
+/area/shuttle/ert/airlock/secondary
+
+/area/shuttle/ert/powered
+ requires_power = FALSE
+
+
+/area/shuttle/ert/powered/deathsquad
+ name = "Deathsquad Shuttle"
+ requires_power = FALSE
+
+////////////// Consoles //////////////
+/obj/machinery/computer/shuttle/ert
+ name = "ERT shuttle console"
+ shuttleId = "ertshuttle"
+ possible_destinations = "ertshuttle_custom;syndicate_nw"
+ req_access = list(ACCESS_CENT_GENERAL)
+
+/obj/machinery/computer/shuttle/ert/deathsquad
+ name = "shuttle console"
+ req_access = list(ACCESS_CENT_SPECOPS)
+
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert
+ name = "ERT shuttle navigation computer"
+ desc = "Used to designate a precise transit location to travel to."
+ shuttleId = "ertshuttle"
+ lock_override = CAMERA_LOCK_STATION
+ shuttlePortId = "ertshuttle_custom"
+ see_hidden = FALSE
+ view_range = 4.5
+
+/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert/deathsquad
+ name = "shuttle navigation computer"
+
+/obj/docking_port/mobile/ert
+ name = "ERT shuttle"
+ shuttle_id = "ertshuttle"
+ rechargeTime = 3 MINUTES
+
+////////////// Shuttle Templates //////////////
+/datum/map_template/shuttle/ert/generic
+ suffix = "generic"
+ name = "ERT Shuttle"
+
+/datum/map_template/shuttle/ert/dropship
+ suffix = "dropship"
+ name = "ERT Dropship"
+
+/datum/map_template/shuttle/ert/dropship/clown
+ suffix = "dropship-clown"
+ name = "ERT Dropship"
+
+/datum/map_template/shuttle/ert/dropship/janitor
+ suffix = "dropship-janitor"
+ name = "ERT Dropship"
+
+/datum/map_template/shuttle/ert/deathsquad
+ suffix = "deathsquad"
+ name = "Deathsquad Shuttle"
diff --git a/monkestation/code/modules/ERT/equipment/ERT_id.dm b/monkestation/code/modules/ERT/equipment/ERT_id.dm
new file mode 100644
index 000000000000..d59ff7b03b3a
--- /dev/null
+++ b/monkestation/code/modules/ERT/equipment/ERT_id.dm
@@ -0,0 +1,190 @@
+// gonna just make the green and blue alert IDs. it's fine if they have all access on red and above i am guessing
+// Ordering:
+// ROLES
+// *Generic
+// *Commander
+// *Medic
+// *Security Officer
+// *Engineer
+// *Janitor
+// *Chaplain
+// *Clown
+// OTHER
+
+/datum/id_trim/centcom/ert/generic
+ assignment = "Emergency Response Officer"
+
+/datum/id_trim/centcom/ert/generic/New()
+ . = ..()
+ access = list(
+ ACCESS_MAINT_TUNNELS,
+ ACCESS_MEDICAL,
+ ACCESS_BRIG_ENTRANCE,
+ ACCESS_SECURITY,
+ ACCESS_CENT_GENERAL,
+ ACCESS_WEAPONS,
+ ACCESS_CARGO,
+ ACCESS_CONSTRUCTION,
+ ACCESS_HYDROPONICS,
+ ACCESS_MORGUE,
+ ACCESS_SCIENCE,
+ ACCESS_SERVICE,
+ ACCESS_EXTERNAL_AIRLOCKS,
+ ACCESS_RC_ANNOUNCE,
+ ACCESS_AUX_BASE,
+ ACCESS_BIT_DEN,
+ ACCESS_MECH_MINING,
+ ACCESS_MINING_STATION,
+ ACCESS_MINERAL_STOREROOM,
+ ACCESS_MINING,
+ ACCESS_SHIPPING,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic
+ name = "\improper CentCom ID"
+ desc = "An ERT ID card."
+ registered_age = null
+ registered_name = "Emergency Response Officer"
+ trim = /datum/id_trim/centcom/ert/generic
+
+/datum/id_trim/centcom/ert/generic/commander
+ assignment = JOB_ERT_COMMANDER
+ trim_state = "trim_ert_commander"
+ sechud_icon_state = SECHUD_EMERGENCY_RESPONSE_TEAM_COMMANDER
+
+/datum/id_trim/centcom/ert/generic/commander/New()
+ ..()
+ access |= list(
+ ACCESS_AI_UPLOAD,
+ ACCESS_ALL_PERSONAL_LOCKERS,
+ ACCESS_AUX_BASE,
+ ACCESS_COMMAND,
+ ACCESS_COURT,
+ ACCESS_EVA,
+ ACCESS_GATEWAY,
+ ACCESS_KEYCARD_AUTH,
+ ACCESS_TELEPORTER,
+ ACCESS_BRIG,
+ ACCESS_MECH_SECURITY,
+ ACCESS_PERMABRIG,
+ ACCESS_DETECTIVE,
+ ACCESS_ARMORY,
+ ACCESS_ENGINE_EQUIP,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/commander
+ registered_name = JOB_ERT_COMMANDER
+ trim = /datum/id_trim/centcom/ert/generic/commander
+
+/datum/id_trim/centcom/ert/generic/medical
+ assignment = JOB_ERT_MEDICAL_DOCTOR
+ trim_state = "trim_medicaldoctor"
+ subdepartment_color = COLOR_MEDICAL_BLUE
+ sechud_icon_state = SECHUD_MEDICAL_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/medical/New()
+ ..()
+ access |= list(
+ ACCESS_PLUMBING,
+ ACCESS_MECH_MEDICAL,
+ ACCESS_PHARMACY,
+ ACCESS_PSYCHOLOGY,
+ ACCESS_SURGERY,
+ ACCESS_VIROLOGY,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/medical
+ registered_name = JOB_ERT_MEDICAL_DOCTOR
+ trim = /datum/id_trim/centcom/ert/generic/medical
+
+/datum/id_trim/centcom/ert/generic/security
+ assignment = JOB_ERT_OFFICER
+ trim_state = "trim_securityofficer"
+ subdepartment_color = COLOR_SECURITY_RED
+ sechud_icon_state = SECHUD_SECURITY_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/security/New()
+ ..()
+ access |= list(
+ ACCESS_BRIG,
+ ACCESS_MECH_SECURITY,
+ ACCESS_PERMABRIG,
+ ACCESS_DETECTIVE,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/security
+ registered_name = JOB_ERT_OFFICER
+ trim = /datum/id_trim/centcom/ert/generic/security
+
+/datum/id_trim/centcom/ert/generic/engineer
+ assignment = JOB_ERT_ENGINEER
+ trim_state = "trim_stationengineer"
+ subdepartment_color = COLOR_ENGINEERING_ORANGE
+ sechud_icon_state = SECHUD_ENGINEERING_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/engineer/New()
+ ..()
+ access |= list(
+ ACCESS_ATMOSPHERICS,
+ ACCESS_ENGINEERING,
+ ACCESS_ENGINE_EQUIP,
+ ACCESS_MECH_ENGINE,
+ ACCESS_MINISAT,
+ ACCESS_TCOMMS,
+ ACCESS_TCOMMS_ADMIN,
+ ACCESS_TECH_STORAGE,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/engineer
+ registered_name = JOB_ERT_ENGINEER
+ trim = /datum/id_trim/centcom/ert/generic/engineer
+
+/datum/id_trim/centcom/ert/generic/janitor
+ assignment = JOB_ERT_JANITOR
+ trim_state = "trim_janitor"
+ subdepartment_color = COLOR_SERVICE_LIME
+ sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/janitor/New()
+ ..()
+ access |= list(
+ ACCESS_JANITOR,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/janitor
+ registered_name = JOB_ERT_JANITOR
+ trim = /datum/id_trim/centcom/ert/generic/janitor
+
+/datum/id_trim/centcom/ert/generic/chaplain
+ assignment = JOB_ERT_CHAPLAIN
+ trim_state = "trim_chaplain"
+ subdepartment_color = "#58C800"
+ sechud_icon_state = SECHUD_RELIGIOUS_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/chaplain/New()
+ ..()
+ access |= list(
+ ACCESS_CHAPEL_OFFICE,
+ ACCESS_CREMATORIUM,
+ ACCESS_THEATRE,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/chaplain
+ registered_name = JOB_ERT_CHAPLAIN
+ trim = /datum/id_trim/centcom/ert/generic/chaplain
+
+/datum/id_trim/centcom/ert/generic/clown
+ assignment = JOB_ERT_CLOWN
+ trim_state = "trim_clown"
+ subdepartment_color = COLOR_MAGENTA
+ sechud_icon_state = SECHUD_ENTERTAINMENT_RESPONSE_OFFICER
+
+/datum/id_trim/centcom/ert/generic/clown/New()
+ ..()
+ access |= list(
+ ACCESS_THEATRE,
+ )
+
+/obj/item/card/id/advanced/centcom/ert/generic/clown
+ registered_name = JOB_ERT_CLOWN
+ trim = /datum/id_trim/centcom/ert/generic/clown
diff --git a/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm b/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm
new file mode 100644
index 000000000000..e589af80af24
--- /dev/null
+++ b/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm
@@ -0,0 +1,341 @@
+/obj/item/implant/dust
+ name = "self immolation implant"
+ desc = "Dust to dust."
+ icon = 'icons/obj/nuke_tools.dmi'
+ icon_state = "supermatter_sliver_pulse"
+ actions_types = list(/datum/action/item_action/dust_implant)
+ var/popup = FALSE // is the window open?
+ var/active = FALSE
+
+/obj/item/implant/dust/proc/on_death(datum/source)
+ SIGNAL_HANDLER
+
+ // There may be other signals that want to handle mob's death
+ // and the process of activating destroys the body, so let the other
+ // signal handlers at least finish.
+ INVOKE_ASYNC(src, PROC_REF(activate), "death")
+
+/obj/item/implant/dust/get_data()
+ var/dat = {"Implant Specifications:
+ Name: Robust Corp RX-81 Employee Management Implant
+ Life: Activates upon death.
+ Important Notes: Highly unstable.
+