diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
index e15eda336c..e9f314cd1a 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
@@ -2718,7 +2718,7 @@ wt
av
kA
qo
-EL
+MP
MP
MP
Cb
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 9c2a1a2883..75efefd8e1 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -3098,7 +3098,9 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"agd" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"age" = (
@@ -6473,16 +6475,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"alX" = (
-/obj/machinery/button/door{
- id = "atmos";
- name = "Atmospherics Lockdown";
- pixel_x = 24;
- pixel_y = 4;
- req_access_txt = "24"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"alY" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -39435,7 +39427,10 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPe" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible,
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Pure to Ports"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPf" = (
@@ -39453,10 +39448,10 @@
/area/engine/atmos)
"bPh" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
"bPi" = (
@@ -40719,7 +40714,9 @@
/area/engine/atmos)
"bSM" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
/turf/open/floor/plating,
/area/engine/atmos)
"bSP" = (
@@ -41475,13 +41472,16 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUN" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUO" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Ports to External"
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -41912,8 +41912,9 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVZ" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Ports to External"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -46658,8 +46659,8 @@
/turf/closed/wall/r_wall,
/area/engine/atmos)
"ciu" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/open/floor/plating,
/area/engine/atmos)
"civ" = (
@@ -46703,8 +46704,7 @@
/obj/structure/reagent_dispensers/watertank,
/obj/item/extinguisher,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4;
- pixel_y = 0
+ dir = 4
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
@@ -53525,8 +53525,9 @@
/turf/open/floor/plasteel,
/area/security/brig)
"daq" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"daI" = (
@@ -53948,9 +53949,7 @@
/turf/open/floor/plating,
/area/security/prison)
"eqq" = (
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"eqA" = (
@@ -55365,7 +55364,7 @@
"ivJ" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
/turf/open/floor/plating,
@@ -55418,7 +55417,7 @@
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/open/floor/plating,
/area/engine/atmos)
"iLJ" = (
@@ -55709,11 +55708,7 @@
/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
"jBQ" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Pure to Ports"
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible,
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"jCq" = (
@@ -56729,6 +56724,10 @@
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
+"moS" = (
+/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"mps" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -57774,7 +57773,9 @@
/area/crew_quarters/fitness)
"pCj" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 5
+ },
/turf/open/floor/plating,
/area/engine/atmos)
"pDe" = (
@@ -57916,10 +57917,11 @@
/turf/open/floor/plasteel,
/area/security/processing)
"pUP" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"qaY" = (
/obj/structure/table/reinforced,
@@ -58470,6 +58472,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/fore)
+"rTo" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "External to Pumps"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"rTu" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -60035,18 +60044,18 @@
/turf/open/floor/plasteel/white,
/area/science/circuit)
"vPQ" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "External to Pumps"
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 10
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"vQf" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/components/binary/pump/on{
+/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Mix to External"
},
@@ -93434,7 +93443,7 @@ bQp
alk
gAu
eqq
-pUP
+bOd
bOd
bOd
bOd
@@ -93690,8 +93699,8 @@ bJF
bVX
bRA
bTP
+rTo
bOd
-vPQ
bOd
bOd
bOd
@@ -93948,7 +93957,7 @@ bMQ
bRC
rdl
daq
-bUN
+bUO
bOd
bOd
bOd
@@ -94205,7 +94214,7 @@ cBF
bRD
rdl
daq
-bUN
+bUO
bOd
bOd
bOd
@@ -94461,7 +94470,7 @@ bPc
bQs
cez
ceA
-bOd
+daq
bUO
bOd
bOd
@@ -94719,7 +94728,7 @@ bQv
bRF
bSM
bVZ
-bUN
+bOd
bOd
bOd
bOd
@@ -94974,7 +94983,7 @@ bOc
udT
omk
nTU
-bSM
+pUP
jBQ
agd
cCB
@@ -95488,8 +95497,8 @@ oVN
bPf
bQx
bRH
-bMQ
-bTU
+vPQ
+moS
kGv
bUS
cCE
@@ -96003,15 +96012,15 @@ ivJ
bQy
bRI
bSP
-bPh
+ivJ
jzM
bRI
cCF
-bPh
+ivJ
bQy
bRI
bQy
-bPh
+ivJ
bQy
bRI
bSP
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index e6eddb2777..9d36d26f6f 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -8268,6 +8268,9 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"apf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -37512,12 +37515,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bvb" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
/turf/open/floor/plasteel/dark/corner,
/area/hallway/primary/starboard)
"bvc" = (
@@ -37581,10 +37584,10 @@
/turf/open/floor/circuit/green,
/area/ai_monitored/turret_protected/ai)
"bvg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/effect/landmark/blobstart,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"bvh" = (
@@ -38444,33 +38447,36 @@
dir = 4;
pixel_x = -23
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/hallway/primary/starboard)
"bxa" = (
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bxb" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
/obj/machinery/light{
dir = 4
},
@@ -38498,8 +38504,8 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bxf" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
},
/turf/closed/wall,
/area/engine/atmos)
@@ -39190,6 +39196,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -39198,6 +39207,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner,
/area/hallway/primary/starboard)
"byR" = (
@@ -39205,21 +39217,19 @@
name = "Station Intercom (General)";
pixel_x = -30
},
-/obj/item/crowbar/red,
-/obj/item/wrench,
-/obj/item/clothing/mask/gas,
/obj/machinery/airalarm{
pixel_y = 23
},
-/obj/structure/table,
-/obj/item/storage/box,
-/obj/item/storage/box,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/computer/atmos_alert,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -39231,10 +39241,13 @@
/obj/machinery/light{
dir = 1
},
-/obj/machinery/computer/atmos_alert,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/computer/station_alert,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -39248,10 +39261,13 @@
/obj/machinery/camera{
c_tag = "Atmospherics - Control Room"
},
-/obj/machinery/computer/station_alert,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/structure/closet/secure_closet/atmospherics,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -39265,54 +39281,44 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/structure/closet/secure_closet/atmospherics,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/engine/atmos)
"byV" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/computer/atmos_control,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/checker,
+/area/engine/atmos)
+"byW" = (
/obj/structure/sign/plaques/atmos{
pixel_y = 32
},
-/obj/item/phone{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/cigbutt/cigarbutt{
- pixel_x = 5;
- pixel_y = -1
- },
-/obj/structure/table,
/obj/machinery/light_switch{
pixel_x = 26
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/computer/atmos_control,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/checker,
/area/engine/atmos)
-"byW" = (
-/obj/structure/table,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/clothing/head/welding{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/machinery/light_switch{
- pixel_x = -26
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
-/area/engine/atmos)
"byX" = (
/obj/machinery/power/apc/highcap/ten_k{
areastring = "/area/engine/atmos";
@@ -39323,8 +39329,15 @@
/obj/structure/cable/yellow{
icon_state = "0-2"
},
-/obj/machinery/camera{
- c_tag = "Atmospherics - Entrance"
+/obj/machinery/light_switch{
+ pixel_x = -26
+ },
+/obj/machinery/pipedispenser/disposal/transit_tube,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39333,16 +39346,27 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"byZ" = (
-/obj/machinery/space_heater,
/obj/machinery/firealarm{
pixel_y = 24
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/pipedispenser,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/camera{
+ c_tag = "Atmospherics - Entrance";
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bza" = (
@@ -40077,42 +40101,24 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAE" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark/corner,
+/area/engine/atmos)
+"bAF" = (
/obj/structure/chair/office/dark{
dir = 4
},
/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bAF" = (
-/obj/machinery/computer/atmos_control{
- dir = 8
- },
-/obj/machinery/requests_console{
- department = "Atmospherics";
- departmentType = 4;
- name = "Atmos RC";
- pixel_x = 30
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel/dark/corner,
-/area/engine/atmos)
"bAG" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/grenade/chem_grenade/smart_metal_foam,
-/obj/item/grenade/chem_grenade/smart_metal_foam,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Atmospherics Monitoring";
+ req_access_txt = "24"
},
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bAH" = (
/obj/structure/cable/yellow{
@@ -40121,6 +40127,7 @@
/obj/structure/cable/yellow{
icon_state = "2-4"
},
+/obj/machinery/light/small,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAI" = (
@@ -40131,10 +40138,11 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAJ" = (
-/obj/machinery/space_heater,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/pipedispenser/disposal,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAK" = (
@@ -40172,9 +40180,7 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAQ" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bAR" = (
@@ -40841,12 +40847,12 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bCj" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
/obj/structure/cable/yellow{
icon_state = "2-8"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bCk" = (
@@ -40856,39 +40862,50 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bCl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/computer/atmos_control{
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
dir = 8
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plasteel/dark/corner,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "atmos";
+ name = "Atmospherics Lockdown";
+ pixel_x = 26;
+ pixel_y = -26;
+ req_access_txt = "24"
+ },
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bCm" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
-"bCn" = (
-/obj/structure/table,
-/obj/item/storage/belt/utility,
-/obj/item/t_scanner,
-/obj/item/t_scanner,
-/obj/item/t_scanner,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
- dir = 8
+ dir = 4
},
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
+/obj/machinery/requests_console{
+ department = "Atmospherics";
+ departmentType = 4;
+ name = "Atmos RC";
+ pixel_x = 30
},
+/obj/machinery/vending/wardrobe/atmos_wardrobe,
+/turf/open/floor/plasteel/dark/corner,
+/area/engine/atmos)
+"bCn" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/suit_storage_unit/atmos,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bCo" = (
/obj/structure/cable/yellow{
@@ -40897,25 +40914,27 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bCp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Atmospherics Monitoring";
+ req_access_txt = "24"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bCq" = (
-/obj/machinery/space_heater,
-/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
/area/engine/atmos)
"bCr" = (
/obj/machinery/atmospherics/components/binary/pump/on{
@@ -40965,7 +40984,8 @@
/area/engine/atmos)
"bCy" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
/turf/open/floor/plating,
@@ -41608,35 +41628,22 @@
/area/engine/atmos)
"bDP" = (
/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/yellow{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bDQ" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel/dark/corner,
-/area/engine/atmos)
-"bDR" = (
-/obj/machinery/door/airlock/atmos/glass{
- name = "Atmospherics Monitoring";
- req_access_txt = "24"
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bDS" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -41658,6 +41665,9 @@
"bDV" = (
/obj/structure/closet/crate,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/camera{
+ c_tag = "Atmospherics - Entrance"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bDW" = (
@@ -42622,6 +42632,9 @@
name = "Atmospherics Blast Door"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/westleft{
+ req_access_txt = "24"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFG" = (
@@ -42640,51 +42653,17 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFI" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bFJ" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/dark/corner,
-/area/engine/atmos)
-"bFK" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/machinery/button/door{
- id = "atmos";
- name = "Atmospherics Lockdown";
- pixel_x = 26;
- pixel_y = -26;
- req_access_txt = "24"
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner,
-/area/engine/atmos)
-"bFL" = (
-/obj/machinery/holopad,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bFM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
@@ -42717,6 +42696,7 @@
name = "Distribution Loop";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFQ" = (
@@ -42726,15 +42706,13 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFR" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 6
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bFS" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 9
- },
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFT" = (
@@ -42777,6 +42755,7 @@
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"bFY" = (
@@ -43320,52 +43299,33 @@
/turf/open/floor/plasteel/dark/corner,
/area/hallway/primary/starboard)
"bHp" = (
-/obj/machinery/portable_atmospherics/canister/air,
/obj/machinery/light/small{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bHq" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bHr" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/manifold/orange/hidden,
/turf/open/floor/plasteel,
-/area/engine/atmos)
+/area/hallway/primary/starboard)
"bHs" = (
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-/obj/machinery/light/small{
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bHt" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bHu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
@@ -43387,9 +43347,8 @@
/area/engine/atmos)
"bHx" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
},
/turf/open/floor/plating,
/area/engine/atmos)
@@ -43418,8 +43377,8 @@
/area/engine/atmos)
"bHB" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
},
/turf/open/floor/plating,
/area/engine/atmos)
@@ -43991,13 +43950,13 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bIH" = (
@@ -44034,8 +43993,10 @@
/area/engine/atmos)
"bIK" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIL" = (
@@ -44046,53 +44007,27 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bIM" = (
+"bIN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
-/turf/closed/wall/r_wall,
+/obj/machinery/suit_storage_unit/atmos,
+/turf/open/floor/plasteel,
/area/engine/atmos)
-"bIN" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/rods/fifty,
+"bIO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/turf/open/floor/plasteel{
- dir = 1
- },
-/area/engine/atmos)
-"bIO" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Air to External Air Ports"
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
+/turf/closed/wall,
/area/engine/atmos)
"bIP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bIQ" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Air to External Air Ports"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -44100,37 +44035,42 @@
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIS" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
+/obj/item/beacon,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIT" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
- },
/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIU" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/obj/machinery/meter,
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Air to Ports"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIV" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 6
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to Ports"
},
-/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bIW" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible,
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/closed/wall,
/area/engine/atmos)
"bIX" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
@@ -44155,20 +44095,12 @@
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"bIZ" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "N2O to Pure"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
-"bJa" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
"bJb" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
@@ -44846,7 +44778,6 @@
/area/storage/tcom)
"bKt" = (
/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock/engineering{
name = "Telecomms Storage";
req_access_txt = "61"
@@ -44858,69 +44789,47 @@
/turf/open/floor/plasteel,
/area/storage/tcom)
"bKu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/atmos)
-"bKv" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "External Waste Ports to Filter"
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
-/area/engine/atmos)
-"bKw" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bKw" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bKx" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKy" = (
-/obj/item/beacon,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bKz" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 10
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bKA" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Air to Ports"
- },
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall,
/area/engine/atmos)
"bKB" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to Ports"
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
},
-/turf/open/floor/plasteel,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bKC" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Pure to Ports"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKD" = (
@@ -44928,24 +44837,30 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKE" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKF" = (
/obj/machinery/computer/atmos_control/tank/nitrous_tank{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 5
+ },
/turf/open/floor/plasteel/white/corner,
/area/engine/atmos)
"bKG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bKH" = (
@@ -45556,6 +45471,9 @@
/area/crew_quarters/theatre)
"bLS" = (
/obj/machinery/vending/autodrobe,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
/turf/open/floor/wood,
/area/crew_quarters/theatre)
"bLT" = (
@@ -45573,14 +45491,19 @@
c_tag = "Telecomms - Storage";
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/storage/tcom)
"bLV" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/holopad,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
/turf/open/floor/plasteel/dark,
/area/storage/tcom)
"bLW" = (
@@ -45608,9 +45531,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"bMa" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -45621,82 +45541,62 @@
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"bMb" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 0;
+ name = "External to Filter"
+ },
/turf/open/floor/plasteel/white/corner{
dir = 1
},
/area/engine/atmos)
-"bMc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bMd" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMe" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -26
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics - Central";
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating,
/area/engine/atmos)
"bMf" = (
-/obj/structure/rack,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Port to External"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMg" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bMh" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/crew_quarters/theatre)
"bMi" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/storage/tcom)
"bMj" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMk" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{
- dir = 1
- },
/obj/structure/window/reinforced{
dir = 4
},
@@ -45707,13 +45607,16 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 10
+ },
+/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plasteel/white/corner,
/area/engine/atmos)
"bMl" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bMm" = (
@@ -46538,57 +46441,46 @@
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/plating,
/area/maintenance/starboard)
-"bNP" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+"bNQ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 9
},
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bNR" = (
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bNS" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
+ },
/turf/open/floor/plasteel/white/corner{
dir = 1
},
/area/engine/atmos)
-"bNQ" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bNR" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/engine/atmos)
-"bNS" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
- },
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port Mix to West Ports"
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bNU" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port Mix to East Ports"
- },
-/obj/item/crowbar,
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bNV" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/door/window/northleft{
dir = 8;
name = "Inner Pipe Access";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bNW" = (
@@ -47227,9 +47119,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"bPo" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -47244,12 +47133,7 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel/white/corner{
dir = 1
},
@@ -47258,57 +47142,42 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPr" = (
-/obj/structure/closet/secure_closet/atmospherics,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{
+ dir = 1
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bPs" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
},
-/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/turf/open/floor/plasteel{
- dir = 1
- },
-/area/engine/atmos)
+/turf/closed/wall,
+/area/maintenance/starboard)
"bPt" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
+/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
+ dir = 1
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bPu" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/turf/open/floor/plasteel{
- dir = 1
- },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bPv" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 1;
+ name = "O2 to Airmix"
},
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bPw" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
},
@@ -47326,8 +47195,8 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -47921,33 +47790,40 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"bQS" = (
-/obj/machinery/suit_storage_unit/atmos,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bQT" = (
-/obj/structure/sign/warning/nosmoking,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bQU" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos,
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bQV" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bQW" = (
/obj/machinery/computer/atmos_control/tank/toxin_tank{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
},
@@ -47961,6 +47837,7 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQX" = (
@@ -48571,38 +48448,24 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/engine/atmos)
"bSh" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister,
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/turf/open/floor/plasteel{
- dir = 1
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 9
},
+/turf/open/floor/plating,
/area/engine/atmos)
"bSi" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/item/wrench,
-/turf/open/floor/plasteel,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold,
+/turf/open/floor/plating,
/area/engine/atmos)
"bSj" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{
- dir = 1
- },
/obj/structure/window/reinforced{
dir = 4
},
@@ -48617,6 +48480,8 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/space_heater,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSk" = (
@@ -48634,15 +48499,15 @@
/area/engine/atmos)
"bSn" = (
/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/structure/cable/yellow{
icon_state = "1-4"
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/port)
"bSo" = (
@@ -49026,6 +48891,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"bTe" = (
@@ -49059,41 +48927,18 @@
/obj/machinery/vending/wardrobe/atmos_wardrobe,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
-"bTj" = (
-/obj/machinery/requests_console{
- department = "Atmospherics";
- departmentType = 4;
- name = "Atmos RC";
- pixel_x = 30
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/shower{
- dir = 8;
- name = "emergency shower"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bTk" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port to Filter"
- },
-/obj/machinery/light/small{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
dir = 8
},
-/obj/machinery/camera{
- c_tag = "Atmospherics - Starboard";
- dir = 4
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bTl" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/heater{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bTm" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -49720,61 +49565,19 @@
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bUA" = (
-/obj/machinery/pipedispenser,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
},
-/turf/open/floor/plasteel,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bUB" = (
-/obj/machinery/light{
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
dir = 1
},
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/machinery/pipedispenser/disposal,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUC" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = 28
- },
-/obj/machinery/pipedispenser/disposal/transit_tube,
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUD" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Port to Filter"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUE" = (
-/obj/item/cigbutt,
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUF" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUG" = (
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible,
-/turf/open/floor/plasteel,
+/obj/structure/lattice/catwalk,
+/turf/open/space,
/area/engine/atmos)
"bUH" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
},
@@ -49792,8 +49595,8 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
@@ -50227,7 +50030,6 @@
/turf/closed/wall,
/area/hallway/secondary/service)
"bVA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock{
name = "Service Hall";
req_access_txt = "null";
@@ -50290,17 +50092,20 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/engine/atmos)
"bVG" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 1
- },
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -50319,37 +50124,16 @@
/area/engine/atmos)
"bVI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
+ dir = 9
},
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/engine/atmos)
-"bVJ" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
-/obj/machinery/meter,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bVK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bVL" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port to Fuel Pipe"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bVM" = (
/obj/machinery/computer/atmos_control/tank/carbon_tank{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/structure/window/reinforced{
dir = 4
},
@@ -50363,6 +50147,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bVN" = (
@@ -51030,6 +50815,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard)
"bXe" = (
@@ -51076,9 +50862,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 5
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXh" = (
@@ -51088,19 +50871,6 @@
/obj/structure/disposalpipe/segment{
dir = 9
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Fuel Pipe to Filter"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXi" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/dark/visible{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXj" = (
@@ -51108,56 +50878,11 @@
icon_state = "1-8"
},
/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXk" = (
-/obj/effect/landmark/start/atmospheric_technician,
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXl" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXm" = (
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXn" = (
-/obj/machinery/atmospherics/pipe/manifold/dark/visible,
-/obj/machinery/meter{
- color = ""
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXo" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Pure to Fuel Pipe"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXp" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
- dir = 4
+ dir = 9
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXq" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
- dir = 1
- },
/obj/structure/window/reinforced{
dir = 4
},
@@ -51172,6 +50897,8 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/space_heater,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bXr" = (
@@ -51626,8 +51353,8 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"bYt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -51638,6 +51365,9 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"bYv" = (
@@ -51664,36 +51394,11 @@
/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bYx" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bYy" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "N2 to Airmix"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bYz" = (
-/obj/machinery/atmospherics/components/trinary/mixer/airmix{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bYA" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bYB" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/light{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"bYC" = (
@@ -52199,9 +51904,6 @@
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"bZF" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 5
- },
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_x = -30
@@ -52209,20 +51911,14 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
/area/engine/atmos)
-"bZG" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bZH" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "N2 to Pure"
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 6
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -52232,13 +51928,6 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bZJ" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bZK" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
dir = 1
@@ -52247,7 +51936,7 @@
/area/engine/atmos)
"bZL" = (
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
- dir = 4
+ dir = 1
},
/obj/machinery/meter,
/turf/open/floor/plasteel,
@@ -52257,7 +51946,6 @@
dir = 4
},
/obj/structure/table,
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/item/paper_bin{
pixel_x = -2;
pixel_y = 8
@@ -52269,6 +51957,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 9
+ },
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
"bZN" = (
@@ -53039,6 +52730,9 @@
name = "Inner Pipe Access";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cbc" = (
@@ -53048,15 +52742,12 @@
/obj/structure/window/reinforced{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cbd" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
- dir = 4
- },
/obj/structure/window/reinforced,
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -53068,6 +52759,7 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbe" = (
@@ -53075,9 +52767,6 @@
/obj/machinery/computer/atmos_control/tank/nitrogen_tank{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/dark/visible,
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -53093,13 +52782,6 @@
/area/engine/atmos)
"cbf" = (
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 1;
- name = "Nitrogen Outlet"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -53110,6 +52792,10 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbg" = (
@@ -53123,16 +52809,14 @@
name = "Inner Pipe Access";
req_access_txt = "24"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cbh" = (
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -53143,6 +52827,10 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbi" = (
@@ -53150,9 +52838,6 @@
/obj/machinery/computer/atmos_control/tank/oxygen_tank{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -53163,17 +52848,13 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbj" = (
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 1;
- name = "O2 to Airmix"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -53184,6 +52865,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/components/trinary/mixer/airmix{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbk" = (
@@ -53197,41 +52881,35 @@
name = "Inner Pipe Access";
req_access_txt = "24"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cbl" = (
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
+ },
+/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"cbn" = (
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Air to Pure"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"cbo" = (
@@ -53239,15 +52917,21 @@
dir = 4
},
/obj/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 9
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/structure/rack,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas,
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"cbp" = (
@@ -54005,64 +53689,79 @@
/area/maintenance/disposal/incinerator)
"ccL" = (
/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
+ dir = 10
},
/turf/closed/wall/r_wall,
/area/engine/atmos)
"ccM" = (
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/valve/digital{
+ name = "Waste Release"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"ccN" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"ccO" = (
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 9
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"ccP" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"ccQ" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"ccR" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"ccS" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"ccT" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 1;
+ name = "Nitrogen Outlet"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"ccU" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
-"ccV" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
+"ccQ" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
},
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "N2 to Pure"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/atmos)
+"ccR" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/atmos)
+"ccS" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/atmos)
+"ccT" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Air to Pure"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/atmos)
+"ccV" = (
/obj/machinery/camera{
c_tag = "Atmospherics - Starboard Aft";
dir = 1
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
+ },
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"ccW" = (
@@ -54072,6 +53771,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"ccX" = (
@@ -55339,11 +55039,6 @@
/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/space,
/area/space/nearstation)
-"cfv" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/turf/open/space,
-/area/space/nearstation)
"cfw" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
@@ -76309,11 +76004,8 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cUR" = (
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/valve/digital{
- name = "Waste Release"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 5
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
@@ -76424,16 +76116,11 @@
/turf/open/space/basic,
/area/space)
"cVy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"cVz" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
+/turf/open/floor/plating,
/area/engine/atmos)
"cVC" = (
/mob/living/simple_animal/sloth/citrus,
@@ -76449,9 +76136,6 @@
/obj/machinery/computer/atmos_control/tank/air_tank{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
@@ -79116,43 +78800,23 @@
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/space,
/area/space/nearstation)
-"dhe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhg" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"dhi" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/door/window/northleft{
dir = 8;
name = "Inner Pipe Access";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"dhj" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"dhk" = (
@@ -79160,6 +78824,7 @@
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"dhl" = (
@@ -79737,12 +79402,12 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
/obj/structure/sign/poster/contraband/clown{
pixel_x = 32
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/wood,
/area/crew_quarters/theatre)
"din" = (
@@ -80972,15 +80637,14 @@
/turf/open/floor/plating,
/area/engine/atmos)
"dBM" = (
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Atmospherics Monitoring";
+ req_access_txt = "24"
+ },
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
+/turf/open/floor/plasteel,
/area/engine/atmos)
"dBN" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -81429,13 +81093,6 @@
},
/turf/open/floor/plasteel,
/area/hydroponics)
-"dDm" = (
-/obj/machinery/atmospherics/pipe/simple/dark/visible{
- dir = 4
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"dDo" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/white,
@@ -81654,6 +81311,15 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
+"dLd" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"dLK" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -81663,6 +81329,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"dOR" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/maintenance/starboard)
"dYu" = (
/obj/machinery/door/airlock/external{
name = "Auxiliary Airlock"
@@ -81737,10 +81409,10 @@
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
"eJq" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "CO2 to Pure"
+ name = "CO2 Outlet Pump"
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
@@ -81890,6 +81562,12 @@
/obj/item/integrated_circuit_printer,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"gRX" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"gXY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -81959,6 +81637,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/lab)
+"izM" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Pure to Ports"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"iCn" = (
/obj/machinery/vr_sleeper,
/turf/open/floor/plasteel,
@@ -81967,6 +81652,13 @@
/obj/structure/table,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"iRL" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 0;
+ name = "Mix to Engine"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"iSt" = (
/obj/machinery/door/airlock/grunge,
/obj/structure/cable/yellow{
@@ -81998,6 +81690,14 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"jsc" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/camera{
+ c_tag = "Atmospherics - Aft";
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/atmos)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -82023,6 +81723,15 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
+"jAj" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"jBe" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -82136,6 +81845,9 @@
dir = 1;
name = "O2 to Pure"
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"kOt" = (
@@ -82362,11 +82074,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"njd" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Plasma to Pure"
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"nnK" = (
@@ -82407,6 +82119,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"nBn" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"nIb" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/mining{
@@ -82419,6 +82137,15 @@
},
/turf/open/floor/plasteel,
/area/construction/storage/wing)
+"nLT" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard)
"nWb" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -82477,6 +82204,13 @@
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"oms" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 1
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"omz" = (
/obj/machinery/status_display/supply,
/turf/closed/wall,
@@ -82552,6 +82286,13 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"pbF" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"pmc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -82737,6 +82478,12 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"rpR" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"rzX" = (
/obj/structure/chair/office/light{
dir = 1;
@@ -82750,6 +82497,12 @@
},
/turf/open/floor/plasteel/white,
/area/science/lab)
+"rAc" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"rLV" = (
/obj/structure/table,
/obj/item/folder,
@@ -82817,6 +82570,13 @@
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"siI" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Port to Filter"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"soe" = (
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
@@ -82835,6 +82595,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"stP" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Port to Fuel Pipe"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"syk" = (
/obj/machinery/door/airlock{
id_tag = "AuxShower";
@@ -82983,6 +82749,10 @@
/obj/machinery/cryopod,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
+"uku" = (
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"upN" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -83201,6 +82971,12 @@
/obj/machinery/vending/cola/random,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"xgC" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"xkG" = (
/obj/item/integrated_electronics/wirer,
/obj/structure/table/reinforced,
@@ -121521,7 +121297,7 @@ bFA
byN
byN
byN
-byN
+bMh
byN
bPf
byN
@@ -121769,7 +121545,7 @@ bpc
dhQ
btw
buX
-bwY
+nLT
bGp
btw
dCV
@@ -122026,7 +121802,7 @@ alq
alq
alq
buY
-alq
+dOR
alq
alq
alq
@@ -122035,7 +121811,7 @@ alq
alq
alq
bKr
-bKr
+bMi
bKr
bKr
bKr
@@ -122541,7 +122317,7 @@ bry
bry
bva
bxa
-bry
+bHr
bAy
bAy
bDN
@@ -123055,7 +122831,7 @@ bhT
bhT
bvc
bxc
-bxc
+bHs
bAA
bCg
dBK
@@ -123311,7 +123087,7 @@ bpg
brA
bep
bvd
-bxd
+bxc
byR
bAB
bCh
@@ -123329,7 +123105,7 @@ bTh
bUx
aut
bXc
-apc
+bZz
bZE
caZ
ccJ
@@ -123568,7 +123344,7 @@ bpg
brB
bep
bve
-bxd
+bxc
byS
bAC
dBJ
@@ -123584,7 +123360,7 @@ apc
aqq
apc
bUy
-alq
+bPs
bXd
apf
bZE
@@ -123825,13 +123601,13 @@ bpg
brC
bep
bCK
-bxd
+bxc
byT
bAD
bCj
bDP
-bFI
-bHr
+bFH
+bHq
bIK
bBt
atm
@@ -123841,13 +123617,13 @@ apc
bSf
apc
bxc
-bxc
+bxg
bXe
bxc
bxc
bxc
ccL
-bxl
+bQT
cft
pOP
pOP
@@ -124082,13 +123858,13 @@ bph
brD
bep
bvg
-bxd
+bFI
byU
-bAE
-bCk
-dBJ
+bDU
+bKC
+bMd
bFJ
-bHs
+bHq
bIL
cVD
atm
@@ -124104,8 +123880,8 @@ bYv
bZF
cbb
ccM
-bxc
-aaf
+bQU
+bUB
aaf
aaf
aaf
@@ -124339,15 +124115,15 @@ bpi
brE
btz
bvh
-bxd
+bxc
byV
bAF
-bCl
-bDQ
-bFK
-bxk
-bIM
-bKu
+bCk
+dBJ
+bFH
+bHq
+bCk
+bxd
bxc
bxc
bxc
@@ -124358,11 +124134,11 @@ bxc
bVG
bXg
bAO
-bZG
+bCi
cbc
cUR
cVy
-cVz
+aaf
bAR
bAR
bAR
@@ -124597,14 +124373,14 @@ brF
bep
bvi
bxc
-bxc
-bxc
+byW
+bAE
bCm
-bDR
-bza
-bxl
+dBJ
+bCl
+bCn
bIN
-bxg
+bDQ
bMa
bMa
bPo
@@ -124618,7 +124394,7 @@ bCi
bCi
cbd
ccN
-ceg
+bQV
cfu
cgA
chN
@@ -124854,28 +124630,28 @@ brG
bep
bep
bxc
-byW
+bKy
bAG
-bCn
+bFR
dBM
-bFL
-bHt
+bza
+bIW
bIO
-bKv
+bMg
bMb
-bNP
+bNS
bPp
bPp
bSg
bDS
bDS
bVI
-bXi
+jAj
bYw
bYw
cbe
ccO
-bza
+bSh
aaf
gJs
chO
@@ -125118,22 +124894,22 @@ bDT
bFM
bHu
bIP
+dLd
bKw
-bMc
bNQ
bPq
bPq
-bHu
-bTj
-bHu
-bVJ
+bPq
+bPq
+bPq
+bPq
bXj
-bYx
-bMg
+bCi
+bCi
cbf
ccP
ceh
-cfv
+cfw
cgA
chP
cje
@@ -125374,23 +125150,23 @@ bCp
bDU
bFN
bAO
-bIQ
-bKx
-bMd
-bxd
-bPr
-bQS
-bPr
-bxd
-bUA
-bVK
-bXk
-bYy
+bIS
+siI
+bCi
+rAc
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bKD
+bCi
bZH
cbg
ccQ
-bza
-aaf
+bSi
+cfx
bAR
bAR
bAR
@@ -125632,17 +125408,17 @@ bDV
bFO
bHv
bIR
-bKy
-bMe
-bNR
-bNR
-bQT
-bNR
-bNR
-bUB
-bFO
-bXl
-bIS
+nBn
+stP
+xgC
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZI
cbh
ccR
@@ -125882,24 +125658,24 @@ bhT
bhT
bvm
bxg
-bza
-bza
-bza
-bza
-bFP
-bza
-bIS
bKz
+bKA
+bKA
+bMe
+bFP
+bMe
bMf
-bxd
-bPs
-bPs
-bSh
-bxd
-bUC
-bVK
-bXm
-bIS
+uku
+pbF
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZI
cbi
ccS
@@ -126146,20 +125922,20 @@ bDW
bFQ
bHw
bIT
-bKA
-bMg
-bNS
-bPt
-bQU
-bSi
-bTk
-bDW
-bFQ
-bXm
-bYz
-bZJ
+oms
+pbF
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bZI
cbj
-ccP
+bPv
ceh
cfw
cgA
@@ -126400,24 +126176,24 @@ bzc
bAL
ddF
bDX
-bFR
+bCi
bHx
bIU
-bKB
-bMh
+uku
+pbF
bCi
bCi
bKD
bCi
bCi
-bUD
bCi
-dDm
-bIS
+bCi
+dCY
+bCi
bZK
cbk
kJW
-ceh
+bSi
cfx
bAR
bAR
@@ -126658,22 +126434,22 @@ bAM
bCt
bDY
bFS
-bHy
+bKu
bIV
-bKC
-bMi
-bNU
-bMg
-bQV
-bMg
-bMg
-bUE
-bVL
-bXn
-bYA
-bZJ
+uku
+iRL
+rpR
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bZI
cbl
-bKG
+bQS
cei
cfy
cgB
@@ -126916,21 +126692,21 @@ bCu
bDZ
bFT
bHz
-bIW
+bNR
+izM
bKD
-dhe
-dhg
-bPu
-bPu
-bPu
-bTl
-bUF
+gRX
+bCi
+bCi
+bCi
+bCi
+bCi
bKD
-bXo
+bCi
bMj
bZI
cVJ
-ccQ
+ccS
bza
aaf
gJs
@@ -127175,20 +126951,20 @@ bFU
bHy
bIX
bKE
-bKE
-dhh
-bPv
-bKE
-bKE
-bKE
-bUG
-bKE
-bXp
-bKE
+bNR
+gRX
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZL
cbn
ccT
-cei
+bTk
cfy
cgC
chV
@@ -127444,8 +127220,8 @@ bXq
bNV
bZM
cbo
-ccU
-bxc
+ccS
+bTl
aaf
bAR
bAR
@@ -127692,17 +127468,17 @@ bKG
bMl
dhj
njd
-bKG
-bMl
-bKG
+jsc
+bPr
+bNU
eJq
-bKG
-bMl
+bNU
+bPt
bYB
-bKG
-bKG
+bNU
+bNU
ccV
-bxc
+bTl
aaf
aaf
aaf
@@ -127939,27 +127715,27 @@ aaa
aaf
bxc
bxc
-bxc
+bKB
bCy
-bza
+cei
bFX
-bza
-bJa
-bza
+cei
+bCy
+cei
bFX
dhk
-bJa
-bza
+bCy
+cei
bFX
-bza
-bJa
-bza
+cei
+bCy
+cei
bFX
-bxc
-bxc
-bxc
+bPu
+bPu
+bPu
ccW
-bxc
+bUA
aaf
aaa
aaa
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 64d4bd344a..4a14660e57 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -46,13 +46,13 @@
/area/engine/engineering)
"aag" = (
/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "engsm";
name = "Radiation Chamber Shutters"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"aah" = (
@@ -4719,9 +4719,13 @@
/area/security/warden)
"aml" = (
/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "0-8"
},
-/turf/closed/wall/r_wall,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
/area/security/warden)
"amm" = (
/obj/structure/cable{
@@ -5124,14 +5128,25 @@
dir = 8;
pixel_x = 28
},
-/turf/open/floor/plasteel/showroomfloor,
-/area/security/warden)
-"ana" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"ana" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"anb" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -5333,19 +5348,19 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/security/brig)
-"anB" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
+/turf/open/floor/plasteel,
+/area/security/brig)
+"anB" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
/turf/open/floor/plating,
/area/security/warden)
"anC" = (
@@ -5394,17 +5409,22 @@
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"anK" = (
/obj/structure/cable{
icon_state = "0-2"
},
-/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/security/warden)
"anL" = (
@@ -5671,6 +5691,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aop" = (
@@ -5896,11 +5919,10 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aoQ" = (
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-2"
- },
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/security/warden)
"aoR" = (
@@ -5958,6 +5980,9 @@
/obj/item/crowbar,
/obj/item/wrench,
/obj/item/laser_pointer/red,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"aoY" = (
@@ -5965,14 +5990,17 @@
/obj/machinery/light_switch{
pixel_y = -22
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"aoZ" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/security/warden)
"apa" = (
@@ -6266,32 +6294,22 @@
/turf/open/floor/plasteel,
/area/security/brig)
"apI" = (
+/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "0-2"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/closed/wall/r_wall,
+/obj/structure/cable,
+/turf/open/floor/plating,
/area/security/warden)
"apJ" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/security/warden)
"apK" = (
/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/machinery/door/window/brigdoor{
dir = 1;
name = "Armory Desk";
@@ -6311,14 +6329,11 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"apL" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/security/warden)
"apM" = (
@@ -6326,26 +6341,44 @@
name = "Brig Control";
req_access_txt = "3"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"apN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/closed/wall/r_wall,
-/area/security/warden)
-"apO" = (
/obj/structure/cable{
icon_state = "1-8"
},
-/turf/closed/wall/r_wall,
-/area/security/warden)
+/turf/open/floor/plasteel,
+/area/security/brig)
+"apO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"apP" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
@@ -6501,12 +6534,12 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqo" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -6519,6 +6552,12 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqp" = (
@@ -6546,12 +6585,21 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqr" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqs" = (
@@ -6562,6 +6610,12 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqt" = (
@@ -6574,6 +6628,12 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqu" = (
@@ -6582,6 +6642,9 @@
},
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqv" = (
@@ -7533,6 +7596,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"asx" = (
@@ -7552,6 +7618,12 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"asy" = (
@@ -7577,10 +7649,16 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"asA" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"asB" = (
@@ -7597,6 +7675,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"asC" = (
@@ -7994,31 +8075,34 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/security/brig)
"aty" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "2-8"
},
-/turf/closed/wall,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/security/brig)
"atz" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/structure/cable,
/turf/open/floor/plating,
/area/security/brig)
"atA" = (
@@ -8026,9 +8110,6 @@
id = "Cell 2";
name = "Cell 2"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -8036,19 +8117,19 @@
/turf/open/floor/plasteel,
/area/security/brig)
"atB" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/closed/wall,
+/turf/open/floor/plasteel,
/area/security/brig)
"atC" = (
/obj/machinery/door/window/brigdoor/security/cell{
id = "Cell 3";
name = "Cell 3"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -8056,14 +8137,12 @@
/turf/open/floor/plasteel,
/area/security/brig)
"atD" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/security/brig)
"atE" = (
@@ -8073,9 +8152,6 @@
name = "Brig";
req_access_txt = "63"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/red{
@@ -8087,13 +8163,11 @@
/turf/open/floor/plasteel,
/area/security/brig)
"atF" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
/obj/structure/cable{
icon_state = "0-2"
},
/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
/turf/open/floor/plating,
/area/security/brig)
"atG" = (
@@ -8507,6 +8581,9 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"auA" = (
@@ -8964,6 +9041,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"avv" = (
@@ -8995,6 +9075,9 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"avy" = (
@@ -9026,6 +9109,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"avB" = (
@@ -9605,18 +9691,21 @@
/turf/open/floor/plating,
/area/security/brig)
"awK" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "2-4"
},
-/obj/machinery/door/poddoor/preopen{
- id = "Secure Gate";
- name = "brig shutters"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/security/brig)
"awL" = (
/obj/machinery/door/firedoor,
@@ -9628,9 +9717,6 @@
name = "Brig";
req_access_txt = "63"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -9641,9 +9727,6 @@
/turf/open/floor/plasteel,
/area/security/brig)
"awM" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
/obj/structure/cable,
/obj/machinery/door/poddoor/preopen{
id = "Secure Gate";
@@ -55550,6 +55633,23 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"jen" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"jeq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55703,6 +55803,20 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"jxK" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"jzz" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external,
@@ -57681,6 +57795,7 @@
/area/maintenance/department/science)
"odM" = (
/obj/effect/landmark/barthpot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/carpet,
/area/library/lounge)
"oep" = (
@@ -59082,6 +59197,22 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"rdB" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"reH" = (
/obj/item/reagent_containers/food/drinks/bottle/vodka,
/obj/structure/disposalpipe/segment{
@@ -59148,6 +59279,18 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"rjF" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "Secure Gate";
+ name = "brig shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/security/brig)
"rmC" = (
/turf/open/space/basic,
/area/space/station_ruins)
@@ -60137,6 +60280,19 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"tTZ" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"tXn" = (
/obj/structure/sink{
dir = 4;
@@ -83186,7 +83342,7 @@ amf
amR
anA
aoo
-aoo
+ana
aoo
aqn
arl
@@ -83194,7 +83350,7 @@ asw
atx
auz
avu
-awJ
+rjF
axG
ayH
aAe
@@ -83442,16 +83598,16 @@ alx
amg
amg
anB
-ana
+amg
aoQ
-apI
+amg
aqo
alv
asx
-aty
ajM
ajM
-atB
+ajM
+akA
axH
ayI
aAf
@@ -83702,13 +83858,13 @@ anC
aop
aoR
apJ
-aqp
+apN
aon
-asy
+aty
atz
aux
avv
-awK
+awI
axG
ayL
aAi
@@ -83961,7 +84117,7 @@ aoS
apJ
aqq
aon
-asv
+atB
atA
auA
avw
@@ -84218,11 +84374,11 @@ aoT
apK
aqr
arl
-asw
-atx
+awK
+atD
auz
avx
-awJ
+rjF
axG
ayJ
aAg
@@ -84476,10 +84632,10 @@ apL
aqs
aon
asz
-atB
ajM
ajM
-atB
+ajM
+akA
axI
ayL
aAh
@@ -84732,11 +84888,11 @@ aoV
apJ
aqt
arm
-asy
+rdB
atz
aux
avy
-awK
+awI
axG
ayL
aAi
@@ -85243,14 +85399,14 @@ amY
anI
aor
aoX
-apJ
-aqt
+apI
+apO
aro
-asw
+jen
atD
auz
avA
-awJ
+rjF
axG
ayL
aAi
@@ -85495,19 +85651,19 @@ ajj
ajT
akP
alA
-amj
+aml
amZ
anJ
amX
aoY
-apN
+amg
sBA
arp
asB
-atB
ajM
ajM
-atB
+ajM
+akA
axJ
ayL
aAi
@@ -85752,15 +85908,15 @@ ahL
ahL
ahL
ahL
-aml
-ana
+amg
+amg
anK
aos
aoZ
-apO
+amg
aqv
aro
-asw
+jxK
atE
auB
avB
@@ -86017,7 +86173,7 @@ apa
agP
aqw
arp
-asC
+tTZ
atF
alv
alv
@@ -86535,7 +86691,7 @@ asE
ajM
auD
avC
-ajM
+akA
axJ
axG
aAm
@@ -87563,7 +87719,7 @@ asG
ajM
auH
avG
-auH
+awR
axM
ayR
aAo
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 5c054c0bb4..d015547ac4 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -16752,7 +16752,7 @@
},
/area/centcom/holding)
"Nf" = (
-/obj/machinery/autoylathe,
+/obj/machinery/autolathe/toy,
/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ni" = (
diff --git a/byond-extools.dll b/byond-extools.dll
new file mode 100644
index 0000000000..a83ea1e543
Binary files /dev/null and b/byond-extools.dll differ
diff --git a/code/__DEFINES/_tick.dm b/code/__DEFINES/_tick.dm
index 10b815e547..fc6147c430 100644
--- a/code/__DEFINES/_tick.dm
+++ b/code/__DEFINES/_tick.dm
@@ -1,13 +1,28 @@
-#define TICK_LIMIT_RUNNING 80
+/// Percentage of tick to leave for master controller to run
+#define MAPTICK_MC_MIN_RESERVE 70
+/// internal_tick_usage is updated every tick by extools
+#define MAPTICK_LAST_INTERNAL_TICK_USAGE ((GLOB.internal_tick_usage / world.tick_lag) * 100)
+/// Tick limit while running normally
+#define TICK_BYOND_RESERVE 2
+#define TICK_LIMIT_RUNNING (max(100 - TICK_BYOND_RESERVE - MAPTICK_LAST_INTERNAL_TICK_USAGE, MAPTICK_MC_MIN_RESERVE))
+/// Tick limit used to resume things in stoplag
#define TICK_LIMIT_TO_RUN 70
+/// Tick limit for MC while running
#define TICK_LIMIT_MC 70
-#define TICK_LIMIT_MC_INIT_DEFAULT 98
+/// Tick limit while initializing
+#define TICK_LIMIT_MC_INIT_DEFAULT (100 - TICK_BYOND_RESERVE)
-#define TICK_USAGE world.tick_usage //for general usage
-#define TICK_USAGE_REAL world.tick_usage //to be used where the result isn't checked
+/// for general usage of tick_usage
+#define TICK_USAGE world.tick_usage
+/// to be used where the result isn't checked
+#define TICK_USAGE_REAL world.tick_usage
+/// Returns true if tick_usage is above the limit
#define TICK_CHECK ( TICK_USAGE > Master.current_ticklimit )
+/// runs stoplag if tick_usage is above the limit
#define CHECK_TICK ( TICK_CHECK ? stoplag() : 0 )
+/// Returns true if tick usage is above 95, for high priority usage
#define TICK_CHECK_HIGH_PRIORITY ( TICK_USAGE > 95 )
+/// runs stoplag if tick_usage is above 95, for high priority usage
#define CHECK_TICK_HIGH_PRIORITY ( TICK_CHECK_HIGH_PRIORITY? stoplag() : 0 )
diff --git a/code/__DEFINES/dcs/flags.dm b/code/__DEFINES/dcs/flags.dm
index 3210341cc3..59c0c58b8d 100644
--- a/code/__DEFINES/dcs/flags.dm
+++ b/code/__DEFINES/dcs/flags.dm
@@ -40,6 +40,7 @@
#define CALTROP_BYPASS_SHOES 1
#define CALTROP_IGNORE_WALKERS 2
+// Spellcasting
#define SPELL_SKIP_ALL_REQS (1<<0)
#define SPELL_SKIP_CENTCOM (1<<1)
#define SPELL_SKIP_STAT (1<<2)
@@ -53,3 +54,24 @@
#define SPELL_CULT_ARMOR (1<<10)
#define SPELL_WIZARD_GARB (SPELL_WIZARD_HAT|SPELL_WIZARD_ROBE)
#define SPELL_CULT_GARB (SPELL_CULT_HELMET|SPELL_CULT_ARMOR)
+
+//// Identification ////
+// /datum/component/identification/identification_flags
+/// Delete on successful broad identification (so the main way we "uncover" how an object works, since this won't be on it to obfuscate it)
+#define ID_COMPONENT_DEL_ON_IDENTIFY (1<<0)
+/// We've already been successfully deepscanned by a deconstructive analyzer
+#define ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED (1<<1)
+
+// /datum/component/identification/identification_effect_flags
+/// Block user from getting actions if they don't know how to use this. Triggered on equip.
+#define ID_COMPONENT_EFFECT_NO_ACTIONS (1<<0)
+
+// /datum/component/identification/identification_method_flags
+/// Can be identified in a deconstructive analyzer
+#define ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR (1<<0)
+
+// Return values for /datum/component/deitnfication/check_knowledge()
+/// Has no knowledge, default
+#define ID_COMPONENT_KNOWLEDGE_NONE 0
+/// Has full knowledge
+#define ID_COMPONENT_KNOWLEDGE_FULL 1
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 4222322f31..a3b7596494 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -30,7 +30,7 @@
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human)
-#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob)
+#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob, list/examine_return_text)
#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides)
//Positions for overrides list
#define EXAMINE_POSITION_ARTICLE 1
@@ -241,6 +241,8 @@
#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params)
#define COMSIG_ITEM_ALT_AFTERATTACK "item_alt_afterattack" //from base of obj/item/altafterattack(): (atom/target, mob/user, proximity, params)
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
+ // Do not grant actions on equip.
+ #define COMPONENT_NO_GRANT_ACTIONS 1
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user)
// relocated, tell inventory procs if those called this that the item isn't available anymore.
#define COMPONENT_DROPPED_RELOCATION 1
@@ -253,6 +255,9 @@
// THE FOLLOWING TWO BLOCKS SHOULD RETURN BLOCK FLAGS AS DEFINED IN __DEFINES/combat.dm!
#define COMSIG_ITEM_CHECK_BLOCK "check_block" //from base of obj/item/check_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
#define COMSIG_ITEM_RUN_BLOCK "run_block" //from base of obj/item/run_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
+#define COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN "deconstructor_deepscan" //Called by deconstructive analyzers deepscanning an item: (obj/machinery/rnd/destructive_analyzer/analyzer_machine, mob/user, list/information_list)
+ // Uncovered information
+ #define COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION 1
// /obj/item/clothing signals
#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): ()
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index b8fe76fb1d..649e0a029b 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -132,7 +132,7 @@
#define FEMALE_UNIFORM_FULL 1
#define FEMALE_UNIFORM_TOP 2
-//flags for outfits that have mutantrace variants: These are hard sprited too.
+//flags for outfits that have mutant race variants: Most of these require additional sprites to work.
#define STYLE_DIGITIGRADE (1<<0) //jumpsuits, suits and shoes
#define STYLE_MUZZLE (1<<1) //hats or masks
#define STYLE_SNEK_TAURIC (1<<2) //taur-friendly suits
@@ -140,6 +140,9 @@
#define STYLE_HOOF_TAURIC (1<<4)
#define STYLE_ALL_TAURIC (STYLE_SNEK_TAURIC|STYLE_PAW_TAURIC|STYLE_HOOF_TAURIC)
#define STYLE_NO_ANTHRO_ICON (1<<5) //When digis fit the default sprite fine and need no copypasted states. This is the case of skirts and winter coats, for example.
+#define USE_SNEK_CLIP_MASK (1<<6)
+#define USE_QUADRUPED_CLIP_MASK (1<<7)
+#define USE_TAUR_CLIP_MASK (USE_SNEK_CLIP_MASK|USE_QUADRUPED_CLIP_MASK)
//digitigrade legs settings.
#define NOT_DIGITIGRADE 0
diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm
index aabe4f117f..a6c31bf965 100644
--- a/code/__DEFINES/layers_planes.dm
+++ b/code/__DEFINES/layers_planes.dm
@@ -1,6 +1,8 @@
//Defines for atom layers and planes
//KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE
+#define PLANE_VOID -100
+
#define CLICKCATCHER_PLANE -99
#define PLANE_SPACE -95
@@ -8,6 +10,10 @@
#define PLANE_SPACE_PARALLAX -90
#define PLANE_SPACE_PARALLAX_RENDER_TARGET "PLANE_SPACE_PARALLAX"
+#define OPENSPACE_LAYER 17 //Openspace layer over all
+#define OPENSPACE_PLANE -4 //Openspace plane below all turfs
+#define OPENSPACE_BACKDROP_PLANE -3 //Black square just over openspace plane to guaranteed cover all in openspace turf
+
#define FLOOR_PLANE -2
#define FLOOR_PLANE_RENDER_TARGET "FLOOR_PLANE"
#define GAME_PLANE -1
@@ -85,6 +91,8 @@
#define MASSIVE_OBJ_LAYER 11
#define POINT_LAYER 12
+#define CHAT_LAYER 12.1
+
#define EMISSIVE_BLOCKER_PLANE 12
#define EMISSIVE_BLOCKER_LAYER 12
#define EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE"
@@ -105,10 +113,6 @@
#define ABOVE_LIGHTING_LAYER 16
#define ABOVE_LIGHTING_RENDER_TARGET "ABOVE_LIGHTING_PLANE"
-#define FLOOR_OPENSPACE_PLANE 17
-#define OPENSPACE_LAYER 17
-#define OPENSPACE_RENDER_TARGET "OPENSPACE_PLANE"
-
#define BYOND_LIGHTING_PLANE 18
#define BYOND_LIGHTING_LAYER 18
#define BYOND_LIGHTING_RENDER_TARGET "BYOND_LIGHTING_PLANE"
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index eee0676dec..5a26feb624 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -22,14 +22,14 @@
//used in design to specify which machine can build it
#define IMPRINTER (1<<0) //For circuits. Uses glass/chemicals.
-#define PROTOLATHE (1<<1) //New stuff. Uses glass/metal/chemicals
-#define AUTOLATHE (1<<2) //Uses glass/metal only.
-#define CRAFTLATHE (1<<3) //Uses fuck if I know. For use eventually.
-#define MECHFAB (1<<4) //Remember, objects utilising this flag should have construction_time and construction_cost vars.
-#define BIOGENERATOR (1<<5) //Uses biomass
-#define LIMBGROWER (1<<6) //Uses synthetic flesh
-#define SMELTER (1<<7) //uses various minerals
-#define AUTOYLATHE (1<<8) // CITADEL ADD
+#define PROTOLATHE (1<<1) //New stuff. Uses materials/chemicals
+#define AUTOLATHE (1<<2) //Uses materials only.
+#define TOYLATHE (1<<3) //Glass/metal/plastic. Meant for toys.
+#define NO_PUBLIC_LATHE (1<<4) //prevents the design from being auto-unlocked by public auto(y)lathes.
+#define MECHFAB (1<<5) //Remember, objects utilising this flag should have construction_time and construction_cost vars.
+#define BIOGENERATOR (1<<6) //Uses biomass
+#define LIMBGROWER (1<<7) //Uses synthetic flesh
+#define SMELTER (1<<8) //uses various minerals
#define NANITE_COMPILER (1<<9) //Prints nanite disks
#define AUTOBOTTLER (1<<10) //Uses booze, for printing
//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
diff --git a/code/__DEFINES/mapping/maploader.dm b/code/__DEFINES/mapping/maploader.dm
new file mode 100644
index 0000000000..e225e68867
--- /dev/null
+++ b/code/__DEFINES/mapping/maploader.dm
@@ -0,0 +1,3 @@
+//map template annihilate_bounds
+#define MAP_TEMPLATE_ANNIHILATE_PRELOAD 1 //annihilate bounds before starting loading
+#define MAP_TEMPLATE_ANNIHILATE_LOADING 2 //"sweeping" delete during loading
diff --git a/code/__DEFINES/materials.dm b/code/__DEFINES/materials.dm
index 89553d9c6c..e2ae22345f 100644
--- a/code/__DEFINES/materials.dm
+++ b/code/__DEFINES/materials.dm
@@ -7,5 +7,5 @@
/// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes.
#define MATERIAL_COLOR (1<<0)
#define MATERIAL_ADD_PREFIX (1<<1)
-#define MATERIAL_NO_EFFECTS (1<<2)
+#define MATERIAL_EFFECTS (1<<2)
#define MATERIAL_AFFECT_STATISTICS (1<<3)
\ No newline at end of file
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 37633ae52f..42095aba41 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -35,15 +35,15 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define BODY_ADJ_LAYER 27 //certain mutantrace features (snout, body markings) that must appear above the body parts
#define GENITALS_FRONT_LAYER 26 //Draws some genitalia above clothes and the TAUR body if need be.
#define BODY_LAYER 25 //underwear, undershirts, socks, eyes, lips(makeup)
-#define FRONT_MUTATIONS_LAYER 24 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
-#define DAMAGE_LAYER 23 //damage indicators (cuts and burns)
-#define UNIFORM_LAYER 22
-#define ID_LAYER 21
-#define HANDS_PART_LAYER 20
-#define SHOES_LAYER 19
-#define GLOVES_LAYER 18
-#define EARS_LAYER 17
-#define BODY_TAUR_LAYER 16
+#define BODY_ADJ_UPPER_LAYER 24
+#define FRONT_MUTATIONS_LAYER 23 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
+#define DAMAGE_LAYER 22 //damage indicators (cuts and burns)
+#define UNIFORM_LAYER 21
+#define ID_LAYER 20
+#define HANDS_PART_LAYER 19
+#define SHOES_LAYER 18
+#define GLOVES_LAYER 17
+#define EARS_LAYER 16
#define SUIT_LAYER 15
#define GENITALS_EXPOSED_LAYER 14
#define GLASSES_LAYER 13
@@ -515,3 +515,17 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define NIGHTSHIFT_AREA_NONE 4 //default/highest.
#define UNTIL(X) while(!(X)) stoplag()
+
+
+//Scavenging element defines for special loot "events".
+#define SCAVENGING_FOUND_NOTHING "found_nothing"
+#define SCAVENGING_SPAWN_MOUSE "spawn_mouse"
+#define SCAVENGING_SPAWN_MICE "spawn_mice"
+#define SCAVENGING_SPAWN_TOM "spawn_tom_the_mouse"
+
+//Scavenging element defines for ckey/mind restrictions.
+#define NO_LOOT_RESTRICTION 0
+#define LOOT_RESTRICTION_MIND 1
+#define LOOT_RESTRICTION_CKEY 2
+#define LOOT_RESTRICTION_MIND_PILE 3 //limited to the current pile.
+#define LOOT_RESTRICTION_CKEY_PILE 4 //Idem
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index d78de86d25..8284f66f50 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -52,3 +52,4 @@
#define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change.
#define ORGAN_VITAL (1<<4) //Currently only the brain
#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
+#define ORGAN_NO_DISMEMBERMENT (1<<6) //Immune to disembowelment.
diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm
index 9feb5f40c5..60effc7265 100644
--- a/code/__DEFINES/research.dm
+++ b/code/__DEFINES/research.dm
@@ -60,7 +60,8 @@
#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN"
-#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials"
+#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials"
+#define RESEARCH_DEEP_SCAN_ID "__deepscan"
//When adding new types, update the list below!
#define TECHWEB_POINT_TYPE_GENERIC "General Research"
diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index 9a9133c196..8ae850cc80 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -34,6 +34,8 @@
#define STATUS_EFFECT_HIPPOCRATIC_OATH /datum/status_effect/hippocraticOath //Gives you an aura of healing as well as regrowing the Rod of Asclepius if lost
+#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core //removes damage slowdown while giving a slow regenerating effect
+
/////////////
// DEBUFFS //
/////////////
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index cadc1113c5..3abef3a61c 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -132,8 +132,15 @@
#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME)
-
-
+// SSair run section
+#define SSAIR_PIPENETS 1
+#define SSAIR_ATMOSMACHINERY 2
+#define SSAIR_REACTQUEUE 3
+#define SSAIR_EXCITEDGROUPS 4
+#define SSAIR_HIGHPRESSURE 5
+#define SSAIR_HOTSPOTS 6
+#define SSAIR_SUPERCONDUCTIVITY 7
+#define SSAIR_REBUILD_PIPENETS 8
#define COMPILE_OVERLAYS(A)\
if (TRUE) {\
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 4d18e60b71..91a4a6f2c3 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -78,6 +78,7 @@
#define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE
#define TRAIT_PACIFISM "pacifism"
#define TRAIT_IGNORESLOWDOWN "ignoreslow"
+#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown"
#define TRAIT_DEATHCOMA "deathcoma" //Causes death-like unconsciousness
#define TRAIT_FAKEDEATH "fakedeath" //Makes the owner appear as dead to most forms of medical examination
#define TRAIT_DISFIGURED "disfigured"
@@ -187,7 +188,7 @@
#define TRAIT_NO_INTERNALS "no-internals"
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing.
-#define TRAIT_FAST_PUMP "fast_pump"
+#define TRAIT_FAST_PUMP "fast_pump"
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 38e25b04c5..bcfaa1bed2 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -88,6 +88,7 @@
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
INVOKE_ASYNC(GLOBAL_PROC, /proc/init_ref_coin_values) //so the current procedure doesn't sleep because of UNTIL()
+ INVOKE_ASYNC(GLOBAL_PROC, /proc/setupGenetics)
//creates every subtype of prototype (excluding prototype) and adds it to list L.
//if no list/L is provided, one is created.
@@ -113,3 +114,25 @@
UNTIL(C.flags_1 & INITIALIZED_1) //we want to make sure the value is calculated and not null.
GLOB.coin_values[path] = C.value
qdel(C)
+
+/proc/setupGenetics()
+ var/list/mutations = subtypesof(/datum/mutation/human)
+ shuffle_inplace(mutations)
+ for(var/A in subtypesof(/datum/generecipe))
+ var/datum/generecipe/GR = A
+ GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
+ for(var/i in 1 to LAZYLEN(mutations))
+ var/path = mutations[i] //byond gets pissy when we do it in one line
+ var/datum/mutation/human/B = new path ()
+ B.alias = "Mutation #[i]"
+ GLOB.all_mutations[B.type] = B
+ GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
+ if(B.locked)
+ continue
+ if(B.quality == POSITIVE)
+ GLOB.good_mutations |= B
+ else if(B.quality == NEGATIVE)
+ GLOB.bad_mutations |= B
+ else if(B.quality == MINOR_NEGATIVE)
+ GLOB.not_good_mutations |= B
+ CHECK_TICK
\ No newline at end of file
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index d93a89a179..e69052ad8d 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -317,7 +317,7 @@ GLOBAL_LIST_EMPTY(species_list)
else
return "unknown"
-/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = 0)
+/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = FALSE, resume_time = 0 SECONDS)
if(!user || !target)
return 0
var/user_loc = user.loc
@@ -336,10 +336,10 @@ GLOBAL_LIST_EMPTY(species_list)
var/endtime = world.time+time
var/starttime = world.time
. = 1
- while (world.time < endtime)
+ while (world.time + resume_time < endtime)
stoplag(1)
if (progress)
- progbar.update(world.time - starttime)
+ progbar.update(world.time - starttime + resume_time)
if(QDELETED(user) || QDELETED(target))
. = 0
break
@@ -371,7 +371,7 @@ GLOBAL_LIST_EMPTY(species_list)
checked_health["health"] = health
return ..()
-/proc/do_after(mob/user, var/delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null, required_mobility_flags = (MOBILITY_USE|MOBILITY_MOVE))
+/proc/do_after(mob/user, var/delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null, required_mobility_flags = (MOBILITY_USE|MOBILITY_MOVE), resume_time = 0 SECONDS)
if(!user)
return 0
var/atom/Tloc = null
@@ -400,10 +400,10 @@ GLOBAL_LIST_EMPTY(species_list)
var/starttime = world.time
. = 1
var/mob/living/L = isliving(user) && user //evals to last thing eval'd
- while (world.time < endtime)
+ while (world.time + resume_time < endtime)
stoplag(1)
if (progress)
- progbar.update(world.time - starttime)
+ progbar.update(world.time - starttime + resume_time)
if(drifting && !user.inertia_dir)
drifting = 0
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 7cbfbd040a..aa388d7413 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -563,7 +563,7 @@
if(objective.completable)
var/completion = objective.check_completion()
if(completion >= 1)
- objective_parts += "Objective #[count]: [objective.explanation_text] Success!"
+ objective_parts += "Objective #[count]: [objective.explanation_text] Success!"
else if(completion <= 0)
objective_parts += "Objective #[count]: [objective.explanation_text] Fail."
else
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index c1ca671044..52eff15492 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -265,5 +265,25 @@ GLOBAL_LIST_INIT(bitfields, list(
"STORAGE_LIMIT_MAX_W_CLASS" = STORAGE_LIMIT_MAX_W_CLASS,
"STORAGE_LIMIT_COMBINED_W_CLASS" = STORAGE_LIMIT_COMBINED_W_CLASS,
"STORAGE_LIMIT_VOLUME" = STORAGE_LIMIT_VOLUME
+ ),
+ "mutantrace_variation" = list(
+ "STYLE_DIGITIGRADE" = STYLE_DIGITIGRADE,
+ "STYLE_MUZZLE" = STYLE_MUZZLE,
+ "STYLE_SNEK_TAURIC" = STYLE_SNEK_TAURIC,
+ "STYLE_PAW_TAURIC" = STYLE_PAW_TAURIC,
+ "STYLE_HOOF_TAURIC" = STYLE_HOOF_TAURIC,
+ "STYLE_NO_ANTHRO_ICON" = STYLE_NO_ANTHRO_ICON,
+ "USE_SNEK_CLIP_MASK" = USE_SNEK_CLIP_MASK,
+ "USE_QUADRUPED_CLIP_MASK" = USE_QUADRUPED_CLIP_MASK
+ ),
+ "vis_flags" = list(
+ "VIS_INHERIT_ICON" = VIS_INHERIT_ICON,
+ "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE,
+ "VIS_INHERIT_DIR" = VIS_INHERIT_DIR,
+ "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER,
+ "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE,
+ "VIS_INHERIT_ID" = VIS_INHERIT_ID,
+ "VIS_UNDERLAY" = VIS_UNDERLAY,
+ "VIS_HIDE" = VIS_HIDE
)
))
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 968995e81d..aacb1737a2 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -137,8 +137,8 @@ GLOBAL_LIST_INIT(jumpsuitlist, list(PREF_SUIT, PREF_SKIRT))
#define UPLINK_PEN "Pen" //like a real spy!
GLOBAL_LIST_INIT(uplink_spawn_loc_list, list(UPLINK_PDA, UPLINK_RADIO, UPLINK_PEN))
- //Female Uniforms
-GLOBAL_LIST_EMPTY(female_clothing_icons)
+//List of cached alpha masked icons.
+GLOBAL_LIST_EMPTY(alpha_masked_worn_icons)
//radical shit
GLOBAL_LIST_INIT(hit_appends, list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF"))
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 04d4c2888a..959a62ebf8 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -43,15 +43,26 @@ GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup)
GLOBAL_LIST_EMPTY(latejoiners) //CIT CHANGE - All latejoining people, for traitor-target purposes.
/proc/update_config_movespeed_type_lookup(update_mobs = TRUE)
- var/list/mob_types = list()
+ // NOTE: This is entirely based on the fact that byond typesof/subtypesof gets longer/deeper paths before shallower ones.
+ // If that ever breaks this entire proc breaks.
+ var/list/mob_types = typesof(/mob)
var/list/entry_value = CONFIG_GET(keyed_list/multiplicative_movespeed)
+ var/list/configured_types = list()
for(var/path in entry_value)
var/value = entry_value[path]
- if(!value)
+ if(isnull(value))
continue
+ // associative list sets for elements that already exist preserve order
+ mob_types[path] = value
+ // now go back up through it to set everything, making absolute sure that base paths are overridden by child paths all the way down the path tree.
+ for(var/i in length(mob_types) to 1 step -1)
+ var/path = mob_types[i]
+ if(isnull(mob_types[path]))
+ continue
+ // we're going from bottom to top so it should be safe to do this without further checks..
for(var/subpath in typesof(path))
- mob_types[subpath] = value
- GLOB.mob_config_movespeed_type_lookup = mob_types
+ configured_types[subpath] = mob_types[path]
+ GLOB.mob_config_movespeed_type_lookup = configured_types
if(update_mobs)
update_mob_config_movespeeds()
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index af483bf888..b039e6d114 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -33,3 +33,5 @@ GLOBAL_VAR(bible_icon_state)
GLOBAL_VAR(bible_item_state)
GLOBAL_VAR(holy_weapon_type)
GLOBAL_VAR(holy_armor_type)
+
+GLOBAL_VAR_INIT(internal_tick_usage, 0.2 * world.tick_lag)
diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index 28fd7397b0..4b963c730d 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -162,7 +162,7 @@
#define ui_ghost_orbit "SOUTH:6,CENTER-1:24"
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24"
#define ui_ghost_teleport "SOUTH:6,CENTER+1:24"
-#define ui_ghost_pai "SOUTH: 6, CENTER+2:24"
+#define ui_ghost_spawners "SOUTH: 6, CENTER+2:24"
//UI position overrides for 1:1 screen layout. (default is 7:5)
diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm
index 14da637f18..0cdac111b0 100644
--- a/code/_onclick/hud/ghost.dm
+++ b/code/_onclick/hud/ghost.dm
@@ -36,13 +36,13 @@
var/mob/dead/observer/G = usr
G.dead_tele()
-/obj/screen/ghost/pai
- name = "pAI Candidate"
- icon_state = "pai"
+/obj/screen/ghost/spawners
+ name = "Ghost role spawners"
+ icon_state = "spawners"
-/obj/screen/ghost/pai/Click()
+/obj/screen/ghost/spawners/Click()
var/mob/dead/observer/G = usr
- G.register_pai()
+ G.open_spawners_menu()
/datum/hud/ghost/New(mob/owner)
..()
@@ -68,8 +68,8 @@
using.hud = src
static_inventory += using
- using = new /obj/screen/ghost/pai()
- using.screen_loc = ui_ghost_pai
+ using = new /obj/screen/ghost/spawners()
+ using.screen_loc = ui_ghost_spawners
using.hud = src
static_inventory += using
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index 7a8cc20d76..a0dade37bd 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -19,7 +19,7 @@
///Things rendered on "openspace"; holes in multi-z
/obj/screen/plane_master/openspace
name = "open space plane master"
- plane = FLOOR_OPENSPACE_PLANE
+ plane = OPENSPACE_BACKDROP_PLANE
appearance_flags = PLANE_MASTER
blend_mode = BLEND_MULTIPLY
alpha = 255
@@ -106,8 +106,8 @@
*
* You really shouldn't be directly using this, use atom helpers instead
*/
-/obj/screen/plane_master/emissive_unblockable
- name = "emissive mob plane master"
+/obj/screen/plane_master/emissive_blocker
+ name = "emissive blocker plane master"
plane = EMISSIVE_BLOCKER_PLANE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_BLOCKER_RENDER_TARGET
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 8772fac5af..db828539af 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -36,6 +36,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
var/sleep_delta = 1
+ ///Only run ticker subsystems for the next n ticks.
+ var/skip_ticks = 0
+
var/make_runtime = 0
var/initializations_finished_with_no_players_logged_in //I wonder what this could be?
@@ -335,7 +338,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
new/datum/controller/failsafe() // (re)Start the failsafe.
//now do the actual stuff
- if (!queue_head || !(iteration % 3))
+ if (!skip_ticks)
var/checking_runlevel = current_runlevel
if(cached_runlevel != checking_runlevel)
//resechedule subsystems
@@ -381,6 +384,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
iteration++
last_run = world.time
+ if (skip_ticks)
+ skip_ticks--
src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta)
current_ticklimit = TICK_LIMIT_RUNNING
if (processing * sleep_delta <= world.tick_lag)
@@ -444,10 +449,12 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
while (queue_node)
if (ran && TICK_USAGE > TICK_LIMIT_RUNNING)
break
-
queue_node_flags = queue_node.flags
queue_node_priority = queue_node.queued_priority
+ if (!(queue_node_flags & SS_TICKER) && skip_ticks)
+ queue_node = queue_node.queue_next
+ continue
//super special case, subsystems where we can't make them pause mid way through
//if we can't run them this tick (without going over a tick)
//we bump up their priority and attempt to run them next tick
@@ -455,14 +462,15 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// in those cases, so we just let them run)
if (queue_node_flags & SS_NO_TICK_CHECK)
if (queue_node.tick_usage > TICK_LIMIT_RUNNING - TICK_USAGE && ran_non_ticker)
- queue_node.queued_priority += queue_priority_count * 0.1
- queue_priority_count -= queue_node_priority
- queue_priority_count += queue_node.queued_priority
- current_tick_budget -= queue_node_priority
- queue_node = queue_node.queue_next
+ if (!(queue_node_flags & SS_BACKGROUND))
+ queue_node.queued_priority += queue_priority_count * 0.1
+ queue_priority_count -= queue_node_priority
+ queue_priority_count += queue_node.queued_priority
+ current_tick_budget -= queue_node_priority
+ queue_node = queue_node.queue_next
continue
- if ((queue_node_flags & SS_BACKGROUND) && !bg_calc)
+ if (!bg_calc && (queue_node_flags & SS_BACKGROUND))
current_tick_budget = queue_priority_count_bg
bg_calc = TRUE
@@ -515,7 +523,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
queue_node.paused_ticks = 0
queue_node.paused_tick_usage = 0
- if (queue_node_flags & SS_BACKGROUND) //update our running total
+ if (bg_calc) //update our running total
queue_priority_count_bg -= queue_node_priority
else
queue_priority_count -= queue_node_priority
@@ -583,14 +591,19 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
log_world("MC: SoftReset: Finished.")
. = 1
+/// Warns us that the end of tick byond map_update will be laggier then normal, so that we can just skip running subsystems this tick.
+/datum/controller/master/proc/laggy_byond_map_update_incoming()
+ if (!skip_ticks)
+ skip_ticks = 1
/datum/controller/master/stat_entry()
if(!statclick)
statclick = new/obj/effect/statclick/debug(null, "Initializing...", src)
- stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))")
- stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])"))
+ stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)")
+ stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (TickLimit: [round(Master.current_ticklimit, 0.1)])"))
+
/datum/controller/master/StartLoadingMap()
//disallow more than one map to load at once, multithreading it will just cause race conditions
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 13facc7666..d8c7724333 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -1,11 +1,3 @@
-#define SSAIR_PIPENETS 1
-#define SSAIR_ATMOSMACHINERY 2
-#define SSAIR_REACTQUEUE 3
-#define SSAIR_EXCITEDGROUPS 4
-#define SSAIR_HIGHPRESSURE 5
-#define SSAIR_HOTSPOTS 6
-#define SSAIR_SUPERCONDUCTIVITY 7
-
SUBSYSTEM_DEF(air)
name = "Atmospherics"
init_order = INIT_ORDER_AIR
@@ -20,6 +12,7 @@ SUBSYSTEM_DEF(air)
var/cost_hotspots = 0
var/cost_superconductivity = 0
var/cost_pipenets = 0
+ var/cost_rebuilds = 0
var/cost_atmos_machinery = 0
var/list/excited_groups = list()
@@ -27,6 +20,7 @@ SUBSYSTEM_DEF(air)
var/list/turf_react_queue = list()
var/list/hotspots = list()
var/list/networks = list()
+ var/list/pipenets_needing_rebuilt = list()
var/list/obj/machinery/atmos_machinery = list()
var/list/pipe_init_dirs_cache = list()
@@ -39,7 +33,7 @@ SUBSYSTEM_DEF(air)
var/list/currentrun = list()
- var/currentpart = SSAIR_PIPENETS
+ var/currentpart = SSAIR_REBUILD_PIPENETS
var/map_loading = TRUE
var/list/queued_for_activation
@@ -52,6 +46,7 @@ SUBSYSTEM_DEF(air)
msg += "HS:[round(cost_hotspots,1)]|"
msg += "SC:[round(cost_superconductivity,1)]|"
msg += "PN:[round(cost_pipenets,1)]|"
+ msg += "RB:[round(cost_rebuilds,1)]|"
msg += "AM:[round(cost_atmos_machinery,1)]"
msg += "} "
msg += "AT:[active_turfs.len]|"
@@ -77,6 +72,18 @@ SUBSYSTEM_DEF(air)
/datum/controller/subsystem/air/fire(resumed = 0)
var/timer = TICK_USAGE_REAL
+ if(currentpart == SSAIR_REBUILD_PIPENETS)
+ var/list/pipenet_rebuilds = pipenets_needing_rebuilt
+ for(var/thing in pipenet_rebuilds)
+ var/obj/machinery/atmospherics/AT = thing
+ AT.build_network()
+ cost_rebuilds = MC_AVERAGE(cost_rebuilds, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
+ pipenets_needing_rebuilt.Cut()
+ if(state != SS_RUNNING)
+ return
+ resumed = FALSE
+ currentpart = SSAIR_PIPENETS
+
if(currentpart == SSAIR_PIPENETS || !resumed)
process_pipenets(resumed)
cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
@@ -137,9 +144,7 @@ SUBSYSTEM_DEF(air)
if(state != SS_RUNNING)
return
resumed = 0
- currentpart = SSAIR_PIPENETS
-
-
+ currentpart = SSAIR_REBUILD_PIPENETS
/datum/controller/subsystem/air/proc/process_pipenets(resumed = 0)
if (!resumed)
@@ -156,6 +161,9 @@ SUBSYSTEM_DEF(air)
if(MC_TICK_CHECK)
return
+/datum/controller/subsystem/air/proc/add_to_rebuild_queue(atmos_machine)
+ if(istype(atmos_machine, /obj/machinery/atmospherics))
+ pipenets_needing_rebuilt += atmos_machine
/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = 0)
var/seconds = wait * 0.1
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index 35feab6648..c1644df9c9 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -16,7 +16,6 @@ SUBSYSTEM_DEF(atoms)
/datum/controller/subsystem/atoms/Initialize(timeofday)
GLOB.fire_overlay.appearance_flags = RESET_COLOR
- setupGenetics() //to set the mutations' sequence.
initialized = INITIALIZATION_INNEW_MAPLOAD
InitializeAtoms()
return ..()
@@ -107,28 +106,6 @@ SUBSYSTEM_DEF(atoms)
old_initialized = SSatoms.old_initialized
BadInitializeCalls = SSatoms.BadInitializeCalls
-/datum/controller/subsystem/atoms/proc/setupGenetics()
- var/list/mutations = subtypesof(/datum/mutation/human)
- shuffle_inplace(mutations)
- for(var/A in subtypesof(/datum/generecipe))
- var/datum/generecipe/GR = A
- GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
- for(var/i in 1 to LAZYLEN(mutations))
- var/path = mutations[i] //byond gets pissy when we do it in one line
- var/datum/mutation/human/B = new path ()
- B.alias = "Mutation #[i]"
- GLOB.all_mutations[B.type] = B
- GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
- if(B.locked)
- continue
- if(B.quality == POSITIVE)
- GLOB.good_mutations |= B
- else if(B.quality == NEGATIVE)
- GLOB.bad_mutations |= B
- else if(B.quality == MINOR_NEGATIVE)
- GLOB.not_good_mutations |= B
- CHECK_TICK
-
/datum/controller/subsystem/atoms/proc/InitLog()
. = ""
for(var/path in BadInitializeCalls)
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 89155cefb3..f1f7cf356a 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -42,6 +42,13 @@ SUBSYSTEM_DEF(mapping)
var/stat_map_name = "Loading..."
+ /// Lookup list for random generated IDs.
+ var/list/random_generated_ids_by_original = list()
+ /// next id for separating obfuscated ids.
+ var/obfuscation_next_id = 1
+ /// "secret" key
+ var/obfuscation_secret
+
//dlete dis once #39770 is resolved
/datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig()
if(!config)
@@ -52,6 +59,10 @@ SUBSYSTEM_DEF(mapping)
#endif
stat_map_name = config.map_name
+/datum/controller/subsystem/mapping/PreInit()
+ if(!obfuscation_secret)
+ obfuscation_secret = md5(GUID()) //HAH! Guess this!
+
/datum/controller/subsystem/mapping/Initialize(timeofday)
HACK_LoadMapConfig()
if(initialized)
@@ -185,7 +196,7 @@ SUBSYSTEM_DEF(mapping)
z_list = SSmapping.z_list
-/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE)
+/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, orientation = SOUTH)
. = list()
var/start_time = REALTIMEOFDAY
@@ -225,7 +236,7 @@ SUBSYSTEM_DEF(mapping)
// load the maps
for (var/P in parsed_maps)
var/datum/parsed_map/pm = P
- if (!pm.load(1, 1, start_z + parsed_maps[P], no_changeturf = TRUE))
+ if (!pm.load(1, 1, start_z + parsed_maps[P], no_changeturf = TRUE, orientation = orientation))
errorList |= pm.original_path
if(!silent)
INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!")
@@ -241,7 +252,7 @@ SUBSYSTEM_DEF(mapping)
// load the station
station_start = world.maxz + 1
INIT_ANNOUNCE("Loading [config.map_name]...")
- LoadGroup(FailedZs, "Station", config.map_path, config.map_file, config.traits, ZTRAITS_STATION)
+ LoadGroup(FailedZs, "Station", config.map_path, config.map_file, config.traits, ZTRAITS_STATION, FALSE, config.orientation)
if(SSdbcore.Connect())
var/datum/DBQuery/query_round_map_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET map_name = '[config.map_name]' WHERE id = [GLOB.round_id]")
@@ -568,3 +579,15 @@ GLOBAL_LIST_EMPTY(the_station_areas)
LM.load()
if(GLOB.stationroom_landmarks.len)
seedStation() //I'm sure we can trust everyone not to insert a 1x1 rooms which loads a landmark which loads a landmark which loads a la...
+
+/**
+ * Generates an obfuscated but constant id for an original id for cases where you don't want players codediving for an id.
+ * WARNING: MAKE SURE PLAYERS ARE NOT ABLE TO ACCESS THIS. To save performance, it's just secret + an incrementing number. Very guessable if you know what the secret is.
+ */
+/datum/controller/subsystem/mapping/proc/get_obfuscated_id(original, id_type = "GENERAL")
+ if(!original)
+ return //no.
+ var/key = "[original]%[id_type]"
+ if(random_generated_ids_by_original[key])
+ return random_generated_ids_by_original[key]
+ . = random_generated_ids_by_original[key] = "[obfuscation_secret]%[obfuscation_next_id++]"
diff --git a/code/controllers/subsystem/processing/projectiles.dm b/code/controllers/subsystem/processing/projectiles.dm
index 4171b5f8c1..8cd63c6949 100644
--- a/code/controllers/subsystem/processing/projectiles.dm
+++ b/code/controllers/subsystem/processing/projectiles.dm
@@ -3,7 +3,6 @@ PROCESSING_SUBSYSTEM_DEF(projectiles)
wait = 1
stat_tag = "PP"
flags = SS_NO_INIT|SS_TICKER
- var/global_max_tick_moves = 10
var/global_pixel_speed = 2
var/global_iterations_per_move = 16
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index 428f355c31..3f71d192e3 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -150,6 +150,8 @@
friend_talk(message)
/mob/camera/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
+ if (client?.prefs.chat_on_map && (client.prefs.see_chat_non_mob || ismob(speaker)))
+ create_chat_message(speaker, message_language, raw_message, spans, message_mode)
to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source))
/mob/camera/imaginary_friend/proc/friend_talk(message)
diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm
new file mode 100644
index 0000000000..cbcb34ac5e
--- /dev/null
+++ b/code/datums/chatmessage.dm
@@ -0,0 +1,236 @@
+#define CHAT_MESSAGE_SPAWN_TIME 0.2 SECONDS
+#define CHAT_MESSAGE_LIFESPAN 5 SECONDS
+#define CHAT_MESSAGE_EOL_FADE 0.7 SECONDS
+#define CHAT_MESSAGE_EXP_DECAY 0.7 // Messages decay at pow(factor, idx in stack)
+#define CHAT_MESSAGE_HEIGHT_DECAY 0.9 // Increase message decay based on the height of the message
+#define CHAT_MESSAGE_APPROX_LHEIGHT 11 // Approximate height in pixels of an 'average' line, used for height decay
+#define CHAT_MESSAGE_WIDTH 96 // pixels
+#define CHAT_MESSAGE_MAX_LENGTH 110 // characters
+#define WXH_TO_HEIGHT(x) text2num(copytext((x), findtextEx((x), "x") + 1)) // thanks lummox
+
+/**
+ * # Chat Message Overlay
+ *
+ * Datum for generating a message overlay on the map
+ */
+/datum/chatmessage
+ /// The visual element of the chat messsage
+ var/image/message
+ /// The location in which the message is appearing
+ var/atom/message_loc
+ /// The client who heard this message
+ var/client/owned_by
+ /// Contains the scheduled destruction time
+ var/scheduled_destruction
+ /// Contains the approximate amount of lines for height decay
+ var/approx_lines
+
+/**
+ * Constructs a chat message overlay
+ *
+ * Arguments:
+ * * text - The text content of the overlay
+ * * target - The target atom to display the overlay at
+ * * owner - The mob that owns this overlay, only this mob will be able to view it
+ * * extra_classes - Extra classes to apply to the span that holds the text
+ * * lifespan - The lifespan of the message in deciseconds
+ */
+/datum/chatmessage/New(text, atom/target, mob/owner, list/extra_classes = null, lifespan = CHAT_MESSAGE_LIFESPAN)
+ . = ..()
+ if (!istype(target))
+ CRASH("Invalid target given for chatmessage")
+ if(QDELETED(owner) || !istype(owner) || !owner.client)
+ stack_trace("/datum/chatmessage created with [isnull(owner) ? "null" : "invalid"] mob owner")
+ qdel(src)
+ return
+ INVOKE_ASYNC(src, .proc/generate_image, text, target, owner, extra_classes, lifespan)
+
+/datum/chatmessage/Destroy()
+ if (owned_by)
+ if (owned_by.seen_messages)
+ LAZYREMOVEASSOC(owned_by.seen_messages, message_loc, src)
+ owned_by.images.Remove(message)
+ owned_by = null
+ message_loc = null
+ message = null
+ return ..()
+
+/**
+ * Generates a chat message image representation
+ *
+ * Arguments:
+ * * text - The text content of the overlay
+ * * target - The target atom to display the overlay at
+ * * owner - The mob that owns this overlay, only this mob will be able to view it
+ * * extra_classes - Extra classes to apply to the span that holds the text
+ * * lifespan - The lifespan of the message in deciseconds
+ */
+/datum/chatmessage/proc/generate_image(text, atom/target, mob/owner, list/extra_classes, lifespan)
+ // Register client who owns this message
+ owned_by = owner.client
+ RegisterSignal(owned_by, COMSIG_PARENT_QDELETING, .proc/qdel, src)
+
+ // Clip message
+ var/maxlen = owned_by.prefs.max_chat_length
+ if (length_char(text) > maxlen)
+ text = copytext_char(text, 1, maxlen + 1) + "..." // BYOND index moment
+
+ // Calculate target color if not already present
+ if (!target.chat_color || target.chat_color_name != target.name)
+ target.chat_color = colorize_string(target.name)
+ target.chat_color_darkened = colorize_string(target.name, 0.85, 0.85)
+ target.chat_color_name = target.name
+
+ // Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag
+ var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g")
+ text = replacetext(text, url_scheme, "")
+
+ // Reject whitespace
+ var/static/regex/whitespace = new(@"^\s*$")
+ if (whitespace.Find(text))
+ qdel(src)
+ return
+
+ // Non mobs speakers can be small
+ if (!ismob(target))
+ extra_classes |= "small"
+
+ // Append radio icon if from a virtual speaker
+ if (extra_classes.Find("virtual-speaker"))
+ var/image/r_icon = image('icons/UI_Icons/chat/chat_icons.dmi', icon_state = "radio")
+ text = "\icon[r_icon] " + text
+
+ // We dim italicized text to make it more distinguishable from regular text
+ var/tgt_color = extra_classes.Find("italics") ? target.chat_color_darkened : target.chat_color
+
+ // Approximate text height
+ // Note we have to replace HTML encoded metacharacters otherwise MeasureText will return a zero height
+ // BYOND Bug #2563917
+ // Construct text
+ var/static/regex/html_metachars = new(@"&[A-Za-z]{1,7};", "g")
+ var/complete_text = ""
+ var/mheight = WXH_TO_HEIGHT(owned_by.MeasureText(replacetext(complete_text, html_metachars, "m"), null, CHAT_MESSAGE_WIDTH))
+ approx_lines = max(1, mheight / CHAT_MESSAGE_APPROX_LHEIGHT)
+
+ // Translate any existing messages upwards, apply exponential decay factors to timers
+ message_loc = target
+ if (owned_by.seen_messages)
+ var/idx = 1
+ var/combined_height = approx_lines
+ for(var/msg in owned_by.seen_messages[message_loc])
+ var/datum/chatmessage/m = msg
+ animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME)
+ combined_height += m.approx_lines
+ var/sched_remaining = m.scheduled_destruction - world.time
+ if (sched_remaining > CHAT_MESSAGE_SPAWN_TIME)
+ var/remaining_time = (sched_remaining) * (CHAT_MESSAGE_EXP_DECAY ** idx++) * (CHAT_MESSAGE_HEIGHT_DECAY ** combined_height)
+ m.scheduled_destruction = world.time + remaining_time
+ addtimer(CALLBACK(m, .proc/end_of_life), remaining_time, TIMER_UNIQUE|TIMER_OVERRIDE)
+
+ // Build message image
+ message = image(loc = message_loc, layer = CHAT_LAYER)
+ message.plane = GAME_PLANE
+ message.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
+ message.alpha = 0
+ message.pixel_y = owner.bound_height * 0.95
+ message.maptext_width = CHAT_MESSAGE_WIDTH
+ message.maptext_height = mheight
+ message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5
+ message.maptext = complete_text
+
+ // View the message
+ LAZYADDASSOC(owned_by.seen_messages, message_loc, src)
+ owned_by.images |= message
+ animate(message, alpha = 255, time = CHAT_MESSAGE_SPAWN_TIME)
+
+ // Prepare for destruction
+ scheduled_destruction = world.time + (lifespan - CHAT_MESSAGE_EOL_FADE)
+ addtimer(CALLBACK(src, .proc/end_of_life), lifespan - CHAT_MESSAGE_EOL_FADE, TIMER_UNIQUE|TIMER_OVERRIDE)
+
+/**
+ * Applies final animations to overlay CHAT_MESSAGE_EOL_FADE deciseconds prior to message deletion
+ */
+/datum/chatmessage/proc/end_of_life(fadetime = CHAT_MESSAGE_EOL_FADE)
+ animate(message, alpha = 0, time = fadetime, flags = ANIMATION_PARALLEL)
+ QDEL_IN(src, fadetime)
+
+/**
+ * Creates a message overlay at a defined location for a given speaker
+ *
+ * Arguments:
+ * * speaker - The atom who is saying this message
+ * * message_language - The language that the message is said in
+ * * raw_message - The text content of the message
+ * * spans - Additional classes to be added to the message
+ * * message_mode - Bitflags relating to the mode of the message
+ */
+/mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, list/spans, message_mode)
+ // Ensure the list we are using, if present, is a copy so we don't modify the list provided to us
+ spans = spans?.Copy()
+
+ // Check for virtual speakers (aka hearing a message through a radio)
+ var/atom/movable/originalSpeaker = speaker
+ if (istype(speaker, /atom/movable/virtualspeaker))
+ var/atom/movable/virtualspeaker/v = speaker
+ speaker = v.source
+ spans |= "virtual-speaker"
+
+ // Ignore virtual speaker (most often radio messages) from ourself
+ if (originalSpeaker != src && speaker == src)
+ return
+
+ // Display visual above source
+ new /datum/chatmessage(lang_treat(speaker, message_language, raw_message, spans, null, TRUE), speaker, src, spans)
+
+
+// Tweak these defines to change the available color ranges
+#define CM_COLOR_SAT_MIN 0.6
+#define CM_COLOR_SAT_MAX 0.7
+#define CM_COLOR_LUM_MIN 0.65
+#define CM_COLOR_LUM_MAX 0.75
+
+/**
+ * Gets a color for a name, will return the same color for a given string consistently within a round.atom
+ *
+ * Note that this proc aims to produce pastel-ish colors using the HSL colorspace. These seem to be favorable for displaying on the map.
+ *
+ * Arguments:
+ * * name - The name to generate a color for
+ * * sat_shift - A value between 0 and 1 that will be multiplied against the saturation
+ * * lum_shift - A value between 0 and 1 that will be multiplied against the luminescence
+ */
+/datum/chatmessage/proc/colorize_string(name, sat_shift = 1, lum_shift = 1)
+ // seed to help randomness
+ var/static/rseed = rand(1,26)
+
+ // get hsl using the selected 6 characters of the md5 hash
+ var/hash = copytext(md5(name + GLOB.round_id), rseed, rseed + 6)
+ var/h = hex2num(copytext(hash, 1, 3)) * (360 / 255)
+ var/s = (hex2num(copytext(hash, 3, 5)) >> 2) * ((CM_COLOR_SAT_MAX - CM_COLOR_SAT_MIN) / 63) + CM_COLOR_SAT_MIN
+ var/l = (hex2num(copytext(hash, 5, 7)) >> 2) * ((CM_COLOR_LUM_MAX - CM_COLOR_LUM_MIN) / 63) + CM_COLOR_LUM_MIN
+
+ // adjust for shifts
+ s *= clamp(sat_shift, 0, 1)
+ l *= clamp(lum_shift, 0, 1)
+
+ // convert to rgb
+ var/h_int = round(h/60) // mapping each section of H to 60 degree sections
+ var/c = (1 - abs(2 * l - 1)) * s
+ var/x = c * (1 - abs((h / 60) % 2 - 1))
+ var/m = l - c * 0.5
+ x = (x + m) * 255
+ c = (c + m) * 255
+ m *= 255
+ switch(h_int)
+ if(0)
+ return "#[num2hex(c, 2)][num2hex(x, 2)][num2hex(m, 2)]"
+ if(1)
+ return "#[num2hex(x, 2)][num2hex(c, 2)][num2hex(m, 2)]"
+ if(2)
+ return "#[num2hex(m, 2)][num2hex(c, 2)][num2hex(x, 2)]"
+ if(3)
+ return "#[num2hex(m, 2)][num2hex(x, 2)][num2hex(c, 2)]"
+ if(4)
+ return "#[num2hex(x, 2)][num2hex(m, 2)][num2hex(c, 2)]"
+ if(5)
+ return "#[num2hex(c, 2)][num2hex(m, 2)][num2hex(x, 2)]"
diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm
deleted file mode 100644
index b5740650e9..0000000000
--- a/code/datums/components/archaeology.dm
+++ /dev/null
@@ -1,95 +0,0 @@
-/datum/component/archaeology
- dupe_mode = COMPONENT_DUPE_UNIQUE
- var/list/archdrops = list(/obj/item/bikehorn = list(ARCH_PROB = 100, ARCH_MAXDROP = 1)) // honk~
- var/prob2drop
- var/dug
- var/datum/callback/callback
-
-/datum/component/archaeology/Initialize(list/_archdrops = list(), datum/callback/_callback)
- archdrops = _archdrops
- for(var/i in archdrops)
- if(isnull(archdrops[i][ARCH_MAXDROP]))
- archdrops[i][ARCH_MAXDROP] = 1
- stack_trace("ARCHAEOLOGY WARNING: [parent] contained a null max_drop value in [i].")
- if(isnull(archdrops[i][ARCH_PROB]))
- archdrops[i][ARCH_PROB] = 100
- stack_trace("ARCHAEOLOGY WARNING: [parent] contained a null probability value in [i].")
- callback = _callback
- RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/Dig)
- RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/BombDig)
- RegisterSignal(parent, COMSIG_ATOM_SING_PULL, .proc/SingDig)
-
-/datum/component/archaeology/InheritComponent(datum/component/archaeology/A, i_am_original)
- var/list/other_archdrops = A.archdrops
- var/list/_archdrops = archdrops
- for(var/I in other_archdrops)
- _archdrops[I] += other_archdrops[I]
-
-/datum/component/archaeology/proc/Dig(datum/source, obj/item/I, mob/living/user)
- if(dug)
- to_chat(user, "Looks like someone has dug here already.")
- return
-
- if(!isturf(user.loc))
- return
-
- if(I.tool_behaviour == TOOL_SHOVEL || I.tool_behaviour == TOOL_MINING)
- to_chat(user, "You start digging...")
-
- if(I.use_tool(parent, user, 40, volume=50))
- to_chat(user, "You dig a hole.")
- gets_dug()
- dug = TRUE
- SSblackbox.record_feedback("tally", "pick_used_mining", 1, I.type)
- return COMPONENT_NO_AFTERATTACK
-
-/datum/component/archaeology/proc/gets_dug()
- if(dug)
- return
- else
- var/turf/open/OT = get_turf(parent)
- for(var/thing in archdrops)
- var/maxtodrop = archdrops[thing][ARCH_MAXDROP]
- for(var/i in 1 to maxtodrop)
- if(prob(archdrops[thing][ARCH_PROB])) // can't win them all!
- new thing(OT)
-
- if(isopenturf(OT))
- if(OT.postdig_icon_change)
- if(istype(OT, /turf/open/floor/plating/asteroid/) && !OT.postdig_icon)
- var/turf/open/floor/plating/asteroid/AOT = parent
- AOT.icon_plating = "[AOT.environment_type]_dug"
- AOT.icon_state = "[AOT.environment_type]_dug"
- else
- if(isplatingturf(OT))
- var/turf/open/floor/plating/POT = parent
- POT.icon_plating = "[POT.postdig_icon]"
- POT.icon_state = "[OT.postdig_icon]"
-
- if(OT.slowdown) //Things like snow slow you down until you dig them.
- OT.slowdown = 0
- dug = TRUE
- if(callback)
- callback.Invoke()
-
-/datum/component/archaeology/proc/SingDig(datum/source, S, current_size)
- switch(current_size)
- if(STAGE_THREE)
- if(prob(30))
- gets_dug()
- if(STAGE_FOUR)
- if(prob(50))
- gets_dug()
- else
- if(current_size >= STAGE_FIVE && prob(70))
- gets_dug()
-
-/datum/component/archaeology/proc/BombDig(datum/source, severity, target)
- switch(severity)
- if(3)
- return
- if(2)
- if(prob(20))
- gets_dug()
- if(1)
- gets_dug()
diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm
index 9eb3fcaaea..14ab751d2b 100644
--- a/code/datums/components/crafting/recipes/recipes_misc.dm
+++ b/code/datums/components/crafting/recipes/recipes_misc.dm
@@ -260,6 +260,15 @@
subcategory = CAT_TOOL
category = CAT_MISC
+/datum/crafting_recipe/electrochromatic_kit
+ name = "Electrochromatic Kit"
+ result = /obj/item/electronics/electrochromatic_kit
+ reqs = list(/obj/item/stack/sheet/metal = 1,
+ /obj/item/stack/cable_coil = 1)
+ time = 5
+ subcategory = CAT_TOOL
+ category = CAT_MISC
+
////////////
//Vehicles//
////////////
diff --git a/code/datums/components/identification.dm b/code/datums/components/identification.dm
new file mode 100644
index 0000000000..f7dc211504
--- /dev/null
+++ b/code/datums/components/identification.dm
@@ -0,0 +1,88 @@
+/**
+ * Identification components
+ */
+/datum/component/identification
+ /// General flags for how we should work.
+ var/identification_flags = NONE
+ /// General flags for what we should do.
+ var/identification_effect_flags = NONE
+ /// General flags for how we can be identified.
+ var/identification_method_flags = NONE
+ /// If this is set, show this on examine to the examiner if they know how to use it.
+ var/additional_examine_text = "You seem to know more about this item than others.."
+ /// Added to deconstructive analyzer say on success if set
+ var/deconstructor_reveal_text = "item operation instructions"
+
+/datum/component/identification/Initialize(id_flags, id_effect_flags, id_method_flags)
+ if(!isobj(parent))
+ return COMPONENT_INCOMPATIBLE
+ . = ..()
+ if(. & COMPONENT_INCOMPATIBLE)
+ return
+ identification_flags = id_flags
+ identification_effect_flags = id_effect_flags
+ identification_method_flags = id_method_flags
+
+/datum/component/identification/RegisterWithParent()
+ RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine)
+ if(identification_effect_flags & ID_COMPONENT_EFFECT_NO_ACTIONS)
+ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
+ if(identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR)
+ RegisterSignal(parent, COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN, .proc/on_deconstructor_deepscan)
+
+/datum/component/identification/UnregisterFromParent()
+ var/list/unregister = list(COMSIG_PARENT_EXAMINE)
+ if(identification_effect_flags & ID_COMPONENT_EFFECT_NO_ACTIONS)
+ unregister += COMSIG_ITEM_EQUIPPED
+ if(identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR)
+ unregister += COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN
+ UnregisterSignal(parent, unregister)
+
+/datum/component/identification/proc/on_examine(datum/source, mob/user, list/returnlist)
+ if(check_knowledge(user) != ID_COMPONENT_KNOWLEDGE_FULL)
+ return
+ if(!additional_examine_text)
+ return
+ returnlist += additional_examine_text
+
+/datum/component/identification/vv_edit_var(var_name, var_value)
+ // since i care SOOO much about memory optimization, we only register signals we need to
+ // so when someone vv's us, we should probably make sure we have the ones we need to with an update.
+ if((var_value == NAMEOF(src, identification_flags)) || (var_value == NAMEOF(src, identification_effect_flags)) || (var_value == NAMEOF(src, identification_method_flags)))
+ UnregisterFromParent()
+ . = ..()
+ if((var_value == NAMEOF(src, identification_flags)) || (var_value == NAMEOF(src, identification_effect_flags)) || (var_value == NAMEOF(src, identification_method_flags)))
+ RegisterWithParent()
+
+/datum/component/identification/proc/on_equip(datum/source, mob/user)
+ if(check_knowledge(user) == ID_COMPONENT_KNOWLEDGE_FULL)
+ return
+ if(identification_method_flags & ID_COMPONENT_EFFECT_NO_ACTIONS)
+ return COMPONENT_NO_GRANT_ACTIONS
+
+/datum/component/identification/proc/check_knowledge(mob/user)
+ return ID_COMPONENT_KNOWLEDGE_NONE
+
+/datum/component/identification/proc/on_identify(mob/user)
+ if(identification_flags & ID_COMPONENT_DEL_ON_IDENTIFY)
+ qdel(src)
+
+/datum/component/identification/proc/on_deconstructor_deepscan(datum/source, obj/machinery/rnd/destructive_analyzer/analyzer, mob/user, list/information = list())
+ if((identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR) && !(identification_flags & ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED))
+ identification_flags |= ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED
+ on_identify(user)
+ if(deconstructor_reveal_text)
+ information += deconstructor_reveal_text
+ return COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION
+
+/**
+ * Identification component subtype - Syndicate
+ *
+ * Checks if the user is a traitor.
+ */
+/datum/component/identification/syndicate
+
+/datum/component/identification/syndicate/check_knowledge(mob/user)
+ . = ..()
+ if(user?.mind?.has_antag_datum(/datum/antagonist/traitor))
+ . = max(., ID_COMPONENT_KNOWLEDGE_FULL)
diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm
index de4425e208..56b41533f5 100644
--- a/code/datums/components/mirage_border.dm
+++ b/code/datums/components/mirage_border.dm
@@ -39,4 +39,5 @@
/obj/effect/abstract/mirage_holder
name = "Mirage holder"
anchored = TRUE
+ plane = PLANE_SPACE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
diff --git a/code/datums/elements/dusts_on_leaving_area.dm b/code/datums/elements/dusts_on_leaving_area.dm
index 9527e1fd3a..7b1807a15c 100644
--- a/code/datums/elements/dusts_on_leaving_area.dm
+++ b/code/datums/elements/dusts_on_leaving_area.dm
@@ -1,28 +1,20 @@
/datum/element/dusts_on_leaving_area
element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
id_arg_index = 2
- var/list/attached_mobs = list()
var/list/area_types = list()
/datum/element/dusts_on_leaving_area/Attach(datum/target,types)
. = ..()
if(!ismob(target))
return ELEMENT_INCOMPATIBLE
- attached_mobs += target
area_types = types
- START_PROCESSING(SSprocessing,src)
+ RegisterSignal(target,COMSIG_ENTER_AREA,.proc/check_dust)
/datum/element/dusts_on_leaving_area/Detach(mob/M)
. = ..()
- if(M in attached_mobs)
- attached_mobs -= M
- if(!attached_mobs.len)
- STOP_PROCESSING(SSprocessing,src)
+ UnregisterSignal(M,COMSIG_ENTER_AREA)
-/datum/element/dusts_on_leaving_area/process()
- for(var/m in attached_mobs)
- var/mob/M = m
- var/area/A = get_area(M)
- if(!(A.type in area_types))
- M.dust(force = TRUE)
- Detach(M)
+/datum/element/dusts_on_leaving_area/proc/check_dust(datum/source, area/A)
+ var/mob/M = source
+ if(istype(M) && !(A.type in area_types))
+ M.dust(force = TRUE)
diff --git a/code/datums/elements/mob_holder.dm b/code/datums/elements/mob_holder.dm
index a5c6e2725d..d770e0f30d 100644
--- a/code/datums/elements/mob_holder.dm
+++ b/code/datums/elements/mob_holder.dm
@@ -164,7 +164,7 @@
release()
/obj/item/clothing/head/mob_holder/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE)
- if(!ishuman(M)) //monkeys holding monkeys holding monkeys...
+ if(M == held_mob || !ishuman(M)) //monkeys holding monkeys holding monkeys...
return FALSE
return ..()
diff --git a/code/datums/elements/scavenging.dm b/code/datums/elements/scavenging.dm
new file mode 100644
index 0000000000..1993005be7
--- /dev/null
+++ b/code/datums/elements/scavenging.dm
@@ -0,0 +1,215 @@
+ /*
+ * Scavenging element. Its scope shouldn't elude your imagination.
+ * Basically loot piles that can be searched through for some items.
+ * In my opinion, these are more engaging than normal maintenance loot spawners.
+ * The loot doesn't have to be strictly made of items and objects, you could also use it to invoke some "events"
+ * such as mice, rats, an halloween spook, persistent relics, traps, etcetera, go wild.
+ */
+/datum/element/scavenging
+ element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
+ id_arg_index = 3
+
+ var/list/loot_left_per_atom = list() //loot left per attached atom.
+ var/list/loot_table //pickweight list of available loot.
+ var/list/unique_loot //limited loot, once the associated value reaches zero, its key is removed from loot_table
+ var/scavenge_time = 12 SECONDS //how much time it takes
+ var/can_use_hands = TRUE //bare handed scavenge time multiplier. If set to zero, only tools are usable.
+ var/list/tool_types //which tool types the player can use instead of scavenging by hand, associated value is their speed.
+ var/del_atom_on_depletion = FALSE //Will the atom be deleted when there is no loot left?
+ var/list/search_texts = list("starts searching through", "start searching through", "You hear rummaging...")
+ var/loot_restriction = NO_LOOT_RESTRICTION
+ var/maximum_loot_per_player = 1 //only relevant if there is a restriction.
+ var/list/scavenger_restriction_list //used for restrictions.
+
+ var/mean_loot_weight = 0
+ var/list/progress_per_atom = list() //seconds of ditched progress per atom, used to resume the work instead of starting over.
+ var/static/list/players_busy_scavenging = list() //players already busy scavenging.
+
+/datum/element/scavenging/Attach(atom/target, amount = 5, list/loot, list/unique, time = 12 SECONDS, hands = TRUE, list/tools, list/texts, \
+ del_deplete = FALSE, restriction = NO_LOOT_RESTRICTION, max_per_player = 1)
+ . = ..()
+ if(. == ELEMENT_INCOMPATIBLE || !length(loot) || !amount || !istype(target) || isarea(target))
+ return ELEMENT_INCOMPATIBLE
+ loot_left_per_atom[target] = amount
+ if(!loot_table)
+ loot_table = loot
+ for(var/A in loot_table) //tally the list weights
+ mean_loot_weight += loot_table[A]
+ mean_loot_weight /= length(loot_table)
+ if(!unique_loot)
+ unique_loot = unique || list()
+ scavenge_time = time
+ can_use_hands = hands
+ tool_types = tools
+ if(texts)
+ search_texts = texts
+ del_atom_on_depletion = del_deplete
+ loot_restriction = restriction
+ maximum_loot_per_player = max_per_player
+ if(can_use_hands)
+ RegisterSignal(target, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW), .proc/scavenge_barehanded)
+ if(tool_types)
+ RegisterSignal(target, COMSIG_PARENT_ATTACKBY, .proc/scavenge_tool)
+ RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine)
+
+/datum/element/scavenging/Detach(atom/target)
+ . = ..()
+ loot_left_per_atom -= target
+ progress_per_atom -= target
+ if(maximum_loot_per_player == LOOT_RESTRICTION_MIND_PILE || maximum_loot_per_player == LOOT_RESTRICTION_CKEY_PILE)
+ maximum_loot_per_player -= target
+ UnregisterSignal(target, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_PARENT_ATTACKBY, COMSIG_PARENT_EXAMINE))
+
+/datum/element/scavenging/proc/on_examine(atom/source, mob/user, list/examine_list)
+ var/methods = tool_types.Copy()
+ if(can_use_hands)
+ methods += list("bare handed")
+ if(!length(methods))
+ return
+ var/text = english_list(methods, "", " or ")
+ examine_list += "Looks like [source.p_they()] can be scavenged [length(tool_types) ? "with" : ""][length(methods == 1) ? "" : "either "][length(tool_types) ? "a " : ""][text]"
+
+/datum/element/scavenging/proc/scavenge_barehanded(atom/source, mob/user)
+ scavenge(source, user, 1)
+ return COMPONENT_NO_ATTACK_HAND
+
+/datum/element/scavenging/proc/scavenge_tool(atom/source, obj/item/I, mob/user, params)
+ if(user.a_intent == INTENT_HARM || !I.tool_behaviour) //Robust trash disposal techniques!
+ return
+ var/speed_multi = tool_types[I.tool_behaviour]
+ if(!speed_multi)
+ return
+ scavenge(source, user, speed_multi)
+ return COMPONENT_NO_AFTERATTACK
+
+/// This proc has to be asynced (cough cough, do_after) in order to return the comsig values in time to stop the attack chain.
+/datum/element/scavenging/proc/scavenge(atom/source, mob/user, speed_multi = 1)
+ set waitfor = FALSE
+
+ if(players_busy_scavenging[user])
+ return
+ players_busy_scavenging[user] = TRUE
+ var/progress_done = progress_per_atom[source]
+ var/len_messages = length(search_texts)
+ var/msg_first_person
+ if(len_messages >= 2)
+ msg_first_person = "You [progress_done ? ", resume a ditched task and " : ""][search_texts[2]] [source]."
+ var/msg_blind
+ if(len_messages >= 3)
+ msg_blind = "[search_texts[3]]"
+ user.visible_message("[user] [search_texts[1]] [source].", msg_first_person, msg_blind)
+ if(do_after(user, scavenge_time * speed_multi, TRUE, source, TRUE, CALLBACK(src, .proc/set_progress, source, world.time), resume_time = progress_done * speed_multi))
+ spawn_loot(source, user)
+ players_busy_scavenging -= user
+
+/datum/element/scavenging/proc/set_progress(atom/source, start_time)
+ progress_per_atom[source] = world.time - start_time
+ return TRUE
+
+/datum/element/scavenging/proc/spawn_loot(atom/source, mob/user)
+ progress_per_atom -= source
+
+ var/loot = pickweight(loot_table)
+ var/special = TRUE
+ var/free = FALSE
+ if(!loot_left_per_atom[source])
+ to_chat(user, "Looks likes there is nothing worth of interest left in [source], what a shame...")
+ return
+
+ var/num_times = 0
+ switch(loot_restriction)
+ if(LOOT_RESTRICTION_MIND)
+ num_times = LAZYACCESS(scavenger_restriction_list, user.mind)
+ if(LOOT_RESTRICTION_CKEY)
+ num_times = LAZYACCESS(scavenger_restriction_list, user.ckey)
+ if(LOOT_RESTRICTION_MIND_PILE)
+ var/list/L = LAZYACCESS(scavenger_restriction_list, source)
+ if(L)
+ num_times = LAZYACCESS(L, user.mind)
+ if(LOOT_RESTRICTION_CKEY_PILE)
+ var/list/L = LAZYACCESS(scavenger_restriction_list, source)
+ if(L)
+ num_times = LAZYACCESS(L, user.ckey)
+ if(num_times >= maximum_loot_per_player)
+ to_chat(user, "You can't find anything else vaguely useful in [source]. Another set of eyes might, however.")
+ return
+
+ switch(loot) // TODO: datumize these out.
+ if(SCAVENGING_FOUND_NOTHING)
+ to_chat(user, "You found nothing, better luck next time.")
+ free = TRUE //doesn't consume the loot pile.
+ if(SCAVENGING_SPAWN_MOUSE)
+ var/nasty_rodent = pick("mouse", "rodent", "squeaky critter", "stupid pest", "annoying cable chewer", "nasty, ugly, evil, disease-ridden rodent")
+ to_chat(user, "You found something in [source]... no wait, that's just another [nasty_rodent].")
+ new /mob/living/simple_animal/mouse(source.loc)
+ if(SCAVENGING_SPAWN_MICE)
+ user.visible_message("A small gang of mice emerges from [source].", \
+ "You found something in [source]... no wait, that's just another- no wait, that's a lot of damn mice.")
+ for(var/i in 1 to rand(4, 6))
+ new /mob/living/simple_animal/mouse(source.loc)
+ if(SCAVENGING_SPAWN_TOM)
+ if(GLOB.tom_existed) //There can only be one.
+ to_chat(user, "You found nothing, better luck next time.")
+ free = TRUE
+ else
+ to_chat(user, "You found something in [source]... no wait, that's Tom, the mouse! What is he doing here?")
+ new /mob/living/simple_animal/mouse/brown/Tom(source.loc)
+ else
+ special = FALSE
+
+ if(!special) //generic loot. Nothing too strange like more loot spawners anyway.
+ var/atom/A = new loot(source.loc)
+ if(isitem(A) && !user.get_active_held_item())
+ user.put_in_hands(A)
+ var/rarity_append = "."
+ switch(loot_table[loot]/mean_loot_weight*100)
+ if(0 to 1)
+ rarity_append = "! AMAZING!"
+ if(1 to 2)
+ rarity_append = "! Woah!"
+ if(2 to 5)
+ rarity_append = ". Rare!"
+ if(5 to 10)
+ rarity_append = ". Great."
+ if(10 to 25)
+ rarity_append = ". Nice."
+ if(20 to 50)
+ rarity_append = ". Not bad."
+ to_chat(user, "You found something in [source]... it's \a [A][rarity_append]")
+
+ if(unique_loot[loot])
+ var/loot_left = --unique_loot[loot]
+ if(!loot_left)
+ loot_table -= loot
+ unique_loot -= loot
+ mean_loot_weight = 0
+ for(var/A in loot_table) //re-tally the list weights
+ mean_loot_weight += loot_table[A]
+ mean_loot_weight /= length(loot_table)
+
+ if(free)
+ return
+
+ --loot_left_per_atom[source]
+ if(del_atom_on_depletion && !loot_left_per_atom[source])
+ source.visible_message("[source] has been looted clean.")
+ qdel(source)
+ return
+
+ if(!loot_restriction)
+ return
+
+ LAZYINITLIST(scavenger_restriction_list)
+ switch(loot_restriction)
+ if(LOOT_RESTRICTION_MIND)
+ scavenger_restriction_list[user.mind]++
+ if(LOOT_RESTRICTION_CKEY)
+ scavenger_restriction_list[user.ckey]++
+ if(LOOT_RESTRICTION_MIND_PILE)
+ LAZYINITLIST(scavenger_restriction_list[source])
+ var/list/L = scavenger_restriction_list[source]
+ L[user.mind]++
+ if(LOOT_RESTRICTION_CKEY_PILE)
+ LAZYINITLIST(scavenger_restriction_list[source])
+ var/list/L = scavenger_restriction_list[source]
+ L[user.ckey]++
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index 0a44954e51..6e4b1a6305 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -23,14 +23,14 @@
mappath = "[prefix][shuttle_id].dmm"
. = ..()
-/datum/map_template/shuttle/preload_size(path, cache)
+/datum/map_template/shuttle/preload_size(path = mappath, force_cache = FALSE)
. = ..(path, TRUE) // Done this way because we still want to know if someone actualy wanted to cache the map
if(!cached_map)
return
discover_port_offset()
- if(!cache)
+ if(!cached_map)
cached_map = null
/datum/map_template/shuttle/proc/discover_port_offset()
@@ -53,12 +53,11 @@
++xcrd
--ycrd
-/datum/map_template/shuttle/load(turf/T, centered, register=TRUE)
+/datum/map_template/shuttle/load(turf/T, centered = FALSE, orientation = SOUTH, annihilate = default_annihilate, force_cache = FALSE, rotate_placement_to_orientation = FALSE, register = TRUE)
. = ..()
if(!.)
return
- var/list/turfs = block( locate(.[MAP_MINX], .[MAP_MINY], .[MAP_MINZ]),
- locate(.[MAP_MAXX], .[MAP_MAXY], .[MAP_MAXZ]))
+ var/list/turfs = get_last_loaded_turf_block()
for(var/i in 1 to turfs.len)
var/turf/place = turfs[i]
if(istype(place, /turf/open/space)) // This assumes all shuttles are loaded in a single spot then moved to their real destination.
diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm
index 352adc46ff..e16804ab7f 100644
--- a/code/datums/skills/_skill_holder.dm
+++ b/code/datums/skills/_skill_holder.dm
@@ -15,7 +15,7 @@
CRASH("Invalid get_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
if(!skills)
return null
- return skills[skill]
+ return LAZYACCESS(skills, skill)
/**
* Grabs our affinity for a skill. !!This is a multiplier!!
@@ -25,7 +25,7 @@
CRASH("Invalid get_skill_affinity call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
if(!skills)
return 1
- var/affinity = skill_affinities[skill]
+ var/affinity = LAZYACCESS(skill_affinities, skill)
if(isnull(affinity))
return 1
return affinity
@@ -39,7 +39,7 @@
LAZYINITLIST(skills)
value = sanitize_skill_value(skill, value)
if(!isnull(value))
- skills[skill] = value
+ LAZYSET(skills, skill, value)
return TRUE
return FALSE
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 86afd2cc15..e080e597a3 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -550,3 +550,30 @@
else if(isanimal(L))
var/mob/living/simple_animal/SM = L
SM.adjustHealth(-3.5, forced = TRUE)
+
+/obj/screen/alert/status_effect/regenerative_core
+ name = "Reinforcing Tendrils"
+ desc = "You can move faster than your broken body could normally handle!"
+ icon_state = "regenerative_core"
+ name = "Regenerative Core Tendrils"
+
+/datum/status_effect/regenerative_core
+ id = "Regenerative Core"
+ duration = 1 MINUTES
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /obj/screen/alert/status_effect/regenerative_core
+
+/datum/status_effect/regenerative_core/on_apply()
+ . = ..()
+ ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core")
+ owner.adjustBruteLoss(-25)
+ if(!AmBloodsucker(owner)) //use your coffin you lazy bastard
+ owner.adjustFireLoss(-25)
+ owner.remove_CC()
+ owner.bodytemperature = BODYTEMP_NORMAL
+ return TRUE
+
+/datum/status_effect/regenerative_core/on_remove()
+ . = ..()
+ REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "regenerative_core")
+ owner.updatehealth()
\ No newline at end of file
diff --git a/code/datums/wires/autoylathe.dm b/code/datums/wires/autoylathe.dm
deleted file mode 100644
index 736c9551ec..0000000000
--- a/code/datums/wires/autoylathe.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/datum/wires/autoylathe
- holder_type = /obj/machinery/autoylathe
- proper_name = "Autoylathe"
-
-/datum/wires/autoylathe/New(atom/holder)
- wires = list(
- WIRE_HACK, WIRE_DISABLE,
- WIRE_SHOCK, WIRE_ZAP
- )
- add_duds(6)
- ..()
-
-/datum/wires/autoylathe/interactable(mob/user)
- var/obj/machinery/autoylathe/A = holder
- if(A.panel_open)
- return TRUE
-
-/datum/wires/autoylathe/get_status()
- var/obj/machinery/autoylathe/A = holder
- var/list/status = list()
- status += "The red light is [A.disabled ? "on" : "off"]."
- status += "The blue light is [A.hacked ? "on" : "off"]."
- return status
-
-/datum/wires/autoylathe/on_pulse(wire)
- var/obj/machinery/autoylathe/A = holder
- switch(wire)
- if(WIRE_HACK)
- A.adjust_hacked(!A.hacked)
- addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
- if(WIRE_SHOCK)
- A.shocked = !A.shocked
- addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
- if(WIRE_DISABLE)
- A.disabled = !A.disabled
- addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
-
-/datum/wires/autoylathe/on_cut(wire, mend)
- var/obj/machinery/autoylathe/A = holder
- switch(wire)
- if(WIRE_HACK)
- A.adjust_hacked(!mend)
- if(WIRE_HACK)
- A.shocked = !mend
- if(WIRE_DISABLE)
- A.disabled = !mend
- if(WIRE_ZAP)
- A.shock(usr, 50)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index b71f51bd07..dbb6864028 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -50,6 +50,13 @@
var/list/blood_DNA
var/list/suit_fibers
+ /// Last name used to calculate a color for the chatmessage overlays
+ var/chat_color_name
+ /// Last color calculated for the the chatmessage overlays
+ var/chat_color
+ /// A luminescence-shifted value of the last color calculated for chatmessage overlays
+ var/chat_color_darkened
+
/atom/New(loc, ...)
//atom creation method that preloads variables at creation
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
@@ -965,7 +972,7 @@ Proc for attack log creation, because really why not
for(var/x in materials)
var/datum/material/custom_material = SSmaterials.GetMaterialRef(x)
- if(!(material_flags & MATERIAL_NO_EFFECTS))
+ if(material_flags & MATERIAL_EFFECTS)
custom_material.on_applied(src, materials[custom_material] * multiplier * material_modifier, material_flags)
custom_materials[custom_material] += materials[x] * multiplier
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index cc6f84a18f..b86c7e9729 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -68,7 +68,7 @@
if(vs.plane == EMISSIVE_BLOCKER_PLANE)
SSvis_overlays.remove_vis_overlay(src, list(vs))
break
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE)
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE, dir)
/atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction)
if(!direction)
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index e6e10941c4..659d50c077 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -839,3 +839,11 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
return RULE_OF_THREE(40, 20, x) + 50
if (20 to INFINITY)
return rand(90, 100)
+
+/datum/game_mode/dynamic/ghost_info()
+ . = list()
+ . += "Current threat: [threat]"
+ . += "Target threat: [threat_level]"
+ . += "Storyteller: [storyteller.name]
"
+ . += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].
"
+ . += "On average, [peaceful_percentage]% of the rounds are more peaceful.
"
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 57919863f2..e2c549d911 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -604,3 +604,7 @@
/// Mode specific admin panel.
/datum/game_mode/proc/admin_panel()
return
+
+/// Mode specific info for ghost game_info
+/datum/game_mode/proc/ghost_info()
+ return
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 64704d4771..edb31e9dbd 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -28,11 +28,11 @@
var/prod_coeff = 1
var/datum/design/being_built
- var/datum/techweb/stored_research
var/list/datum/design/matching_designs
var/selected_category
var/screen = 1
+ var/datum/techweb/stored_research = /datum/techweb/specialized/autounlocking/autolathe
var/list/categories = list(
"Tools",
"Electronics",
@@ -45,9 +45,7 @@
"Dinnerware",
"Imported"
)
-
-/obj/machinery/autolathe/Initialize()
- var/static/list/allowed_types = list(
+ var/list/allowed_materials = list(
/datum/material/iron,
/datum/material/glass,
/datum/material/gold,
@@ -63,10 +61,12 @@
/datum/material/adamantine,
/datum/material/mythril
)
- AddComponent(/datum/component/material_container, allowed_types, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert))
+
+/obj/machinery/autolathe/Initialize()
+ AddComponent(/datum/component/material_container, allowed_materials, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert))
. = ..()
wires = new /datum/wires/autolathe(src)
- stored_research = new /datum/techweb/specialized/autounlocking/autolathe
+ stored_research = new stored_research
matching_designs = list()
/obj/machinery/autolathe/Destroy()
@@ -91,7 +91,7 @@
if(AUTOLATHE_SEARCH_MENU)
dat = search_win(user)
- var/datum/browser/popup = new(user, "autolathe", name, 400, 500)
+ var/datum/browser/popup = new(user, name, name, 400, 500)
popup.set_content(dat)
popup.open()
@@ -439,3 +439,32 @@
desc = "An autolathe reprogrammed with security protocols to prevent hacking."
hackable = FALSE
circuit = /obj/item/circuitboard/machine/autolathe/secure
+ stored_research = /datum/techweb/specialized/autounlocking/autolathe/public
+
+/obj/machinery/autolathe/toy
+ name = "autoylathe"
+ desc = "It produces toys using plastic, metal and glass."
+ circuit = /obj/item/circuitboard/machine/autolathe/toy
+
+ stored_research = /datum/techweb/specialized/autounlocking/autolathe/toy
+ categories = list(
+ "Toys",
+ "Figurines",
+ "Pistols",
+ "Rifles",
+ "Heavy",
+ "Melee",
+ "Armor",
+ "Adult",
+ "Misc",
+ "Imported"
+ )
+ allowed_materials = list(
+ /datum/material/iron,
+ /datum/material/glass,
+ /datum/material/plastic
+ )
+
+/obj/machinery/autolathe/toy/hacked/Initialize()
+ . = ..()
+ adjust_hacked(TRUE)
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index ad3dd5d720..3a90707bbe 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -16,6 +16,9 @@
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0)
+ if(istext(id) && mapload)
+ if(copytext(id, 1, 2) == "!")
+ id = SSmapping.get_obfuscated_id(id)
. = ..()
if(built)
setDir(ndir)
@@ -260,6 +263,11 @@
req_access = list()
id = 1
+/obj/machinery/button/electrochromatic
+ name = "window dim control"
+ desc = "Controls linked electrochromatic windows"
+ device_type = /obj/item/assembly/control/electrochromatic
+
/obj/item/wallframe/button
name = "button frame"
desc = "Used for building buttons."
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 24fd956677..c26c66a55f 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -53,6 +53,11 @@
using_power = FALSE
update_icon()
+/obj/machinery/recharger/Exited(atom/movable/M, atom/newloc)
+ . = ..()
+ if(charging == M)
+ setCharging()
+
/obj/machinery/recharger/attackby(obj/item/G, mob/user, params)
if(istype(G, /obj/item/wrench))
if(charging)
@@ -111,13 +116,11 @@
charging.update_icon()
charging.forceMove(drop_location())
user.put_in_hands(charging)
- setCharging(null)
/obj/machinery/recharger/attack_tk(mob/user)
if(charging)
charging.update_icon()
charging.forceMove(drop_location())
- setCharging(null)
/obj/machinery/recharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored)
diff --git a/code/game/machinery/toylathe.dm b/code/game/machinery/toylathe.dm
deleted file mode 100644
index 4e039d304c..0000000000
--- a/code/game/machinery/toylathe.dm
+++ /dev/null
@@ -1,415 +0,0 @@
-#define AUTOYLATHE_MAIN_MENU 1
-#define AUTOYLATHE_CATEGORY_MENU 2
-#define AUTOYLATHE_SEARCH_MENU 3
-
-/obj/machinery/autoylathe
- name = "autoylathe"
- desc = "It produces toys using plastic, metal and glass."
- icon_state = "autolathe"
- density = TRUE
- use_power = IDLE_POWER_USE
- idle_power_usage = 10
- active_power_usage = 100
- circuit = /obj/item/circuitboard/machine/autoylathe
- layer = BELOW_OBJ_LAYER
-
- var/operating = FALSE
- var/list/L = list()
- var/list/LL = list()
- var/hacked = FALSE
- var/disabled = 0
- var/shocked = FALSE
- var/hack_wire
- var/disable_wire
- var/shock_wire
-
- var/busy = FALSE
- var/prod_coeff = 1
-
- var/datum/design/being_built
- var/datum/techweb/stored_research
- var/list/datum/design/matching_designs
- var/selected_category
- var/screen = 1
-
- var/list/categories = list(
- "Toys",
- "Figurines",
- "Pistols",
- "Rifles",
- "Heavy",
- "Melee",
- "Armor",
- "Adult",
- "Misc",
- "Imported"
- )
-
-/obj/machinery/autoylathe/Initialize()
- var/static/list/allowed_materials = list(
- /datum/material/iron,
- /datum/material/glass,
- /datum/material/plastic
- )
- AddComponent(/datum/component/material_container, allowed_materials, 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert))
- . = ..()
-
- wires = new /datum/wires/autoylathe(src)
- stored_research = new /datum/techweb/specialized/autounlocking/autoylathe
- matching_designs = list()
-
-/obj/machinery/autoylathe/Destroy()
- QDEL_NULL(wires)
- return ..()
-
-/obj/machinery/autoylathe/ui_interact(mob/user)
- . = ..()
- if(!is_operational())
- return
-
- if(shocked && !(stat & NOPOWER))
- shock(user,50)
-
- var/dat
-
- switch(screen)
- if(AUTOYLATHE_MAIN_MENU)
- dat = main_win(user)
- if(AUTOYLATHE_CATEGORY_MENU)
- dat = category_win(user,selected_category)
- if(AUTOYLATHE_SEARCH_MENU)
- dat = search_win(user)
-
- var/datum/browser/popup = new(user, "Autoylathe", name, 400, 500)
- popup.set_content(dat)
- popup.open()
-
-/obj/machinery/autoylathe/on_deconstruction()
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- materials.retrieve_all()
-
-/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params)
- if (busy)
- to_chat(user, "The autoylathe is busy. Please wait for completion of previous operation.")
- return TRUE
-
- if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O))
- updateUsrDialog()
- return TRUE
-
- if(default_deconstruction_crowbar(O))
- return TRUE
-
- if(panel_open && is_wire_tool(O))
- wires.interact(user)
- return TRUE
-
- if(user.a_intent == INTENT_HARM) //so we can hit the machine
- return ..()
-
- if(stat)
- return TRUE
-
- if(istype(O, /obj/item/disk/design_disk))
- user.visible_message("[user] begins to load \the [O] in \the [src]...",
- "You begin to load a design from \the [O]...",
- "You hear the chatter of a floppy drive.")
- busy = TRUE
- var/obj/item/disk/design_disk/D = O
- if(do_after(user, 14.4, target = src))
- for(var/B in D.blueprints)
- if(B)
- stored_research.add_design(B)
- busy = FALSE
- return TRUE
-
- return ..()
-
-/obj/machinery/autoylathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted)
- if(item_inserted.custom_materials?.len && item_inserted.custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)])
- flick("autolathe_r",src)//plays glass insertion animation by default otherwise
- else
- flick("autolathe_o",src)//plays metal insertion animation
-
- use_power(min(1000, amount_inserted / 100))
- updateUsrDialog()
-
-/obj/machinery/autoylathe/Topic(href, href_list)
- if(..())
- return
- if (!busy)
- if(href_list["menu"])
- screen = text2num(href_list["menu"])
- updateUsrDialog()
-
- if(href_list["category"])
- selected_category = href_list["category"]
- updateUsrDialog()
-
- if(href_list["make"])
-
- /////////////////
- //href protection
- being_built = stored_research.isDesignResearchedID(href_list["make"])
- if(!being_built)
- return
-
- var/multiplier = text2num(href_list["multiplier"])
- var/is_stack = ispath(being_built.build_path, /obj/item/stack)
- multiplier = clamp(multiplier,1,50)
-
- /////////////////
-
- var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient
- var/total_amount = 0
- for(var/MAT in being_built.materials)
- total_amount += being_built.materials[MAT]
- var/power = max(2000, (total_amount)*multiplier/5) //Change this to use all materials
-
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
-
- var/list/materials_used = list()
- var/list/custom_materials = list() //These will apply their material effect, This should usually only be one.
-
- for(var/MAT in being_built.materials)
- var/datum/material/used_material = MAT
- var/amount_needed = being_built.materials[MAT] * coeff * multiplier
- if(istext(used_material)) //This means its a category
- var/list/list_to_show = list()
- for(var/i in SSmaterials.materials_by_category[used_material])
- if(materials.materials[i] > 0)
- list_to_show += i
-
- used_material = input("Choose [used_material]", "Custom Material") as null|anything in list_to_show
- if(!used_material)
- return //Didn't pick any material, so you can't build shit either.
- custom_materials[used_material] += amount_needed
-
- materials_used[used_material] = amount_needed
-
- if(materials.has_materials(materials_used))
- busy = TRUE
- use_power(power)
- icon_state = "autolathe_n"
- var/time = is_stack ? 32 : 32*coeff*multiplier
- addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack), time)
- else
- to_chat(usr, "Not enough materials for this operation.")
-
- if(href_list["search"])
- matching_designs.Cut()
-
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(findtext(D.name,href_list["to_search"]))
- matching_designs.Add(D)
- updateUsrDialog()
- else
- to_chat(usr, "The autoylathe is busy. Please wait for completion of previous operation.")
-
- updateUsrDialog()
-
- return
-
-/obj/machinery/autoylathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack)
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- var/atom/A = drop_location()
- use_power(power)
- materials.use_materials(materials_used)
-
- if(is_stack)
- var/obj/item/stack/N = new being_built.build_path(A, multiplier)
- N.update_icon()
- N.autoylathe_crafted(src)
- else
- for(var/i=1, i<=multiplier, i++)
- var/obj/item/new_item = new being_built.build_path(A)
- new_item.autoylathe_crafted(src)
- if(length(picked_materials))
- new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount
- icon_state = "autolathe"
- busy = FALSE
- updateDialog()
-
-/obj/machinery/autoylathe/RefreshParts()
- var/T = 0
- for(var/obj/item/stock_parts/matter_bin/MB in component_parts)
- T += MB.rating*75000
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- materials.max_amount = T
- T=1.2
- for(var/obj/item/stock_parts/manipulator/M in component_parts)
- T -= M.rating*0.2
- prod_coeff = clamp(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
-
-/obj/machinery/autoylathe/proc/main_win(mob/user)
- var/dat = "
Browsing [selected_category]:
"
- dat += materials_printout()
-
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- if(!(selected_category in D.category))
- continue
-
- if(disabled || !can_build(D))
- dat += "
[D.name]"
- else
- dat += "
[D.name]"
-
- if(ispath(D.build_path, /obj/item/stack))
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- var/max_multiplier
- for(var/datum/material/mat in D.materials)
- max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat]))
- if (max_multiplier>10 && !disabled)
- dat += "
x10"
- if (max_multiplier>25 && !disabled)
- dat += "
x25"
- if(max_multiplier > 0 && !disabled)
- dat += "
x[max_multiplier]"
- else
- if(!disabled && can_build(D, 5))
- dat += "
x5"
- if(!disabled && can_build(D, 10))
- dat += "
x10"
-
- dat += "[get_design_cost(D)]
"
-
- dat += "
"
- return dat
-
-/obj/machinery/autoylathe/proc/search_win(mob/user)
- var/dat = "Search results:
"
- dat += materials_printout()
-
- for(var/v in matching_designs)
- var/datum/design/D = v
- if(disabled || !can_build(D))
- dat += "
[D.name]"
- else
- dat += "
[D.name]"
-
- if(ispath(D.build_path, /obj/item/stack))
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- var/max_multiplier
- for(var/datum/material/mat in D.materials)
- max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat]))
- if (max_multiplier>10 && !disabled)
- dat += "
x10"
- if (max_multiplier>25 && !disabled)
- dat += "
x25"
- if(max_multiplier > 0 && !disabled)
- dat += "
x[max_multiplier]"
-
- dat += "[get_design_cost(D)]
"
-
- dat += "
"
- return dat
-
-/obj/machinery/autoylathe/proc/materials_printout()
- var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
- var/dat = "[RDSCREEN_NOBREAK]"
if (stored_research.deconstructed_items[linked_destroy.loaded_item.type])
l += "Point Deconstruction"
@@ -636,10 +636,8 @@ Nothing else in the console has ID requirements.
for (var/M in materials)
l += "* [CallMaterialName(M)] x [materials[M]]"
l += "
[RDSCREEN_NOBREAK]"
- anything = TRUE
- if (!anything)
- l += "Nothing!"
+ l += "