diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index e820b06f61..89e2c553b9 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -1651,7 +1651,7 @@
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
"eD" = (
-/obj/machinery/mecha_part_fabricator,
+/obj/machinery/mecha_part_fabricator/offstation,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
@@ -2010,12 +2010,12 @@
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/ancientstation/deltacorridor)
"fu" = (
-/obj/machinery/rnd/production/protolathe,
+/obj/machinery/rnd/production/protolathe/offstation,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/ancientstation/rnd)
"fv" = (
-/obj/machinery/rnd/production/circuit_imprinter,
+/obj/machinery/rnd/production/circuit_imprinter/offstation,
/obj/effect/decal/cleanable/dirt,
/obj/item/reagent_containers/dropper,
/turf/open/floor/plasteel/white,
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
index da0a0036c5..c842479db7 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
@@ -6,7 +6,10 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/poddoor/shutters/radiation/preopen,
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ab" = (
@@ -16,28 +19,40 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/machinery/door/poddoor/shutters/radiation/preopen,
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ac" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/poddoor/shutters/radiation/preopen,
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ad" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/machinery/door/poddoor/shutters/radiation/preopen,
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ae" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/door/poddoor/shutters/radiation/preopen,
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"af" = (
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/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm
index 37bc2a7dde..a9c5eab318 100644
--- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm
@@ -103,10 +103,6 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"dw" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
"dZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -1170,7 +1166,8 @@
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
dir = 1
},
-/turf/open/floor/plating/airless,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
/area/engine/engineering)
"Hp" = (
/obj/machinery/atmospherics/components/binary/pump{
@@ -1332,7 +1329,8 @@
/area/engine/engineering)
"LS" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating/airless,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
/area/engine/engineering)
"Mf" = (
/obj/structure/closet/secure_closet/engineering_personal,
@@ -2629,7 +2627,7 @@ EN
fq
LS
Hn
-dw
+tw
yf
Rh
yf
@@ -2655,9 +2653,9 @@ XW
ST
Ok
MP
-dw
-dw
-dw
+tw
+tw
+tw
Rh
Rh
Rh
diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/away_mission/Academy.dmm
similarity index 100%
rename from _maps/RandomZLevels/Academy.dmm
rename to _maps/RandomZLevels/away_mission/Academy.dmm
diff --git a/_maps/RandomZLevels/Cabin.dmm b/_maps/RandomZLevels/away_mission/Cabin.dmm
similarity index 100%
rename from _maps/RandomZLevels/Cabin.dmm
rename to _maps/RandomZLevels/away_mission/Cabin.dmm
diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/away_mission/TheBeach.dmm
similarity index 100%
rename from _maps/RandomZLevels/TheBeach.dmm
rename to _maps/RandomZLevels/away_mission/TheBeach.dmm
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/away_mission/caves.dmm
similarity index 100%
rename from _maps/RandomZLevels/caves.dmm
rename to _maps/RandomZLevels/away_mission/caves.dmm
diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/away_mission/challenge.dmm
similarity index 100%
rename from _maps/RandomZLevels/challenge.dmm
rename to _maps/RandomZLevels/away_mission/challenge.dmm
diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/away_mission/moonoutpost19.dmm
similarity index 100%
rename from _maps/RandomZLevels/moonoutpost19.dmm
rename to _maps/RandomZLevels/away_mission/moonoutpost19.dmm
diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/away_mission/research.dmm
similarity index 100%
rename from _maps/RandomZLevels/research.dmm
rename to _maps/RandomZLevels/away_mission/research.dmm
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/away_mission/snowdin.dmm
similarity index 100%
rename from _maps/RandomZLevels/snowdin.dmm
rename to _maps/RandomZLevels/away_mission/snowdin.dmm
diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/away_mission/spacebattle.dmm
similarity index 100%
rename from _maps/RandomZLevels/spacebattle.dmm
rename to _maps/RandomZLevels/away_mission/spacebattle.dmm
diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm
similarity index 100%
rename from _maps/RandomZLevels/undergroundoutpost45.dmm
rename to _maps/RandomZLevels/away_mission/undergroundoutpost45.dmm
diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/away_mission/wildwest.dmm
similarity index 100%
rename from _maps/RandomZLevels/wildwest.dmm
rename to _maps/RandomZLevels/away_mission/wildwest.dmm
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index e0dfa2ab74..9c2a1a2883 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -5789,6 +5789,12 @@
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/brig)
+"akE" = (
+/obj/machinery/holopad,
+/turf/open/floor/plasteel/yellowsiding{
+ dir = 1
+ },
+/area/crew_quarters/fitness/pool)
"akF" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red,
@@ -5804,6 +5810,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/processing)
+"akH" = (
+/obj/machinery/holopad,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"akI" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -5823,6 +5833,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
+"akK" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/engine,
+/area/science/xenobiology)
"akL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/meter,
@@ -5856,6 +5870,10 @@
},
/turf/open/floor/plasteel,
/area/security/main)
+"akP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/engine,
+/area/science/xenobiology)
"akQ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -5905,6 +5923,31 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/security/brig)
+"akV" = (
+/obj/machinery/door/window/southleft{
+ dir = 1;
+ name = "Test Chamber";
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "misclab";
+ name = "test chamber blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"akW" = (
+/obj/machinery/door/window/southleft{
+ name = "Test Chamber";
+ req_access_txt = "55"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"akX" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -5994,6 +6037,10 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
+"alf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"alg" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -6050,6 +6097,28 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"alm" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"aln" = (
+/obj/effect/landmark/start/scientist,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"alo" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -6076,6 +6145,21 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/security/warden)
+"alr" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"als" = (
/obj/machinery/door_timer{
id = "Cell 3";
@@ -6159,6 +6243,29 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"alx" = (
+/obj/structure/table/glass,
+/obj/item/paper_bin{
+ pixel_y = 4
+ },
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/pen{
+ pixel_x = -4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aly" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -6345,11 +6452,35 @@
"alU" = (
/turf/closed/wall,
/area/maintenance/port/fore)
-"alX" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+"alV" = (
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"alW" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/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" = (
@@ -6422,6 +6553,31 @@
},
/turf/open/floor/plasteel/dark,
/area/security/warden)
+"amh" = (
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"ami" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"amj" = (
/obj/machinery/door_timer{
id = "Cell 2";
@@ -6442,6 +6598,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
+"aml" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"amm" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -6464,6 +6626,12 @@
},
/turf/open/floor/plating,
/area/security/brig)
+"amo" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"amp" = (
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -6591,6 +6759,41 @@
/obj/item/coin/diamond,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"amG" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio3";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"amH" = (
+/obj/machinery/door/window/northleft{
+ dir = 4;
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"amI" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -6663,6 +6866,31 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/security/brig)
+"amP" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"amQ" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"amR" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -6683,6 +6911,24 @@
},
/turf/closed/wall/r_wall,
/area/security/brig)
+"amT" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/window/northleft{
+ dir = 4;
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio8";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"amU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -6818,6 +7064,23 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"ano" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"anp" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"anq" = (
/obj/structure/chair{
dir = 8
@@ -6869,6 +7132,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"anx" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"any" = (
/obj/effect/landmark/event_spawn,
/obj/structure/cable{
@@ -7002,6 +7273,17 @@
/obj/item/bedsheet/blue,
/turf/open/floor/plasteel,
/area/security/brig)
+"anN" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"anO" = (
/obj/docking_port/stationary{
dir = 8;
@@ -7190,6 +7472,33 @@
/obj/item/circuitboard/machine/monkey_recycler,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"aop" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/mob/living/simple_animal/slime,
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"aoq" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio2";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"aor" = (
/obj/structure/table,
/obj/item/restraints/handcuffs,
@@ -7200,6 +7509,24 @@
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
+"aos" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/window/northleft{
+ dir = 4;
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio7";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"aot" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -7469,12 +7796,19 @@
/turf/open/floor/plating,
/area/security/warden)
"apa" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
+"apb" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/mob/living/simple_animal/slime,
+/turf/open/floor/engine,
+/area/science/xenobiology)
"apc" = (
/obj/structure/chair/office/dark,
/turf/open/floor/plasteel/showroomfloor,
@@ -7632,6 +7966,26 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"apw" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio1";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"apx" = (
/obj/machinery/door/airlock/atmos/abandoned{
name = "Atmospherics Maintenance";
@@ -7700,7 +8054,9 @@
/area/maintenance/starboard/fore)
"apF" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 5
+ },
/turf/open/floor/plating,
/area/engine/atmos)
"apG" = (
@@ -7729,13 +8085,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"apI" = (
-/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{
- dir = 1
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/engine/atmos)
"apJ" = (
/turf/closed/wall,
/area/construction/mining/aux_base)
@@ -8135,6 +8484,24 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"aqB" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/window/northleft{
+ dir = 4;
+ name = "Containment Pen";
+ req_access_txt = "55"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio6";
+ name = "containment blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/science/xenobiology)
"aqC" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -8179,6 +8546,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"aqG" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"aqH" = (
/obj/machinery/light{
dir = 1;
@@ -8267,6 +8642,11 @@
"aqR" = (
/turf/open/floor/plating,
/area/maintenance/fore)
+"aqS" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"aqT" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -8444,6 +8824,14 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"ars" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"art" = (
/obj/machinery/light/small{
dir = 1
@@ -8918,6 +9306,12 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"asr" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ass" = (
/obj/machinery/door/airlock/security/glass{
name = "Labor Camp Shuttle Airlock"
@@ -8984,6 +9378,13 @@
"asB" = (
/turf/closed/wall,
/area/maintenance/department/electrical)
+"asC" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/science/xenobiology)
"asD" = (
/obj/structure/table/wood,
/mob/living/simple_animal/pet/fox/Renault,
@@ -36897,21 +37298,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"bJL" = (
-/obj/machinery/door/window/southleft{
- dir = 1;
- name = "Test Chamber";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "misclab";
- name = "test chamber blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"bJM" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -37500,14 +37886,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bLa" = (
-/obj/machinery/door/window/southleft{
- name = "Test Chamber";
- req_access_txt = "55"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bLb" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -37755,33 +38133,38 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plasteel/checker,
+/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bLI" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bLJ" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/obj/effect/turf_decal/bot,
+/obj/machinery/computer/atmos_control,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bLK" = (
/turf/closed/wall/r_wall,
/area/engine/atmos)
"bLL" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
+/obj/machinery/computer/station_alert,
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bLM" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/effect/turf_decal/bot,
+/obj/machinery/computer/atmos_alert,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bLN" = (
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-/obj/effect/turf_decal/bot,
+/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)
"bLO" = (
@@ -38146,25 +38529,11 @@
/turf/closed/wall,
/area/engine/atmos)
"bML" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bMM" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/airalarm{
- pixel_y = 23
- },
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMN" = (
-/obj/machinery/atmospherics/components/trinary/filter{
- dir = 4
- },
+/obj/machinery/atmospherics/components/unary/thermomachine/heater,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMO" = (
@@ -38233,16 +38602,8 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bMY" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/atmos)
"bMZ" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 6
- },
+/obj/machinery/atmospherics/components/unary/thermomachine/heater/on,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNb" = (
@@ -38522,18 +38883,20 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/loading_area{
dir = 8
},
-/turf/open/floor/plasteel/dark/corner,
+/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bNP" = (
/obj/structure/disposalpipe/segment{
- dir = 6
+ dir = 4
},
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = -30
+/obj/effect/turf_decal/loading_area{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -38548,9 +38911,6 @@
/obj/structure/disposalpipe/trunk{
dir = 8
},
-/obj/machinery/airalarm{
- pixel_y = 23
- },
/obj/machinery/camera{
c_tag = "Atmospherics Monitoring"
},
@@ -38577,6 +38937,9 @@
/obj/machinery/light{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNU" = (
@@ -38616,17 +38979,11 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/science/misc_lab)
-"bOa" = (
+"bOb" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bOb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOc" = (
@@ -38634,6 +38991,9 @@
dir = 1;
name = "Mix to Distro"
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOd" = (
@@ -38653,16 +39013,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
-"bOg" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Mix to Incinerator"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bOh" = (
/obj/structure/grille,
/turf/closed/wall/r_wall,
@@ -38964,15 +39314,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"bOQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"bOR" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -38980,15 +39321,9 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bOS" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
-/obj/effect/turf_decal/loading_area{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOT" = (
@@ -39024,9 +39359,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOW" = (
-/obj/machinery/computer/atmos_control{
- dir = 8
- },
/obj/machinery/requests_console{
department = "Atmospherics";
departmentType = 4;
@@ -39036,8 +39368,8 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
+/obj/machinery/computer/atmos_control{
+ dir = 8
},
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
@@ -39086,17 +39418,19 @@
/turf/open/floor/plasteel/white,
/area/science/circuit)
"bPc" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Mix to Waste"
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPd" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- name = "Waste In"
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39105,19 +39439,16 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPf" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Air to Mix"
- },
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPg" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix Outlet Pump"
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPh" = (
@@ -39132,7 +39463,6 @@
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible,
/obj/effect/turf_decal/tile/green{
dir = 1
},
@@ -39140,6 +39470,9 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPj" = (
@@ -39255,14 +39588,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bPy" = (
-/obj/effect/landmark/start/scientist,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/chair/comfy/black,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bPz" = (
/obj/structure/table/glass,
/obj/item/storage/box/beakers{
@@ -39298,41 +39623,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bPB" = (
-/obj/structure/table/glass,
-/obj/item/paper_bin{
- pixel_y = 4
- },
-/obj/item/folder/white{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/pen{
- pixel_x = -4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
-"bPC" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"bPD" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bPE" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -39555,20 +39845,15 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
-"bQf" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel/checker,
-/area/hallway/primary/aft)
"bQg" = (
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bQh" = (
-/obj/structure/tank_dispenser{
- pixel_x = -1
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQi" = (
@@ -39592,15 +39877,15 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQl" = (
-/obj/machinery/computer/atmos_control{
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/computer/atmos_alert{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
"bQm" = (
@@ -39613,15 +39898,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"bQo" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/preopen{
+ id = "atmos";
+ name = "Atmospherics Blast Door"
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bQp" = (
/obj/structure/cable{
@@ -39652,14 +39934,11 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
-"bQr" = (
-/obj/structure/closet/crate,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bQs" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "Mix to Filter"
+ name = "Air to Waste"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39669,20 +39948,9 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bQu" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bQv" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bQw" = (
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
/turf/open/floor/plasteel,
@@ -39706,6 +39974,9 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQA" = (
@@ -39775,18 +40046,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/tcommsat/computer)
-"bQL" = (
-/obj/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bQM" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/line{
@@ -39995,14 +40254,15 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plasteel/dark/corner,
+/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bRr" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/effect/landmark/start/atmospheric_technician,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/structure/tank_dispenser,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRs" = (
@@ -40025,12 +40285,12 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRu" = (
-/obj/machinery/computer/atmos_alert{
- dir = 8
- },
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/computer/atmos_alert{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
"bRv" = (
@@ -40044,25 +40304,20 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRw" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
+/obj/effect/turf_decal/bot,
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRx" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"bRy" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bRz" = (
-/obj/machinery/atmospherics/components/trinary/mixer{
- dir = 8
+"bRy" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -40073,12 +40328,13 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRB" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Waste to Filter"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRC" = (
@@ -40106,18 +40362,8 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRF" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bRG" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 1;
- name = "Unfiltered to Mix"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to Ports"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -40136,23 +40382,25 @@
/turf/open/floor/plating,
/area/engine/atmos)
"bRJ" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Unfiltered & Air to Mix"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/effect/turf_decal/tile/green{
+ dir = 8
},
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/green{
dir = 4
},
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRK" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
},
+/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
"bRL" = (
@@ -40254,16 +40502,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"bRX" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bRY" = (
/obj/structure/window/reinforced,
/obj/structure/table/reinforced,
@@ -40448,27 +40686,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"bSB" = (
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/structure/table,
-/obj/item/tank/internals/emergency_oxygen{
- pixel_x = -8
- },
-/obj/item/tank/internals/emergency_oxygen{
- pixel_x = -8
- },
-/obj/item/clothing/mask/breath{
- pixel_x = 4
- },
-/obj/item/clothing/mask/breath{
- pixel_x = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bSC" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -40478,114 +40695,36 @@
/turf/open/floor/plating,
/area/engine/atmos)
"bSD" = (
-/obj/structure/sign/plaques/atmos{
- pixel_y = -32
- },
-/obj/structure/table,
-/obj/item/storage/box,
-/obj/item/storage/box,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSE" = (
-/obj/machinery/computer/station_alert{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "atmos";
- name = "Atmospherics Lockdown";
- pixel_x = 24;
- pixel_y = 4;
+/obj/machinery/door/airlock/atmos/glass{
+ name = "Atmospherics Monitoring";
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,
+/obj/machinery/door/firedoor/heavy,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bSF" = (
-/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/light{
- dir = 8
- },
-/obj/item/multitool,
-/obj/item/clothing/glasses/welding,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSG" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/sheet/metal/fifty{
- pixel_x = 2;
- pixel_y = 2
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSH" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/storage/belt/utility,
-/obj/item/t_scanner,
-/obj/item/t_scanner,
-/obj/item/t_scanner,
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSJ" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"bSK" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 6
},
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bSM" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"bSN" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"bSP" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
- },
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"bSQ" = (
@@ -40682,71 +40821,6 @@
/obj/machinery/vending/medical,
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"bTa" = (
-/obj/machinery/door/window/northleft{
- dir = 4;
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
-"bTb" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio3";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
-"bTc" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"bTd" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
-"bTe" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/window/northleft{
- dir = 4;
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio8";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"bTf" = (
/obj/structure/rack,
/obj/item/wrench,
@@ -40989,16 +41063,23 @@
/area/engine/atmos)
"bTM" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
-/area/engine/atmos)
-"bTN" = (
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/door/airlock/atmos/glass{
- name = "Atmospherics Monitoring";
- req_access_txt = "24"
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"bTN" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/atmospherics,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark/corner{
+ dir = 1
+ },
+/area/engine/atmos)
"bTO" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 6
@@ -41011,30 +41092,11 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bTQ" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTR" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTS" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 6
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bTT" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+ dir = 8
},
+/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTU" = (
@@ -41046,11 +41108,12 @@
"bTV" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "N2O Outlet Pump"
+ name = "N2O to Pure"
},
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"bTW" = (
@@ -41134,16 +41197,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"bUf" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bUg" = (
/obj/structure/window/reinforced{
dir = 1
@@ -41240,7 +41293,7 @@
/area/science/circuit)
"bUr" = (
/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 10
},
/turf/open/space,
@@ -41383,6 +41436,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/effect/decal/cleanable/oil{
+ icon_state = "floor5"
+ },
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
"bUJ" = (
@@ -41413,31 +41469,19 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+ dir = 9
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUN" = (
-/obj/item/beacon,
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUO" = (
/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to Port"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUP" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Air to Port"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUQ" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Pure to Port"
+ dir = 8;
+ name = "Ports to External"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -41456,11 +41500,14 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/white/corner,
/area/engine/atmos)
"bUU" = (
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-/obj/machinery/atmospherics/miner/n2o,
+/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bUV" = (
@@ -41471,6 +41518,7 @@
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bUY" = (
@@ -41820,6 +41868,10 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/suit_storage_unit/atmos,
/turf/open/floor/plasteel/dark/corner,
/area/engine/atmos)
"bVS" = (
@@ -41836,17 +41888,10 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bVU" = (
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bVV" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVW" = (
@@ -41866,33 +41911,16 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bVY" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bVZ" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bWa" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWb" = (
+"bWc" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWc" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/red{
dir = 4
},
@@ -42175,21 +42203,21 @@
},
/area/engine/atmos)
"bWN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
},
-/obj/machinery/door/poddoor/preopen{
- id = "atmos";
- name = "Atmospherics Blast Door"
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWO" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/obj/machinery/meter,
+/area/engine/atmos)
+"bWO" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
/turf/closed/wall/r_wall,
/area/engine/atmos)
"bWP" = (
@@ -42213,42 +42241,15 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bWS" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics West";
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWT" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
- },
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Air to Port"
- },
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bWU" = (
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Mix to Engine"
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWV" = (
@@ -42335,42 +42336,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"bXe" = (
-/mob/living/simple_animal/slime,
-/turf/open/floor/engine,
-/area/science/xenobiology)
-"bXf" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio2";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
-"bXg" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/window/northleft{
- dir = 4;
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio7";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"bXh" = (
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/plasteel,
@@ -42598,23 +42563,10 @@
},
/area/engine/atmos)
"bXK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
/turf/closed/wall/r_wall,
/area/engine/atmos)
-"bXL" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/r_wall,
-/area/engine/atmos)
-"bXM" = (
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/door/airlock/atmos{
- name = "Atmospherics";
- req_access_txt = "24"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bXN" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -42654,29 +42606,7 @@
/obj/structure/fireaxecabinet{
pixel_x = -32
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXR" = (
-/obj/structure/closet/secure_closet/atmospherics,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/item/cartridge/atmos,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXS" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXT" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXU" = (
@@ -42692,11 +42622,19 @@
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "Plasma Outlet Pump"
+ name = "Plasma to Pure"
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXW" = (
@@ -42998,31 +42936,19 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"bYJ" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 1
- },
-/area/engine/break_room)
-"bYK" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel/checker,
-/area/engine/break_room)
"bYL" = (
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/door/firedoor/heavy,
+/obj/machinery/door/airlock/atmos{
+ name = "Atmospherics";
+ req_access_txt = "24"
+ },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
-/area/engine/break_room)
+/area/engine/atmos)
"bYM" = (
/obj/machinery/airalarm{
dir = 1;
@@ -43040,9 +42966,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"bYN" = (
-/turf/closed/wall,
-/area/security/checkpoint/engineering)
"bYO" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -43054,35 +42977,27 @@
/turf/closed/wall,
/area/crew_quarters/bar)
"bYQ" = (
-/obj/machinery/suit_storage_unit/atmos,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bYR" = (
-/obj/structure/sign/warning/nosmoking,
-/turf/closed/wall,
-/area/engine/atmos)
-"bYS" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bYT" = (
/obj/machinery/computer/atmos_control/tank/toxin_tank{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bYU" = (
-/obj/machinery/portable_atmospherics/canister/toxins,
-/obj/machinery/atmospherics/miner/toxins,
+/obj/effect/turf_decal/vg_decals/atmos/plasma,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bYV" = (
@@ -43093,6 +43008,7 @@
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bYX" = (
@@ -43376,42 +43292,29 @@
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bZG" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bZH" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/item/wrench,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bZI" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bZJ" = (
+"bZK" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bZK" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bZL" = (
@@ -43794,57 +43697,9 @@
},
/turf/closed/wall/r_wall,
/area/security/checkpoint/engineering)
-"caE" = (
-/obj/machinery/requests_console{
- department = "Atmospherics";
- departmentType = 4;
- name = "Atmos RC";
- pixel_x = 30
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"caF" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics Central";
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port to Filter"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"caG" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/heater{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"caH" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/structure/chair/stool,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"caI" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/aft)
"caJ" = (
/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 5
- },
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/space,
/area/space/nearstation)
"caK" = (
@@ -43969,38 +43824,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"caV" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio1";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
-"caW" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/window/northleft{
- dir = 4;
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio6";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"caX" = (
/obj/machinery/sparker{
id = "testigniter";
@@ -44284,42 +44107,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"cbB" = (
-/obj/machinery/space_heater,
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cbC" = (
-/obj/machinery/space_heater,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cbD" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Port to Filter"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cbE" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cbF" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/obj/item/cigbutt,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"cbG" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "CO2 Outlet Pump"
+ name = "CO2 to Pure"
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -44328,6 +44119,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cbH" = (
@@ -44343,9 +44135,6 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 10
- },
/turf/open/floor/plating,
/area/maintenance/aft)
"cbK" = (
@@ -44428,13 +44217,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"cbT" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"cbU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -44696,24 +44478,12 @@
dir = 4;
pixel_x = -24
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"ccw" = (
/turf/closed/wall/r_wall,
/area/engine/engineering)
-"ccx" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 1
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"ccy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"ccz" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
@@ -44729,11 +44499,11 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"ccB" = (
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
-/obj/machinery/atmospherics/miner/carbon_dioxide,
+/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"ccC" = (
@@ -44744,6 +44514,7 @@
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"ccE" = (
@@ -44838,10 +44609,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"ccP" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"ccQ" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -45054,52 +44821,24 @@
dir = 4;
pixel_x = -22
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cdx" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"cdy" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cdz" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "O2 to Pure"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cdA" = (
-/obj/machinery/atmospherics/components/trinary/mixer/airmix{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cdB" = (
+"cdC" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cdC" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cdD" = (
@@ -45112,9 +44851,6 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
/turf/open/floor/plating,
/area/maintenance/aft)
"cdF" = (
@@ -45441,6 +45177,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cey" = (
@@ -45464,26 +45201,19 @@
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"ceC" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/turf/open/floor/plating,
-/area/maintenance/aft)
"ceD" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/aft)
"ceE" = (
@@ -45491,6 +45221,9 @@
pixel_y = -32
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/aft)
"ceF" = (
@@ -45693,21 +45426,29 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"cfi" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cfj" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"cfk" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock/atmos{
name = "Turbine Access";
req_access_txt = "32"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
"cfl" = (
@@ -45922,17 +45663,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cfN" = (
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cfO" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/portable_atmospherics/pump,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"cfP" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{
dir = 4
},
/turf/open/floor/plasteel,
@@ -45944,22 +45676,11 @@
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"cfR" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cfT" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"cfU" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"cfW" = (
@@ -45969,7 +45690,6 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plating,
/area/maintenance/aft)
"cfX" = (
@@ -45979,7 +45699,9 @@
pixel_y = -24
},
/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
/turf/open/floor/plating,
/area/maintenance/aft)
"cfY" = (
@@ -45989,14 +45711,15 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
"cfZ" = (
/obj/machinery/light_switch{
pixel_y = 26
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cga" = (
@@ -46335,11 +46058,12 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cgW" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -46347,11 +46071,17 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cgX" = (
/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cgY" = (
@@ -46366,6 +46096,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cgZ" = (
@@ -46376,17 +46109,22 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cha" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
+ dir = 4
},
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"chb" = (
@@ -46401,6 +46139,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"chc" = (
@@ -46410,6 +46151,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
+ },
/turf/open/floor/plasteel/white/corner,
/area/engine/atmos)
"chd" = (
@@ -46417,6 +46161,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/cafeteria,
/area/engine/atmos)
"che" = (
@@ -46470,15 +46217,17 @@
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"chk" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"chl" = (
/obj/machinery/light{
dir = 1
},
-/obj/machinery/atmospherics/components/binary/pump{
- name = "atmospherics mix pump"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
@@ -46493,16 +46242,13 @@
/obj/structure/cable/yellow{
icon_state = "0-8"
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
"chn" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable/yellow{
icon_state = "2-4"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cho" = (
@@ -46543,13 +46289,6 @@
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"cht" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"chu" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -46926,6 +46665,9 @@
"civ" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/engine/atmos)
"cix" = (
@@ -46960,12 +46702,16 @@
/obj/effect/decal/cleanable/cobweb,
/obj/structure/reagent_dispensers/watertank,
/obj/item/extinguisher,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 0
+ },
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"ciC" = (
/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 6
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 5
},
/turf/open/space,
/area/space/nearstation)
@@ -47296,35 +47042,16 @@
/turf/open/floor/plasteel,
/area/construction)
"cjp" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
/obj/structure/reagent_dispensers/fueltank,
/obj/item/storage/toolbox/emergency,
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"cjq" = (
-/obj/machinery/atmospherics/components/binary/valve{
- name = "Mix to Space"
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cjr" = (
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
-"cjs" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"cjt" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
"cju" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
@@ -47333,9 +47060,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cjv" = (
@@ -47345,10 +47069,6 @@
/obj/structure/disposalpipe/segment{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cjw" = (
@@ -47361,9 +47081,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"cjy" = (
@@ -47628,30 +47346,27 @@
/area/engine/atmos)
"cke" = (
/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"ckf" = (
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
"ckg" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/machinery/meter,
+/obj/machinery/atmospherics/components/binary/valve,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"ckh" = (
/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to MiniSat"
- },
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"cki" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
+ dir = 4;
+ name = "atmospherics mix pump"
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
@@ -47662,17 +47377,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
-"ckk" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 4;
- name = "Incinerator to Space"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
"ckl" = (
/obj/machinery/portable_atmospherics/canister,
/obj/effect/decal/cleanable/cobweb,
@@ -47686,11 +47390,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
-"ckn" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cko" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
@@ -47949,7 +47648,6 @@
/area/engine/atmos)
"cld" = (
/obj/effect/landmark/blobstart,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
name = "Mix to Incinerator"
@@ -47967,19 +47665,6 @@
/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
-"clg" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -29
- },
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen,
-/turf/open/floor/plating,
-/area/maintenance/disposal/incinerator)
"clh" = (
/obj/machinery/light/small,
/obj/structure/extinguisher_cabinet{
@@ -48010,7 +47695,6 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"clk" = (
@@ -48265,16 +47949,14 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clT" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/machinery/atmospherics/miner/nitrogen,
+/obj/effect/turf_decal/vg_decals/atmos/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"clU" = (
/turf/open/floor/engine/n2,
/area/engine/atmos)
"clV" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/atmospherics/miner/oxygen,
+/obj/effect/turf_decal/vg_decals/atmos/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"clW" = (
@@ -48288,9 +47970,11 @@
/turf/open/floor/engine/air,
/area/engine/atmos)
"cmb" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cmd" = (
/turf/closed/wall/r_wall,
@@ -48300,20 +47984,14 @@
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"cmf" = (
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 4;
+ name = "Incinerator to Space"
},
-/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos{
- pixel_x = 38;
- pixel_y = 6
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
"cmg" = (
/obj/machinery/atmospherics/pipe/simple/general/hidden{
@@ -48529,10 +48207,12 @@
/area/engine/engineering)
"cmU" = (
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cmV" = (
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cmW" = (
@@ -49808,10 +49488,6 @@
},
/turf/open/space,
/area/space/nearstation)
-"csk" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"csl" = (
/obj/structure/transit_tube/curved{
dir = 4
@@ -49867,8 +49543,8 @@
/area/ai_monitored/turret_protected/aisat_interior)
"csM" = (
/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/structure/transit_tube/crossing/horizontal,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/space,
/area/space/nearstation)
"csN" = (
@@ -49934,7 +49610,7 @@
/area/ai_monitored/turret_protected/aisat_interior)
"ctd" = (
/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/space,
/area/space/nearstation)
"ctg" = (
@@ -50199,13 +49875,6 @@
/obj/effect/landmark/start/cyborg,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
-"ctN" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 10
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"ctP" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -50301,8 +49970,8 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"ctY" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/closed/wall/r_wall,
/area/ai_monitored/turret_protected/aisat/atmos)
"ctZ" = (
@@ -50382,11 +50051,11 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"cuh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/structure/rack,
/obj/item/wrench,
/obj/item/crowbar/red,
/obj/item/clothing/head/welding,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat/atmos)
"cui" = (
@@ -50419,7 +50088,7 @@
/area/ai_monitored/turret_protected/aisat/service)
"cun" = (
/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to MiniSat"
+ name = "Incinerator to MiniSat"
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -52454,23 +52123,12 @@
/turf/open/floor/engine/vacuum,
/area/science/mixing)
"cBF" = (
+/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
dir = 8
},
-/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"cBG" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"cBH" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -52483,9 +52141,6 @@
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
"cBJ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -52529,8 +52184,8 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cBP" = (
-/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/vg_decals/atmos/air,
/turf/open/floor/engine/air,
/area/engine/atmos)
"cBS" = (
@@ -52660,9 +52315,7 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cCB" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cCC" = (
@@ -52672,18 +52325,16 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"cCD" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine"
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"cCE" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"cCF" = (
@@ -53178,6 +52829,10 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"cLS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/security/vacantoffice/b)
"cMC" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -53869,20 +53524,27 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
+"daq" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"daI" = (
-/obj/structure/reagent_dispensers/foamtank,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow{
+/obj/structure/window/reinforced,
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"dbb" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{
dir = 1
},
-/obj/effect/turf_decal/stripes/box,
-/turf/open/floor/plasteel,
+/obj/structure/lattice/catwalk,
+/turf/open/space,
/area/engine/atmos)
"dbU" = (
/obj/structure/light_construct{
@@ -53953,6 +53615,20 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"diH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/obj/machinery/suit_storage_unit/atmos,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"dly" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -54038,6 +53714,13 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"dAe" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"dBm" = (
/obj/machinery/portable_atmospherics/scrubber,
/turf/open/floor/plating,
@@ -54060,6 +53743,16 @@
},
/turf/open/floor/plasteel,
/area/security/range)
+"dEX" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/requests_console{
+ department = "Atmospherics";
+ departmentType = 4;
+ name = "Atmos RC";
+ pixel_x = -30
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"dFX" = (
/turf/closed/wall,
/area/crew_quarters/fitness/pool)
@@ -54082,6 +53775,13 @@
/obj/structure/chair/stool/bar,
/turf/open/floor/wood,
/area/maintenance/bar)
+"dMj" = (
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"dMZ" = (
/obj/structure/sign/poster/official/random{
pixel_y = 32
@@ -54114,6 +53814,13 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"dQD" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Incinerator to MiniSat"
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/disposal/incinerator)
"dTI" = (
/obj/structure/urinal{
pixel_y = 32
@@ -54193,6 +53900,13 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"eiZ" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/purple/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"elh" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -54233,6 +53947,12 @@
/obj/item/assembly/signaler,
/turf/open/floor/plating,
/area/security/prison)
+"eqq" = (
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"eqA" = (
/obj/machinery/shower{
dir = 8
@@ -54270,6 +53990,13 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/library)
+"eus" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"evR" = (
/turf/open/floor/plating,
/area/maintenance/bar)
@@ -54298,6 +54025,24 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"eyS" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Air to Pure"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"ezF" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"eAG" = (
/obj/item/clothing/under/misc/pj/blue,
/obj/item/clothing/shoes/sneakers/white,
@@ -54379,12 +54124,6 @@
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"eHI" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
"eJa" = (
/obj/structure/table/wood/poker,
/obj/item/toy/cards/deck{
@@ -54418,6 +54157,13 @@
/obj/structure/closet/secure_closet/personal/cabinet,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
+"eUW" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 9
+ },
+/turf/open/space,
+/area/space/nearstation)
"eVC" = (
/obj/effect/spawner/structure/window,
/obj/machinery/door/firedoor,
@@ -54505,10 +54251,23 @@
dir = 4
},
/area/crew_quarters/theatre)
+"fiy" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"fjS" = (
/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
+"fjU" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
"flc" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
@@ -54740,6 +54499,13 @@
},
/turf/open/floor/plasteel,
/area/hydroponics)
+"fHi" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"fHG" = (
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
@@ -54764,6 +54530,12 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/science/circuit)
+"fKC" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"fMp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
@@ -54784,12 +54556,20 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"fPL" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+"fPi" = (
+/obj/effect/decal/cleanable/oil{
+ icon_state = "floor6"
+ },
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"fSO" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"fTg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54910,6 +54690,17 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
+"giT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"gjl" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
@@ -54940,6 +54731,12 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
+"grr" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"grA" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -54981,6 +54778,11 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
+"gxw" = (
+/obj/machinery/atmospherics/pipe/manifold/orange/visible,
+/obj/machinery/meter,
+/turf/closed/wall/r_wall,
+/area/engine/atmos)
"gyr" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -54999,6 +54801,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/fore)
+"gAu" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "External to Waste"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"gBo" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -55062,6 +54874,15 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"gMD" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"gNC" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55190,6 +55011,13 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port)
+"hgG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -27
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"hgO" = (
/obj/structure/table,
/obj/item/storage/pill_bottle/dice{
@@ -55256,6 +55084,11 @@
},
/turf/open/floor/plating,
/area/space/nearstation)
+"hxn" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
"hzK" = (
/turf/open/floor/plasteel/yellowsiding/corner{
dir = 1
@@ -55331,6 +55164,15 @@
},
/turf/closed/wall,
/area/quartermaster/warehouse)
+"hQY" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"hRa" = (
/obj/structure/table/reinforced,
/obj/machinery/light{
@@ -55464,6 +55306,13 @@
"ipA" = (
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"iql" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/item/beacon,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"itD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55513,6 +55362,14 @@
/obj/effect/turf_decal/tile/green,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"ivJ" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
"iwB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -55556,6 +55413,14 @@
},
/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
+"iIS" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
"iLJ" = (
/obj/item/reagent_containers/glass/bucket,
/mob/living/simple_animal/pet/bumbles,
@@ -55618,10 +55483,15 @@
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
-"iUK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+"iVJ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
-/area/security/vacantoffice/b)
+/area/engine/atmos)
"iVU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55753,6 +55623,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"jtj" = (
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"juG" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -55791,6 +55668,14 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
+"jzM" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
"jAD" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
@@ -55823,6 +55708,14 @@
},
/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,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"jCq" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -55835,6 +55728,17 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jDr" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "atmos";
+ name = "Atmospherics Blast Door"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"jEc" = (
/obj/machinery/vr_sleeper{
dir = 8
@@ -55856,6 +55760,12 @@
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
+"jGI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"jGW" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -55888,6 +55798,11 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jIj" = (
+/obj/machinery/portable_atmospherics/scrubber/huge,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"jIs" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -55969,6 +55884,17 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jVX" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark/corner{
+ dir = 1
+ },
+/area/engine/atmos)
"jZT" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -56004,6 +55930,11 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"kcx" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/turf/open/space/basic,
+/area/space/nearstation)
"kdO" = (
/obj/machinery/pool/controller,
/turf/open/floor/plasteel/yellowsiding,
@@ -56259,6 +56190,13 @@
/obj/effect/landmark/stationroom/box/engine,
/turf/open/space/basic,
/area/space)
+"kGv" = (
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"kGJ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -56292,6 +56230,13 @@
},
/turf/open/floor/plasteel,
/area/security/processing)
+"kJE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"kMt" = (
/obj/machinery/computer/prisoner/gulag_teleporter_computer,
/turf/open/floor/plasteel,
@@ -56431,6 +56376,19 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"lgX" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"lhQ" = (
+/obj/machinery/power/floodlight,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
"lip" = (
/obj/structure/closet{
name = "Suit Closet"
@@ -56502,6 +56460,11 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"lzt" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"lAB" = (
/obj/structure/sign/nanotrasen,
/turf/closed/wall,
@@ -56557,6 +56520,12 @@
},
/turf/open/floor/plating,
/area/security/main)
+"lKj" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"lMg" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -56638,6 +56607,10 @@
},
/turf/closed/wall,
/area/crew_quarters/fitness/pool)
+"maT" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"mbU" = (
/obj/machinery/vr_sleeper{
dir = 8
@@ -56662,6 +56635,11 @@
/obj/structure/bed,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/pool)
+"mfI" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"mgF" = (
/obj/structure/bed,
/turf/open/floor/plasteel,
@@ -56877,6 +56855,12 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
+"mOG" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/atmos)
"mPk" = (
/obj/structure/bed,
/obj/machinery/button/door{
@@ -56980,12 +56964,6 @@
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
-"nfw" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"ngs" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -57021,6 +56999,19 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"nmZ" = (
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos{
+ pixel_x = 38;
+ pixel_y = 6
+ },
+/turf/open/floor/engine,
+/area/maintenance/disposal/incinerator)
"nnp" = (
/obj/structure/closet/secure_closet/medical1,
/obj/effect/decal/cleanable/dirt,
@@ -57076,6 +57067,12 @@
},
/turf/open/floor/plating,
/area/construction)
+"nzR" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
"nBI" = (
/obj/item/cigbutt/cigarbutt,
/obj/effect/decal/cleanable/blood/old,
@@ -57091,6 +57088,13 @@
},
/turf/open/floor/plating,
/area/security/processing)
+"nFj" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 10
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"nGf" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light{
@@ -57109,6 +57113,14 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"nJQ" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"nLu" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -57166,6 +57178,12 @@
},
/turf/open/floor/plasteel,
/area/security/processing)
+"nTU" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Air to Ports"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"nUV" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -57192,6 +57210,14 @@
/obj/item/gun/ballistic/revolver/nagant,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/nuke_storage)
+"nYT" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/turf/open/space,
+/area/space/nearstation)
"nZE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral,
@@ -57314,6 +57340,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"omk" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"omX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57541,6 +57573,17 @@
/obj/structure/pool/ladder,
/turf/open/pool,
/area/crew_quarters/fitness/pool)
+"oVN" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"oXn" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/atmos)
"oZl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/closet/wardrobe/pjs,
@@ -57589,21 +57632,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/pool)
-"plm" = (
-/obj/structure/reagent_dispensers/watertank/high,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/box,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"plC" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -57701,6 +57729,22 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"pzG" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
+ },
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal/incinerator)
"pAK" = (
/obj/machinery/door/window/brigdoor/security/cell{
id = "Cell 3";
@@ -57728,6 +57772,11 @@
/obj/effect/landmark/event_spawn,
/turf/closed/wall,
/area/crew_quarters/fitness)
+"pCj" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
"pDe" = (
/obj/machinery/door/window/southright{
name = "Target Storage"
@@ -57849,13 +57898,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/fitness)
-"pRW" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
"pTB" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -57873,6 +57915,12 @@
},
/turf/open/floor/plasteel,
/area/security/processing)
+"pUP" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"qaY" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/bar,
@@ -57983,6 +58031,15 @@
/obj/structure/grille/broken,
/turf/open/space/basic,
/area/space/nearstation)
+"qvf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"qyj" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,
@@ -58005,6 +58062,11 @@
},
/turf/open/space,
/area/solar/port/aft)
+"qJV" = (
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
"qLR" = (
/obj/structure/mirror{
pixel_y = 32
@@ -58098,6 +58160,13 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"rdl" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/atmos)
"rdG" = (
/obj/machinery/hydroponics/constructable,
/obj/item/radio/intercom{
@@ -58117,10 +58186,12 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"rfW" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
+"rgL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"rhX" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -58136,6 +58207,13 @@
/obj/structure/chair/comfy/brown,
/turf/open/floor/wood,
/area/crew_quarters/bar)
+"rmQ" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"rmX" = (
/obj/structure/table,
/obj/item/reagent_containers/food/drinks/beer,
@@ -58407,6 +58485,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
+"rVN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark/corner{
+ dir = 1
+ },
+/area/engine/atmos)
"rXl" = (
/obj/structure/chair/office/light,
/obj/machinery/firealarm{
@@ -58494,6 +58584,13 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"smP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/closet/crate,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"sqg" = (
/obj/structure/table/wood,
/obj/item/clothing/under/misc/pj/red,
@@ -58773,6 +58870,10 @@
"sXV" = (
/turf/closed/wall/r_wall,
/area/security/range)
+"sYm" = (
+/obj/effect/turf_decal/vg_decals/atmos/mix,
+/turf/open/floor/engine/vacuum,
+/area/engine/atmos)
"sYR" = (
/obj/machinery/door/airlock{
name = "Unisex Restrooms"
@@ -59045,6 +59146,13 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"tSo" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"tWj" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -59101,12 +59209,28 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"udT" = (
+/obj/machinery/atmospherics/pipe/manifold/purple/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"uei" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
+"ueZ" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = -30
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/camera{
+ c_tag = "Atmospherics Central";
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"ufD" = (
/obj/machinery/vr_sleeper{
dir = 4
@@ -59122,6 +59246,12 @@
dir = 4
},
/area/crew_quarters/fitness)
+"ugp" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"ugu" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -59316,6 +59446,24 @@
"uGI" = (
/turf/open/floor/grass,
/area/security/prison)
+"uHc" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/maintenance/disposal/incinerator)
+"uHl" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/engine/atmos)
"uHp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
@@ -59370,13 +59518,13 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/nuke_storage)
-"uPT" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+"uQR" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "O2 to Pure"
},
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"uQS" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1;
@@ -59442,15 +59590,6 @@
},
/turf/open/floor/plating,
/area/space/nearstation)
-"vaW" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"vbi" = (
/obj/structure/table,
/obj/item/instrument/guitar{
@@ -59862,11 +60001,26 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/maintenance/fore)
+"vOC" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 5
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
"vOU" = (
/obj/structure/sign/warning/securearea,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/ai_monitored/nuke_storage)
+"vOV" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/dark/visible,
+/turf/open/space,
+/area/space/nearstation)
"vPs" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -59880,6 +60034,24 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"vPQ" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "External to Pumps"
+ },
+/turf/open/floor/plasteel,
+/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{
+ dir = 8;
+ name = "Mix to External"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"vTP" = (
/obj/machinery/door/airlock/external{
name = "Labor Camp Shuttle Airlock";
@@ -60032,6 +60204,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"wvg" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Ports to Incinerator"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"wvX" = (
/obj/structure/table/reinforced,
/obj/machinery/light,
@@ -60045,6 +60224,13 @@
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
+"wyE" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"wBd" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -60190,6 +60376,13 @@
/obj/item/coin/gold,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
+"xcl" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/dark/visible{
+ dir = 6
+ },
+/turf/open/space,
+/area/space/nearstation)
"xgk" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -60342,6 +60535,12 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"xud" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/disposal/incinerator)
"xxi" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -60403,12 +60602,6 @@
/obj/structure/closet/secure_closet/personal,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"xEu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
"xEB" = (
/obj/machinery/power/apc{
areastring = "/area/ai_monitored/nuke_storage";
@@ -60455,6 +60648,12 @@
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"xJC" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/maintenance/disposal/incinerator)
"xJW" = (
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance";
@@ -60614,6 +60813,14 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/pool)
+"yan" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal/incinerator)
"ycd" = (
/obj/structure/toilet/secret/low_loot{
dir = 4
@@ -86226,7 +86433,7 @@ cCi
aqX
arR
asj
-iUK
+cLS
ajr
atY
auo
@@ -89880,7 +90087,6 @@ bGO
bHl
bHS
bLI
-bLI
bOR
bQg
bQg
@@ -89890,6 +90096,7 @@ bQg
bQg
bQg
bQg
+bQg
bYI
bDG
bHP
@@ -90138,17 +90345,17 @@ bKw
bLH
bRq
bNO
-bOQ
-bQf
-bRq
+bQg
bRq
bTK
-bUE
+jVX
+jVX
+uHl
bUE
bWM
bXJ
-bYH
-bYH
+bMK
+bMK
bYH
bYH
bVg
@@ -90394,17 +90601,17 @@ bJs
bKy
bLK
bLK
-bLK
bOT
bQi
bRs
bSC
-bLK
+oXn
+gxw
bUG
bVO
bWO
bXK
-bYH
+bLK
bZz
caw
bYH
@@ -90650,18 +90857,18 @@ bCv
bJs
bKy
bLJ
-bLJ
+bWR
bNP
bOS
bQh
bRr
-bSB
bTL
+rVN
bUF
bVN
bWN
+jDr
bLK
-bYJ
bRi
bZy
cbu
@@ -90907,7 +91114,7 @@ bCv
bJs
bKy
bLM
-bLM
+fKC
bNQ
bOV
bQk
@@ -90915,9 +91122,9 @@ bRt
bSD
bTM
bUH
+bRt
bVQ
-bWN
-bXM
+jDr
bYL
cew
bTh
@@ -91164,18 +91371,18 @@ bCv
bJs
bKy
bLL
-bLL
+bOd
bNQ
bOU
bQj
bOd
-bOd
+bMK
bRx
bTP
bVP
+cbA
bWP
-bXL
-bYK
+bLK
bRj
bTg
bUm
@@ -91420,19 +91627,19 @@ bDr
bCy
bGP
bHn
-bLN
+cbz
bLN
bNS
bOX
bQm
bRv
-bOd
+bSC
bTN
bTP
-bRA
+diH
+bWQ
bWQ
bWQ
-bYN
bRm
bTj
caA
@@ -91683,8 +91890,8 @@ bNR
bOW
bQl
bRu
-bSE
-bRx
+bSC
+bTN
bUI
bVR
bWQ
@@ -91939,9 +92146,9 @@ bMK
bMK
bOY
bQn
-bRx
-bMK
+bSC
bMK
+mOG
bUJ
bVS
bWQ
@@ -92194,8 +92401,8 @@ bKz
bLK
bML
bNT
-bOV
-bQj
+smP
+giT
bRw
bSF
daI
@@ -92452,12 +92659,12 @@ bLK
bMN
bNV
bOV
-bQo
-bRz
-bSH
-plm
-bTP
-bRA
+giT
+bRw
+bSF
+daI
+bUK
+bVT
bWQ
bWQ
bWQ
@@ -92652,7 +92859,7 @@ aqe
arf
aqo
atm
-fPL
+rgL
arf
avv
awu
@@ -92706,29 +92913,29 @@ bHU
bJv
bKB
bLK
-bMM
+bVW
bOd
-bOV
+iql
bQj
-bRy
-bSG
-daI
-bUK
-bVT
-bWR
+bVP
+cbA
+fSO
+kJE
+ugp
+ueZ
bXQ
-bOd
+cbA
bZF
-bPc
-bOd
+ezF
+hgG
ccv
cdw
cex
-bOd
-cfN
-cfN
-bLK
-aaf
+dEX
+cbA
+bQt
+bLQ
+dbb
bOh
bOh
bOh
@@ -92969,20 +93176,20 @@ bJB
bKV
bRB
bSI
-bSI
+vQf
bUM
bVV
-bWS
-bSI
-bSI
+bVV
+bVV
+iVJ
bZG
-caE
-cbA
-ccy
bOd
bOd
-bQu
-cfO
+bOd
+bOd
+bOd
+bOd
+bOd
cgW
cit
cph
@@ -93224,22 +93431,22 @@ bMO
bIF
bOZ
bQp
-bRA
+alk
+gAu
+eqq
+pUP
+bOd
+bOd
bOd
-bTO
-bUL
-bVU
-bMK
-bXR
bYQ
-bXR
-bMK
-cbz
-ccx
-cbA
-cbA
+bOd
+bOd
+bOd
+bOd
+bOd
+dMj
cfi
-bRH
+bOd
cgV
bMQ
aaf
@@ -93480,23 +93687,23 @@ bLK
bMR
bIH
bJF
-bQr
+bVX
bRA
-bOd
bTP
bOd
-bVX
-bMK
-bMK
-bYR
-bMK
-bMK
-cbC
-bRA
+vPQ
+bOd
+bOd
+bOd
+bYQ
+bOd
+bOd
+bOd
+bOd
+bOd
+jtj
+jIj
bTO
-cez
-cez
-cfQ
cgY
ciu
bVu
@@ -93680,7 +93887,7 @@ aqi
arf
ask
atm
-fPL
+rgL
arf
awq
axO
@@ -93739,24 +93946,24 @@ bNY
bPa
bMQ
bRC
-bMQ
-bTP
+rdl
+daq
bUN
-bVW
-bMK
-bXS
-bXS
-bXS
-bMK
-cbB
-alk
-alX
-cbA
-bQt
+bOd
+bOd
+bOd
+bYQ
+bOd
+bOd
+bOd
+bOd
+bOd
+rmQ
+lzt
apa
cgX
apF
-apI
+aaf
bOh
bOh
bOh
@@ -93996,21 +94203,21 @@ bOb
bPd
cBF
bRD
-bSK
-bTR
-bUP
-bVZ
-bWT
-bWa
-bYS
-bZH
-caF
-bQt
-cBJ
-cdy
+rdl
+daq
+bUN
bOd
+bOd
+bOd
+bYQ
+bOd
+bOd
+bOd
+cBJ
+bOd
+eus
bRy
-cfR
+bTP
cha
civ
cph
@@ -94249,27 +94456,27 @@ bvd
bKH
bLK
bMS
-bOa
+bTO
bPc
bQs
-bMZ
-bSJ
-bTQ
+cez
+ceA
+bOd
bUO
-bVY
+bOd
+bOd
+bOd
+lhQ
bOd
bOd
bOd
bOd
bOd
-cbD
bTO
-cdx
-bOd
-bOd
-cfP
+cez
+bUL
cgZ
-bMQ
+rdl
aaf
bQA
ckX
@@ -94506,27 +94713,27 @@ bvd
bKJ
bLR
bMV
-bOd
-bMZ
+bTP
+eiZ
bQv
bRF
bSM
-bTS
-bUQ
-agd
-bUO
bVZ
-bVZ
-bZI
-caH
-cbF
-ccz
-cdA
-cez
+bUN
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bTP
+bTO
bOe
-cfQ
chb
-ciu
+iIS
bVu
ckb
ckZ
@@ -94705,15 +94912,15 @@ aoa
ajo
apt
aql
-pRW
-pRW
-pRW
-pRW
+wyE
+wyE
+wyE
+wyE
avw
awy
-nfw
-nfw
-vaW
+lgX
+lgX
+qvf
wqF
aAh
aAh
@@ -94764,26 +94971,26 @@ bKH
bLK
bMU
bOc
-bPe
-bQu
-bRE
-bSJ
-bPe
-bOd
+udT
+omk
+nTU
+bSM
+jBQ
+agd
cCB
cCC
-bXT
-bXT
-bXT
-caG
-cbE
-bTU
-cdz
-cez
-bUL
-cfP
bOd
-bMQ
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+ccz
+uQR
+cfP
+cfQ
+ceA
aaf
bOh
bOh
@@ -95020,25 +95227,25 @@ bvd
bKH
bLK
bMX
-bOd
+omk
bPg
-bQx
-bRH
-bSM
-bTU
-bUS
-bUS
+hQY
+bRE
+pCj
+bPe
+wvg
+bOd
cCD
-bXU
-bUS
-bUS
-bUS
-bXU
-bRF
-bMW
-cez
-cez
-cfQ
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bOd
+bTU
+fPi
+fHi
chd
bQy
cpP
@@ -95277,25 +95484,25 @@ bvd
bKH
bLK
bMW
-bOe
+oVN
bPf
-bQw
-bRG
-bSN
-bTT
-bUR
-bWb
+bQx
+bRH
+bMQ
+bTU
+kGv
+bUS
cCE
bTT
+bUS
+bUS
+bUS
+bXU
+bUS
+bUS
+gMD
+eyS
bUR
-bZJ
-bUR
-bTT
-bUR
-cdB
-bUR
-bUR
-cfT
chc
bMQ
aaf
@@ -95534,11 +95741,11 @@ bvd
bKH
bLK
bMZ
-bOg
+cdx
bPi
bQz
bRJ
-bSM
+hxn
bTV
bUT
bWc
@@ -95546,12 +95753,12 @@ bWU
bXV
bYT
bZK
-bOd
+bUR
cbG
ccA
cdC
ceB
-cez
+dAe
cez
chf
cix
@@ -95790,14 +95997,14 @@ bvj
bvd
bKH
bLK
-bMY
+bLK
bOf
-bPh
+ivJ
bQy
bRI
bSP
bPh
-bQy
+jzM
bRI
cCF
bPh
@@ -95807,8 +96014,8 @@ bQy
bPh
bQy
bRI
-ceA
-bLK
+bSP
+bVO
bLK
che
bLK
@@ -96013,7 +96220,7 @@ aOJ
oIJ
unA
aKR
-aKR
+akH
aUg
bFC
hSZ
@@ -96048,13 +96255,13 @@ bvd
bKH
bzs
bRK
-aaf
-bRK
-aaf
-bVv
-aaf
-bRK
-aaf
+qJV
+nJQ
+qJV
+vOV
+qJV
+nYT
+eUW
bVv
cCG
cCH
@@ -96304,7 +96511,7 @@ bFF
bvd
bKH
bzs
-bRK
+fjU
bOh
bPj
bQA
@@ -96334,8 +96541,8 @@ aaf
aoV
aoV
aoV
-aoV
-aoV
+aaa
+aaa
cCQ
aoV
aaa
@@ -96561,7 +96768,7 @@ bFK
bvd
bKH
bzs
-bRK
+fjU
bOh
bPl
bQB
@@ -96818,10 +97025,10 @@ bvj
bJC
bKH
bzs
-bRK
+fjU
bOh
bPk
-bPm
+sYm
bPm
bOh
bTW
@@ -96837,7 +97044,7 @@ ccB
cbH
bOh
aaf
-aoV
+aaa
aoV
aaf
aoV
@@ -96850,7 +97057,7 @@ aoV
aoV
aoV
aoV
-aaf
+gXs
aoV
aaa
aaa
@@ -97075,7 +97282,7 @@ bIj
bJC
bKH
bzs
-bRK
+fjU
bOh
bPm
bQC
@@ -97107,7 +97314,7 @@ aoV
aoV
aoV
aae
-aaf
+gXs
aoV
aaa
aaa
@@ -97332,7 +97539,7 @@ bIi
bJC
bKH
bzs
-bRK
+fjU
bOh
bOh
bOh
@@ -97350,21 +97557,21 @@ bOh
bOh
bOh
bOh
-aaf
-aaf
-ciC
-bVu
-bVu
-bVu
-bVu
-bVu
+xcl
caJ
+ciC
+gXs
+gXs
+tSo
+kcx
+kcx
+kcx
+ciC
aoV
aoV
aoV
aoV
-aoV
-aaf
+gXs
aoV
aaa
aaa
@@ -97590,52 +97797,52 @@ bJC
bKH
bzs
bUr
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
+qJV
caJ
-aaf
-aaf
-aaf
-aaf
-aaf
+caJ
+caJ
+caJ
+caJ
+eUW
cfj
cfU
-cfj
-cfj
+maT
+maT
ckf
-cfj
-cfj
-bUr
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
-bVu
+maT
+lKj
+nzR
+nFj
+mfI
+mfI
+mfI
+mfI
+mfI
+mfI
+mfI
+mfI
+mfI
+mfI
csM
-bVu
-bVu
+mfI
+mfI
ctd
-bVu
-bVu
-bVu
-bVu
-caJ
+mfI
+mfI
+mfI
+mfI
+vOC
ctZ
ctZ
cuo
@@ -97859,19 +98066,20 @@ bPn
bzs
bzs
bPn
-caI
+bPn
bPn
bzs
bzs
bzs
cfj
-cfj
+chk
cjp
chh
ciy
cke
-clg
-cfj
+cjr
+pzG
+uHc
aoV
aoV
aoV
@@ -97881,7 +98089,6 @@ aoV
aoV
aoV
aaa
-aaa
aaf
aaa
csn
@@ -97892,7 +98099,7 @@ aag
aaa
aaa
aaa
-ctN
+nFj
ctY
cuh
cun
@@ -98043,7 +98250,7 @@ con
uSC
con
con
-eVJ
+akE
wHk
ewu
pQp
@@ -98121,14 +98328,15 @@ bAw
bzs
bAw
caK
-cfj
+uHc
ciB
ckh
chj
ciA
+dQD
cjr
clh
-cfj
+uHc
aoV
aoV
aoV
@@ -98138,7 +98346,6 @@ aoV
aoV
aoV
aaa
-aaa
aaf
aaa
csn
@@ -98374,18 +98581,19 @@ bzs
bzs
bZM
cbJ
-ceC
-ceC
+bWe
+bWe
cfW
cfX
chk
chl
-ciz
+xud
chi
ciz
-cjq
+ciz
ckg
cmb
+yan
cpO
cpQ
cpQ
@@ -98395,7 +98603,6 @@ czJ
aaf
aoV
aaa
-aaa
aaf
aaa
csn
@@ -98635,14 +98842,15 @@ bzs
ccF
cdG
ceE
-cfl
+grr
cfZ
-cki
+cjr
cld
-eHI
-cjt
+cjr
+cjr
+cjr
csq
-xEu
+xJC
wHz
cmd
cmd
@@ -98652,7 +98860,6 @@ aag
aag
aag
aaa
-aaa
aaf
csD
csO
@@ -98894,12 +99101,13 @@ cdF
ceD
cfk
cfY
-rfW
+cjr
ckj
-cjs
+cle
+cle
cle
cli
-uPT
+cme
cmY
cme
cop
@@ -98909,7 +99117,6 @@ cqs
aaa
aag
aaa
-aaa
aaf
csD
csN
@@ -99149,14 +99356,15 @@ cbL
cbL
cdI
ceG
-cfj
+jGI
cgb
chn
ciE
cjv
clj
-ckk
+clj
cmf
+nmZ
cna
cnC
cor
@@ -99166,7 +99374,6 @@ cqt
aaa
aag
aaa
-aaa
aaf
csD
csU
@@ -99406,12 +99613,13 @@ cbK
ccG
cdH
ceF
-cfj
+jGI
cga
chm
ciD
cju
clf
+cle
csr
cme
cmZ
@@ -99423,7 +99631,6 @@ cqs
aaa
aag
aaa
-aaa
aaf
csD
ctb
@@ -99663,13 +99870,14 @@ bzs
bzs
bzs
bzs
-cfj
-cfj
-cfj
-cfj
+fiy
+cfl
+cfl
+cfl
cjx
cfl
cfl
+cfl
dqu
tXL
cmd
@@ -99680,7 +99888,6 @@ aag
aag
aag
aaa
-aaa
aaf
csD
csD
@@ -103248,15 +103455,15 @@ bIP
bPA
bJN
bRU
-bEm
+aml
bEm
bJN
bRU
-bXe
+aop
bEm
bJN
bRU
-bEm
+aml
bEm
bDb
cgi
@@ -103505,15 +103712,15 @@ bOx
bPz
bJN
bRU
-bEm
+amo
bEm
bJN
bRU
-bEm
+amo
bEm
bJN
bRU
-bEm
+amo
cBz
bDb
cgi
@@ -103751,26 +103958,26 @@ bAB
bBV
bDb
bEn
-bEm
-bEm
-bEm
-bJL
-bLa
-bMi
-bNo
-bPy
-bPA
+akK
+akP
+akP
+akV
+akW
+alf
+alm
+aln
+alr
bJN
bRW
-bTb
+amG
bUe
bJN
bWl
-bXf
+aoq
bYg
bJN
bZV
-caV
+apw
cbS
bDb
cgl
@@ -104016,18 +104223,18 @@ bKZ
bMi
bIu
bIO
-bPB
+alx
bLe
bRV
-bTa
+amH
bUd
bVi
bRV
-bTa
+amH
bYf
bVi
bRV
-bTa
+amH
cbR
bDb
cgk
@@ -104273,18 +104480,18 @@ bLc
bMi
bNo
bOx
-bPD
+alV
bQM
bMi
-bMi
+bOx
bRZ
bVj
bMi
-bMi
+bOx
bRZ
bZa
bMi
-bMi
+bOx
bRZ
cTY
cTZ
@@ -104530,24 +104737,24 @@ bLb
bMk
bNn
bIQ
-bPC
-bQL
-cBG
-bTc
-bUf
-bTc
-bRX
-bTc
-bUf
-bTc
-bRX
-bTc
-cbT
-ccP
-ccP
-cht
-ckn
-csk
+alW
+amh
+ami
+amP
+anp
+anx
+anN
+amP
+anp
+anx
+anN
+amP
+aqG
+aqS
+aqS
+ars
+asr
+asC
czQ
czU
czZ
@@ -104790,15 +104997,15 @@ bOx
bMi
bQN
bRZ
-bMi
+bOx
bMi
bVk
bRZ
-bMi
+bOx
bMi
bZb
bRZ
-bMi
+bOx
bMi
cfy
cgn
@@ -105047,15 +105254,15 @@ bIR
bPE
bLe
bRY
-bTd
+amQ
bUg
bVi
bWm
-bTd
+amQ
bUg
bVi
bZW
-bTd
+amQ
bUg
bDb
bDb
@@ -105304,15 +105511,15 @@ bOx
bPH
bJN
bSa
-bTe
+amT
bUh
bJN
bWn
-bXg
+aos
bYh
bJN
bZX
-caW
+aqB
cbU
bDb
aaf
@@ -105561,15 +105768,15 @@ bOz
bPG
bJN
bEm
-bEm
+amo
bRU
bJN
bEm
-bEm
+amo
bRU
bJN
bEm
-bEm
+amo
bRU
bDb
aaf
@@ -105818,15 +106025,15 @@ bOx
bPJ
bJN
bEm
-bEm
+ano
bRU
bJN
bEm
-bXe
+apb
bRU
bJN
bEm
-bEm
+ano
bRU
bDb
aaf
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 61ed3edba7..02e44d0a5a 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -52240,6 +52240,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/cable/white{
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel/dark,
/area/engine/transit_tube)
"bLJ" = (
@@ -52257,6 +52260,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel/dark,
/area/engine/transit_tube)
"bLK" = (
@@ -53546,9 +53552,6 @@
/turf/open/floor/plasteel/dark,
/area/aisat)
"bND" = (
-/obj/structure/cable/white{
- icon_state = "0-4"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -53562,6 +53565,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/cable/white{
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel/dark,
/area/aisat)
"bNE" = (
@@ -56011,27 +56017,33 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
"bRB" = (
-/obj/machinery/power/port_gen/pacman,
-/obj/structure/cable/yellow{
- icon_state = "0-2"
- },
/obj/structure/sign/warning/electricshock{
pixel_y = 32
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/structure/cable/white{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
"bRC" = (
-/obj/machinery/cell_charger,
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
+/obj/machinery/power/port_gen/pacman,
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
@@ -57108,10 +57120,16 @@
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
"bTr" = (
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
"bTs" = (
@@ -57123,6 +57141,9 @@
start_active = 1
},
/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
"bTt" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 3eaad62714..a87ea077b3 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -39,10 +39,6 @@
/obj/structure/table,
/obj/item/paper_bin,
/obj/item/pen,
-/obj/item/mmi/posibrain{
- pixel_x = 5;
- pixel_y = 8
- },
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"aae" = (
@@ -57,7 +53,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "engsm";
name = "Radiation Chamber Shutters"
@@ -165,6 +160,10 @@
/obj/structure/cable{
icon_state = "0-8"
},
+/mob/living/simple_animal/bot/cleanbot{
+ auto_patrol = 1;
+ name = "Sir Cleansworth"
+ },
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai)
"aau" = (
@@ -263,17 +262,6 @@
/area/ai_monitored/turret_protected/ai)
"aaE" = (
/obj/structure/chair,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aaF" = (
@@ -287,7 +275,6 @@
dir = 5
},
/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/remains/human,
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai)
"aaG" = (
@@ -593,9 +580,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"abd" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -636,10 +620,6 @@
/turf/open/floor/plasteel/dark,
/area/lawoffice)
"abg" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
@@ -733,6 +713,9 @@
name = "Station Intercom (Command)";
pixel_y = -28
},
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"abr" = (
@@ -873,7 +856,6 @@
pixel_x = 24
},
/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/remains/human,
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai)
"abD" = (
@@ -953,9 +935,6 @@
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai)
"abM" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -1132,7 +1111,6 @@
/turf/open/floor/plasteel,
/area/security/warden)
"acg" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/engine,
@@ -1352,7 +1330,6 @@
/turf/open/space,
/area/space/nearstation)
"acz" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
@@ -1363,7 +1340,9 @@
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"acB" = (
-/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"acC" = (
@@ -1642,7 +1621,6 @@
/obj/machinery/light_switch{
pixel_y = -24
},
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
@@ -1661,7 +1639,7 @@
dir = 4
},
/turf/open/floor/engine,
-/area/ai_monitored/turret_protected/aisat_interior)
+/area/space)
"acY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -1828,26 +1806,18 @@
id = "prisonblast";
name = "Prison Blast Door"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/security/prison)
"adm" = (
/obj/structure/chair/office{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"adn" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
@@ -1890,7 +1860,7 @@
/turf/open/floor/circuit/green{
luminosity = 2
},
-/area/ai_monitored/turret_protected/ai)
+/area/space)
"adr" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
@@ -1912,7 +1882,6 @@
id = "xeno_blastdoor";
name = "Xenobiology Containment Blast Door"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"adt" = (
@@ -1943,10 +1912,6 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"adv" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/decal/cleanable/blood/gibs/limb,
/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt,
@@ -1999,6 +1964,9 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"adA" = (
@@ -2086,10 +2054,10 @@
pixel_y = 26
},
/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "0-8"
},
/obj/structure/cable{
- icon_state = "0-8"
+ icon_state = "4-8"
},
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/aisat/foyer)
@@ -2186,6 +2154,9 @@
/obj/structure/cable{
icon_state = "2-8"
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/engine,
/area/ai_monitored/storage/satellite)
"adO" = (
@@ -2212,9 +2183,12 @@
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/aisat/foyer)
"adT" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/r_wall/rust,
-/area/ai_monitored/turret_protected/aisat_interior)
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"adU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -2236,7 +2210,6 @@
pixel_y = 24;
req_one_access_txt = "2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/security/warden)
"adW" = (
@@ -2348,7 +2321,6 @@
pixel_y = -24;
req_one_access_txt = "2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/security/prison)
"aed" = (
@@ -2395,16 +2367,6 @@
/turf/open/floor/plating,
/area/security/warden)
"aej" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -2441,7 +2403,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/cryo)
"aeo" = (
@@ -2687,7 +2648,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/cryo)
"aeQ" = (
@@ -2800,16 +2760,6 @@
/turf/open/floor/plating,
/area/security/warden)
"aeY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -3012,16 +2962,6 @@
/turf/closed/wall,
/area/maintenance/port/aft)
"afn" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -3510,13 +3450,16 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"afX" = (
-/obj/structure/grille/broken,
-/obj/effect/decal/cleanable/cobweb,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/area/maintenance/starboard/fore)
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/crew_quarters/heads/cmo)
"afY" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/bot,
@@ -3626,6 +3569,9 @@
name = "xenobiology camera";
network = list("ss13","rd","xeno")
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
"agg" = (
@@ -3650,6 +3596,9 @@
external_pressure_bound = 120;
name = "server vent"
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
"agi" = (
@@ -3666,6 +3615,9 @@
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/science/xenobiology)
"agj" = (
@@ -3943,10 +3895,11 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"agF" = (
-/obj/structure/grille,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
+ dir = 4
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"agG" = (
/obj/docking_port/stationary{
dir = 2;
@@ -4581,7 +4534,6 @@
pixel_x = -26
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"ahI" = (
@@ -4662,16 +4614,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -4680,16 +4622,6 @@
"ahQ" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -4803,7 +4735,6 @@
/turf/open/floor/plating,
/area/security/brig)
"ahY" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -4816,37 +4747,21 @@
/turf/open/floor/plasteel,
/area/security/main)
"ahZ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
/turf/open/floor/plasteel,
/area/security/main)
"aia" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/turf/open/floor/plasteel,
/area/security/main)
"aib" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/security/main)
"aic" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -4939,16 +4854,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "1-4"
},
@@ -4958,9 +4863,7 @@
/turf/open/floor/plasteel,
/area/security/brig)
"aij" = (
-/obj/structure/flora/grass/jungle,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/machinery/light{
dir = 1
},
@@ -5127,10 +5030,6 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"aix" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/security/main)
@@ -5159,16 +5058,6 @@
/area/security/main)
"aiz" = (
/obj/machinery/computer/secure_data,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/security/main)
"aiA" = (
@@ -5322,16 +5211,6 @@
/obj/structure/chair{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/landmark/start/security_officer,
/turf/open/floor/plasteel,
/area/security/main)
@@ -5399,16 +5278,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
"aiR" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aiS" = (
@@ -5436,28 +5305,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
-"aiU" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/fore)
-"aiV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
-"aiW" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
"aiX" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -5471,12 +5318,6 @@
/area/ai_monitored/turret_protected/aisat_interior)
"aiY" = (
/obj/structure/chair,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -5541,12 +5382,6 @@
/area/ai_monitored/turret_protected/aisat/foyer)
"ajc" = (
/obj/structure/chair,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -5582,22 +5417,11 @@
/turf/open/floor/plasteel,
/area/security/main)
"ajg" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/decal/cleanable/blood/gibs/limb,
/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
-"ajh" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
"aji" = (
/obj/structure/chair{
dir = 8
@@ -5607,13 +5431,13 @@
},
/area/maintenance/port/fore)
"ajj" = (
-/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/remains/human,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/turf_decal/box,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/area/maintenance/fore)
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"ajk" = (
/obj/effect/turf_decal/tile/brown{
dir = 1
@@ -5690,16 +5514,6 @@
color = "#c45c57";
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/landmark/start/head_of_security,
/turf/open/floor/plasteel,
/area/security/main)
@@ -5746,17 +5560,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/science/xenobiology)
-"ajs" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
"ajt" = (
/turf/closed/wall,
/area/crew_quarters/kitchen)
@@ -5915,16 +5718,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
"ajJ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
@@ -5942,15 +5735,6 @@
},
/turf/open/floor/plasteel/dark,
/area/bridge)
-"ajL" = (
-/obj/machinery/door/poddoor/preopen{
- id = "Biohazard";
- name = "Emergency Research Blast Door"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
-/turf/open/floor/plasteel/dark,
-/area/science/research)
"ajM" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/shard,
@@ -6061,7 +5845,6 @@
/area/hallway/primary/fore)
"ajX" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"ajY" = (
@@ -6114,10 +5897,10 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"akd" = (
-/obj/structure/flora/tree/jungle/small,
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/flora/ausbushes/ppflowers,
/turf/open/floor/grass,
/area/medical/genetics)
"ake" = (
@@ -6323,7 +6106,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/surgery)
"akz" = (
@@ -6379,7 +6161,6 @@
"akF" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/surgery)
"akG" = (
@@ -6405,12 +6186,6 @@
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"akI" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/decal/cleanable/blood/gibs/old,
/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt,
@@ -6613,6 +6388,7 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -26
},
+/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -6766,7 +6542,6 @@
pixel_x = 28
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"all" = (
@@ -6961,9 +6736,6 @@
"alw" = (
/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
"alx" = (
@@ -7031,29 +6803,12 @@
/obj/machinery/status_display/evac{
pixel_y = 32
},
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
-"alA" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
"alB" = (
/turf/closed/wall/r_wall,
/area/science/xenobiology)
"alC" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
@@ -7113,13 +6868,6 @@
/obj/vehicle/ridden/secway,
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
-"alH" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/fore)
"alI" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating{
@@ -7281,8 +7029,22 @@
},
/area/maintenance/fore)
"alV" = (
-/turf/closed/wall/r_wall/rust,
-/area/ai_monitored/turret_protected/aisat_interior)
+/obj/structure/closet/crate/wooden/toy,
+/obj/effect/turf_decal/bot,
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/newscaster{
+ pixel_y = 30
+ },
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"alW" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -8493,31 +8255,12 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
"anX" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"anY" = (
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -9079,7 +8822,6 @@
/turf/open/floor/wood,
/area/lawoffice)
"aoT" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/box/corners{
dir = 4
@@ -9537,7 +9279,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"apI" = (
@@ -9713,28 +9454,22 @@
/turf/closed/wall/rust,
/area/maintenance/central)
"apY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/structure/table/wood,
+/obj/structure/mirror{
+ pixel_x = -26
},
+/obj/item/reagent_containers/food/snacks/pie/cream,
+/obj/item/clothing/under/costume/lobster,
+/obj/item/clothing/head/lobsterhat,
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8;
- icon_state = "intact"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"apZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -10276,18 +10011,18 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
"aqQ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+/obj/structure/table/wood,
+/obj/item/storage/crayons,
+/obj/item/storage/crayons,
+/obj/item/bikehorn/rubberducky,
+/obj/structure/sign/poster/contraband/clown{
+ pixel_x = -30
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/bridge)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aqR" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/delivery,
@@ -10726,7 +10461,6 @@
/obj/structure/sign/warning/electricshock{
pixel_x = -32
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -10773,10 +10507,16 @@
/turf/open/floor/plasteel/dark,
/area/bridge)
"arD" = (
-/obj/effect/turf_decal/bot,
-/obj/effect/decal/cleanable/blood/old,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/structure/sign/departments/science{
+ pixel_x = 32
+ },
/turf/open/floor/plasteel,
-/area/crew_quarters/heads/hop)
+/area/hallway/primary/starboard)
"arE" = (
/obj/structure/table,
/obj/item/clipboard,
@@ -11104,28 +10844,17 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
"arW" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/bridge)
"arX" = (
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
+/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel,
-/area/bridge)
+/area/hallway/primary/starboard)
"arY" = (
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
@@ -11191,16 +10920,6 @@
},
/area/maintenance/port/fore)
"asd" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
@@ -11226,7 +10945,7 @@
icon_state = "4-8"
},
/turf/open/floor/engine,
-/area/ai_monitored/turret_protected/aisat/foyer)
+/area/space)
"asg" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -11404,7 +11123,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"asw" = (
@@ -11977,6 +11695,7 @@
dir = 4;
name = "chapel camera"
},
+/obj/structure/chair/stool,
/turf/open/floor/plasteel/chapel{
dir = 8
},
@@ -12075,16 +11794,9 @@
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"atF" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/plaque{
icon_state = "L14"
},
@@ -12344,18 +12056,7 @@
},
/area/maintenance/starboard/fore)
"aua" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
-/obj/effect/turf_decal/box,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aub" = (
@@ -12538,16 +12239,6 @@
/turf/open/floor/plasteel/dark,
/area/teleporter)
"auo" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -12634,9 +12325,20 @@
/turf/closed/wall/r_wall,
/area/bridge)
"auz" = (
-/obj/structure/sign/warning/vacuum/external,
-/turf/closed/wall/rust,
-/area/maintenance/starboard)
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"auA" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -12738,12 +12440,12 @@
},
/area/maintenance/solars/starboard/fore)
"auK" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
- dir = 8
+ dir = 1
},
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
-/area/security/courtroom)
+/area/hallway/primary/port)
"auL" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/effect/turf_decal/box/corners{
@@ -12757,16 +12459,6 @@
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"auM" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 8
},
@@ -12910,11 +12602,21 @@
/obj/item/folder/blue,
/obj/item/melee/chainofcommand,
/obj/item/toy/figure/captain,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/card/id/captains_spare,
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"ave" = (
/obj/structure/table/wood,
/obj/machinery/computer/security/wooden_tv,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"avf" = (
@@ -12982,7 +12684,6 @@
"avj" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/donut_box,
-/obj/item/card/id/captains_spare,
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"avk" = (
@@ -13023,10 +12724,6 @@
/turf/open/floor/plasteel,
/area/security/courtroom)
"avo" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -13055,9 +12752,6 @@
/turf/closed/wall,
/area/maintenance/aft)
"avr" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/box/corners,
/turf/open/floor/plasteel,
/area/security/courtroom)
@@ -13411,12 +13105,6 @@
/turf/open/floor/plasteel/dark,
/area/medical/virology)
"avQ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -13426,12 +13114,6 @@
/turf/open/floor/plasteel,
/area/bridge)
"avR" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
@@ -13490,35 +13172,16 @@
/obj/structure/chair{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plasteel,
/area/security/courtroom)
"avX" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
@@ -13677,7 +13340,6 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"awl" = (
@@ -13734,10 +13396,6 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -26
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -13764,16 +13422,6 @@
/turf/open/floor/plating,
/area/storage/primary)
"awr" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-8"
},
@@ -13784,10 +13432,6 @@
pixel_x = -32;
pixel_y = 32
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -13915,9 +13559,6 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -14015,9 +13656,6 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -14037,20 +13675,6 @@
pixel_x = 32;
pixel_y = 32
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine{
- initial_gas_mix = "n2=100;TEMP=80";
- name = "mainframe floor"
- },
-/area/tcommsat/server)
-"awM" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -14227,6 +13851,7 @@
/obj/item/lighter,
/obj/item/clothing/mask/cigarette/cigar/cohiba,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/suit_storage_unit/ce,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
"axi" = (
@@ -14692,7 +14317,6 @@
name = "Containment Chamber Blast Door"
},
/obj/machinery/atmospherics/pipe/simple/general/hidden,
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -14832,7 +14456,6 @@
/area/medical/morgue)
"ayi" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"ayj" = (
@@ -14844,16 +14467,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"ayk" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -14917,7 +14530,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/bridge)
"ayr" = (
@@ -15156,7 +14768,6 @@
/obj/structure/sign/warning/biohazard{
pixel_x = 32
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -15217,7 +14828,6 @@
dir = 1;
pixel_y = 32
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"ayP" = (
@@ -15447,7 +15057,6 @@
/obj/structure/sign/departments/evac{
pixel_y = 32
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"azc" = (
@@ -15639,9 +15248,6 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"azp" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/airalarm{
dir = 4;
@@ -15842,11 +15448,10 @@
},
/area/maintenance/starboard)
"azE" = (
-/obj/effect/turf_decal/loading_area,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 6
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/engine,
/area/engine/engineering)
"azF" = (
/obj/structure/flora/junglebush/c,
@@ -16179,9 +15784,6 @@
/turf/open/floor/plating,
/area/medical/chemistry)
"aAd" = (
-/obj/effect/turf_decal/loading_area{
- dir = 1
- },
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
name = "External Gas to Loop"
@@ -16190,7 +15792,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/engine,
/area/engine/engineering)
"aAe" = (
/obj/machinery/door/firedoor,
@@ -16211,10 +15813,6 @@
dir = 4;
pixel_x = -22
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -16227,7 +15825,6 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -16249,7 +15846,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -16259,10 +15855,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -16278,10 +15870,6 @@
/obj/structure/cable{
icon_state = "0-8"
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -16407,7 +15995,6 @@
/turf/open/floor/grass,
/area/chapel/main)
"aAz" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -16430,9 +16017,11 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/robotics/lab)
"aAD" = (
-/obj/structure/flora/tree/jungle/small,
-/turf/open/floor/grass,
-/area/chapel/main)
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"aAE" = (
/obj/machinery/light/small{
dir = 8
@@ -16553,16 +16142,6 @@
/turf/open/floor/plasteel/dark,
/area/security/warden)
"aAO" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
@@ -16638,7 +16217,6 @@
/obj/machinery/door/airlock/public/glass{
name = "Docking Hallway"
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"aAV" = (
@@ -17012,7 +16590,6 @@
/area/engine/engineering)
"aBw" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"aBx" = (
@@ -17022,10 +16599,6 @@
/turf/open/floor/engine,
/area/engine/engineering)
"aBy" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/ywflowers,
-/obj/structure/flora/ausbushes/fernybush,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
@@ -17160,20 +16733,9 @@
/obj/structure/sign/departments/security{
pixel_x = -32
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"aBN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -17187,7 +16749,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aBP" = (
@@ -17324,10 +16885,6 @@
/obj/item/radio/intercom{
pixel_x = -28
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -17335,7 +16892,6 @@
/area/tcommsat/server)
"aCe" = (
/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -17408,10 +16964,6 @@
name = "telecomms camera";
network = list("ss13","tcomms")
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -17490,7 +17042,6 @@
/obj/machinery/door/airlock/public/glass{
name = "Security Hallway"
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"aCr" = (
@@ -17563,16 +17114,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/break_room)
"aCy" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
@@ -17827,10 +17368,7 @@
/area/medical/cryo)
"aCN" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/flora/ausbushes/ywflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/extinguisher_cabinet{
pixel_x = 24
@@ -18126,7 +17664,6 @@
"aDh" = (
/obj/structure/flora/grass/jungle/b,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/grass,
/area/chapel/main)
@@ -18191,7 +17728,6 @@
/turf/open/floor/plating,
/area/engine/atmos)
"aDs" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/engine,
/area/security/nuke_storage)
@@ -18305,6 +17841,7 @@
/obj/machinery/atmospherics/miner/nitrogen{
max_ext_kpa = 2500
},
+/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/open/floor/engine/n2{
initial_gas_mix = "n2=1000;TEMP=293.15"
},
@@ -18321,6 +17858,7 @@
/obj/machinery/atmospherics/miner/oxygen{
max_ext_kpa = 2500
},
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/engine/o2{
initial_gas_mix = "o2=1000;TEMP=293.15"
},
@@ -18799,18 +18337,13 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/turf/open/floor/plasteel/dark/corner{
+ dir = 8
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main)
+/area/hallway/primary/port)
"aEv" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -18951,7 +18484,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"aEG" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -18981,7 +18513,6 @@
/turf/open/floor/engine,
/area/security/nuke_storage)
"aEI" = (
-/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -19343,6 +18874,7 @@
/obj/machinery/atmospherics/miner/carbon_dioxide{
max_ext_kpa = 2500
},
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/open/floor/engine/co2{
initial_gas_mix = "co2=1000;TEMP=293.15"
},
@@ -19351,6 +18883,7 @@
/obj/machinery/atmospherics/miner/toxins{
max_ext_kpa = 2500
},
+/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/engine/plasma{
initial_gas_mix = "plasma=1000;TEMP=293.15"
},
@@ -19359,6 +18892,7 @@
/obj/machinery/atmospherics/miner/n2o{
max_ext_kpa = 2500
},
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
/turf/open/floor/engine/n2o{
initial_gas_mix = "n2o=1000;TEMP=293.15"
},
@@ -19682,15 +19216,19 @@
},
/area/maintenance/port/fore)
"aFY" = (
+/obj/machinery/air_sensor{
+ pixel_x = -32;
+ pixel_y = -32
+ },
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
/obj/machinery/igniter{
id = "Incinerator"
},
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
"aFZ" = (
@@ -19719,16 +19257,17 @@
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/heads/hor)
"aGb" = (
-/obj/machinery/power/turbine{
- luminosity = 2
- },
-/obj/structure/cable,
-/turf/open/floor/engine/vacuum,
-/area/maintenance/disposal/incinerator)
-"aGc" = (
/obj/machinery/door/poddoor/incinerator_atmos_main,
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
+"aGc" = (
+/obj/machinery/door/window{
+ dir = 1;
+ name = "Captain's Desk";
+ req_access_txt = "20"
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
"aGd" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -20096,7 +19635,6 @@
/area/medical/genetics/cloning)
"aGG" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/bridge)
"aGH" = (
@@ -20419,7 +19957,6 @@
/area/security/brig)
"aHq" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aHr" = (
@@ -20866,7 +20403,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/bridge)
"aHV" = (
@@ -21126,9 +20662,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-16"
- },
/obj/effect/turf_decal/box/corners{
dir = 1
},
@@ -21265,9 +20798,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-10"
- },
/obj/machinery/button/door{
id = "transittube_ai";
name = "Transit Tube Lockdown Toggle";
@@ -21525,16 +21055,6 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"aIY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/light{
dir = 8
@@ -21728,7 +21248,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aJs" = (
@@ -21755,7 +21274,6 @@
/area/engine/atmos)
"aJu" = (
/obj/machinery/computer/med_data,
-/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -21768,20 +21286,11 @@
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aJv" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/medbay/central)
+/obj/structure/bed,
+/obj/item/bedsheet/black,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/locker)
"aJw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
@@ -22136,9 +21645,6 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "applebush"
- },
/turf/open/floor/plasteel/dark/corner{
dir = 1
},
@@ -22665,16 +22171,6 @@
},
/area/maintenance/port)
"aKN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 4
@@ -22964,9 +22460,6 @@
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/medical/medbay/central)
"aLk" = (
@@ -22988,13 +22481,6 @@
/obj/structure/chair{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aLn" = (
@@ -23016,16 +22502,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aLo" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 9
},
@@ -23396,11 +22872,10 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/mixing)
"aMa" = (
-/obj/effect/turf_decal/loading_area,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/engine,
/area/engine/engineering)
"aMb" = (
/obj/effect/turf_decal/tile/neutral,
@@ -23622,7 +23097,6 @@
dir = 4
},
/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple,
/obj/machinery/power/apc{
areastring = "/area/science/mixing/chamber";
dir = 4;
@@ -23821,9 +23295,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/loading_area{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/medical/medbay/central)
"aME" = (
@@ -24180,21 +23651,10 @@
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"aNi" = (
-/obj/machinery/power/compressor{
- comp_id = "incineratorturbine";
- dir = 1;
+/obj/machinery/power/turbine{
luminosity = 2
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/structure/cable,
-/obj/machinery/camera{
- c_tag = "Turbine Chamber";
- dir = 4;
- name = "turbine camera";
- network = list("turbine")
- },
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
"aNj" = (
@@ -24295,7 +23755,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aNr" = (
@@ -24695,12 +24154,7 @@
},
/turf/open/floor/plasteel/dark,
/area/medical/chemistry)
-"aOa" = (
-/obj/structure/flora/junglebush/b,
-/turf/open/floor/grass,
-/area/medical/genetics)
"aOb" = (
-/obj/structure/flora/junglebush/large,
/turf/open/floor/grass,
/area/medical/genetics)
"aOc" = (
@@ -24757,10 +24211,6 @@
/area/maintenance/port/fore)
"aOh" = (
/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 8
},
@@ -24822,10 +24272,6 @@
/area/medical/genetics)
"aOn" = (
/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
/obj/machinery/atmospherics/components/binary/valve{
dir = 8
},
@@ -24833,14 +24279,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/mixing/chamber)
"aOo" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
},
@@ -25266,22 +24704,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/cmo)
-"aOS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
"aOT" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -25300,16 +24722,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aOU" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
/obj/effect/turf_decal/box,
/obj/structure/disposalpipe/sorting/mail{
@@ -25353,16 +24765,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/heads/cmo)
"aOY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/sorting/mail{
dir = 4;
name = "bar sorting disposal pipe";
@@ -25490,19 +24892,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/research)
"aPk" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -25529,7 +24918,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 9
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/mixing/chamber)
"aPn" = (
@@ -25639,16 +25027,6 @@
/turf/open/floor/plasteel/dark,
/area/medical/genetics)
"aPv" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -25678,18 +25056,10 @@
/turf/open/floor/plating,
/area/medical/storage)
"aPz" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/turf_decal/box,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -25792,16 +25162,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/mixing)
"aPH" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
/obj/structure/disposalpipe/segment{
@@ -25998,13 +25358,9 @@
/area/medical/storage)
"aPV" = (
/obj/structure/table/glass,
-/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
/obj/effect/turf_decal/tile/blue,
/obj/item/paper_bin{
pixel_x = -4;
@@ -26215,23 +25571,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
-"aQm" = (
-/obj/structure/closet/crate/wooden/toy,
-/obj/effect/turf_decal/bot,
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/newscaster{
- pixel_y = 30
- },
-/obj/effect/decal/cleanable/cobweb,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/theatre)
"aQn" = (
/obj/structure/closet/secure_closet/medical3,
/obj/item/storage/belt/medical,
@@ -26368,10 +25707,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar/atrium)
"aQy" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aQz" = (
@@ -26629,9 +25964,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/cable{
- icon_state = "1-4"
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment{
@@ -26642,16 +25974,14 @@
},
/area/maintenance/central)
"aRc" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/machinery/door/airlock/maintenance{
+ name = "backstage maintenance";
+ req_access_txt = "46"
},
-/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
- },
+/turf/open/floor/plasteel/dark,
/area/maintenance/central)
"aRd" = (
/obj/machinery/computer/med_data{
@@ -26700,16 +26030,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/storage)
"aRh" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 5
},
@@ -26726,6 +26046,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -27099,16 +26422,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/checkpoint/science/research)
"aRB" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -27151,16 +26464,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/storage)
"aRE" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-8"
},
@@ -27420,7 +26723,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aRZ" = (
@@ -27629,7 +26931,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aSm" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
@@ -27641,23 +26942,6 @@
},
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
-"aSn" = (
-/obj/structure/table/wood,
-/obj/structure/mirror{
- pixel_x = -26
- },
-/obj/item/reagent_containers/food/snacks/pie/cream,
-/obj/item/clothing/under/costume/lobster,
-/obj/item/clothing/head/lobsterhat,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/theatre)
"aSo" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=4";
@@ -27811,25 +27095,21 @@
/turf/open/floor/plasteel/dark,
/area/medical/chemistry)
"aSx" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/structure/chair,
+/obj/machinery/light{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/item/clipboard,
-/obj/item/storage/firstaid/regular,
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aSy" = (
/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/item/stack/medical/gauze,
/obj/item/stack/medical/ointment,
/obj/item/stack/medical/bruise_pack{
pixel_x = 4
},
+/obj/item/storage/firstaid/regular,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aSz" = (
@@ -27910,10 +27190,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/lab)
"aSE" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
@@ -28098,16 +27374,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/science/mixing)
"aST" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
@@ -28146,11 +27412,12 @@
},
/area/maintenance/starboard)
"aSW" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral,
-/obj/item/crowbar/red,
-/obj/item/healthanalyzer,
-/turf/open/floor/plasteel/dark,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "cmoprivacy";
+ name = "Office Privacy Shutters"
+ },
+/turf/open/floor/plating,
/area/medical/medbay/central)
"aSX" = (
/obj/machinery/status_display/evac,
@@ -28267,7 +27534,6 @@
/turf/open/floor/grass,
/area/medical/virology)
"aTi" = (
-/obj/structure/flora/junglebush/large,
/obj/structure/flora/ausbushes/ywflowers,
/turf/open/floor/grass,
/area/medical/virology)
@@ -28725,9 +27991,6 @@
/obj/effect/turf_decal/tile/purple{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
/obj/effect/turf_decal/tile/purple,
/obj/structure/disposalpipe/segment{
dir = 4
@@ -28904,7 +28167,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
"aUc" = (
-/obj/effect/turf_decal/loading_area,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
@@ -29330,9 +28592,6 @@
dir = 1
},
/obj/effect/turf_decal/tile/blue,
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-18"
- },
/turf/open/floor/plasteel/showroomfloor,
/area/medical/storage)
"aUG" = (
@@ -29711,7 +28970,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"aVc" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -29751,9 +29009,6 @@
/obj/effect/turf_decal/tile/purple{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-18"
- },
/obj/machinery/light_switch{
pixel_x = -24;
pixel_y = -6
@@ -29872,16 +29127,12 @@
dir = 1
},
/obj/effect/turf_decal/tile/purple,
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
},
/turf/open/floor/plasteel/showroomfloor,
/area/science/storage)
"aVm" = (
-/obj/effect/turf_decal/loading_area{
- dir = 1
- },
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
dir = 8
@@ -29956,9 +29207,7 @@
/area/crew_quarters/kitchen)
"aVr" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -30142,7 +29391,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -30154,7 +29402,6 @@
pixel_x = -6;
pixel_y = 8
},
-/obj/item/restraints/handcuffs,
/obj/item/pen,
/turf/open/floor/plasteel/dark,
/area/medical/virology)
@@ -30226,7 +29473,7 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/janitor)
"aVN" = (
/obj/structure/chair{
@@ -30649,10 +29896,7 @@
/area/security/checkpoint/medical)
"aWs" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 8
},
@@ -30666,10 +29910,6 @@
/turf/open/floor/grass,
/area/hallway/secondary/exit/departure_lounge)
"aWt" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -30893,22 +30133,18 @@
"aWQ" = (
/obj/machinery/door/firedoor,
/obj/effect/decal/cleanable/blood/old,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/quartermaster/storage)
"aWR" = (
/turf/closed/wall,
/area/science/xenobiology)
"aWS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/machinery/newscaster{
+ pixel_x = 30
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/bar)
+/turf/open/floor/wood,
+/area/crew_quarters/locker)
"aWT" = (
/obj/structure/closet/secure_closet/chemical,
/obj/structure/window/reinforced{
@@ -31061,6 +30297,7 @@
/obj/item/radio/intercom{
pixel_y = 22
},
+/obj/item/mmi/posibrain,
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"aXh" = (
@@ -31070,7 +30307,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/quartermaster/storage)
"aXi" = (
@@ -31122,6 +30358,8 @@
pixel_y = 4
},
/obj/item/stock_parts/cell/high,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
/turf/open/floor/plasteel/dark,
/area/science/lab)
"aXo" = (
@@ -31226,20 +30464,14 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/central)
"aXw" = (
-/obj/structure/table,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/folder,
-/obj/item/nanite_scanner{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/nanite_remote,
/obj/machinery/light{
dir = 4
},
+/obj/machinery/computer/nanite_cloud_controller,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aXx" = (
@@ -31303,7 +30535,6 @@
/turf/open/floor/mech_bay_recharge_floor,
/area/science/robotics/mechbay)
"aXD" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
@@ -31325,17 +30556,18 @@
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
"aXE" = (
-/obj/machinery/nanite_chamber,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Cabin_4Privacy";
+ name = "Cabin 4 Privacy Shutter"
},
-/turf/open/floor/plasteel/dark,
-/area/science/research)
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/locker)
"aXF" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/computer/nanite_chamber_control,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -31351,6 +30583,7 @@
name = "science camera";
network = list("ss13","rd")
},
+/obj/machinery/computer/nanite_chamber_control,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aXG" = (
@@ -31428,11 +30661,6 @@
/area/tcommsat/server)
"aXN" = (
/obj/machinery/igniter/incinerator_toxmix,
-/mob/living/simple_animal/chicken{
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0);
- desc = "A timeless classic.";
- name = "Kentucky"
- },
/turf/open/floor/engine/vacuum,
/area/science/mixing/chamber)
"aXO" = (
@@ -31531,13 +30759,9 @@
/area/maintenance/starboard/fore)
"aXX" = (
/obj/structure/chair/office/light{
- dir = 1;
- pixel_y = 3
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/box/red,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -31886,7 +31110,6 @@
id = "emmd";
name = "Emergency Medical Lockdown Shutters"
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
@@ -32013,20 +31236,9 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/chemistry)
"aYM" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"aYN" = (
-/obj/machinery/nanite_program_hub,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -32038,6 +31250,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
+/obj/structure/table/reinforced,
+/obj/item/nanite_scanner,
+/obj/item/nanite_remote,
/turf/open/floor/plasteel/dark,
/area/science/research)
"aYO" = (
@@ -32064,14 +31279,16 @@
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/bar)
"aYR" = (
-/obj/machinery/computer/nanite_cloud_controller,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Cabin_3Privacy";
+ name = "Cabin 3 Privacy Shutter"
},
-/turf/open/floor/plasteel/dark,
-/area/science/research)
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/locker)
"aYS" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -32086,7 +31303,6 @@
/turf/open/floor/plasteel/dark,
/area/science/research)
"aYT" = (
-/obj/machinery/nanite_programmer,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -32098,6 +31314,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/machinery/modular_computer/console/preset/civilian{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark,
/area/science/research)
"aYV" = (
@@ -32137,10 +31356,20 @@
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
"aYZ" = (
-/obj/effect/turf_decal/box,
-/obj/effect/decal/cleanable/blood/old,
-/turf/open/floor/engine,
-/area/ai_monitored/turret_protected/ai_upload)
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/maintenance/port/aft)
"aZa" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/neutral,
@@ -32204,24 +31433,31 @@
/turf/open/floor/plasteel/dark,
/area/science/lab)
"aZf" = (
-/obj/machinery/door/airlock/maintenance{
- name = "backstage maintenance";
- req_access_txt = "46"
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/maintenance/central)
+/turf/open/floor/plasteel/showroomfloor,
+/area/crew_quarters/theatre)
"aZg" = (
-/obj/structure/filingcabinet/chestdrawer,
-/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"aZh" = (
/obj/machinery/porta_turret/ai,
/obj/machinery/light/small{
@@ -32238,25 +31474,10 @@
/turf/closed/wall,
/area/science/lab)
"aZj" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/item/clipboard,
-/obj/item/reagent_containers/glass/beaker/large{
- pixel_x = -6
- },
-/obj/item/reagent_containers/glass/beaker{
- pixel_x = 6
- },
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science,
-/obj/structure/extinguisher_cabinet{
- pixel_y = -30
- },
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
+/obj/effect/turf_decal/bot,
+/obj/machinery/holopad,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/exit/departure_lounge)
"aZk" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/neutral{
@@ -32268,9 +31489,6 @@
/obj/item/stack/sheet/metal/fifty,
/obj/item/stack/sheet/glass/fifty,
/obj/item/clothing/glasses/welding,
-/obj/item/radio/intercom{
- pixel_x = 28
- },
/turf/open/floor/plasteel/dark,
/area/science/lab)
"aZl" = (
@@ -32649,7 +31867,6 @@
dir = 8
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aZP" = (
@@ -33001,7 +32218,6 @@
/obj/structure/sign/warning/vacuum{
pixel_x = 32
},
-/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/engine/vacuum,
/area/science/mixing/chamber)
"bar" = (
@@ -33117,9 +32333,6 @@
/turf/open/floor/plasteel/dark,
/area/medical/surgery)
"baz" = (
-/obj/effect/turf_decal/loading_area{
- dir = 1
- },
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
dir = 8
@@ -33346,16 +32559,6 @@
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/science/server)
"baQ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -33722,7 +32925,6 @@
/area/science/mixing)
"bbt" = (
/obj/machinery/air_sensor/atmos/toxins_mixing_tank,
-/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/engine/vacuum,
/area/science/mixing/chamber)
"bbv" = (
@@ -33762,16 +32964,6 @@
/turf/closed/wall/r_wall,
/area/science/mixing/chamber)
"bbz" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
@@ -33852,8 +33044,6 @@
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
"bbH" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -33919,16 +33109,9 @@
dir = 4
},
/obj/item/clipboard,
-/obj/item/nanite_remote{
- pixel_x = -4;
- pixel_y = 4
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/item/nanite_scanner{
- pixel_x = 4
- },
/obj/machinery/light{
dir = 1
},
@@ -34072,7 +33255,6 @@
/turf/closed/wall/r_wall,
/area/science/mixing/chamber)
"bbY" = (
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -34432,8 +33614,12 @@
},
/area/maintenance/port)
"bcD" = (
-/turf/closed/wall/r_wall/rust,
-/area/science/mixing)
+/obj/effect/turf_decal/box,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"bcE" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
@@ -34767,7 +33953,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"bcY" = (
/obj/structure/grille/broken,
@@ -34805,7 +33991,6 @@
/area/crew_quarters/kitchen)
"bda" = (
/obj/machinery/door/firedoor/heavy,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/science/mixing/chamber)
"bdb" = (
@@ -34855,7 +34040,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"bdg" = (
@@ -35360,12 +34544,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard)
"bdO" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -35482,7 +34660,6 @@
pixel_x = 32;
pixel_y = -8
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"bdV" = (
@@ -35855,7 +35032,6 @@
pixel_x = -32;
pixel_y = -8
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"bev" = (
@@ -35934,7 +35110,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"beC" = (
@@ -35953,6 +35128,7 @@
dir = 4
},
/obj/effect/landmark/event_spawn,
+/obj/machinery/nanite_program_hub,
/turf/open/floor/plasteel/dark,
/area/science/research)
"beE" = (
@@ -35977,7 +35153,6 @@
"beF" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"beG" = (
@@ -36398,6 +35573,7 @@
/obj/machinery/light{
dir = 1
},
+/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -36747,7 +35923,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
"bfT" = (
@@ -36802,7 +35977,6 @@
"bfX" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
"bfY" = (
@@ -36825,6 +35999,9 @@
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{
name = "euthanization chamber freezer"
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"bga" = (
@@ -36926,7 +36103,6 @@
pixel_x = 32;
pixel_y = -8
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
"bgi" = (
@@ -37305,16 +36481,6 @@
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"bgK" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -37393,10 +36559,6 @@
/turf/open/floor/grass,
/area/medical/virology)
"bgP" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -37412,7 +36574,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plasteel/dark/corner,
+/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bgQ" = (
/obj/structure/cable{
@@ -38090,16 +37252,6 @@
/turf/open/floor/plating,
/area/quartermaster/office)
"bhY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bhZ" = (
@@ -38153,16 +37305,6 @@
},
/area/maintenance/port)
"bie" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -38458,16 +37600,6 @@
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/science/research)
"biC" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/junction,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -38782,16 +37914,6 @@
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
"biX" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -38850,7 +37972,6 @@
dir = 1
},
/obj/effect/turf_decal/loading_area,
-/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
@@ -38866,7 +37987,6 @@
},
/obj/effect/turf_decal/loading_area,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bjd" = (
@@ -39030,16 +38150,6 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
"bjp" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
@@ -39084,16 +38194,6 @@
/turf/open/floor/plasteel/dark,
/area/medical/surgery)
"bjt" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
@@ -39113,7 +38213,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/tank/internals/oxygen/yellow,
/turf/open/floor/plasteel/dark,
/area/quartermaster/miningoffice)
"bjv" = (
@@ -39124,7 +38223,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/tank/internals/oxygen/yellow,
/obj/machinery/firealarm{
dir = 4;
pixel_x = -24
@@ -39176,7 +38274,6 @@
dir = 1;
pixel_y = 3
},
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -39197,7 +38294,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
},
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -39369,16 +38465,6 @@
/turf/open/floor/plating,
/area/maintenance/central)
"bjN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -39424,22 +38510,12 @@
/obj/effect/turf_decal/tile/brown{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/box/corners{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bjS" = (
@@ -39679,16 +38755,6 @@
/turf/open/floor/plasteel/dark,
/area/quartermaster/office)
"bks" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bkt" = (
@@ -39787,16 +38853,6 @@
/area/quartermaster/sorting)
"bkA" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -39821,7 +38877,6 @@
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/arrows,
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -39930,7 +38985,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/tank/internals/oxygen/yellow,
/obj/machinery/light,
/obj/machinery/requests_console{
department = "Mining";
@@ -40125,16 +39179,6 @@
/turf/open/floor/plating,
/area/maintenance/port)
"blb" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -40208,16 +39252,6 @@
/turf/open/floor/plasteel/dark,
/area/quartermaster/miningoffice)
"bli" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -40227,16 +39261,6 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"blj" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -40331,16 +39355,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/virology)
"blq" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
@@ -40348,16 +39362,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"blr" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
@@ -40435,16 +39439,6 @@
/area/quartermaster/storage)
"blz" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 8
},
@@ -40474,36 +39468,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/showroomfloor,
/area/library)
-"blC" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/box/corners{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/quartermaster/storage)
"blD" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -40582,16 +39547,6 @@
/turf/open/floor/plasteel,
/area/quartermaster/qm)
"blK" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
@@ -40600,16 +39555,6 @@
/area/quartermaster/storage)
"blL" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -40840,7 +39785,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"bmf" = (
/obj/effect/turf_decal/tile/brown{
@@ -41214,7 +40159,6 @@
},
/obj/effect/turf_decal/arrows,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood/old,
/obj/machinery/firealarm{
dir = 4;
pixel_x = -24
@@ -41231,7 +40175,7 @@
dir = 8
},
/obj/effect/decal/cleanable/cobweb,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"bmF" = (
/obj/machinery/status_display/evac,
@@ -41246,7 +40190,7 @@
/obj/machinery/plantgenes{
pixel_y = 5
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"bmH" = (
/obj/effect/turf_decal/tile/red{
@@ -41274,16 +40218,6 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bmJ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
@@ -41403,7 +40337,7 @@
/area/crew_quarters/kitchen)
"bmU" = (
/obj/structure/lattice,
-/turf/closed/wall/r_wall/rust,
+/turf/closed/wall/r_wall,
/area/security/prison)
"bmV" = (
/obj/effect/turf_decal/tile/neutral,
@@ -41508,7 +40442,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6
},
-/obj/effect/decal/cleanable/blood/old,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -41667,10 +40600,6 @@
/area/crew_quarters/locker)
"bnq" = (
/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
-/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -41766,17 +40695,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/library)
-"bny" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
"bnz" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -41832,31 +40750,7 @@
},
/turf/open/floor/plasteel/dark,
/area/hydroponics)
-"bnD" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/structure/extinguisher_cabinet{
- pixel_x = -26
- },
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
"bnE" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/sorting/mail{
name = "kitchen sorting disposal pipe";
sortType = 20
@@ -41898,9 +40792,7 @@
/area/bridge)
"bnH" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -41973,20 +40865,6 @@
/obj/item/toy/figure/chef,
/turf/open/floor/plating,
/area/crew_quarters/kitchen)
-"bnM" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/structure/sign/departments/science{
- pixel_x = 32
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
"bnN" = (
/obj/effect/turf_decal/tile/green{
dir = 1
@@ -42035,11 +40913,7 @@
/turf/open/floor/plasteel/dark,
/area/bridge)
"bnR" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -42048,17 +40922,6 @@
},
/turf/open/floor/grass,
/area/hydroponics)
-"bnS" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/bot,
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/sign/poster/official/fruit_bowl{
- pixel_x = -32
- },
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
"bnT" = (
/obj/structure/flora/grass/jungle/b,
/obj/structure/flora/ausbushes/ppflowers,
@@ -42152,10 +41015,7 @@
/area/security/courtroom)
"boa" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 8
},
@@ -42165,25 +41025,13 @@
/turf/open/floor/grass,
/area/hydroponics)
"bob" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced,
/turf/open/floor/grass,
/area/hydroponics)
-"boc" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
"bod" = (
/obj/effect/turf_decal/tile/brown{
dir = 4
@@ -42267,10 +41115,7 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"boh" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced{
dir = 8
},
@@ -42941,12 +41786,9 @@
/area/crew_quarters/kitchen)
"bpi" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/junglebush/b,
/obj/item/radio/intercom{
pixel_y = -28
},
-/obj/effect/decal/remains/human,
-/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/grass,
/area/hydroponics)
"bpj" = (
@@ -43159,10 +42001,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -43181,10 +42019,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -43223,10 +42057,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -43234,9 +42064,6 @@
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/box/corners{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bpE" = (
@@ -43272,7 +42099,7 @@
/area/quartermaster/storage)
"bpF" = (
/obj/structure/sign/departments/cargo,
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/hallway/primary/starboard)
"bpG" = (
/obj/effect/turf_decal/tile/neutral,
@@ -43366,16 +42193,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
"bpN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 8
},
@@ -43454,24 +42271,6 @@
/obj/structure/sign/departments/botany,
/turf/closed/wall,
/area/hallway/primary/starboard)
-"bpW" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
"bpX" = (
/obj/machinery/door/poddoor/preopen{
id = "brigfrontdoor";
@@ -43480,7 +42279,6 @@
/obj/structure/extinguisher_cabinet{
pixel_y = 28
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -43528,7 +42326,7 @@
/area/bridge)
"bqb" = (
/obj/structure/sign/departments/custodian,
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/maintenance/central)
"bqc" = (
/obj/effect/turf_decal/bot,
@@ -43551,10 +42349,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"bqe" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -43577,9 +42371,6 @@
/turf/open/floor/plasteel/dark,
/area/teleporter)
"bqg" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/structure/cable{
icon_state = "1-8"
},
@@ -43601,7 +42392,7 @@
/obj/item/radio/intercom{
pixel_y = 22
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"bqj" = (
/obj/effect/turf_decal/tile/red,
@@ -43652,8 +42443,13 @@
/area/crew_quarters/kitchen)
"bqm" = (
/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
-/area/bridge)
+/area/security/warden)
"bqn" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
@@ -43676,16 +42472,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"bqp" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 9
},
@@ -43707,17 +42493,15 @@
},
/area/maintenance/central)
"bqs" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/bridge)
+/area/security/main)
"bqt" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
@@ -43808,8 +42592,6 @@
"bqA" = (
/obj/structure/table,
/obj/item/folder/white,
-/obj/item/restraints/handcuffs,
-/obj/item/wirerod,
/obj/item/pen,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -43981,16 +42763,6 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"bqN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 4
},
@@ -44091,16 +42863,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bqT" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -44111,18 +42873,17 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bqU" = (
-/obj/structure/table/wood,
-/obj/item/clothing/gloves/color/rainbow/clown,
-/obj/item/storage/crayons,
-/obj/item/storage/crayons,
-/obj/item/bikehorn/rubberducky,
-/obj/structure/sign/poster/contraband/clown{
- pixel_x = -30
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/theatre)
"bqV" = (
/obj/effect/turf_decal/bot,
@@ -44300,16 +43061,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard)
"bri" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 10
},
@@ -44361,7 +43112,9 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"bro" = (
@@ -44370,7 +43123,9 @@
},
/obj/machinery/portable_atmospherics/canister,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"brp" = (
@@ -44487,7 +43242,6 @@
dir = 4;
pixel_x = -26
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"brA" = (
@@ -44665,22 +43419,7 @@
/area/crew_quarters/bar/atrium)
"brN" = (
/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/bot,
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = 28
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"brO" = (
/obj/machinery/hydroponics/constructable,
@@ -44689,7 +43428,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/hydroponics)
"brP" = (
/obj/structure/table,
@@ -44953,19 +43692,10 @@
},
/area/maintenance/central/secondary)
"bsm" = (
-/turf/closed/wall/rust,
-/area/chapel/office)
+/obj/machinery/status_display/evac,
+/turf/open/floor/plasteel,
+/area/engine/supermatter)
"bsn" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -45023,9 +43753,6 @@
/turf/open/floor/carpet,
/area/lawoffice)
"bss" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -45049,16 +43776,6 @@
},
/area/hallway/primary/port)
"bst" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -45083,16 +43800,6 @@
/turf/open/floor/plasteel/dark/corner,
/area/hallway/primary/port)
"bsv" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/sorting/mail/flip{
dir = 2;
name = "cargo sorting disposal pipe";
@@ -45186,12 +43893,6 @@
/turf/open/floor/plasteel,
/area/security/courtroom)
"bsC" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -45207,13 +43908,6 @@
"bsE" = (
/turf/open/floor/plasteel,
/area/bridge)
-"bsF" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/bridge)
"bsG" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -45334,10 +44028,7 @@
/area/library)
"bsN" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 8
},
@@ -45348,10 +44039,7 @@
/turf/open/floor/grass,
/area/crew_quarters/heads/hop)
"bsO" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1
@@ -45359,11 +44047,7 @@
/turf/open/floor/grass,
/area/crew_quarters/heads/hop)
"bsP" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -45535,12 +44219,6 @@
name = "off ramp";
pixel_y = 5
},
-/obj/effect/turf_decal/box/corners{
- dir = 8
- },
-/obj/effect/turf_decal/box/corners{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"btc" = (
@@ -45755,7 +44433,6 @@
"btt" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"btu" = (
@@ -45896,8 +44573,6 @@
"btH" = (
/obj/structure/flora/grass/jungle/b,
/obj/structure/flora/ausbushes/fullgrass,
-/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1
@@ -45913,10 +44588,7 @@
/area/crew_quarters/bar)
"btI" = (
/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1
@@ -46038,17 +44710,7 @@
/obj/structure/bookcase/random/reference,
/turf/open/floor/wood,
/area/crew_quarters/bar)
-"btU" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
"btV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -46112,11 +44774,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-17";
- pixel_x = 8;
- pixel_y = 3
- },
/obj/machinery/light_switch{
pixel_x = 24;
pixel_y = 40
@@ -46130,17 +44787,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
-"bub" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-02";
- pixel_y = 3
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/bar)
"buc" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -46255,12 +44901,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
"buk" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -46331,10 +44971,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
"bur" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
@@ -47069,7 +45705,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"bvC" = (
@@ -47184,7 +45819,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bvL" = (
@@ -47255,16 +45889,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/toilet/restrooms)
"bvQ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -47313,10 +45937,6 @@
/turf/open/floor/plasteel/dark,
/area/library)
"bvV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-16"
},
@@ -47385,7 +46005,6 @@
/area/crew_quarters/heads/captain)
"bwc" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bwd" = (
@@ -47410,9 +46029,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-16"
- },
/obj/structure/extinguisher_cabinet{
pixel_x = 24
},
@@ -47688,16 +46304,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
"bwF" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
@@ -47879,10 +46485,6 @@
/obj/structure/flora/ausbushes/ywflowers,
/turf/open/floor/grass,
/area/chapel/main)
-"bwU" = (
-/obj/structure/flora/grass/jungle,
-/turf/open/floor/grass,
-/area/chapel/main)
"bwV" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -47917,11 +46519,13 @@
/turf/open/floor/plasteel/dark,
/area/security/checkpoint/supply)
"bwY" = (
+/obj/structure/chair/stool,
/turf/open/floor/plasteel/chapel{
dir = 8
},
/area/chapel/main)
"bwZ" = (
+/obj/structure/chair/stool,
/turf/open/floor/plasteel/chapel,
/area/chapel/main)
"bxa" = (
@@ -48016,10 +46620,7 @@
/area/chapel/main)
"bxh" = (
/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -48141,10 +46742,7 @@
/area/quartermaster/storage)
"bxt" = (
/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -48479,10 +47077,6 @@
/turf/open/floor/plasteel/dark,
/area/medical/virology)
"bxW" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-4"
},
@@ -48550,9 +47144,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-22"
- },
/obj/machinery/light,
/obj/machinery/airalarm{
dir = 1;
@@ -48829,16 +47420,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"byv" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -48919,7 +47500,6 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -49759,6 +48339,9 @@
/obj/machinery/newscaster/security_unit{
pixel_x = 28
},
+/obj/structure/window/reinforced{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
"bzQ" = (
@@ -50499,12 +49082,6 @@
name = "on ramp";
pixel_y = 6
},
-/obj/effect/turf_decal/box/corners{
- dir = 1
- },
-/obj/effect/turf_decal/box/corners{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bAV" = (
@@ -50560,7 +49137,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/decal/cleanable/blood/old,
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/airalarm{
pixel_y = 22
@@ -50598,14 +49174,10 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"bBc" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/plasteel/dark/corner,
+/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bBd" = (
/obj/machinery/vending/tool,
@@ -50633,19 +49205,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"bBf" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"bBg" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -50697,7 +49256,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bBk" = (
@@ -51120,16 +49678,6 @@
/turf/open/floor/plasteel/dark,
/area/storage/primary)
"bBS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "2-8"
},
@@ -51192,16 +49740,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bBV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 8
},
@@ -51209,16 +49747,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bBW" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -51267,16 +49795,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bCa" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -51617,14 +50135,11 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"bCG" = (
-/obj/effect/turf_decal/loading_area{
- dir = 1
- },
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
name = "External Gas to Loop"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/engine,
/area/engine/engineering)
"bCH" = (
/obj/effect/turf_decal/tile/blue{
@@ -52514,19 +51029,6 @@
luminosity = 2
},
/area/storage/tech)
-"bEa" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/emcloset/anchored,
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port/aft)
"bEb" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -52838,16 +51340,6 @@
},
/area/maintenance/port/aft)
"bEA" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -52857,16 +51349,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 8
@@ -52874,32 +51356,12 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bEC" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bED" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 8
@@ -52922,16 +51384,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bEG" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -53202,7 +51654,9 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"bFi" = (
@@ -53308,6 +51762,9 @@
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -54287,10 +52744,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"bGS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -54321,15 +52774,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"bGW" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
"bGX" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -54625,21 +53069,6 @@
/obj/item/bedsheet/brown,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"bHv" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"bHw" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/red{
@@ -54678,16 +53107,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"bHy" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
@@ -54952,16 +53371,6 @@
},
/area/hallway/primary/central)
"bHP" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/effect/decal/cleanable/dirt,
@@ -54974,9 +53383,6 @@
"bHS" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/security/processing)
"bHT" = (
@@ -55510,16 +53916,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bIO" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/bot,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -55531,12 +53927,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/security/processing)
"bIQ" = (
@@ -55808,13 +54198,7 @@
pixel_x = 6
},
/obj/item/pen,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
@@ -55827,12 +54211,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/item/storage/toolbox/mechanical{
pixel_x = 2;
pixel_y = 4
@@ -55891,16 +54269,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"bJs" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
},
@@ -56249,13 +54617,6 @@
/turf/open/floor/wood,
/area/crew_quarters/locker)
"bJT" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
@@ -56276,7 +54637,7 @@
dir = 1
},
/turf/open/floor/wood{
- icon_state = "wood-broken6"
+ icon_state = "wood-broken5"
},
/area/crew_quarters/locker)
"bJV" = (
@@ -56312,9 +54673,9 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bJY" = (
-/obj/structure/bed,
-/obj/item/bedsheet/black,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/structure/table/wood,
+/obj/item/folder/red,
+/obj/item/lighter,
/obj/machinery/button/door{
id = "Cabin_2";
name = "Cabin 2 Privacy Lock";
@@ -56322,14 +54683,7 @@
pixel_y = 24;
specialfunctions = 4
},
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood{
- icon_state = "wood-broken3"
- },
+/turf/open/floor/wood,
/area/crew_quarters/locker)
"bJZ" = (
/obj/machinery/light/small{
@@ -56338,9 +54692,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/turf/open/floor/wood{
- icon_state = "wood-broken"
- },
+/turf/open/floor/wood,
/area/crew_quarters/locker)
"bKa" = (
/obj/effect/turf_decal/tile/neutral{
@@ -56369,56 +54721,32 @@
},
/turf/open/floor/wood,
/area/crew_quarters/locker)
-"bKc" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/obj/machinery/newscaster{
- pixel_x = -30
- },
-/obj/machinery/button/door{
- id = "Cabin_4Privacy";
- name = "Cabin 4 Privacy Toggle";
- pixel_x = -24;
- pixel_y = -24
- },
-/turf/open/floor/wood{
- icon_state = "wood-broken4"
- },
-/area/crew_quarters/locker)
"bKd" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/obj/machinery/newscaster{
- pixel_x = -30
- },
-/obj/machinery/button/door{
- id = "Cabin_3Privacy";
- name = "Cabin 3 Privacy Toggle";
- pixel_x = -24;
- pixel_y = -24
- },
/turf/open/floor/wood{
- icon_state = "wood-broken5"
+ icon_state = "wood-broken6"
},
/area/crew_quarters/locker)
-"bKe" = (
-/obj/structure/dresser,
-/turf/open/floor/wood,
-/area/crew_quarters/locker)
"bKf" = (
/obj/structure/sign/poster/contraband/revolver,
/turf/closed/wall,
/area/crew_quarters/locker)
"bKg" = (
-/obj/structure/table/wood,
-/obj/item/folder/red,
-/obj/item/lighter,
-/turf/open/floor/wood,
+/turf/open/floor/wood{
+ icon_state = "wood-broken3"
+ },
/area/crew_quarters/locker)
"bKh" = (
-/obj/structure/closet/secure_closet/personal/cabinet,
-/obj/machinery/newscaster{
- pixel_x = 30
+/obj/structure/bed,
+/obj/item/bedsheet/black,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood{
+ icon_state = "wood-broken3"
},
-/turf/open/floor/wood,
/area/crew_quarters/locker)
"bKi" = (
/obj/effect/turf_decal/tile/blue{
@@ -56438,12 +54766,19 @@
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/locker)
"bKk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "Cabin_4Privacy";
- name = "Cabin 4 Privacy Shutter"
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/machinery/newscaster{
+ pixel_x = -30
+ },
+/obj/machinery/button/door{
+ id = "Cabin_4Privacy";
+ name = "Cabin 4 Privacy Toggle";
+ pixel_x = -24;
+ pixel_y = -24
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken4"
},
-/turf/open/floor/plating,
/area/crew_quarters/locker)
"bKl" = (
/obj/structure/flora/rock/pile,
@@ -56845,9 +55180,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"bKP" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
/obj/effect/turf_decal/tile/blue{
dir = 8
},
@@ -56944,9 +55276,6 @@
/area/crew_quarters/toilet/restrooms)
"bKU" = (
/obj/effect/turf_decal/box,
-//obj/structure/toilet/secret/low_loot{
- dir = 8
- },
/obj/structure/mirror{
pixel_x = -28
},
@@ -57282,18 +55611,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"bLr" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
-/area/storage/primary)
"bLs" = (
/obj/structure/table,
/obj/effect/decal/cleanable/cobweb,
@@ -57334,16 +55651,6 @@
/turf/open/floor/plasteel/dark,
/area/janitor)
"bLt" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -57351,7 +55658,8 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bLu" = (
-/turf/closed/wall/rust,
+/obj/structure/dresser,
+/turf/open/floor/wood,
/area/crew_quarters/locker)
"bLv" = (
/obj/effect/turf_decal/tile/purple{
@@ -57542,16 +55850,6 @@
/turf/open/floor/grass,
/area/security/prison)
"bLI" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment{
dir = 4
@@ -57609,11 +55907,6 @@
pixel_y = 22;
prison_radio = 1
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-17";
- pixel_x = -8;
- pixel_y = 3
- },
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
"bLO" = (
@@ -57673,16 +55966,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
"bLS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
@@ -57761,16 +56044,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
"bLY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/obj/structure/disposalpipe/segment{
dir = 4
@@ -57778,16 +56051,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bLZ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -57947,16 +56210,6 @@
/turf/open/floor/plasteel,
/area/security/warden)
"bMm" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -58045,7 +56298,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
/obj/structure/cable{
icon_state = "2-4"
},
@@ -58057,12 +56309,6 @@
},
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/storage/primary)
@@ -58466,10 +56712,6 @@
/turf/open/floor/mech_bay_recharge_floor,
/area/maintenance/port/aft)
"bMY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/security/warden)
"bMZ" = (
@@ -58570,9 +56812,7 @@
"bNi" = (
/obj/structure/flora/grass/jungle/b,
/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/flora/ausbushes/ywflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/cable{
icon_state = "4-8"
},
@@ -58614,9 +56854,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -58758,7 +56995,6 @@
dir = 8;
pixel_y = -24
},
-/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -58836,8 +57072,6 @@
/turf/open/floor/plasteel/dark,
/area/security/warden)
"bNH" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
/obj/structure/flora/ausbushes/ppflowers,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
@@ -59196,10 +57430,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -59215,9 +57445,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
/turf/open/floor/plasteel,
/area/storage/primary)
@@ -59280,7 +57507,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/storage/primary)
@@ -59454,16 +57680,6 @@
/turf/closed/wall/rust,
/area/maintenance/starboard/aft)
"bOD" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 4
@@ -59471,48 +57687,18 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bOE" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 6
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bOF" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bOG" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/landmark/event_spawn,
/obj/structure/cable{
icon_state = "1-2"
@@ -59524,17 +57710,6 @@
/turf/closed/wall,
/area/janitor)
"bOI" = (
-/obj/effect/turf_decal/box/corners,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -59542,16 +57717,6 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"bOJ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/obj/structure/disposalpipe/segment{
dir = 4
@@ -59559,16 +57724,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bOK" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -59592,16 +57747,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"bOM" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/effect/decal/cleanable/dirt,
@@ -59627,16 +57772,6 @@
/turf/open/floor/plasteel/dark,
/area/security/main)
"bOP" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bOQ" = (
@@ -59669,16 +57804,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bOS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -59755,22 +57880,12 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bOY" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bOZ" = (
@@ -59857,10 +57972,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bPh" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/ywflowers,
-/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/grass,
/area/security/prison)
"bPi" = (
@@ -59984,7 +58095,7 @@
/area/hallway/primary/central)
"bPp" = (
/obj/machinery/status_display/shuttle,
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/security/courtroom)
"bPq" = (
/obj/machinery/door/airlock/maintenance{
@@ -60133,7 +58244,7 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/maintenance/starboard/aft)
"bPA" = (
/obj/effect/turf_decal/tile/red,
@@ -60157,16 +58268,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
"bPB" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -60269,16 +58370,6 @@
},
/area/hallway/secondary/entry)
"bPL" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/sorting/mail{
dir = 8;
name = "HoP sorting disposal pipe";
@@ -60369,10 +58460,6 @@
},
/area/maintenance/port/aft)
"bPR" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -60516,16 +58603,6 @@
},
/area/space/nearstation)
"bQd" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/disposalpipe/segment{
@@ -60572,15 +58649,6 @@
/area/hallway/primary/starboard)
"bQh" = (
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/junction/flip{
dir = 8
},
@@ -60616,7 +58684,6 @@
/obj/machinery/door/airlock/public/glass{
name = "Engineering Hallway"
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"bQl" = (
@@ -60750,16 +58817,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
"bQv" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
@@ -60820,10 +58877,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -60841,9 +58894,6 @@
},
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -60869,9 +58919,6 @@
},
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
@@ -61305,10 +59352,6 @@
"bRf" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/red,
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-02";
- pixel_y = 3
- },
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -61361,16 +59404,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bRj" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -61520,19 +59553,6 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"bRt" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/exit/departure_lounge)
"bRu" = (
/obj/effect/turf_decal/bot,
/obj/structure/rack,
@@ -61849,16 +59869,6 @@
},
/area/maintenance/aft)
"bRU" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -61871,16 +59881,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bRV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -61926,16 +59926,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bRZ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -61955,16 +59945,6 @@
/turf/open/floor/engine,
/area/storage/tech)
"bSb" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -61975,16 +59955,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bSc" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
@@ -61996,9 +59966,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"bSd" = (
-/turf/closed/wall/rust,
-/area/hallway/secondary/entry)
"bSe" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/delivery,
@@ -62104,9 +60071,6 @@
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -62120,17 +60084,11 @@
},
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/disposalpipe/junction/flip,
/turf/open/floor/plasteel,
/area/storage/primary)
"bSn" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/brflowers,
-/obj/structure/flora/ausbushes/leafybush,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1
@@ -62450,19 +60408,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
-"bSQ" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/closed/wall,
-/area/hallway/secondary/exit/departure_lounge)
"bSR" = (
/obj/machinery/shower{
dir = 8;
@@ -62591,7 +60539,6 @@
/obj/structure/sign/departments/engineering{
pixel_x = 32
},
-/obj/effect/turf_decal/delivery,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
@@ -62656,16 +60603,6 @@
/turf/open/floor/engine,
/area/storage/tech)
"bTe" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/airalarm{
dir = 4;
@@ -62787,12 +60724,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bTr" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/power/apc{
areastring = "/area/hallway/secondary/entry";
dir = 0;
@@ -62875,16 +60806,6 @@
/turf/closed/wall/rust,
/area/hallway/secondary/exit/departure_lounge)
"bTy" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -62904,9 +60825,6 @@
dir = 4;
pixel_x = -22
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
/turf/open/floor/plasteel/dark,
/area/security/prison)
"bTA" = (
@@ -63272,9 +61190,6 @@
/turf/closed/wall,
/area/hallway/secondary/entry)
"bUa" = (
-/obj/structure/bed,
-/obj/item/bedsheet/black,
-/obj/effect/landmark/start/assistant,
/turf/open/floor/wood,
/area/crew_quarters/locker)
"bUb" = (
@@ -63340,15 +61255,6 @@
/area/hallway/secondary/entry)
"bUg" = (
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -63418,9 +61324,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"bUl" = (
-/turf/closed/wall,
-/area/security/vacantoffice)
"bUm" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -63466,7 +61369,7 @@
dir = 10
},
/turf/open/floor/plasteel,
-/area/security/warden)
+/area/space)
"bUs" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/command/glass{
@@ -63698,6 +61601,7 @@
/area/security/processing)
"bUQ" = (
/obj/machinery/light/floor,
+/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/engine/air,
/area/engine/atmos)
"bUR" = (
@@ -63777,16 +61681,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bVa" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/junction/flip{
dir = 8
},
@@ -64290,13 +62184,6 @@
},
/area/maintenance/central/secondary)
"bVL" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
@@ -64309,10 +62196,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8;
- icon_state = "intact"
- },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"bVM" = (
@@ -65329,10 +63212,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"bXo" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/exit/departure_lounge)
"bXp" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -65388,16 +63267,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bXu" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/box/corners{
dir = 1
},
@@ -65441,20 +63310,6 @@
/obj/structure/sign/departments/evac,
/turf/closed/wall,
/area/hallway/secondary/exit/departure_lounge)
-"bXy" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/hallway/secondary/exit/departure_lounge)
"bXz" = (
/obj/effect/turf_decal/bot,
/obj/effect/decal/cleanable/cobweb/cobweb2,
@@ -65484,16 +63339,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"bXC" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -65518,16 +63363,6 @@
/area/hallway/secondary/exit/departure_lounge)
"bXE" = (
/obj/effect/turf_decal/box/corners,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -65611,7 +63446,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
@@ -66138,12 +63972,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bYw" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -66485,31 +64313,6 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
-"bYS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/security/brig)
"bYT" = (
/obj/machinery/power/apc/highcap/five_k{
areastring = "/area/security/prison";
@@ -66585,13 +64388,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bYZ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-10"
- },
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bZa" = (
@@ -66730,10 +64526,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bZk" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bZl" = (
@@ -66835,16 +64627,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"bZr" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "2-4"
},
@@ -66956,20 +64738,8 @@
dir = 1
},
/area/hallway/primary/starboard)
-"bZA" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
"bZB" = (
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -66984,16 +64754,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
"bZD" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -67078,25 +64838,15 @@
},
/area/hallway/primary/starboard)
"bZJ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
- dir = 4
- },
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bZK" = (
@@ -67143,24 +64893,14 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bZN" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/structure/cable{
+ icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 8
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -67201,16 +64941,6 @@
/turf/open/floor/plasteel/dark,
/area/janitor)
"bZR" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
},
@@ -67369,16 +65099,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cad" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 4
},
@@ -67454,16 +65174,9 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"cak" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -67482,16 +65195,6 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
"cal" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -67564,16 +65267,6 @@
/turf/open/floor/plasteel/dark,
/area/storage/primary)
"car" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "2-8"
},
@@ -67622,10 +65315,6 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"cau" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -67746,7 +65435,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"caE" = (
@@ -68022,10 +65710,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/central)
"cbb" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
@@ -68236,9 +65920,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 10
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"cbw" = (
@@ -68304,7 +65985,6 @@
/area/maintenance/starboard)
"cbA" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"cbB" = (
@@ -68406,16 +66086,6 @@
},
/area/hallway/primary/port)
"cbH" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
},
@@ -68431,24 +66101,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel/dark/corner,
/area/hallway/primary/port)
-"cbJ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
-/turf/open/floor/plasteel/dark/corner{
- dir = 8
- },
-/area/hallway/primary/port)
"cbM" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -68548,10 +66200,6 @@
},
/area/maintenance/port/aft)
"cbT" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
@@ -68723,10 +66371,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cci" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -68742,10 +66386,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8;
- icon_state = "intact"
- },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"ccj" = (
@@ -68992,10 +66632,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"ccM" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -69042,9 +66678,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
"ccR" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -69101,7 +66734,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"ccX" = (
@@ -69217,28 +66849,14 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"cdg" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/plaque{
icon_state = "L6"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
- dir = 8;
- icon_state = "intact"
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
@@ -69254,20 +66872,9 @@
/area/maintenance/aft)
"cdi" = (
/obj/structure/flora/grass/jungle/b,
-/obj/structure/flora/ausbushes/sparsegrass,
/turf/open/floor/grass,
/area/security/prison)
"cdj" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/item/beacon,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
@@ -69664,9 +67271,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
-"cdY" = (
-/turf/closed/wall/r_wall/rust,
-/area/maintenance/central)
"cdZ" = (
/turf/closed/wall/r_wall,
/area/maintenance/central)
@@ -69706,7 +67310,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"ced" = (
@@ -69798,6 +67401,7 @@
pixel_x = 4;
req_access_txt = "16"
},
+/obj/item/toy/talking/AI,
/turf/open/floor/circuit/red,
/area/ai_monitored/turret_protected/ai)
"ceg" = (
@@ -69952,6 +67556,7 @@
pixel_x = -3;
req_access_txt = "16"
},
+/obj/item/toy/talking/AI,
/turf/open/floor/circuit/red,
/area/ai_monitored/turret_protected/ai)
"cep" = (
@@ -70031,12 +67636,6 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"ceu" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{
dir = 8
},
@@ -70066,12 +67665,6 @@
/turf/open/floor/circuit/red/telecomms,
/area/tcommsat/server)
"cex" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{
dir = 8
},
@@ -70088,12 +67681,6 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"cey" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -70196,9 +67783,6 @@
"ceF" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/turret_protected/aisat/atmos)
-"ceG" = (
-/turf/closed/wall/r_wall/rust,
-/area/ai_monitored/turret_protected/aisat/atmos)
"ceH" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -70970,9 +68554,6 @@
"cfY" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/satellite)
-"cga" = (
-/turf/closed/wall/r_wall/rust,
-/area/ai_monitored/storage/satellite)
"cgb" = (
/obj/structure/closet/emcloset,
/obj/effect/decal/cleanable/dirt,
@@ -71002,7 +68583,7 @@
"cgg" = (
/obj/structure/sign/warning/docking,
/turf/closed/wall/rust,
-/area/hallway/secondary/entry)
+/area/hallway/secondary/exit/departure_lounge)
"cgi" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
@@ -71191,9 +68772,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-05"
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -71470,16 +69048,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"cgV" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -71651,10 +69219,6 @@
/turf/closed/wall,
/area/maintenance/fore)
"chk" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -71700,10 +69264,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
"chm" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -72172,9 +69732,6 @@
/obj/structure/lattice/catwalk,
/turf/open/floor/plating/airless,
/area/solar/port/aft)
-"chV" = (
-/turf/closed/wall/rust,
-/area/ai_monitored/turret_protected/aisat_interior)
"chW" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/hatch{
@@ -72805,7 +70362,6 @@
name = "Engine Access Shutters"
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
@@ -73236,21 +70792,6 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall,
/area/engine/gravity_generator)
-"cjC" = (
-/obj/effect/turf_decal/box/corners{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"cjD" = (
/obj/effect/turf_decal/tile/red{
dir = 8
@@ -73270,33 +70811,6 @@
icon_state = "panelscorched"
},
/area/maintenance/starboard/aft)
-"cjF" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/status_display/ai{
- pixel_y = 32
- },
-/obj/effect/decal/cleanable/greenglow,
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
-"cjG" = (
-/obj/effect/turf_decal/box/corners{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"cjH" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/engineering{
@@ -73312,7 +70826,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"cjI" = (
-/obj/effect/turf_decal/box,
/obj/machinery/shower{
dir = 4;
name = "emergency shower"
@@ -73535,7 +71048,6 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -26
},
-/obj/effect/turf_decal/box,
/obj/machinery/shower{
dir = 4;
name = "emergency shower"
@@ -74089,16 +71601,6 @@
icon_state = "platingdmg1"
},
/area/engine/engineering)
-"clg" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/greenglow,
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"clh" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
/turf/open/floor/plasteel,
@@ -74413,14 +71915,6 @@
luminosity = 2
},
/area/engine/gravity_generator)
-"clF" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/decal/cleanable/greenglow,
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"clG" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
@@ -74533,37 +72027,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/maintenance/solars/port/aft)
-"clP" = (
-/obj/effect/turf_decal/box/corners{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"clQ" = (
/obj/machinery/gravity_generator/main/station,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/decal/cleanable/greenglow,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"clR" = (
-/obj/effect/turf_decal/box/corners,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"clS" = (
@@ -74596,7 +72064,6 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
-/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/security/processing)
"clY" = (
@@ -74665,9 +72132,6 @@
/area/engine/atmos)
"cmc" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -74923,7 +72387,6 @@
dir = 8;
pixel_x = 24
},
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"cmt" = (
@@ -75058,16 +72521,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"cmD" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
@@ -75087,7 +72540,6 @@
dir = 8
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"cmF" = (
@@ -75187,7 +72639,6 @@
},
/obj/machinery/light/small,
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
"cmR" = (
@@ -75448,7 +72899,6 @@
dir = 4;
pixel_x = -26
},
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"cnn" = (
@@ -76060,6 +73510,10 @@
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
+/mob/living/simple_animal/bot/cleanbot{
+ auto_patrol = 1;
+ name = "\imprper Cleaner Bot"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
"coI" = (
@@ -76244,16 +73698,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"cpd" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
@@ -76553,16 +73997,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
"cpu" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/item/beacon,
@@ -76673,7 +74107,7 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cpF" = (
/obj/structure/flora/rock/pile,
@@ -76782,16 +74216,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/aft)
"cpP" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -76799,16 +74223,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cpQ" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/item/beacon,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -78380,16 +75794,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
@@ -79516,7 +76920,6 @@
id = "xeno_blastdoor";
name = "Xenobiology Containment Blast Door"
},
-/obj/effect/turf_decal/caution/stand_clear,
/obj/structure/disposalpipe/junction{
dir = 4
},
@@ -81324,16 +78727,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/cable{
icon_state = "2-8"
},
@@ -81662,10 +79055,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
"cyY" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/maintenance/port/fore)
@@ -82334,7 +79723,6 @@
name = "Emergency Research Blast Door"
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/dark,
/area/science/research)
"cAY" = (
@@ -82465,7 +79853,6 @@
/obj/machinery/light{
dir = 8
},
-/obj/item/gun/energy/e_gun/advtaser,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"cBp" = (
@@ -82665,12 +80052,19 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/central)
"cBW" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "Cabin_3Privacy";
- name = "Cabin 3 Privacy Shutter"
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/machinery/newscaster{
+ pixel_x = -30
+ },
+/obj/machinery/button/door{
+ id = "Cabin_3Privacy";
+ name = "Cabin 3 Privacy Toggle";
+ pixel_x = -24;
+ pixel_y = -24
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken5"
},
-/turf/open/floor/plating,
/area/crew_quarters/locker)
"cBX" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -82705,6 +80099,9 @@
},
/obj/structure/flora/grass/jungle/b,
/obj/machinery/light,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plating/asteroid/airless{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
@@ -82718,6 +80115,9 @@
},
/obj/structure/flora/ausbushes/palebush,
/obj/machinery/light/small,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plating/asteroid/airless{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
@@ -82933,7 +80333,6 @@
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
},
-/obj/structure/barricade/wooden/crude,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -83150,9 +80549,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/fore)
"cDr" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-02";
pixel_y = 3
@@ -83572,16 +80968,6 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
-"cEl" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/blood/old,
-/obj/effect/decal/remains/human,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
"cEm" = (
/obj/machinery/atmospherics/components/trinary/filter/flipped,
/obj/machinery/button/ignition{
@@ -84065,7 +81451,6 @@
dir = 4
},
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/plasteel/dark,
/area/hallway/primary/aft)
"cFC" = (
@@ -84097,7 +81482,6 @@
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
},
-/obj/structure/barricade/wooden/crude,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
"cFJ" = (
@@ -84332,11 +81716,7 @@
/turf/open/floor/engine/vacuum,
/area/science/test_area)
"cGz" = (
-/obj/structure/flora/grass/jungle,
-/obj/structure/flora/ausbushes/grassybush,
-/obj/structure/flora/ausbushes/genericbush,
/obj/structure/flora/ausbushes/ppflowers,
-/obj/structure/flora/ausbushes/sunnybush,
/obj/structure/window/reinforced{
dir = 4
},
@@ -84694,20 +82074,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/security/brig)
-"cHC" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"cHD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -84833,16 +82199,6 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
"cHS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/effect/landmark/event_spawn,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -84895,9 +82251,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/disposalpipe/segment{
dir = 6
},
@@ -84922,15 +82275,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/aft)
-"cIe" = (
-/obj/machinery/door/airlock/research{
- glass = 1;
- name = "Slime Euthanization Chamber";
- opacity = 0;
- req_access_txt = "55"
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
"cIf" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
dir = 4
@@ -85091,16 +82435,6 @@
/turf/open/floor/plasteel/dark,
/area/storage/tcom)
"cIw" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 6
},
@@ -85259,9 +82593,6 @@
dir = 1
},
/obj/machinery/light,
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-21"
- },
/obj/structure/sign/warning/electricshock{
pixel_y = -32
},
@@ -85681,16 +83012,6 @@
/turf/open/floor/plasteel/dark,
/area/engine/break_room)
"cKa" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -85709,16 +83030,6 @@
/turf/open/floor/plasteel,
/area/engine/break_room)
"cKb" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1,
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -86540,7 +83851,6 @@
/turf/open/floor/plating,
/area/maintenance/department/electrical)
"cMG" = (
-/obj/structure/girder,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating{
@@ -87036,15 +84346,6 @@
/area/science/mixing/chamber)
"cOW" = (
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/bridge)
@@ -87066,12 +84367,6 @@
/turf/open/floor/plasteel/dark,
/area/security/prison)
"cPb" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/bridge)
@@ -87264,9 +84559,6 @@
icon_state = "wood-broken"
},
/area/security/vacantoffice)
-"dis" = (
-/turf/closed/wall/r_wall/rust,
-/area/bridge)
"dlg" = (
/obj/machinery/light,
/turf/open/floor/wood,
@@ -87333,16 +84625,6 @@
/obj/item/twohanded/required/kirbyplants/dead,
/turf/open/floor/wood,
/area/security/vacantoffice)
-"elZ" = (
-/obj/machinery/status_display/evac,
-/turf/closed/wall/rust,
-/area/crew_quarters/bar)
-"emD" = (
-/turf/closed/wall/rust,
-/area/quartermaster/miningoffice)
-"erN" = (
-/turf/closed/wall/rust,
-/area/hallway/primary/starboard)
"esR" = (
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/wood{
@@ -87350,10 +84632,6 @@
},
/area/maintenance/port/fore)
"evx" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/engine{
initial_gas_mix = "n2=100;TEMP=80";
name = "mainframe floor"
@@ -87376,9 +84654,6 @@
/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
-"ezp" = (
-/turf/closed/wall/rust,
-/area/hydroponics)
"eBN" = (
/obj/structure/window/reinforced{
dir = 8
@@ -87419,9 +84694,6 @@
/obj/machinery/status_display/evac,
/turf/closed/wall/rust,
/area/security/prison)
-"eVT" = (
-/turf/closed/wall/rust,
-/area/science/explab)
"fcv" = (
/obj/structure/sign/warning/fire{
pixel_x = 32
@@ -87441,9 +84713,6 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
-"fAH" = (
-/turf/closed/wall/r_wall/rust,
-/area/security/main)
"fXq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -87535,9 +84804,6 @@
},
/turf/open/floor/wood,
/area/security/vacantoffice)
-"gMU" = (
-/turf/closed/wall/r_wall/rust,
-/area/ai_monitored/turret_protected/ai_upload)
"gPA" = (
/turf/open/floor/wood{
icon_state = "wood-broken3"
@@ -87549,21 +84815,9 @@
/obj/effect/decal/cleanable/generic,
/turf/open/floor/wood,
/area/maintenance/port/fore)
-"hqv" = (
-/turf/closed/wall/rust,
-/area/crew_quarters/kitchen)
-"hvb" = (
-/turf/closed/wall/r_wall/rust,
-/area/tcommsat/computer)
"hxn" = (
/turf/open/space/basic,
/area/hallway/secondary/entry)
-"hzY" = (
-/turf/closed/wall/rust,
-/area/gateway)
-"hAb" = (
-/turf/closed/wall/r_wall/rust,
-/area/security/courtroom)
"hDh" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/structure/closet/cardboard,
@@ -87574,16 +84828,6 @@
/turf/closed/wall/r_wall/rust,
/area/security/prison)
"ice" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -87595,26 +84839,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"ieA" = (
-/obj/effect/decal/cleanable/dirt,
-/mob/living/simple_animal/hostile/cat_butcherer,
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
- },
-/area/maintenance/fore)
-"iiA" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine{
- initial_gas_mix = "n2=100;TEMP=80";
- name = "mainframe floor"
- },
-/area/tcommsat/server)
"ikw" = (
/obj/machinery/camera{
c_tag = "Xenobiology Cell 4";
@@ -87627,13 +84851,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"ivg" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space)
-"iwR" = (
-/turf/closed/wall/r_wall/rust,
-/area/science/server)
"iBL" = (
/obj/machinery/camera{
c_tag = "Laser Room Starboard";
@@ -87670,9 +84887,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"iRL" = (
-/turf/closed/wall/rust,
-/area/hallway/primary/aft)
"iSg" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -87682,9 +84896,6 @@
/mob/living/simple_animal/hostile/retaliate/ghost,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
-"iYW" = (
-/turf/closed/wall/r_wall/rust,
-/area/crew_quarters/heads/captain)
"iZo" = (
/turf/closed/wall/r_wall/rust,
/area/medical/virology)
@@ -87738,9 +84949,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"jxc" = (
-/turf/closed/wall/rust,
-/area/hallway/primary/fore)
"jAT" = (
/obj/structure/lattice/catwalk,
/obj/machinery/light,
@@ -87748,21 +84956,6 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/hallway/secondary/entry)
-"jCp" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine{
- initial_gas_mix = "n2=100;TEMP=80";
- name = "mainframe floor"
- },
-/area/tcommsat/server)
-"jDv" = (
-/turf/closed/wall/rust,
-/area/quartermaster/storage)
"jHJ" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
@@ -87906,15 +85099,20 @@
/turf/closed/wall/rust,
/area/hallway/secondary/exit/departure_lounge)
"ktv" = (
-/obj/machinery/air_sensor{
- pixel_x = -32;
- pixel_y = -32
+/obj/machinery/power/compressor{
+ comp_id = "incineratorturbine";
+ dir = 1;
+ luminosity = 2
},
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
+/obj/structure/cable,
+/obj/machinery/camera{
+ c_tag = "Turbine Chamber";
+ dir = 4;
+ name = "turbine camera";
+ network = list("turbine")
},
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
@@ -87934,6 +85132,21 @@
icon_state = "wood-broken7"
},
/area/maintenance/port/fore)
+"kRh" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/nanite_chamber,
+/turf/open/floor/plasteel/dark,
+/area/science/research)
"kSc" = (
/obj/structure/sign/nanotrasen,
/turf/closed/wall,
@@ -87951,7 +85164,7 @@
/area/maintenance/port/fore)
"llm" = (
/obj/structure/sign/poster/ripped,
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/crew_quarters/fitness/recreation)
"lKu" = (
/obj/structure/table/wood,
@@ -87961,12 +85174,9 @@
icon_state = "wood-broken4"
},
/area/maintenance/port/fore)
-"lSJ" = (
-/turf/open/floor/engine/vacuum,
-/area/maintenance/disposal/incinerator)
"lVk" = (
/obj/machinery/status_display/evac,
-/turf/closed/wall/rust,
+/turf/closed/wall,
/area/security/warden)
"mbs" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
@@ -87986,16 +85196,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
"mIt" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/structure/disposalpipe/segment,
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=SE CPH";
@@ -88038,13 +85238,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
-"mPm" = (
-/turf/closed/wall/rust,
-/area/security/checkpoint/supply)
-"nDw" = (
-/obj/machinery/status_display/evac,
-/turf/closed/wall/rust,
-/area/crew_quarters/heads/hor)
"nJw" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -88057,15 +85250,6 @@
"nNA" = (
/turf/closed/wall/rust,
/area/bridge)
-"nNV" = (
-/turf/closed/wall/rust,
-/area/science/lab)
-"nSz" = (
-/turf/closed/wall/rust,
-/area/medical/cryo)
-"nVt" = (
-/turf/closed/wall/rust,
-/area/storage/tech)
"nXu" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -88134,9 +85318,6 @@
icon_state = "wood-broken4"
},
/area/maintenance/port/fore)
-"pQf" = (
-/turf/closed/wall/r_wall/rust,
-/area/science/xenobiology)
"qfZ" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -88150,23 +85331,7 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
-"qtv" = (
-/turf/closed/wall/r_wall/rust,
-/area/tcommsat/server)
-"qtS" = (
-/turf/closed/wall/rust,
-/area/medical/genetics/cloning)
"qvS" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=W CPH";
dir = 8;
@@ -88246,6 +85411,14 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/hallway/secondary/entry)
+"sfp" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/nanite_programmer,
+/turf/open/floor/plasteel/dark,
+/area/science/research)
"swG" = (
/obj/item/reagent_containers/food/drinks/drinkingglass{
pixel_x = 4;
@@ -88275,35 +85448,12 @@
/obj/structure/sign/warning,
/turf/closed/wall/rust,
/area/space/nearstation)
-"sPG" = (
-/turf/closed/wall/rust,
-/area/crew_quarters/heads/hor)
-"tgw" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall/rust,
-/area/security/prison)
-"tqw" = (
-/turf/closed/wall/rust,
-/area/lawoffice)
-"tyb" = (
-/turf/closed/wall/rust,
-/area/hallway/primary/central)
"tCi" = (
/obj/effect/decal/cleanable/glass,
/turf/open/floor/wood{
icon_state = "wood-broken3"
},
/area/maintenance/port/fore)
-"tEC" = (
-/turf/closed/wall/rust,
-/area/crew_quarters/bar)
-"tGU" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/rust,
-/area/gateway)
-"tYn" = (
-/turf/closed/wall/rust,
-/area/janitor)
"uda" = (
/turf/closed/wall/rust,
/area/security/warden)
@@ -88335,16 +85485,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
"unX" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=E CPH";
dir = 8;
@@ -88373,9 +85513,6 @@
"uRM" = (
/turf/open/floor/wood,
/area/security/vacantoffice)
-"uWo" = (
-/turf/closed/wall/rust,
-/area/security/checkpoint/medical)
"vle" = (
/obj/structure/festivus,
/turf/open/floor/wood,
@@ -88389,9 +85526,6 @@
/obj/item/instrument/guitar,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
-"whw" = (
-/turf/closed/wall/rust,
-/area/medical/surgery)
"whZ" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -88409,24 +85543,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/wood,
/area/security/vacantoffice)
-"wmX" = (
-/turf/closed/wall/rust,
-/area/quartermaster/qm)
-"wvq" = (
-/turf/closed/wall/rust,
-/area/security/courtroom)
-"wCy" = (
-/turf/closed/wall/rust,
-/area/hallway/primary/port)
-"wDP" = (
-/turf/closed/wall/rust,
-/area/crew_quarters/fitness/recreation)
-"wQL" = (
-/turf/closed/wall/rust,
-/area/security/execution/education)
-"xei" = (
-/turf/closed/wall/r_wall/rust,
-/area/teleporter)
"xqv" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/drinkingglass{
@@ -88436,9 +85552,6 @@
/obj/item/reagent_containers/food/drinks/drinkingglass,
/turf/open/floor/wood,
/area/maintenance/port/fore)
-"xqL" = (
-/turf/closed/wall/rust,
-/area/quartermaster/office)
"xse" = (
/obj/machinery/cryopod,
/obj/effect/decal/cleanable/dirt,
@@ -88447,10 +85560,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/prison)
-"xBI" = (
-/obj/machinery/status_display/evac,
-/turf/closed/wall/rust,
-/area/chapel/office)
"xJY" = (
/obj/structure/rack,
/obj/item/storage/backpack,
@@ -98953,7 +96062,7 @@ bmU
ruL
ruL
ruL
-hNk
+aav
aeu
aeu
aap
@@ -99206,11 +96315,11 @@ cqG
cov
cpx
bLM
-hNk
+aav
mmZ
ewj
qfZ
-hNk
+aav
aeu
aeu
aeU
@@ -99463,11 +96572,11 @@ cIA
coD
cqt
aeu
-hNk
+aav
xse
nXu
qPY
-hNk
+aav
aeu
aeu
aUz
@@ -99718,14 +96827,14 @@ cqI
cqP
afm
bVx
-hNk
-hNk
-hNk
+aav
+aav
+aav
cxV
ydo
eBN
-tgw
-hNk
+asO
+aav
aeu
aeu
aeu
@@ -99975,7 +97084,7 @@ bGl
bGV
bIi
cpv
-hNk
+aav
awn
bTz
czR
@@ -99983,7 +97092,7 @@ cFN
cIm
cJC
aav
-hNk
+aav
aeu
aeu
aeU
@@ -100240,7 +97349,7 @@ bNi
bPa
caX
cJG
-hNk
+aav
aeu
aeU
aUz
@@ -100746,7 +97855,7 @@ ajd
cof
ajd
ajd
-hNk
+aav
btd
bVV
bMe
@@ -100754,7 +97863,7 @@ bNH
bTu
ciF
cIQ
-hNk
+aav
aeu
aUz
aeU
@@ -101003,7 +98112,7 @@ ajd
bHc
bIo
ajd
-hNk
+aav
bLN
bMQ
bPk
@@ -101011,7 +98120,7 @@ bRa
bSR
bTF
bVm
-hNk
+aav
aeu
aeu
coy
@@ -101773,7 +98882,7 @@ ajd
ajd
ajd
ajd
-hNk
+aav
bKv
bLX
eQS
@@ -102031,7 +99140,7 @@ ajd
aeu
aeu
aav
-hNk
+aav
bJB
abp
abp
@@ -102545,7 +99654,7 @@ coA
bHj
adf
aeu
-hNk
+aav
bJF
bJN
cuS
@@ -102802,7 +99911,7 @@ coA
bHo
aeE
agK
-hNk
+aav
bLj
bYc
cDG
@@ -102810,7 +99919,7 @@ aaG
aez
cIj
aeB
-wQL
+cZm
aez
aez
cko
@@ -105381,13 +102490,13 @@ bSW
bUd
bVO
aey
-fAH
-fAH
+aey
+aey
aey
aey
byu
aey
-fAH
+aey
aey
aey
clr
@@ -105611,7 +102720,7 @@ amA
amR
amA
cFW
-wDP
+awD
bKD
bLg
bLm
@@ -105901,7 +103010,7 @@ ahZ
aiL
aiL
aiL
-cDB
+bqs
ajS
bOO
bBG
@@ -106392,7 +103501,7 @@ bxE
byS
bGI
bMg
-wDP
+awD
bDt
bDV
bFn
@@ -106639,7 +103748,7 @@ csG
bid
bjx
csQ
-wDP
+awD
bKn
bLc
bMi
@@ -106649,7 +103758,7 @@ bLT
bEK
bGT
bMx
-wDP
+awD
afz
adZ
ajd
@@ -106664,7 +103773,7 @@ aej
aeY
afn
aeY
-aeY
+bqm
ahg
bXO
bYO
@@ -106867,7 +103976,7 @@ apF
aqP
asb
aNG
-aOa
+aOb
akd
aOC
aOm
@@ -106896,8 +104005,8 @@ aqu
bif
bjz
csR
-wDP
-wDP
+awD
+awD
bLo
bLp
btz
@@ -107133,7 +104242,7 @@ abo
agk
agI
agL
-abl
+afX
ahc
aPx
aPx
@@ -107371,7 +104480,7 @@ aeu
cwp
cwq
cyL
-aiV
+alw
cyY
adv
alw
@@ -107628,10 +104737,10 @@ aeu
cwp
abu
cyM
-aiW
+cyY
cyZ
czl
-alA
+cyY
czp
bgN
cwp
@@ -107915,8 +105024,8 @@ aQJ
aTc
aUL
aWr
-uWo
-whw
+aQI
+aQN
bxr
aQN
aQN
@@ -108142,10 +105251,10 @@ cwq
cyE
ahL
cyO
-ajh
-ajs
+cyY
+alw
akI
-alH
+cyY
czr
ans
czK
@@ -108172,7 +105281,7 @@ aQI
aQJ
aQf
aQJ
-uWo
+aQI
baB
bcS
bek
@@ -108185,7 +105294,7 @@ aUJ
aUJ
afe
brD
-bLn
+brD
bvO
bKF
bza
@@ -108419,8 +105528,8 @@ aCL
aPh
aGp
aNW
-aJv
-aQk
+aJC
+agF
aSE
aQy
aWt
@@ -108455,7 +105564,7 @@ cBT
aef
aef
lVk
-uda
+aef
aef
ani
anm
@@ -108703,11 +105812,11 @@ btD
bvP
bxQ
bzg
-bLu
-bLu
bIV
bIV
-csS
+bIV
+bIV
+bIV
bFp
aah
bHz
@@ -108932,7 +106041,7 @@ aBq
aCP
aEo
aGt
-nSz
+aNQ
aJB
aQo
aTO
@@ -108955,17 +106064,17 @@ aoV
bxV
aoV
afe
-bLu
+bIV
bFb
akv
bzZ
bKL
-bLu
+bIV
bJQ
-bKc
+bLu
bKk
-cBv
-bFp
+aXE
+aYZ
aah
bHA
aaA
@@ -108980,7 +106089,7 @@ cqg
ajw
agV
bXT
-bYS
+bYQ
bYm
ama
aiQ
@@ -109188,8 +106297,8 @@ aNH
aVH
aNO
aso
-qtS
-qtS
+aNL
+aNL
aQd
aQC
aNn
@@ -109220,11 +106329,11 @@ bzh
aoL
bJU
bUa
-bKk
-csS
+aJv
+aXE
cCa
-uda
-uda
+aef
+aef
bJC
aef
aef
@@ -109235,7 +106344,7 @@ bWr
coN
cqh
bVW
-uda
+aef
ayi
aJr
ayi
@@ -109477,8 +106586,8 @@ bzi
bIV
bIV
bIV
-bLu
-cBI
+bIV
+bIV
bFp
aah
bHC
@@ -109735,8 +106844,8 @@ bIV
bJS
bKd
cBW
-cBv
-bFp
+aYR
+aYZ
aah
bHA
aff
@@ -109990,14 +107099,14 @@ bAL
bzh
apV
bJZ
-bKe
-cBW
-cBy
+bUa
+bLu
+aYR
cCb
-uda
+aef
aef
lVk
-uda
+aef
uda
bXr
bNq
@@ -110245,11 +107354,11 @@ bGA
bJp
bAQ
bIV
-bLu
+bIV
bIV
bKf
bIV
-csN
+bIV
bFq
aah
bHD
@@ -110506,7 +107615,7 @@ arf
bKb
bKg
bLu
-cBw
+bIV
bFq
aah
bHu
@@ -110762,8 +107871,8 @@ bzp
bIV
bJY
bKh
+aWS
bIV
-afz
ayy
agX
agX
@@ -111017,10 +108126,10 @@ bKC
bAy
bzu
bIV
-bLu
bIV
bIV
-bEa
+bIV
+ajd
bFr
bBI
bHH
@@ -111227,7 +108336,7 @@ aeu
aWG
aWG
aWG
-bsm
+aWG
aWG
aWG
cAN
@@ -111260,8 +108369,8 @@ aSg
aAc
aSg
bAN
-aPf
-aPf
+bAN
+bAN
bAN
bAN
bAN
@@ -111481,7 +108590,7 @@ aaa
aeu
aeu
aeu
-bsm
+aWG
acE
cgY
cAi
@@ -111764,7 +108873,7 @@ aJQ
aLn
aMN
aOD
-aiU
+bdf
aYx
aSe
aYx
@@ -111784,7 +108893,7 @@ boU
bfS
bss
btV
-bZH
+aEu
bxW
bzx
bKq
@@ -111995,7 +109104,7 @@ aeu
aeu
aeu
aeu
-bsm
+aWG
aWG
czG
cAk
@@ -112020,7 +109129,7 @@ aMX
aJR
aOP
aAO
-anY
+aNy
aHq
aYM
aST
@@ -112037,7 +109146,7 @@ bmJ
bmJ
bqp
bri
-bmJ
+auK
bfX
bst
bvQ
@@ -112253,8 +109362,8 @@ aeu
aeu
aeu
aeu
-bsm
-bsm
+aWG
+aWG
aWG
aWG
aWG
@@ -112265,7 +109374,7 @@ bsZ
aWG
aWG
avY
-bsm
+aWG
beG
bwC
bxe
@@ -112275,7 +109384,7 @@ bwY
aGM
bxJ
ahF
-aOS
+aPk
aBN
aOF
bdU
@@ -112321,7 +109430,7 @@ arq
bEo
bEF
bGX
-bBf
+bYZ
aKC
all
alX
@@ -112522,7 +109631,7 @@ bta
btC
atL
avK
-xBI
+btg
aob
azS
aAu
@@ -112532,7 +109641,7 @@ bwZ
bxF
bxJ
ahF
-aOS
+aPk
aJi
aOG
btE
@@ -112542,7 +109651,7 @@ btE
aPK
aLU
btE
-cJc
+buC
buC
aRF
aSP
@@ -112575,14 +109684,14 @@ ajd
bRP
bBr
cdj
-bBf
+bYZ
bEG
-bBf
-bBf
+bYZ
+bYZ
bVa
-cHC
+bUZ
cHS
-cHC
+bUZ
aKN
cfp
baF
@@ -112768,7 +109877,7 @@ aeu
aeu
aeu
adH
-ajj
+alc
ajz
adQ
cAF
@@ -112779,7 +109888,7 @@ aWG
aWG
bvT
avL
-bsm
+aWG
btA
cBh
btA
@@ -112789,12 +109898,12 @@ bxu
bwP
btA
bsx
-aOS
+aPk
aaJ
-tEC
-tEC
+btE
+btE
bvi
-bub
+aTe
buu
bvf
aTe
@@ -112805,14 +109914,14 @@ bvn
bfv
bvU
bvu
-cJc
+buC
blx
bnx
boY
buC
bsy
aoh
-tqw
+aoh
bCn
aoh
aoA
@@ -112822,8 +109931,8 @@ cbC
cbH
cbM
cbP
-aer
-aer
+ajd
+ajd
czw
bWQ
czU
@@ -112835,7 +109944,7 @@ cCh
cCh
cCo
bGY
-bHv
+bYw
bVc
cbc
cch
@@ -113048,7 +110157,7 @@ btA
ahF
aOT
cfa
-tEC
+btE
aTB
btT
buc
@@ -113080,7 +110189,7 @@ aYM
aYM
cbM
cbw
-aer
+ajd
ajd
ajd
czW
@@ -113092,7 +110201,7 @@ bBk
aaY
aaY
bGZ
-bBf
+bYZ
bVd
bHU
aMA
@@ -113299,15 +110408,15 @@ azW
bwR
bye
bxi
-aEu
+aEx
bxH
bxJ
ahF
-aOS
+aPk
cfa
btF
aqg
-btU
+aqg
buy
buJ
bvq
@@ -113323,7 +110432,7 @@ bjH
blB
bAS
buC
-cJc
+buC
bps
aoh
aok
@@ -113337,7 +110446,7 @@ cbI
cbN
aYM
cbR
-cbJ
+cbw
ajd
bKA
bBG
@@ -113349,7 +110458,7 @@ aci
bWc
aaY
bHk
-bBf
+bYZ
bVd
bXV
ccj
@@ -113846,9 +110955,9 @@ aoS
aoX
adc
aoh
-wCy
-wCy
-wCy
+boC
+boC
+boC
bvJ
bwc
bBj
@@ -113863,7 +110972,7 @@ ack
bWe
bBk
bHk
-bBf
+bYZ
cFA
axF
axF
@@ -114056,7 +111165,7 @@ adQ
cAr
cAy
cAC
-adQ
+adH
bsf
cCI
cBc
@@ -114067,14 +111176,14 @@ cBc
btA
bwK
btB
-bwU
+btB
bxD
-aAD
+btB
aEx
bxJ
aIl
ahF
-aOS
+aPk
cfa
btF
aRM
@@ -114105,7 +111214,7 @@ asF
asF
aos
bEd
-wvq
+asF
bGq
bOP
bIt
@@ -114120,7 +111229,7 @@ acl
bCd
bBk
bHk
-bBf
+bYZ
cHk
bFa
bGf
@@ -114317,7 +111426,7 @@ adH
anb
anU
apG
-adQ
+adH
aoc
atO
awh
@@ -114352,7 +111461,7 @@ bpH
bsh
buC
boW
-wvq
+asF
adu
bwk
byi
@@ -114588,7 +111697,7 @@ aEC
bxJ
aIo
ahF
-aOS
+aPk
cfa
btE
aXm
@@ -114602,14 +111711,14 @@ btE
btE
bey
btE
-tEC
-cJc
-cJc
+btE
+buC
+buC
buC
buC
buC
bpn
-wvq
+asF
aow
arB
atc
@@ -114634,7 +111743,7 @@ bws
aaY
aaY
bHk
-bBf
+bYZ
cac
bFa
cnz
@@ -114845,7 +111954,7 @@ btA
btA
ago
aaZ
-aOS
+aPk
cfa
btH
aXp
@@ -114853,7 +111962,7 @@ btY
bvk
bvE
bvH
-aWS
+aTe
buA
bbk
bcW
@@ -114866,7 +111975,7 @@ bqr
brs
bsk
btO
-wvq
+asF
asY
ask
aaV
@@ -114891,7 +112000,7 @@ bUz
bWg
axF
bYn
-bBf
+bYZ
cae
bVo
cck
@@ -115090,7 +112199,7 @@ cCM
cCR
bsf
ajv
-adQ
+adH
cDc
cCU
cDh
@@ -115102,7 +112211,7 @@ aaI
aGN
cDq
aJS
-aOS
+aPk
cfa
btI
aXr
@@ -115121,14 +112230,14 @@ aLD
bpn
asF
asF
-wvq
+asF
asF
asF
asF
asu
auI
atf
-auK
+byi
avW
ccR
apa
@@ -115320,7 +112429,7 @@ aeu
ceF
ceF
ceF
-ceG
+ceF
ceF
ceF
ceF
@@ -115341,10 +112450,10 @@ aeU
aUz
aeu
adH
-adQ
adH
adH
-adQ
+adH
+adH
adH
cCU
cDy
@@ -115361,7 +112470,7 @@ ago
aBO
aNq
aRY
-elZ
+btK
btE
buf
aSh
@@ -115395,8 +112504,8 @@ auP
bQx
bOP
bRh
-tyb
-iRL
+bOU
+axF
cag
cbh
bRX
@@ -115435,7 +112544,6 @@ aFH
aFN
cwz
aaa
-acm
aaa
aaa
acm
@@ -115495,6 +112603,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(106,1,1) = {"
aaa
@@ -115567,20 +112676,20 @@ aeu
aeu
asZ
asZ
-aAg
asZ
asZ
-aAg
-aAg
asZ
asZ
-ceG
+asZ
+asZ
+asZ
+ceF
ceF
akN
aac
adr
adA
-ceG
+ceF
ceF
ceF
ceF
@@ -115616,7 +112725,7 @@ cdD
cdD
ago
aJT
-aOS
+aPk
aMU
aOI
btE
@@ -115624,8 +112733,8 @@ btE
btE
aOy
btE
-tEC
-tEC
+btE
+btE
bbr
aTe
aTe
@@ -115693,7 +112802,6 @@ aIL
aFI
aFW
aFI
-aFI
cko
cko
aaa
@@ -115752,6 +112860,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(107,1,1) = {"
aaa
@@ -115821,16 +112930,16 @@ aUz
aeu
aeu
aeu
-aAg
-asZ
-asZ
-asZ
-aAg
asZ
asZ
asZ
asZ
-aAg
+asZ
+asZ
+asZ
+asZ
+asZ
+asZ
ceF
axB
acn
@@ -115882,7 +112991,7 @@ aPQ
aTu
bpq
aXa
-tEC
+btE
btE
aTL
aOy
@@ -115919,7 +113028,7 @@ bCe
bVg
bCe
bHl
-bBf
+bYZ
cHj
bFa
bFS
@@ -115949,7 +113058,6 @@ aFO
cwc
aFO
cwA
-lSJ
aFI
aFI
aFI
@@ -116009,6 +113117,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(108,1,1) = {"
aaa
@@ -116079,14 +113188,14 @@ aeu
aeu
asZ
asZ
-aAg
-aAg
+asZ
+asZ
asZ
asZ
cef
asZ
asZ
-aAg
+asZ
asZ
ceF
acJ
@@ -116157,7 +113266,7 @@ asF
asF
arn
arn
-hAb
+arn
arn
aur
arn
@@ -116169,14 +113278,14 @@ bOP
bJy
aCq
cbA
-bBf
+bYZ
byv
-bBE
-bBf
-bBf
-bBf
-bBf
-bBf
+bcD
+bYZ
+bYZ
+bYZ
+bYZ
+bYZ
cHk
bFa
bFa
@@ -116209,7 +113318,7 @@ aFY
ktv
aNi
aGb
-aGc
+aaa
aaa
aaa
aaa
@@ -116387,14 +113496,14 @@ aEH
ceZ
aIs
aiA
-aOS
+aPk
cgq
aXu
aox
aMi
aMc
aTz
-apX
+aox
arA
akM
aox
@@ -116463,7 +113572,6 @@ aFU
cwd
jHJ
cwH
-cwH
aFI
aFI
aFI
@@ -116523,6 +113631,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(110,1,1) = {"
aaa
@@ -116591,7 +113700,7 @@ aeu
aeu
aeu
asZ
-aAg
+asZ
asZ
aam
aaF
@@ -116602,7 +113711,7 @@ ceD
cel
abR
atB
-adT
+chX
aHw
ace
acM
@@ -116721,7 +113830,6 @@ aJl
aFI
aFI
aFI
-aFI
cko
cko
aaa
@@ -116780,6 +113888,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(111,1,1) = {"
aaa
@@ -116847,7 +113956,7 @@ aaa
aeU
ciQ
aeu
-aAg
+asZ
asZ
aak
aan
@@ -116863,7 +113972,7 @@ adg
ace
acp
acW
-alV
+adg
adG
adR
adU
@@ -116902,7 +114011,7 @@ ago
aIz
ajW
ajJ
-aOS
+aPk
fXq
aIV
aox
@@ -116920,13 +114029,13 @@ cBV
aox
atT
atT
-dis
-dis
-dis
-dis
+atT
+atT
+atT
+atT
ajK
atT
-dis
+atT
atj
apN
awj
@@ -117190,7 +114299,7 @@ asA
apf
atr
auG
-arD
+ark
bsP
bQx
bOF
@@ -117362,7 +114471,7 @@ aeU
anH
aeu
asZ
-aAg
+asZ
aal
aaw
aaU
@@ -117417,7 +114526,7 @@ aIB
aba
cgw
aRk
-apY
+aNy
oPf
aLV
aHz
@@ -117426,8 +114535,8 @@ arl
arl
byV
bzc
-gMU
-gMU
+arl
+arl
bfJ
abk
aqb
@@ -117436,8 +114545,8 @@ atT
aqz
aoW
bqe
-aqQ
-aqQ
+bsE
+bsE
avQ
byn
bzI
@@ -117630,7 +114739,7 @@ cdH
ceB
abZ
atB
-adT
+chX
aZh
acz
ada
@@ -117663,15 +114772,15 @@ ciZ
ahh
ahh
ahh
-qtv
-qtv
-qtv
-qtv
-qtv
+ahh
+ahh
+ahh
+ahh
+ahh
+cfM
+cfM
cfM
cfM
-hvb
-hvb
cfM
aRl
bVL
@@ -117709,7 +114818,7 @@ atG
bQx
bOF
bYW
-nVt
+bCM
bDp
bQn
bSf
@@ -117877,7 +114986,7 @@ aeu
aeu
aeu
asZ
-aAg
+asZ
apn
ceE
cfJ
@@ -117887,10 +114996,10 @@ abC
abL
aca
asZ
-alV
+adg
azv
chB
-chV
+azv
adg
ciN
ciM
@@ -117917,7 +115026,7 @@ aoM
adH
adH
ahh
-qtv
+ahh
awo
cdn
cdJ
@@ -117933,7 +115042,7 @@ cfM
aRm
cci
aKP
-gMU
+arl
arl
arl
byN
@@ -117959,7 +115068,7 @@ atj
atj
bHI
atj
-nNA
+atj
atT
atT
atT
@@ -118133,15 +115242,15 @@ aeu
aeu
aeu
aeu
-aAg
asZ
asZ
asZ
-aAg
+asZ
+asZ
asZ
ceo
asZ
-aAg
+asZ
asZ
asZ
cfY
@@ -118192,10 +115301,10 @@ cdg
aQh
bwp
ciX
-gMU
+arl
byq
aXz
-aYZ
+aZc
bbU
bzm
bzc
@@ -118392,14 +115501,14 @@ aeu
aeu
aeu
asZ
-aAg
-aAg
asZ
asZ
-aAg
asZ
asZ
-aAg
+asZ
+asZ
+asZ
+asZ
asZ
cfY
acj
@@ -118408,7 +115517,7 @@ adm
adz
adN
ciB
-cga
+cfY
acm
aeo
aaa
@@ -118650,15 +115759,15 @@ aeu
aeu
aeu
asZ
-aAg
-aAg
asZ
asZ
-aAg
asZ
-aAg
asZ
-cga
+asZ
+asZ
+asZ
+asZ
+cfY
cfY
cde
chG
@@ -118687,7 +115796,7 @@ adH
adQ
abX
cBc
-qtv
+ahh
cew
awI
cdq
@@ -118916,11 +116025,11 @@ aeu
aeu
aeu
cfY
-cga
cfY
cfY
cfY
-cga
+cfY
+cfY
cfY
acm
acm
@@ -118937,21 +116046,21 @@ aeu
adQ
cCr
cED
-ieA
+anJ
ale
alT
cEW
aoZ
cFg
agC
-qtv
+ahh
atU
-jCp
+awJ
awJ
awJ
aAj
cff
-iiA
+awJ
cfE
cfR
cge
@@ -118963,7 +116072,7 @@ chm
aLg
arl
arl
-gMU
+arl
bAw
aXH
aZl
@@ -118977,8 +116086,8 @@ awg
blT
bnI
bpe
-bqm
-bsF
+bsE
+bsE
bur
atj
aHU
@@ -118986,9 +116095,9 @@ auc
atj
atj
aug
-nNA
-nNA
-nNA
+atj
+atj
+atj
atT
atT
bIz
@@ -119220,7 +116329,7 @@ atF
aLk
aLV
aLW
-gMU
+arl
arl
byM
aZn
@@ -119234,10 +116343,10 @@ aqh
aqk
att
aqG
-bqs
+bsE
arY
auM
-arX
+bsE
byt
afT
atj
@@ -119249,7 +116358,7 @@ arw
avF
aus
bIJ
-bOY
+aZg
bKZ
bmP
bNZ
@@ -119460,7 +116569,7 @@ cFh
cFj
ahh
ahh
-awM
+evx
cdC
ceJ
aAl
@@ -119493,7 +116602,7 @@ atD
aqG
bqt
cOW
-cOW
+cPb
cPb
byw
ard
@@ -119719,13 +116828,13 @@ cAF
ahh
ahh
ahh
-qtv
ahh
-qtv
-qtv
+ahh
+ahh
+ahh
ahh
cfM
-hvb
+cfM
cfM
cfM
cgz
@@ -119983,13 +117092,13 @@ cvM
awE
aEN
aGQ
-hzY
-jxc
+aUa
+ago
avw
aRB
aJi
aLE
-apX
+aox
aOk
aox
aox
@@ -120252,8 +117361,8 @@ akw
aox
aox
aox
-apX
-apX
+aox
+aox
aox
aox
aox
@@ -120277,7 +117386,7 @@ bqf
cjy
aus
bIJ
-bOY
+aZg
bLi
bmc
bmc
@@ -120497,7 +117606,7 @@ cvO
cvU
aEQ
aGS
-tGU
+cvW
aJY
awr
aRX
@@ -120530,8 +117639,8 @@ aui
aui
avb
aui
-xei
-xei
+aui
+aui
aui
bCH
bQd
@@ -120759,10 +117868,10 @@ aKi
cIw
cKd
aox
-aox
+aGh
aRc
-bzN
-akM
+aGh
+aGh
ajt
ajt
aZq
@@ -120770,7 +117879,7 @@ aZq
ajt
ajt
aQO
-apX
+aox
cCk
bka
blW
@@ -120795,11 +117904,11 @@ bOF
bJy
aCq
cbA
-bBf
-bBf
-bBf
+bYZ
+bYZ
+bYZ
bBE
-bBf
+bYZ
bEN
ane
aBS
@@ -120999,7 +118108,7 @@ cIX
khA
cDT
iSg
-cEl
+cEb
cJD
atV
cEg
@@ -121013,13 +118122,13 @@ aES
aHv
aUa
aKl
-aPz
+ajj
aNl
aGh
-aGh
+alV
aZf
-aGh
-aGh
+apY
+aqQ
ajt
aBc
bmH
@@ -121028,10 +118137,10 @@ bcZ
ajt
bgf
aox
-apX
aox
aox
-cdY
+aox
+cdZ
cdZ
ahy
asx
@@ -121273,9 +118382,9 @@ aHq
aNq
aZO
aGh
-aQm
+bqU
aRi
-aSn
+bqU
bqU
ajt
aXV
@@ -121291,7 +118400,7 @@ blZ
bpq
bpg
aYO
-iYW
+asx
bwb
arz
bDc
@@ -121313,7 +118422,7 @@ bQy
bBn
axF
bCr
-bBf
+bYZ
cpW
bYu
aCc
@@ -121541,7 +118650,7 @@ bqc
bdo
bqz
bgo
-apX
+aox
bqb
cba
aIN
@@ -121552,10 +118661,10 @@ asx
bwd
bzA
bLe
-auT
+aGc
auT
arF
-iYW
+asx
bAb
bQR
aYO
@@ -121812,7 +118921,7 @@ byE
bzP
arV
brU
-iYW
+asx
bAp
bQS
aox
@@ -121827,7 +118936,7 @@ bBR
bCl
bCA
bCr
-bBf
+bYZ
csC
bYw
aIb
@@ -122056,9 +119165,9 @@ bdy
ajt
ajt
blc
-hqv
-ezp
-ezp
+ajt
+aZd
+aZd
aZd
auj
aZd
@@ -122066,10 +119175,10 @@ asx
asx
asx
asx
-iYW
-iYW
asx
-iYW
+asx
+asx
+asx
bMu
bRr
aox
@@ -122310,7 +119419,7 @@ ajt
boI
ajt
bqy
-hqv
+ajt
bgr
bhd
biJ
@@ -122318,9 +119427,9 @@ bjn
bmE
bns
bpk
-bnD
-bnS
-boc
+brN
+brN
+brN
bwG
bso
bpi
@@ -122831,11 +119940,11 @@ boV
bjn
bmG
bnK
-bny
+brN
bqH
-bny
+brN
buB
-bny
+brN
bzt
bAs
bBQ
@@ -122855,7 +119964,7 @@ bQC
bCx
awq
bUY
-bBf
+bYZ
cud
cyb
btG
@@ -123088,11 +120197,11 @@ bqP
bmF
bcX
bnN
-bny
+brN
bqH
-bny
+brN
buB
-bny
+brN
bzC
boS
bCF
@@ -123105,7 +120214,7 @@ bZM
bhY
bIT
bQI
-bLr
+bMt
bMt
bMt
bMt
@@ -123345,9 +120454,9 @@ bpb
bjn
bme
bnK
-bny
+brN
bqH
-bny
+brN
buB
bwM
byG
@@ -123355,7 +120464,7 @@ bof
bFJ
bFX
bqQ
-ezp
+aZd
aZd
bBU
bXv
@@ -123602,7 +120711,7 @@ bhd
bol
bmg
bnO
-bny
+brN
bqI
bsR
buD
@@ -123611,8 +120720,8 @@ bAl
bAu
bFV
bGk
-ezp
-ezp
+aZd
+aZd
bGh
bZI
bhY
@@ -123850,7 +120959,7 @@ bsb
brq
brF
brG
-hqv
+ajt
boQ
boH
bqo
@@ -124107,7 +121216,7 @@ brr
aVd
brJ
brI
-hqv
+ajt
ajt
bmA
bph
@@ -124126,7 +121235,7 @@ bob
bRc
bZy
bZp
-bZA
+bZD
bZD
bZJ
bZN
@@ -124328,14 +121437,14 @@ bfq
iMq
bbx
alB
-afX
-agF
+arx
+arx
+alB
+alB
+alB
alB
alB
alB
-pQf
-pQf
-pQf
alB
alB
alB
@@ -124585,7 +121694,7 @@ aWJ
ayv
aWJ
alB
-cIe
+bdp
bhl
alB
bfq
@@ -124629,8 +121738,8 @@ bAX
bnz
bBZ
bqS
-bGW
-bGW
+bZD
+aAD
bqX
brz
buO
@@ -124672,7 +121781,7 @@ clM
axW
cnk
coo
-axU
+ayn
aLH
aLx
aLz
@@ -124837,7 +121946,7 @@ aeu
aeu
aeu
aeu
-pQf
+alB
bfs
aWJ
bft
@@ -125093,8 +122202,8 @@ alB
alB
alB
alB
-pQf
-pQf
+alB
+alB
bfM
bfM
bfM
@@ -125132,10 +122241,10 @@ bdf
bpC
bkG
bbH
-bnM
-bpC
-bpC
-bpW
+bBc
+bBc
+bBc
+bBc
bgP
bBc
bBp
@@ -125149,7 +122258,7 @@ bqY
bvB
buR
bPx
-erN
+bnv
bjX
bkz
bOv
@@ -125192,7 +122301,7 @@ aLF
aag
aag
aag
-aLF
+bsm
cuA
cuW
bYI
@@ -125356,7 +122465,7 @@ aeV
bfl
bfV
aWR
-aWP
+adT
adx
aWR
bgC
@@ -125382,17 +122491,17 @@ aXP
bai
aZS
aZr
-ajL
-ajL
+cAX
+cAX
cAX
aJJ
aRs
aSB
aTP
-aYd
-aYK
-aYK
-aYd
+arD
+arX
+arX
+auz
bdO
beO
bpF
@@ -125406,14 +122515,14 @@ blf
blf
blg
blf
-mPm
+blf
blQ
bAC
bBL
bkQ
bjW
bAv
-bOC
+bEg
bGM
bHP
bJc
@@ -125623,7 +122732,7 @@ cqw
bgM
bgn
bVA
-pQf
+alB
ctJ
cxP
aWY
@@ -125633,7 +122742,7 @@ ayx
bdc
bdR
aAZ
-eVT
+aZv
aEE
aFp
aHJ
@@ -125647,12 +122756,12 @@ aYK
aZL
bch
aYd
-aZg
-aZj
+aYK
+aYK
aYd
bhe
cLt
-xqL
+bhI
bhX
bhs
biM
@@ -125909,7 +123018,7 @@ aZQ
aYd
bdP
beP
-xqL
+bhI
bhy
ats
bko
@@ -125972,10 +123081,10 @@ ckk
aEg
cnu
cnu
-cnd
+bOc
cnd
cnu
-cnd
+bOc
cnu
alm
aaa
@@ -126406,9 +123515,9 @@ bgk
aBd
aZv
aXw
-aXE
+kRh
aXI
-aYR
+sfp
beD
bbj
aNF
@@ -126430,7 +123539,7 @@ aKA
bjh
bjy
bpw
-mPm
+blf
bsV
buS
bxl
@@ -126484,13 +123593,13 @@ cmH
cvE
cmR
cwe
-cnd
+krJ
cwN
cqQ
csq
cnu
cuL
-cnd
+cnu
acm
aaa
aaa
@@ -126655,7 +123764,7 @@ alB
cOb
cps
cMW
-iwR
+aZF
aZF
ami
aZF
@@ -126687,7 +123796,7 @@ bkr
bmx
bod
bpx
-mPm
+blf
blg
bBo
blg
@@ -126706,7 +123815,7 @@ bNM
bOo
cgd
bNM
-tYn
+bNM
aVM
bNx
bWx
@@ -126736,7 +123845,7 @@ cms
cmE
cmQ
cju
-bOC
+bEg
cnV
cmh
bOb
@@ -126955,7 +124064,7 @@ bIm
bHR
bNg
bAF
-bOC
+bEg
bQe
bLZ
bkE
@@ -127004,7 +124113,7 @@ cwZ
cxi
cnu
cnu
-cnd
+cnu
alm
aaa
aaa
@@ -127149,7 +124258,7 @@ alB
alB
alB
alB
-pQf
+alB
alB
bfQ
bfQ
@@ -127169,7 +124278,7 @@ alB
cby
cMP
ajO
-iwR
+aZF
aXf
aeG
aik
@@ -127184,8 +124293,8 @@ beE
mIG
aNM
bgW
-nNV
-nNV
+aDI
+aDI
biB
aYg
aDI
@@ -127255,11 +124364,11 @@ bEg
cvG
cvL
cwm
-cnd
+bOc
cpb
crf
-cnd
-cnd
+cnu
+cnu
cko
aeu
aeu
@@ -127450,7 +124559,7 @@ bbb
bdz
cby
clA
-wmX
+aCb
bjJ
blJ
biV
@@ -127470,7 +124579,7 @@ bCc
bOw
bAT
bOC
-erN
+bnv
bHT
bJh
bJK
@@ -127694,7 +124803,7 @@ aZY
aJF
aWX
aVJ
-nDw
+anx
bbM
aNT
aPo
@@ -127707,7 +124816,7 @@ bbb
bdE
cbz
cLt
-wmX
+aCb
bhO
aqH
biI
@@ -127720,7 +124829,7 @@ bkA
bke
blr
bkY
-blC
+blD
bls
bPj
bmo
@@ -127737,7 +124846,7 @@ bTk
bXL
bXx
bPe
-bUt
+bWx
hDh
uRM
uRM
@@ -127934,7 +125043,7 @@ alB
alB
alB
alB
-pQf
+alB
alB
alB
cng
@@ -127951,7 +125060,7 @@ aGa
aKu
aMe
bfB
-sPG
+amV
bfr
bex
aTU
@@ -127994,9 +125103,9 @@ bOG
bQU
bUs
bTv
-krJ
-krJ
-krJ
+bOc
+bOc
+bOc
bOc
bWn
bWx
@@ -128227,7 +125336,7 @@ big
big
bom
aCb
-jDv
+bhQ
bpB
bkl
bli
@@ -128247,7 +125356,7 @@ bQo
bJM
bPe
bMF
-bRs
+aZj
bQV
bPe
bTw
@@ -128273,9 +125382,9 @@ bUN
cke
aeu
bzG
-cjC
-clg
-clP
+clR
+clR
+clR
ctU
bzG
aeu
@@ -128530,7 +125639,7 @@ jAT
aeu
aeu
bzG
-cjF
+clR
clE
clQ
ctW
@@ -128787,8 +125896,8 @@ bUN
aeu
aeu
bzG
-cjG
-clF
+clR
+clR
clR
ctX
bzG
@@ -128997,7 +126106,7 @@ bhH
bhW
bmN
boK
-emD
+bhH
bhH
bjV
bkh
@@ -129020,7 +126129,7 @@ bLE
bMN
bON
bQY
-bSQ
+bOc
bPe
bOc
bWz
@@ -129538,7 +126647,7 @@ cmr
aWs
crl
bXC
-bXo
+bON
bYg
bZk
bTO
@@ -129739,7 +126848,7 @@ cME
cMr
cLs
bkd
-ava
+bkd
bkd
bkd
azD
@@ -130051,7 +127160,7 @@ bRV
bNz
bSn
crl
-bRt
+bON
bXw
bWM
bPe
@@ -130059,7 +127168,7 @@ bZC
bPe
bOc
bSr
-bSd
+krJ
cgg
hxn
hxn
@@ -130274,7 +127383,7 @@ aSM
aUn
baC
aYp
-bcD
+awi
bgi
bkd
bhH
@@ -130308,7 +127417,7 @@ bRZ
cmr
bRA
crl
-bXy
+bON
bXA
bXN
bTG
@@ -130565,7 +127674,7 @@ bSb
cmr
cGz
cro
-bRt
+bON
bXA
cFE
bTt
@@ -131043,7 +128152,7 @@ awi
awi
baC
baC
-bcD
+awi
aYs
cdc
cna
@@ -131554,7 +128663,7 @@ axO
cOm
cbj
aio
-auz
+cbm
aSZ
cOo
aVt
@@ -131603,13 +128712,13 @@ aeu
aeu
aUz
acm
-cmJ
-ivg
-ivg
-cmJ
-ivg
-ivg
-cmJ
+acm
+acK
+acK
+acm
+acK
+acK
+acm
acm
aeU
aeU
@@ -131804,14 +128913,14 @@ bkd
aze
aAG
cbj
-cLt
+cbk
aJn
cLg
aMq
ava
bkd
bkd
-ava
+bkd
avA
avA
bkd
@@ -132061,7 +129170,7 @@ bkd
ava
ava
bkd
-ava
+bkd
avA
crw
avA
@@ -132322,7 +129431,7 @@ bkd
cLK
cLK
afJ
-ava
+bkd
aeu
alm
acm
@@ -132575,7 +129684,7 @@ aeu
aeu
aeu
aeu
-ava
+bkd
agy
cLR
agy
@@ -132832,7 +129941,7 @@ aeu
aeu
aeu
aeu
-beK
+bhq
aaa
aaa
aaa
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index e6eddb2777..75af28d174 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,12 @@
/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
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39333,16 +39343,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 +40098,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{
@@ -40131,10 +40134,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 +40176,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 +40843,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 +40858,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 +40910,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 +40980,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 +41624,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/r_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 +41661,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 +42628,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 +42649,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,
/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/dark/corner,
/area/engine/atmos)
"bFM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
@@ -42717,6 +42692,7 @@
name = "Distribution Loop";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bFQ" = (
@@ -42777,6 +42753,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 +43297,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,
@@ -43418,8 +43376,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 +43949,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 +43992,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 +44006,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/r_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,13 +44034,16 @@
/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" = (
@@ -44155,20 +44092,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 +44775,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 +44786,43 @@
/turf/open/floor/plasteel,
/area/storage/tcom)
"bKu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
+/obj/effect/turf_decal/bot,
/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{
- dir = 4
- },
/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/r_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" = (
@@ -44935,17 +44837,21 @@
/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 +45462,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 +45482,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 +45522,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 +45532,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/on{
+ dir = 1;
+ name = "Mix 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/r_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 +45598,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 +46432,41 @@
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/plating,
/area/maintenance/starboard)
-"bNP" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
+"bNQ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
+/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 +47105,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 +47119,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 +47128,41 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
/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 +47180,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 +47775,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 +47822,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 +48433,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 +48465,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 +48484,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 +48876,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 +48912,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 +49550,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 +49580,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 +50015,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 +50077,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
},
@@ -50318,38 +50108,15 @@
},
/area/engine/atmos)
"bVI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
/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 +50130,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 +50798,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 +50845,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,76 +50854,15 @@
/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" = (
/obj/structure/cable/yellow{
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
- },
/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 +50877,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 +51333,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 +51345,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 +51374,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 +51884,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 +51891,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 +51908,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 +51916,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 +51926,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 +51937,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 +52710,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 +52722,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 +52739,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 +52747,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 +52762,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 +52772,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 +52789,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 +52807,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 +52818,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 +52828,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 +52845,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 +52861,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 +52897,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 +53669,81 @@
/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/components/binary/pump{
+ name = "Mix to Fuel Pipe"
},
/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 +53753,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 +55021,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 +75986,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 +76098,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 +76118,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 +78782,24 @@
/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/orange/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Mix to Engine"
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/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 +78807,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 +79385,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 +80620,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 +81076,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,
@@ -81663,6 +81303,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 +81383,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)
@@ -81998,6 +81644,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)
@@ -82136,6 +81790,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 +82019,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" = (
@@ -82419,6 +82076,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
@@ -121521,7 +121187,7 @@ bFA
byN
byN
byN
-byN
+bMh
byN
bPf
byN
@@ -121769,7 +121435,7 @@ bpc
dhQ
btw
buX
-bwY
+nLT
bGp
btw
dCV
@@ -122026,7 +121692,7 @@ alq
alq
alq
buY
-alq
+dOR
alq
alq
alq
@@ -122035,7 +121701,7 @@ alq
alq
alq
bKr
-bKr
+bMi
bKr
bKr
bKr
@@ -122541,7 +122207,7 @@ bry
bry
bva
bxa
-bry
+bHr
bAy
bAy
bDN
@@ -123055,7 +122721,7 @@ bhT
bhT
bvc
bxc
-bxc
+bHs
bAA
bCg
dBK
@@ -123329,7 +122995,7 @@ bTh
bUx
aut
bXc
-apc
+bZz
bZE
caZ
ccJ
@@ -123584,7 +123250,7 @@ apc
aqq
apc
bUy
-alq
+bPs
bXd
apf
bZE
@@ -123830,8 +123496,8 @@ byT
bAD
bCj
bDP
-bFI
-bHr
+bFH
+bHq
bIK
bBt
atm
@@ -123841,13 +123507,13 @@ apc
bSf
apc
bxc
-bxc
+bxg
bXe
bxc
bxc
bxc
ccL
-bxl
+bQT
cft
pOP
pOP
@@ -124082,13 +123748,13 @@ bph
brD
bep
bvg
-bxd
+bFI
byU
-bAE
-bCk
-dBJ
+bDU
+bKC
+bMd
bFJ
-bHs
+bHq
bIL
cVD
atm
@@ -124104,8 +123770,8 @@ bYv
bZF
cbb
ccM
-bxc
-aaf
+bQU
+bUB
aaf
aaf
aaf
@@ -124342,11 +124008,11 @@ bvh
bxd
byV
bAF
-bCl
-bDQ
-bFK
-bxk
-bIM
+bCk
+dBJ
+bFH
+bHq
+bCk
bKu
bxc
bxc
@@ -124358,11 +124024,11 @@ bxc
bVG
bXg
bAO
-bZG
+bCi
cbc
cUR
cVy
-cVz
+aaf
bAR
bAR
bAR
@@ -124597,14 +124263,14 @@ brF
bep
bvi
bxc
-bxc
-bxc
+byW
+bAE
bCm
-bDR
-bza
-bxl
+dBJ
+bCl
+bCn
bIN
-bxg
+bDQ
bMa
bMa
bPo
@@ -124618,7 +124284,7 @@ bCi
bCi
cbd
ccN
-ceg
+bQV
cfu
cgA
chN
@@ -124854,28 +124520,28 @@ brG
bep
bep
bxc
-byW
+bKy
bAG
-bCn
+bxg
dBM
-bFL
-bHt
+bza
+bxl
bIO
-bKv
+bMg
bMb
-bNP
+bNS
bPp
bPp
bSg
bDS
bDS
bVI
-bXi
-bYw
+dBJ
+bCi
bYw
cbe
ccO
-bza
+bSh
aaf
gJs
chO
@@ -125119,21 +124785,21 @@ bFM
bHu
bIP
bKw
-bMc
+bKw
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 +125040,23 @@ bCp
bDU
bFN
bAO
-bIQ
-bKx
-bMd
-bxd
-bPr
-bQS
-bPr
-bxd
-bUA
-bVK
-bXk
-bYy
+bIS
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bKD
+bCi
bZH
cbg
ccQ
-bza
-aaf
+bSi
+cfx
bAR
bAR
bAR
@@ -125632,17 +125298,17 @@ bDV
bFO
bHv
bIR
-bKy
-bMe
-bNR
-bNR
-bQT
-bNR
-bNR
-bUB
-bFO
-bXl
-bIS
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZI
cbh
ccR
@@ -125882,24 +125548,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
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZI
cbi
ccS
@@ -126146,20 +125812,20 @@ bDW
bFQ
bHw
bIT
-bKA
-bMg
-bNS
-bPt
-bQU
-bSi
-bTk
-bDW
-bFQ
-bXm
-bYz
-bZJ
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bZI
cbj
-ccP
+bPv
ceh
cfw
cgA
@@ -126403,21 +126069,21 @@ bDX
bFR
bHx
bIU
-bKB
-bMh
+bCi
+bCi
bCi
bCi
bKD
bCi
bCi
-bUD
bCi
-dDm
-bIS
+bCi
+dCY
+bCi
bZK
cbk
kJW
-ceh
+bSi
cfx
bAR
bAR
@@ -126660,20 +126326,20 @@ bDY
bFS
bHy
bIV
-bKC
-bMi
-bNU
-bMg
-bQV
-bMg
-bMg
-bUE
-bVL
-bXn
-bYA
-bZJ
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bZI
cbl
-bKG
+bQS
cei
cfy
cgB
@@ -126918,19 +126584,19 @@ bFT
bHz
bIW
bKD
-dhe
-dhg
-bPu
-bPu
-bPu
-bTl
-bUF
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bKD
-bXo
+bCi
bMj
bZI
cVJ
-ccQ
+ccS
bza
aaf
gJs
@@ -127175,20 +126841,20 @@ bFU
bHy
bIX
bKE
-bKE
-dhh
-bPv
-bKE
-bKE
-bKE
-bUG
-bKE
-bXp
-bKE
+bNR
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
+bCi
bZL
cbn
ccT
-cei
+bTk
cfy
cgC
chV
@@ -127444,8 +127110,8 @@ bXq
bNV
bZM
cbo
-ccU
-bxc
+ccS
+bTl
aaf
bAR
bAR
@@ -127692,17 +127358,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 +127605,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 bdbce36c9c..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";
@@ -23111,7 +23194,7 @@
name = "Hydroponics Desk";
req_access_txt = "35"
},
-/obj/item/reagent_containers/food/snacks/monkeycube,
+/obj/item/reagent_containers/food/snacks/cube/monkey,
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"bce" = (
@@ -53150,6 +53233,9 @@
dir = 1;
pixel_y = -22
},
+/obj/structure/reflector/double/anchored{
+ dir = 9
+ },
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"dFJ" = (
@@ -55547,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
@@ -55700,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,
@@ -56503,6 +56620,16 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"loL" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4;
+ filter_type = "n2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"lqc" = (
/obj/item/toy/gun,
/obj/effect/decal/cleanable/oil,
@@ -57668,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" = (
@@ -58403,9 +58531,6 @@
/turf/open/space/basic,
/area/space/nearstation)
"pCo" = (
-/obj/structure/reflector/single/anchored{
- dir = 6
- },
/obj/machinery/light/small{
dir = 1
},
@@ -59072,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{
@@ -59138,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)
@@ -59921,10 +60074,10 @@
/turf/open/floor/engine,
/area/engine/engineering)
"tlV" = (
-/obj/structure/reflector/double/anchored{
- dir = 9
+/obj/structure/reflector/single/anchored{
+ dir = 6
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating,
/area/engine/engineering)
"tnP" = (
/obj/machinery/seed_extractor,
@@ -60127,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;
@@ -60772,19 +60938,6 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"vsG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/maintenance{
- name = "Research Lab Maintenance";
- req_one_access_txt = "7;29"
- },
-/turf/open/floor/plating,
-/area/maintenance/department/engine)
"vsJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
@@ -83189,7 +83342,7 @@ amf
amR
anA
aoo
-aoo
+ana
aoo
aqn
arl
@@ -83197,7 +83350,7 @@ asw
atx
auz
avu
-awJ
+rjF
axG
ayH
aAe
@@ -83445,16 +83598,16 @@ alx
amg
amg
anB
-ana
+amg
aoQ
-apI
+amg
aqo
alv
asx
-aty
ajM
ajM
-atB
+ajM
+akA
axH
ayI
aAf
@@ -83705,13 +83858,13 @@ anC
aop
aoR
apJ
-aqp
+apN
aon
-asy
+aty
atz
aux
avv
-awK
+awI
axG
ayL
aAi
@@ -83964,7 +84117,7 @@ aoS
apJ
aqq
aon
-asv
+atB
atA
auA
avw
@@ -84221,11 +84374,11 @@ aoT
apK
aqr
arl
-asw
-atx
+awK
+atD
auz
avx
-awJ
+rjF
axG
ayJ
aAg
@@ -84479,10 +84632,10 @@ apL
aqs
aon
asz
-atB
ajM
ajM
-atB
+ajM
+akA
axI
ayL
aAh
@@ -84735,11 +84888,11 @@ aoV
apJ
aqt
arm
-asy
+rdB
atz
aux
avy
-awK
+awI
axG
ayL
aAi
@@ -85246,14 +85399,14 @@ amY
anI
aor
aoX
-apJ
-aqt
+apI
+apO
aro
-asw
+jen
atD
auz
avA
-awJ
+rjF
axG
ayL
aAi
@@ -85498,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
@@ -85755,15 +85908,15 @@ ahL
ahL
ahL
ahL
-aml
-ana
+amg
+amg
anK
aos
aoZ
-apO
+amg
aqv
aro
-asw
+jxK
atE
auB
avB
@@ -86020,7 +86173,7 @@ apa
agP
aqw
arp
-asC
+tTZ
atF
alv
alv
@@ -86538,7 +86691,7 @@ asE
ajM
auD
avC
-ajM
+akA
axJ
axG
aAm
@@ -87566,7 +87719,7 @@ asG
ajM
auH
avG
-auH
+awR
axM
ayR
aAo
@@ -94044,7 +94197,7 @@ jZG
bpY
bpY
bpY
-vsG
+bNZ
bva
bva
bva
@@ -94076,7 +94229,7 @@ bXk
pCo
wcs
wcs
-tlV
+wcs
eyj
qkM
miw
@@ -94330,7 +94483,7 @@ bZA
cam
mgz
aac
-cbX
+tlV
wcs
wcs
dEy
@@ -94592,7 +94745,7 @@ oHa
eWi
cbX
aac
-vlC
+loL
cgx
qeY
fyO
diff --git a/_maps/shuttles/cargo_kilo.dmm b/_maps/shuttles/cargo_kilo.dmm
index 6d9d543842..86660a4dc7 100644
--- a/_maps/shuttles/cargo_kilo.dmm
+++ b/_maps/shuttles/cargo_kilo.dmm
@@ -3,50 +3,30 @@
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply)
"b" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"c" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"d" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"e" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"f" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -55,18 +35,7 @@
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
-"g" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/turf/open/floor/mineral/titanium/yellow,
-/area/shuttle/supply)
"h" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -91,20 +60,10 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"k" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"l" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -126,10 +85,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"n" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -140,20 +95,12 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"o" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"p" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -176,10 +123,6 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"q" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -196,19 +139,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
-"s" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/mineral/titanium/yellow,
-/area/shuttle/supply)
"t" = (
/obj/machinery/door/poddoor{
id = "QMLoaddoor2";
@@ -228,28 +158,15 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/supply)
"v" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/end{
dir = 8
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"w" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
"x" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -260,10 +177,6 @@
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/supply)
"z" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/supply)
@@ -290,6 +203,27 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating/airless,
/area/shuttle/supply)
+"K" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/supply)
+"Q" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/supply)
+"Z" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/supply)
(1,1,1) = {"
a
@@ -323,12 +257,12 @@ C
a
c
o
-g
-k
-g
+K
+Z
+w
o
-g
-s
+K
+Q
e
A
D
@@ -336,13 +270,13 @@ D
(4,1,1) = {"
a
c
-g
-g
-g
-g
-g
-g
-g
+w
+w
+w
+w
+w
+w
+w
z
A
D
@@ -350,13 +284,13 @@ D
(5,1,1) = {"
a
c
-g
-g
-g
-g
-g
-g
w
+w
+w
+w
+w
+w
+k
x
A
D
diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm
index 3c2da5ae85..c7aa1f28ce 100644
--- a/_maps/shuttles/emergency_kilo.dmm
+++ b/_maps/shuttles/emergency_kilo.dmm
@@ -144,7 +144,6 @@
pixel_y = 4
},
/obj/item/folder/blue,
-/obj/item/gun/energy/e_gun/mini,
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"av" = (
@@ -172,10 +171,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"ax" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
},
@@ -288,10 +283,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"aM" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
@@ -301,10 +292,6 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"aN" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -725,10 +712,6 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"bB" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -791,14 +774,6 @@
/obj/machinery/recharge_station,
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
-"bG" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/mineral/titanium/yellow,
-/area/shuttle/escape)
"bH" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/bot,
@@ -1057,20 +1032,12 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/escape)
"cj" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"ck" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cm" = (
@@ -1079,27 +1046,15 @@
/area/shuttle/escape)
"cr" = (
/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cs" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"cA" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -1159,10 +1114,6 @@
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"Xo" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -1543,7 +1494,7 @@ bn
bi
ac
cj
-bG
+cr
bR
cK
cT
diff --git a/_maps/shuttles/ferry_kilo.dmm b/_maps/shuttles/ferry_kilo.dmm
index 744d09d373..a905f8a0de 100644
--- a/_maps/shuttles/ferry_kilo.dmm
+++ b/_maps/shuttles/ferry_kilo.dmm
@@ -70,10 +70,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"m" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -115,10 +111,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"r" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -126,10 +118,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/transport)
"s" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/corner,
/obj/effect/turf_decal/stripes/corner{
dir = 1
diff --git a/_maps/shuttles/labour_kilo.dmm b/_maps/shuttles/labour_kilo.dmm
index 9ee9a38f07..6b70922475 100644
--- a/_maps/shuttles/labour_kilo.dmm
+++ b/_maps/shuttles/labour_kilo.dmm
@@ -29,10 +29,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/labor)
"f" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -47,10 +43,6 @@
req_access_txt = "1"
},
/obj/machinery/light,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -63,10 +55,6 @@
pixel_x = 30;
pixel_y = 30
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -111,10 +99,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/labor)
"l" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
@@ -127,10 +111,6 @@
/obj/machinery/light{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -141,17 +121,12 @@
machinedir = 1;
pixel_x = 30
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"o" = (
-/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -164,10 +139,6 @@
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"p" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
@@ -177,9 +148,6 @@
pixel_x = 25
},
/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
/obj/structure/chair/comfy/shuttle{
dir = 8
},
@@ -189,31 +157,12 @@
/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/labor)
"r" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/structure/closet/crate,
/obj/effect/turf_decal/delivery,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/labor)
-"s" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/loading_area{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/mineral/titanium/yellow,
-/area/shuttle/labor)
"t" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/labor)
@@ -284,7 +233,7 @@ g
a
m
p
-s
+t
w
y
"}
diff --git a/_maps/shuttles/mining_kilo.dmm b/_maps/shuttles/mining_kilo.dmm
index 1de45c713c..5609ecfc06 100644
--- a/_maps/shuttles/mining_kilo.dmm
+++ b/_maps/shuttles/mining_kilo.dmm
@@ -15,7 +15,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"d" = (
-/obj/effect/turf_decal/bot,
/obj/machinery/computer/shuttle/mining,
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
@@ -31,10 +30,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"f" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -48,10 +43,6 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/mining)
"h" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -61,20 +52,12 @@
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/mining)
"i" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/mining)
"j" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/machinery/status_display/evac{
pixel_x = -32
},
@@ -114,10 +97,6 @@
/turf/open/floor/plating,
/area/shuttle/mining)
"m" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -134,10 +113,6 @@
/turf/open/floor/plating/airless,
/area/shuttle/mining)
"p" = (
-/obj/effect/turf_decal/tile/brown,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/general/hidden{
icon_state = "pipe11-2";
diff --git a/code/__DEFINES/__513_compatibility.dm b/code/__DEFINES/__513_compatibility.dm
deleted file mode 100644
index 12577fb68b..0000000000
--- a/code/__DEFINES/__513_compatibility.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#if DM_VERSION < 513
-
-#define ismovableatom(A) (istype(A, /atom/movable))
-
-#define islist(L) (istype(L, /list))
-
-#define CLAMP01(x) (CLAMP(x, 0, 1))
-
-#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
-
-#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) )
-
-#define TAN(x) (sin(x) / cos(x))
-
-#define arctan(x) (arcsin(x/sqrt(1+x*x)))
-
-//////////////////////////////////////////////////
-
-#else
-
-#define ismovableatom(A) ismovable(A)
-
-#define CLAMP01(x) clamp(x, 0, 1)
-
-#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX)
-
-#define TAN(x) tan(x)
-
-#define ATAN2(x, y) arctan(x, y)
-
-#endif
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 14c78f90d0..7de162207d 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -111,9 +111,6 @@
#define GRAB_NECK 2
#define GRAB_KILL 3
-//slowdown when in softcrit
-#define SOFTCRIT_ADD_SLOWDOWN 6
-
/// Attack types for check_block()/run_block(). Flags, combinable.
/// Attack was melee, whether or not armed.
#define ATTACK_TYPE_MELEE (1<<0)
@@ -302,8 +299,8 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
/// Block priorities
#define BLOCK_PRIORITY_HELD_ITEM 100
-#define BLOCK_PRIORITY_CLOTHING 50
#define BLOCK_PRIORITY_WEAR_SUIT 75
+#define BLOCK_PRIORITY_CLOTHING 50
#define BLOCK_PRIORITY_UNIFORM 25
#define BLOCK_PRIORITY_DEFAULT BLOCK_PRIORITY_HELD_ITEM
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 b32625a539..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
@@ -200,6 +200,7 @@
#define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone)
#define COMSIG_LIVING_COMBAT_ENABLED "combatmode_enabled" //from base of mob/living/enable_combat_mode() (was_forced)
#define COMSIG_LIVING_COMBAT_DISABLED "combatmode_disabled" //from base of mob/living/disable_combat_mode() (was_forced)
+#define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items)
//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
#define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore)
@@ -240,7 +241,11 @@
#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
#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker)
#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone)
#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user)
@@ -250,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/layers_planes.dm b/code/__DEFINES/layers_planes.dm
index dbf7149f00..a547ae6b68 100644
--- a/code/__DEFINES/layers_planes.dm
+++ b/code/__DEFINES/layers_planes.dm
@@ -10,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
@@ -63,7 +67,9 @@
#define BELOW_MOB_LAYER 3.7
#define LYING_MOB_LAYER 3.8
+#define MOB_LOWER_LAYER 3.95
//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
+#define MOB_UPPER_LAYER 4.05
#define ABOVE_MOB_LAYER 4.1
#define WALL_OBJ_LAYER 4.25
#define EDGED_TURF_LAYER 4.3
@@ -105,10 +111,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/maps.dm b/code/__DEFINES/maps.dm
index 73e900226e..844fe2cb90 100644
--- a/code/__DEFINES/maps.dm
+++ b/code/__DEFINES/maps.dm
@@ -35,6 +35,7 @@ require only minor tweaks.
#define ZTRAIT_REEBE "Reebe"
#define ZTRAIT_RESERVED "Transit/Reserved"
#define ZTRAIT_AWAY "Away Mission"
+#define ZTRAIT_VR "Virtual Reality"
#define ZTRAIT_SPACE_RUINS "Space Ruins"
#define ZTRAIT_LAVA_RUINS "Lava Ruins"
#define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement.
@@ -101,4 +102,8 @@ require only minor tweaks.
#define PLACE_BELOW "below" //On z levl below - centered on same tile
#define PLACE_ISOLATED "isolated" //On isolated ruin z level
//Map type stuff.
-#define MAP_TYPE_STATION "station"
\ No newline at end of file
+#define MAP_TYPE_STATION "station"
+
+//Random z-levels name defines.
+#define AWAY_MISSION_NAME "Away Mission"
+#define VIRT_REALITY_NAME "Virtual Reality"
diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm
index f37efd694c..e418b8b4c6 100644
--- a/code/__DEFINES/maths.dm
+++ b/code/__DEFINES/maths.dm
@@ -17,6 +17,8 @@
#define PERCENT(val) (round((val)*100, 0.1))
+#define CLAMP01(x) clamp(x, 0, 1)
+
//time of day but automatically adjusts to the server going into the next day within the same round.
//for when you need a reliable time number that doesn't depend on byond time.
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
@@ -30,13 +32,13 @@
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
-#define WRAP(val, min, max) CLAMP(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1)
+#define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1)
// Real modulus that handles decimals
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
// Cotangent
-#define COT(x) (1 / TAN(x))
+#define COT(x) (1 / tan(x))
// Secant
#define SEC(x) (1 / cos(x))
@@ -169,8 +171,8 @@
while(pixel_y < -16)
pixel_y += 32
new_y--
- new_x = CLAMP(new_x, 0, world.maxx)
- new_y = CLAMP(new_y, 0, world.maxy)
+ new_x = clamp(new_x, 0, world.maxx)
+ new_y = clamp(new_y, 0, world.maxy)
return locate(new_x, new_y, starting.z)
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
@@ -195,7 +197,7 @@
#define EXP_DISTRIBUTION(desired_mean) ( -(1/(1/desired_mean)) * log(rand(1, 1000) * 0.001) )
-#define LORENTZ_DISTRIBUTION(x, s) ( s*TAN(TODEGREES(PI*(rand()-0.5))) + x )
+#define LORENTZ_DISTRIBUTION(x, s) ( s*tan(TODEGREES(PI*(rand()-0.5))) + x )
#define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 )
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index e8ca6f444c..d7d3cf5da3 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -71,14 +71,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define ABOVE_SHOES_LAYER (SHOES_LAYER-1)
#define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-1)
-
-//Security levels
-#define SEC_LEVEL_GREEN 0
-#define SEC_LEVEL_BLUE 1
-#define SEC_LEVEL_AMBER 2
-#define SEC_LEVEL_RED 3
-#define SEC_LEVEL_DELTA 4
-
//some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list
diff --git a/code/__DEFINES/misc/return_values.dm b/code/__DEFINES/misc/return_values.dm
new file mode 100644
index 0000000000..d55f603de9
--- /dev/null
+++ b/code/__DEFINES/misc/return_values.dm
@@ -0,0 +1,3 @@
+// obj/item/dropped
+/// dropped() relocated this item, return FALSE for doUnEquip.
+#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped"
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index e5f817614b..c89bd4843e 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -291,3 +291,7 @@
#define PULL_PRONE_SLOWDOWN 0.6
#define FIREMAN_CARRY_SLOWDOWN 0
#define PIGGYBACK_CARRY_SLOWDOWN 1
+//slowdown when in softcrit. Note that crawling slowdown will also apply at the same time!
+#define SOFTCRIT_ADD_SLOWDOWN 2
+//slowdown when crawling
+#define CRAWLING_ADD_SLOWDOWN 4
diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm
index 4d40474a3c..1f3ae63940 100644
--- a/code/__DEFINES/movespeed_modification.dm
+++ b/code/__DEFINES/movespeed_modification.dm
@@ -1,12 +1,3 @@
-#define MOVESPEED_DATA_INDEX_PRIORITY 1
-#define MOVESPEED_DATA_INDEX_FLAGS 2
-#define MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN 3
-#define MOVESPEED_DATA_INDEX_MOVETYPE 4
-#define MOVESPEED_DATA_INDEX_BL_MOVETYPE 5
-#define MOVESPEED_DATA_INDEX_CONFLICT 6
-
-#define MOVESPEED_DATA_INDEX_MAX 6
-
//flags
#define IGNORE_NOSLOW (1 << 0)
@@ -15,70 +6,7 @@
#define MOVE_CONFLICT_JETPACK "JETPACK"
//ids
+#define MOVESPEED_ID_SANITY "mood_sanity"
-#define MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED "MOB_WALK_RUN"
-#define MOVESPEED_ID_MOB_GRAB_STATE "MOB_GRAB_STATE"
-#define MOVESPEED_ID_MOB_EQUIPMENT "MOB_EQUIPMENT"
-#define MOVESPEED_ID_MOB_GRAVITY "MOB_GRAVITY"
-#define MOVESPEED_ID_CONFIG_SPEEDMOD "MOB_CONFIG_MODIFIER"
-
-#define MOVESPEED_ID_SLIME_REAGENTMOD "SLIME_REAGENT_MODIFIER"
-#define MOVESPEED_ID_SLIME_HEALTHMOD "SLIME_HEALTH_MODIFIER"
-#define MOVESPEED_ID_SLIME_TEMPMOD "SLIME_TEMPERATURE_MODIFIER"
-
-#define MOVESPEED_ID_SLIME_STATUS "SLIME_STATUS"
-
-#define MOVESPEED_ID_TARANTULA_WEB "TARANTULA_WEB"
-
-#define MOVESPEED_ID_LIVING_TURF_SPEEDMOD "LIVING_TURF_SPEEDMOD"
-#define MOVESPEED_ID_LIVING_LIMBLESS "LIVING_LIMBLESS"
-
-#define MOVESPEED_ID_CARBON_SOFTCRIT "CARBON_SOFTCRIT"
-#define MOVESPEED_ID_CARBON_OLDSPEED "CARBON_DEPRECATED_SPEED"
-
-#define MOVESPEED_ID_DNA_VAULT "DNA_VAULT"
-
-#define MOVESPEED_ID_YELLOW_ORB "YELLOW_ORB"
-
-#define MOVESPEED_ID_TARFOOT "TARFOOT"
-
-#define MOVESPEED_ID_SEPIA "SEPIA"
-
-#define MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD "MONKEY_REAGENT_SPEEDMOD"
-#define MOVESPEED_ID_MONKEY_TEMPERATURE_SPEEDMOD "MONKEY_TEMPERATURE_SPEEDMOD"
-#define MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD "MONKEY_HEALTH_SPEEDMOD"
-
-#define MOVESPEED_ID_CHANGELING_MUSCLES "CHANGELING_MUSCLES"
-
-#define MOVESPEED_ID_SIMPLEMOB_VARSPEED "SIMPLEMOB_VARSPEED_MODIFIER"
-#define MOVESPEED_ID_ADMIN_VAREDIT "ADMIN_VAREDIT_MODIFIER"
-
-#define MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD "PAI_SPACEWALK_MODIFIER"
-
-#define MOVESPEED_ID_SANITY "MOOD_SANITY"
-
-#define MOVESPEED_ID_SPECIES "SPECIES_SPEED_MOD"
-
-#define MOVESPEED_ID_SMALL_STRIDE "SMALL_STRIDE"
-#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG"
-#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
-#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
-
-#define MOVESPEED_ID_SLAUGHTER "SLAUGHTER"
-
-#define MOVESPEED_ID_CYBER_THRUSTER "CYBER_IMPLANT_THRUSTER"
-#define MOVESPEED_ID_JETPACK "JETPACK"
-
-#define MOVESPEED_ID_MKULTRA "MKULTRA"
-
-#define MOVESPEED_ID_TASED_STATUS "TASED"
-#define MOVESPEED_ID_ELECTROSTAFF "ELECTROSTAFF"
-
-#define MOVESPEED_ID_SHOVE "SHOVE"
-#define MOVESPEED_ID_FAT "FAT"
-#define MOVESPEED_ID_COLD "COLD"
-#define MOVESPEED_ID_HUNGRY "HUNGRY"
-#define MOVESPEED_ID_DAMAGE_SLOWDOWN "DAMAGE"
-#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
-
-#define MOVESPEED_ID_CIRRHOSIS "CIRRHOSIS"
\ No newline at end of file
+#define MOVESPEED_ID_MOB_GRAB_STATE "mob_grab_state"
+#define MOVESPEED_ID_MOB_WALK_RUN "mob_walk_run"
diff --git a/code/__DEFINES/nanites.dm b/code/__DEFINES/nanites.dm
index ed15e972ab..05c3501609 100644
--- a/code/__DEFINES/nanites.dm
+++ b/code/__DEFINES/nanites.dm
@@ -12,6 +12,10 @@
#define NANITE_CLOUD_DISABLE 2
#define NANITE_CLOUD_ENABLE 3
+///Nanite Protocol types
+#define NANITE_PROTOCOL_REPLICATION "nanite_replication"
+#define NANITE_PROTOCOL_STORAGE "nanite_storage"
+
///Nanite extra settings types: used to help uis know what type an extra setting is
#define NESTYPE_TEXT "text"
#define NESTYPE_NUMBER "number"
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index 97ae7b8e95..f4beef7ee8 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -22,11 +22,23 @@
// Is an open container for all intents and purposes.
#define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT)
-//reagents_value defines, for cargo stuff.
+//reagents_value defines, basically a multiplier used in reagent containers cargo selling.
#define DEFAULT_REAGENTS_VALUE 1
#define NO_REAGENTS_VALUE 0
#define HARVEST_REAGENTS_VALUE 0.3
+/// Standard reagents value defines.
+/// Take a grain of salt, only "rare" reagents should have a decent value here, for balance reasons.
+/// TL;DR Think of it also like general market request price more than rarity.
+#define REAGENT_VALUE_NONE 0 //all the stuff pretty much available in potentially unlimited quantities.
+#define REAGENT_VALUE_VERY_COMMON 0.1 //same as above, just not so unlimited.
+#define REAGENT_VALUE_COMMON 0.5
+#define REAGENT_VALUE_UNCOMMON 1
+#define REAGENT_VALUE_RARE 2.5
+#define REAGENT_VALUE_VERY_RARE 5
+#define REAGENT_VALUE_EXCEPTIONAL 10 //extremely rare or tedious to craft, possibly unsynthetizable, reagents.
+#define REAGENT_VALUE_AMAZING 30 //reserved ONLY for non-mass produceable, unsynthetizable reagents.
+#define REAGENT_VALUE_GLORIOUS 300 //reagents that shouldn't be possible to get or farm under normal conditions. e.g. Romerol, fungal TB, adminordrazine...
#define TOUCH 1 // splashing
#define INGEST 2 // ingestion
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/security_levels.dm b/code/__DEFINES/security_levels.dm
new file mode 100644
index 0000000000..19c66d9125
--- /dev/null
+++ b/code/__DEFINES/security_levels.dm
@@ -0,0 +1,10 @@
+//Security levels
+#define SEC_LEVEL_GREEN 1
+#define SEC_LEVEL_BLUE 2
+#define SEC_LEVEL_AMBER 3
+#define SEC_LEVEL_RED 4
+#define SEC_LEVEL_DELTA 5
+
+//Macro helpers.
+#define SECLEVEL2NUM(text) (GLOB.all_security_levels.Find(text))
+#define NUM2SECLEVEL(num) (ISINRANGE(num, 1, length(GLOB.all_security_levels)) ? GLOB.all_security_levels[num] : null)
diff --git a/code/__DEFINES/skills/skills.dm b/code/__DEFINES/skills/skills.dm
new file mode 100644
index 0000000000..b97b921550
--- /dev/null
+++ b/code/__DEFINES/skills/skills.dm
@@ -0,0 +1,28 @@
+/// true/false
+#define SKILL_PROGRESSION_BINARY 1
+/// numerical
+#define SKILL_PROGRESSION_NUMERICAL 2
+/// Enum
+#define SKILL_PROGRESSION_ENUM 3
+
+/// Max value of skill for numerical skills
+#define SKILL_NUMERICAL_MAX 100
+/// Min value of skill for numerical skills
+#define SKILL_NUMERICAL_MIN 0
+
+// Standard values for job starting skills
+
+#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX
+
+// Standard values for job starting skill affinities
+
+#define STARTING_SKILL_AFFINITY_SURGERY_MEDICAL 1.2
+
+// Standard values for skill gain (this is multiplied by affinity)
+
+#define SKILL_GAIN_SURGERY_PER_STEP 0.25
+
+// Misc
+
+/// 40% speedup at 100 skill
+#define SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(number) clamp(number / 250, 1, 2)
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index e1fc8fa001..4d18e60b71 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -152,6 +152,42 @@
#define TRAIT_PASSTABLE "passtable"
#define TRAIT_GIANT "giant"
#define TRAIT_DWARF "dwarf"
+#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
+#define TRAIT_AGEUSIA "ageusia"
+#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
+#define TRAIT_NIGHT_VISION "night_vision"
+#define TRAIT_LIGHT_STEP "light_step"
+#define TRAIT_SILENT_STEP "silent_step"
+#define TRAIT_SPEEDY_STEP "speedy_step"
+#define TRAIT_SPIRITUAL "spiritual"
+#define TRAIT_VORACIOUS "voracious"
+#define TRAIT_SELF_AWARE "self_aware"
+#define TRAIT_FREERUNNING "freerunning"
+#define TRAIT_SKITTISH "skittish"
+#define TRAIT_POOR_AIM "poor_aim"
+#define TRAIT_PROSOPAGNOSIA "prosopagnosia"
+#define TRAIT_DRUNK_HEALING "drunk_healing"
+#define TRAIT_TAGGER "tagger"
+#define TRAIT_PHOTOGRAPHER "photographer"
+#define TRAIT_MUSICIAN "musician"
+#define TRAIT_PERMABONER "permanent_arousal"
+#define TRAIT_NEVERBONER "never_aroused"
+#define TRAIT_MASO "masochism"
+#define TRAIT_HIGH_BLOOD "high_blood"
+#define TRAIT_PARA "paraplegic"
+#define TRAIT_EMPATH "empath"
+#define TRAIT_FRIENDLY "friendly"
+#define TRAIT_CULT_EYES "cult_eyes"
+#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
+#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
+#define TRAIT_FREESPRINT "free_sprinting"
+#define TRAIT_XRAY_VISION "xray_vision"
+#define TRAIT_THERMAL_VISION "thermal_vision"
+#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
+#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"
// 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)
@@ -185,43 +221,6 @@
// item traits
#define TRAIT_NODROP "nodrop"
-#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
-#define TRAIT_AGEUSIA "ageusia"
-#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
-#define TRAIT_NIGHT_VISION "night_vision"
-#define TRAIT_LIGHT_STEP "light_step"
-#define TRAIT_SILENT_STEP "silent_step"
-#define TRAIT_SPEEDY_STEP "speedy_step"
-#define TRAIT_SPIRITUAL "spiritual"
-#define TRAIT_VORACIOUS "voracious"
-#define TRAIT_SELF_AWARE "self_aware"
-#define TRAIT_FREERUNNING "freerunning"
-#define TRAIT_SKITTISH "skittish"
-#define TRAIT_POOR_AIM "poor_aim"
-#define TRAIT_PROSOPAGNOSIA "prosopagnosia"
-#define TRAIT_DRUNK_HEALING "drunk_healing"
-#define TRAIT_TAGGER "tagger"
-#define TRAIT_PHOTOGRAPHER "photographer"
-#define TRAIT_MUSICIAN "musician"
-#define TRAIT_PERMABONER "permanent_arousal"
-#define TRAIT_NEVERBONER "never_aroused"
-#define TRAIT_NYMPHO "nymphomania"
-#define TRAIT_MASO "masochism"
-#define TRAIT_HIGH_BLOOD "high_blood"
-#define TRAIT_PARA "paraplegic"
-#define TRAIT_EMPATH "empath"
-#define TRAIT_FRIENDLY "friendly"
-#define TRAIT_CULT_EYES "cult_eyes"
-#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
-#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
-#define TRAIT_FREESPRINT "free_sprinting"
-#define TRAIT_XRAY_VISION "xray_vision"
-#define TRAIT_THERMAL_VISION "thermal_vision"
-#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
-#define TRAIT_NO_INTERNALS "no-internals"
-#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
-#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing.
-
// common trait sources
#define TRAIT_GENERIC "generic"
#define EYE_DAMAGE "eye_damage"
@@ -246,6 +245,7 @@
#define BLOODSUCKER_TRAIT "bloodsucker"
#define SHOES_TRAIT "shoes" //inherited from your sweet kicks
#define GLOVE_TRAIT "glove" //inherited by your cool gloves
+#define BOOK_TRAIT "granter (book)" // knowledge is power
// unique trait sources, still defines
#define STATUE_MUTE "statue"
diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm
index ec7a11085c..a364e0b93c 100644
--- a/code/__DEFINES/vv.dm
+++ b/code/__DEFINES/vv.dm
@@ -73,6 +73,7 @@
#define VV_HK_EXPOSE "expose"
#define VV_HK_CALLPROC "proc_call"
#define VV_HK_MARK "mark"
+#define VV_HK_ADDCOMPONENT "addcomponent"
#define VV_HK_MODIFY_TRAITS "modtraits"
// /atom
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index a34b3ce67c..ad977ec493 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -11,6 +11,7 @@
#define LAZYINITLIST(L) if (!L) L = list()
#define UNSETEMPTY(L) if (L && !length(L)) L = null
+#define LAZYCOPY(L) (L ? L.Copy() : list() )
#define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } }
#define LAZYADD(L, I) if(!L) { L = list(); } L += I;
#define LAZYOR(L, I) if(!L) { L = list(); } L |= I;
@@ -21,34 +22,47 @@
#define LAZYCLEARLIST(L) if(L) L.Cut()
#define SANITIZE_LIST(L) ( islist(L) ? L : list() )
#define reverseList(L) reverseRange(L.Copy())
+#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += list(V);
+#define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; }
-// binary search sorted insert
-// IN: Object to be inserted
-// LIST: List to insert object into
-// TYPECONT: The typepath of the contents of the list
-// COMPARE: The variable on the objects to compare
-#define BINARY_INSERT(IN, LIST, TYPECONT, COMPARE) \
- var/__BIN_CTTL = length(LIST);\
- if(!__BIN_CTTL) {\
- LIST += IN;\
- } else {\
- var/__BIN_LEFT = 1;\
- var/__BIN_RIGHT = __BIN_CTTL;\
- var/__BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\
- var/##TYPECONT/__BIN_ITEM;\
- while(__BIN_LEFT < __BIN_RIGHT) {\
- __BIN_ITEM = LIST[__BIN_MID];\
- if(__BIN_ITEM.##COMPARE <= IN.##COMPARE) {\
- __BIN_LEFT = __BIN_MID + 1;\
- } else {\
- __BIN_RIGHT = __BIN_MID;\
+/// Passed into BINARY_INSERT to compare keys
+#define COMPARE_KEY __BIN_LIST[__BIN_MID]
+/// Passed into BINARY_INSERT to compare values
+#define COMPARE_VALUE __BIN_LIST[__BIN_LIST[__BIN_MID]]
+
+/****
+ * Binary search sorted insert
+ * INPUT: Object to be inserted
+ * LIST: List to insert object into
+ * TYPECONT: The typepath of the contents of the list
+ * COMPARE: The object to compare against, usualy the same as INPUT
+ * COMPARISON: The variable on the objects to compare
+ */
+#define BINARY_INSERT(INPUT, LIST, TYPECONT, COMPARE, COMPARISON, COMPTYPE) \
+ do {\
+ var/list/__BIN_LIST = LIST;\
+ var/__BIN_CTTL = length(__BIN_LIST);\
+ if(!__BIN_CTTL) {\
+ __BIN_LIST += INPUT;\
+ } else {\
+ var/__BIN_LEFT = 1;\
+ var/__BIN_RIGHT = __BIN_CTTL;\
+ var/__BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\
+ var/##TYPECONT/__BIN_ITEM;\
+ while(__BIN_LEFT < __BIN_RIGHT) {\
+ __BIN_ITEM = COMPTYPE;\
+ if(__BIN_ITEM.##COMPARISON <= COMPARE.##COMPARISON) {\
+ __BIN_LEFT = __BIN_MID + 1;\
+ } else {\
+ __BIN_RIGHT = __BIN_MID;\
+ };\
+ __BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\
};\
- __BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\
+ __BIN_ITEM = COMPTYPE;\
+ __BIN_MID = __BIN_ITEM.##COMPARISON > COMPARE.##COMPARISON ? __BIN_MID : __BIN_MID + 1;\
+ __BIN_LIST.Insert(__BIN_MID, INPUT);\
};\
- __BIN_ITEM = LIST[__BIN_MID];\
- __BIN_MID = __BIN_ITEM.##COMPARE > IN.##COMPARE ? __BIN_MID : __BIN_MID + 1;\
- LIST.Insert(__BIN_MID, IN);\
- }
+ } while(FALSE)
//Returns a list in plain english as a string
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
@@ -231,40 +245,77 @@
//Picks a random element from a list based on a weighting system:
//1. Adds up the total of weights for each element
-//2. Gets a number between 1 and that total
+//2. Gets the total from 0% to 100% of previous total value.
//3. For each element in the list, subtracts its weighting from that number
//4. If that makes the number 0 or less, return that element.
-/proc/pickweight(list/L)
+/proc/pickweight(list/L, base_weight = 1)
var/total = 0
var/item
for (item in L)
if (!L[item])
- L[item] = 1
+ L[item] = base_weight
total += L[item]
- total = rand(1, total)
+ total = rand() * total
for (item in L)
- total -=L [item]
+ total -= L[item]
if (total <= 0)
return item
- return null
-
-/proc/pickweightAllowZero(list/L) //The original pickweight proc will sometimes pick entries with zero weight. I'm not sure if changing the original will break anything, so I left it be.
+//Picks a number of elements from a list based on weight.
+//This is highly optimised and good for things like grabbing 200 items from a list of 40,000
+//Much more efficient than many pickweight calls
+/proc/pickweight_mult(list/L, quantity, base_weight = 1)
+ //First we total the list as normal
var/total = 0
var/item
for (item in L)
if (!L[item])
- L[item] = 0
+ L[item] = base_weight
total += L[item]
- total = rand(0, total)
- for (item in L)
- total -=L [item]
- if (total <= 0 && L[item])
- return item
+ //Next we will make a list of randomly generated numbers, called Requests
+ //It is critical that this list be sorted in ascending order, so we will build it in that order
+ //First one is free, so we start counting at 2
+ var/list/requests = list(rand(1, total))
+ for (var/i in 2 to quantity)
+ //Each time we generate the next request
+ var/newreq = rand()* total
+ //We will loop through all existing requests
+ for (var/j in 1 to requests.len)
+ //We keep going through the list until we find an element which is bigger than the one we want to add
+ if (requests[j] > newreq)
+ //And then we insert the newqreq at that point, pushing everything else forward
+ requests.Insert(j, newreq)
+ break
- return null
+
+
+ //Now when we get here, we have a list of random numbers sorted in ascending order.
+ //The length of that list is equal to Quantity passed into this function
+ //Next we make a list to store results
+ var/list/results = list()
+
+ //Zero the total, we'll reuse it
+ total = 0
+
+ //Now we will iterate forward through the items list, adding each weight to the total
+ for (item in L)
+ total += L[item]
+
+ //After each item we do a while loop
+ while (requests.len && total >= requests[1])
+ //If the total is higher than the value of the first request
+ results += item //We add this item to the results list
+ requests.Cut(1,2) //And we cut off the top of the requests list
+
+ //This while loop will repeat until the next request is higher than the total.
+ //The current item might be added to the results list many times, in this process
+
+ //By the time we get here:
+ //Requests will be empty
+ //Results will have a length of quality
+ return results
//Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
@@ -274,6 +325,13 @@
. = L[picked]
L.Cut(picked,picked+1) //Cut is far more efficient that Remove()
+//Pick a random element from the list by weight and remove it from the list.
+//Result is returned as a list in the format list(key, value)
+/proc/pickweight_n_take(list/L, base_weight = 1)
+ if (L.len)
+ . = pickweight(L, base_weight)
+ L.Remove(.)
+
//Returns the top(last) element from the list and removes it from the list (typical stack function)
/proc/pop(list/L)
if(L.len)
diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm
index 7e52fbe273..801a2cd431 100644
--- a/code/__HELPERS/icon_smoothing.dm
+++ b/code/__HELPERS/icon_smoothing.dm
@@ -61,7 +61,7 @@
var/adjacencies = 0
var/atom/movable/AM
- if(ismovableatom(A))
+ if(ismovable(A))
AM = A
if(AM.can_be_unanchored && !AM.anchored)
return 0
diff --git a/code/__HELPERS/level_traits.dm b/code/__HELPERS/level_traits.dm
index 3e6e88c8fa..030a324614 100644
--- a/code/__HELPERS/level_traits.dm
+++ b/code/__HELPERS/level_traits.dm
@@ -12,3 +12,5 @@
#define is_reserved_level(z) SSmapping.level_trait(z, ZTRAIT_RESERVED)
#define is_away_level(z) SSmapping.level_trait(z, ZTRAIT_AWAY)
+
+#define is_vr_level(z) SSmapping.level_trait(z, ZTRAIT_VR)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 2827e40120..d93a89a179 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -47,7 +47,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list)
return pick(GLOB.socks_list)
-/proc/random_features(intendedspecies)
+/proc/random_features(intendedspecies, intended_gender)
if(!GLOB.tails_list_human.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human)
if(!GLOB.tails_list_lizard.len)
@@ -149,7 +149,13 @@
var/color2 = random_short_color()
var/color3 = random_short_color()
- //CIT CHANGE - changes this entire return to support cit's snowflake parts
+ var/body_model = MALE
+ switch(intended_gender)
+ if(MALE, FEMALE)
+ body_model = intended_gender
+ if(PLURAL)
+ body_model = pick(MALE,FEMALE)
+
return(list(
"mcolor" = color1,
"mcolor2" = color2,
@@ -209,7 +215,7 @@
"ipc_antenna" = "None",
"flavor_text" = "",
"meat_type" = "Mammalian",
- "body_model" = MALE,
+ "body_model" = body_model,
"body_size" = RESIZE_DEFAULT_SIZE
))
diff --git a/code/__HELPERS/mouse_control.dm b/code/__HELPERS/mouse_control.dm
index a69c139d80..10fe976c26 100644
--- a/code/__HELPERS/mouse_control.dm
+++ b/code/__HELPERS/mouse_control.dm
@@ -11,7 +11,7 @@
var/screenviewY = screenview[2] * world.icon_size
var/ox = round(screenviewX/2) - client.pixel_x //"origin" x
var/oy = round(screenviewY/2) - client.pixel_y //"origin" y
- var/angle = SIMPLIFY_DEGREES(ATAN2(y - oy, x - ox))
+ var/angle = SIMPLIFY_DEGREES(arctan(y - oy, x - ox))
return angle
//Wow, specific name!
diff --git a/code/__HELPERS/radio.dm b/code/__HELPERS/radio.dm
index 5fe87bdf5b..dc52299025 100644
--- a/code/__HELPERS/radio.dm
+++ b/code/__HELPERS/radio.dm
@@ -2,9 +2,9 @@
/proc/sanitize_frequency(frequency, free = FALSE)
frequency = round(frequency)
if(free)
- . = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
+ . = clamp(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ)
else
- . = CLAMP(frequency, MIN_FREQ, MAX_FREQ)
+ . = clamp(frequency, MIN_FREQ, MAX_FREQ)
if(!(. % 2)) // Ensure the last digit is an odd number
. += 1
diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm
index faa8c22f38..dadd4322fb 100644
--- a/code/__HELPERS/sanitize_values.dm
+++ b/code/__HELPERS/sanitize_values.dm
@@ -6,6 +6,13 @@
return number
return default
+/proc/sanitize_num_clamp(number, min=0, max=1, default=0, quantize=0)
+ if(!isnum(number))
+ return default
+ . = clamp(number, min, max)
+ if(quantize)
+ . = round(number, quantize)
+
/proc/sanitize_text(text, default="")
if(istext(text))
return text
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index afa858afb7..8a196e8651 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -777,8 +777,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
tX = splittext(tX[1], ":")
tX = tX[1]
var/list/actual_view = getviewsize(C ? C.view : world.view)
- tX = CLAMP(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
- tY = CLAMP(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
+ tX = clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
+ tY = clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
return locate(tX, tY, tZ)
/proc/screen_loc2turf(text, turf/origin, client/C)
@@ -791,8 +791,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
tX = text2num(tX[2])
tZ = origin.z
var/list/actual_view = getviewsize(C ? C.view : world.view)
- tX = CLAMP(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx)
- tY = CLAMP(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy)
+ tX = clamp(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx)
+ tY = clamp(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy)
return locate(tX, tY, tZ)
/proc/IsValidSrc(datum/D)
@@ -1568,7 +1568,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
/proc/blood_sucking_checks(var/mob/living/carbon/target, check_neck, check_blood)
//Bypass this if the target isnt carbon.
if(!iscarbon(target))
- return TRUE
+ return TRUE
if(check_neck)
if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
return FALSE
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index fe4761ddcd..9a36c626ba 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -32,31 +32,12 @@
#endif
//Update this whenever you need to take advantage of more recent byond features
-#define MIN_COMPILER_VERSION 512
-#if DM_VERSION < MIN_COMPILER_VERSION
+#define MIN_COMPILER_VERSION 513
+#define MIN_COMPILER_BUILD 1508
+#if DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD
//Don't forget to update this part
#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
-#error You need version 512 or higher
-#endif
-
-//Compatability -- These procs were added in 513.1493, not 513.1490
-//Which really shoulda bumped us up to 514 right then and there but instead Lummox is a dumb dumb
-#if DM_BUILD < 1493
-#define length_char(args...) length(args)
-#define text2ascii_char(args...) text2ascii(args)
-#define copytext_char(args...) copytext(args)
-#define splittext_char(args...) splittext(args)
-#define spantext_char(args...) spantext(args)
-#define nonspantext_char(args...) nonspantext(args)
-#define findtext_char(args...) findtext(args)
-#define findtextEx_char(args...) findtextEx(args)
-#define findlasttext_char(args...) findlasttext(args)
-#define findlasttextEx_char(args...) findlasttextEx(args)
-#define replacetext_char(args...) replacetext(args)
-#define replacetextEx_char(args...) replacetextEx(args)
-// /regex procs
-#define Find_char(args...) Find(args)
-#define Replace_char(args...) Replace(args)
+#error You need version 513.1508 or higher
#endif
//Additional code for the above flags.
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 92113e5987..52eff15492 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -275,5 +275,15 @@ GLOBAL_LIST_INIT(bitfields, list(
"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/mapping.dm b/code/_globalvars/lists/mapping.dm
index fb8863ebe7..d214ec94ef 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -50,3 +50,8 @@ GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
GLOBAL_LIST_EMPTY(all_abstract_markers)
GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms
+
+///Away missions, VR, random z levels stuff.
+GLOBAL_LIST_EMPTY(random_zlevels_generated)
+GLOBAL_LIST_INIT(potential_away_levels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt"))
+GLOBAL_LIST_INIT(potential_vr_levels, generateMapList(filename = "[global.config.directory]/vr_config.txt"))
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/traits.dm b/code/_globalvars/traits.dm
new file mode 100644
index 0000000000..dd8b9f0d94
--- /dev/null
+++ b/code/_globalvars/traits.dm
@@ -0,0 +1,138 @@
+/*
+ FUN ZONE OF ADMIN LISTINGS
+ Try to keep this in sync with __DEFINES/traits.dm
+ quirks have it's own panel so we don't need them here.
+*/
+
+GLOBAL_LIST_INIT(traits_by_type, list(
+ /mob = list(
+ "TRAIT_BLIND" = TRAIT_BLIND,
+ "TRAIT_MUTE" = TRAIT_MUTE,
+ "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE,
+ "TRAIT_DEAF" = TRAIT_DEAF,
+ "TRAIT_NEARSIGHT" = TRAIT_NEARSIGHT,
+ "TRAIT_FAT" = TRAIT_FAT,
+ "TRAIT_HUSK" = TRAIT_HUSK,
+ "TRAIT_NOCLONE" = TRAIT_NOCLONE,
+ "TRAIT_CLUMSY" = TRAIT_CLUMSY,
+ "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
+ "TRAIT_DUMB" = TRAIT_DUMB,
+ "TRAIT_MONKEYLIKE" = TRAIT_MONKEYLIKE,
+ "TRAIT_PACIFISM" = TRAIT_PACIFISM,
+ "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN,
+ "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA,
+ "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH,
+ "TRAIT_DISFIGURED" = TRAIT_DISFIGURED,
+ "TRAIT_XENO_HOST" = TRAIT_XENO_HOST,
+ "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE,
+ "TRAIT_TASED_RESISTANCE" = TRAIT_TASED_RESISTANCE,
+ "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE,
+ "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE,
+ "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE,
+ "TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
+ "TRAIT_STABLELIVER" = TRAIT_STABLELIVER,
+ "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT,
+ "TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS,
+ "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD,
+ "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE,
+ "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE,
+ "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE,
+ "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE,
+ "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE,
+ "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER,
+ "TRAIT_NOFIRE" = TRAIT_NOFIRE,
+ "TRAIT_NOGUNS" = TRAIT_NOGUNS,
+ "TRAIT_NOHUNGER" = TRAIT_NOHUNGER,
+ "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER,
+ "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT,
+ "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE,
+ "TRAIT_EASYLIMBDISABLE" = TRAIT_EASYLIMBDISABLE,
+ "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER,
+ "TRAIT_NOBREATH" = TRAIT_NOBREATH,
+ "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC,
+ "TRAIT_HOLY" = TRAIT_HOLY,
+ "TRAIT_DEPRESSION" = TRAIT_DEPRESSION,
+ "TRAIT_JOLLY" = TRAIT_JOLLY,
+ "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE,
+ "TRAIT_NOSLIPWATER" = TRAIT_NOSLIPWATER,
+ "TRAIT_NOSLIPALL" = TRAIT_NOSLIPALL,
+ "TRAIT_NODEATH" = TRAIT_NODEATH,
+ "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT,
+ "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT,
+ "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD,
+ "TRAIT_HIJACKER" = TRAIT_HIJACKER,
+ "TRAIT_DISSECTED" = TRAIT_DISSECTED,
+ "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE,
+ "TRAIT_FEARLESS" = TRAIT_FEARLESS,
+ "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM,
+ "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM,
+ "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG,
+ "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG,
+ "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER,
+ "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION,
+ "TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION,
+ "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING,
+ "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING,
+ "TRAIT_SURGEON" = TRAIT_SURGEON,
+ "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER,
+ "TRAIT_MAGIC_CHOKE" = TRAIT_MAGIC_CHOKE,
+ "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT,
+ "TRAIT_LAW_ENFORCEMENT_METABOLISM" = TRAIT_LAW_ENFORCEMENT_METABOLISM,
+ "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH,
+ "TRAIT_UNSTABLE" = TRAIT_UNSTABLE,
+ "TRAIT_COLDBLOODED" = TRAIT_COLDBLOODED,
+ "TRAIT_NONATURALHEAL" = TRAIT_NONATURALHEAL,
+ "TRAIT_NORUNNING" = TRAIT_NORUNNING,
+ "TRAIT_NOMARROW" = TRAIT_NOMARROW,
+ "TRAIT_NOPULSE" = TRAIT_NOPULSE,
+ "TRAIT_EXEMPT_HEALTH_EVENTS" = TRAIT_EXEMPT_HEALTH_EVENTS,
+ "TRAIT_NO_MIDROUND_ANTAG" = TRAIT_NO_MIDROUND_ANTAG,
+ "TRAIT_PUGILIST" = TRAIT_PUGILIST,
+ "TRAIT_KI_VAMPIRE" = TRAIT_KI_VAMPIRE,
+ "TRAIT_PASSTABLE" = TRAIT_PASSTABLE,
+ "TRAIT_GIANT" = TRAIT_GIANT,
+ "TRAIT_DWARF" = TRAIT_DWARF,
+ "TRAIT_COMBAT_MODE_LOCKED" = TRAIT_COMBAT_MODE_LOCKED,
+ "TRAIT_SPRINT_LOCKED" = TRAIT_SPRINT_LOCKED,
+ "TRAIT_AUTO_CATCH_ITEM" = TRAIT_AUTO_CATCH_ITEM,
+ "TRAIT_FREESPRINT" = TRAIT_FREESPRINT,
+ "TRAIT_NO_INTERNALS" = TRAIT_NO_INTERNALS,
+ "TRAIT_NO_ALCOHOL" = TRAIT_NO_ALCOHOL,
+ "TRAIT_MUTATION_STASIS" = TRAIT_MUTATION_STASIS,
+ "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER,
+ "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP,
+ "TRAIT_SILENT_STEP" = TRAIT_SILENT_STEP,
+ "TRAIT_VORACIOUS" = TRAIT_VORACIOUS,
+ "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE,
+ "TRAIT_FREERUNNING" = TRAIT_FREERUNNING,
+ "TRAIT_SKITTISH" = TRAIT_SKITTISH,
+ "TRAIT_POOR_AIM" = TRAIT_POOR_AIM,
+ "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA,
+ "TRAIT_DRUNK_HEALING" = TRAIT_DRUNK_HEALING,
+ "TRAIT_TAGGER" = TRAIT_TAGGER,
+ "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER,
+ "TRAIT_MUSICIAN" = TRAIT_MUSICIAN,
+ "TRAIT_MASO" = TRAIT_MASO,
+ "TRAIT_HIGH_BLOOD" = TRAIT_HIGH_BLOOD,
+ "TRAIT_EMPATH" = TRAIT_EMPATH,
+ "TRAIT_FRIENDLY" = TRAIT_FRIENDLY
+ ),
+ /obj/item/bodypart = list(
+ "TRAIT_PARALYSIS" = TRAIT_PARALYSIS
+ ),
+ /obj/item = list(
+ "TRAIT_NODROP" = TRAIT_NODROP,
+ "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT
+ )
+ ))
+
+
+/// value -> trait name, generated on use from trait_by_type global
+GLOBAL_LIST(trait_name_map)
+
+/proc/generate_trait_name_map()
+ . = list()
+ for(var/key in GLOB.traits_by_type)
+ for(var/tname in GLOB.traits_by_type[key])
+ var/val = GLOB.traits_by_type[key][tname]
+ .[val] = tname
diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm
index e028212e96..5e474331f6 100644
--- a/code/_onclick/hud/picture_in_picture.dm
+++ b/code/_onclick/hud/picture_in_picture.dm
@@ -102,8 +102,8 @@
add_overlay(standard_background)
/obj/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE)
- width = CLAMP(width, 0, max_dimensions)
- height = CLAMP(height, 0, max_dimensions)
+ width = clamp(width, 0, max_dimensions)
+ height = clamp(height, 0, max_dimensions)
src.width = width
src.height = height
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/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index b0e1d39d9a..98db89a100 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -155,9 +155,9 @@
/obj/item/proc/get_clamped_volume()
if(w_class)
if(force)
- return CLAMP((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
+ return clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
else
- return CLAMP(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
+ return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area)
var/message_verb = "attacked"
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index d596b5fabf..9f9870a9e5 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -5,7 +5,7 @@
return // seems legit.
// Things you might plausibly want to follow
- if(ismovableatom(A))
+ if(ismovable(A))
ManualFollow(A)
// Otherwise jump
diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index d7323700e4..4647b83cd7 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -103,7 +103,7 @@
return FALSE
var/temp = text2num(trim(str_val))
if(!isnull(temp))
- config_entry_value = CLAMP(integer ? round(temp) : temp, min_val, max_val)
+ config_entry_value = clamp(integer ? round(temp) : temp, min_val, max_val)
if(config_entry_value != temp && !(datum_flags & DF_VAR_EDITED))
log_config("Changing [name] from [temp] to [config_entry_value]!")
return TRUE
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index cb18d37f21..6b0be68e60 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -217,7 +217,8 @@
config_entry_value = list( //DEFAULTS
/mob/living/simple_animal = 1,
/mob/living/silicon/pai = 1,
- /mob/living/carbon/alien/humanoid/hunter = -1,
+ /mob/living/carbon/alien/humanoid/sentinel = 0.25,
+ /mob/living/carbon/alien/humanoid/drone = 0.5,
/mob/living/carbon/alien/humanoid/royal/praetorian = 1,
/mob/living/carbon/alien/humanoid/royal/queen = 3
)
@@ -248,8 +249,18 @@
/datum/config_entry/number/movedelay/run_delay
+/datum/config_entry/number/movedelay/run_delay/ValidateAndSet()
+ . = ..()
+ var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run)
+ M.sync()
+
/datum/config_entry/number/movedelay/walk_delay
+/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet()
+ . = ..()
+ var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
+ M.sync()
+
/datum/config_entry/number/movedelay/sprint_speed_increase
config_entry_value = 1
@@ -288,6 +299,8 @@
/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
+/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded?
+
/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
config_entry_value = 18000
min_val = 0
@@ -455,10 +468,12 @@
config_entry_value = RESIZE_DEFAULT_SIZE
min_val = 0.1 //to avoid issues with zeros and negative values.
max_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
/datum/config_entry/number/body_size_max
config_entry_value = RESIZE_DEFAULT_SIZE
min_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
//Pun-Pun movement slowdown given to characters with a body size smaller than this value,
//to compensate for their smaller hitbox.
@@ -467,13 +482,14 @@
config_entry_value = RESIZE_DEFAULT_SIZE * 0.85
min_val = 0
max_val = RESIZE_DEFAULT_SIZE
+ integer = FALSE
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
//doesn't apply to floating or crawling mobs
/datum/config_entry/number/body_size_slowdown_multiplier
config_entry_value = 0.25
min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead.
+ integer = FALSE
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
-/datum/config_entry/number/allow_custom_skintones
- config_entry_value = 1
+/datum/config_entry/flag/allow_custom_skintones
diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm
index 12b467b624..c6e6a84bcf 100644
--- a/code/controllers/subsystem/lighting.dm
+++ b/code/controllers/subsystem/lighting.dm
@@ -6,7 +6,6 @@ SUBSYSTEM_DEF(lighting)
name = "Lighting"
wait = 2
init_order = INIT_ORDER_LIGHTING
- flags = SS_TICKER
/datum/controller/subsystem/lighting/stat_entry()
..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]")
@@ -85,4 +84,4 @@ SUBSYSTEM_DEF(lighting)
/datum/controller/subsystem/lighting/Recover()
initialized = SSlighting.initialized
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index f13d5a2779..89155cefb3 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -1,3 +1,5 @@
+#define INIT_ANNOUNCE(X) to_chat(world, "[X] "); log_world(X)
+
SUBSYSTEM_DEF(mapping)
name = "Mapping"
init_order = INIT_ORDER_MAPPING
@@ -81,7 +83,9 @@ SUBSYSTEM_DEF(mapping)
// Pick a random away mission.
if(CONFIG_GET(flag/roundstart_away))
createRandomZlevel()
-
+ // Pick a random VR level.
+ if(CONFIG_GET(flag/roundstart_vr))
+ createRandomZlevel(VIRT_REALITY_NAME, list(ZTRAIT_AWAY = TRUE, ZTRAIT_VR = TRUE), GLOB.potential_vr_levels)
// Generate mining ruins
loading_ruins = TRUE
@@ -181,7 +185,6 @@ SUBSYSTEM_DEF(mapping)
z_list = SSmapping.z_list
-#define INIT_ANNOUNCE(X) to_chat(world, "[X] "); log_world(X)
/datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE)
. = list()
var/start_time = REALTIMEOFDAY
@@ -265,7 +268,6 @@ SUBSYSTEM_DEF(mapping)
msg += ", [FailedZs[I]]"
msg += ". Yell at your server host!"
INIT_ANNOUNCE(msg)
-#undef INIT_ANNOUNCE
GLOBAL_LIST_EMPTY(the_station_areas)
@@ -410,52 +412,63 @@ GLOBAL_LIST_EMPTY(the_station_areas)
//Manual loading of away missions.
/client/proc/admin_away()
- set name = "Load Away Mission"
+ set name = "Load Away Mission / Virtual Reality"
set category = "Fun"
if(!holder ||!check_rights(R_FUN))
return
+ var/choice = alert(src, "What kind of level would you like to load?", "Load Away/VR", AWAY_MISSION_NAME, VIRT_REALITY_NAME, "Cancel")
- if(!GLOB.the_gateway)
- if(alert("There's no home gateway on the station. You sure you want to continue ?", "Uh oh", "Yes", "No") != "Yes")
+ var/list/possible_options
+ var/list/ztraits
+ switch(choice)
+ if(VIRT_REALITY_NAME)
+ possible_options = GLOB.potential_vr_levels
+ ztraits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_VR = TRUE)
+ if(AWAY_MISSION_NAME)
+ if(!GLOB.the_gateway)
+ if(alert("There's no home gateway on the station. You sure you want to continue ?", "Uh oh", "Yes", "No") != "Yes")
+ return
+ possible_options = GLOB.potential_away_levels
+ ztraits = list(ZTRAIT_AWAY = TRUE)
+ else
return
- var/list/possible_options = GLOB.potentialRandomZlevels + "Custom"
- var/away_name
- var/datum/space_level/away_level
+ possible_options += "Custom"
+ var/lvl_name
+ var/datum/space_level/level
- var/answer = input("What kind ? ","Away") as null|anything in possible_options
+ var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options
switch(answer)
+ if(null)
+ return
if("Custom")
var/mapfile = input("Pick file:", "File") as null|file
if(!mapfile)
return
- away_name = "[mapfile] custom"
- to_chat(usr,"Loading [away_name]... ")
- var/datum/map_template/template = new(mapfile, "Away Mission")
- away_level = template.load_new_z()
+ lvl_name = "[mapfile] custom"
+ to_chat(usr,"Loading [lvl_name]... ")
+ var/datum/map_template/template = new(mapfile, choice, ztraits)
+ level = template.load_new_z(ztraits)
else
- if(answer in GLOB.potentialRandomZlevels)
- away_name = answer
- to_chat(usr,"Loading [away_name]... ")
- var/datum/map_template/template = new(away_name, "Away Mission")
- away_level = template.load_new_z()
- else
- return
+ lvl_name = answer
+ to_chat(usr,"Loading [lvl_name]... ")
+ var/datum/map_template/template = new(lvl_name, choice)
+ level = template.load_new_z(ztraits)
- message_admins("Admin [key_name_admin(usr)] has loaded [away_name] away mission.")
- log_admin("Admin [key_name(usr)] has loaded [away_name] away mission.")
- if(!away_level)
- message_admins("Loading [away_name] failed!")
+ message_admins("Admin [key_name_admin(usr)] has loaded [lvl_name] [choice].")
+ log_admin("Admin [key_name(usr)] has loaded [lvl_name] [choice].")
+ if(!level)
+ message_admins("Loading [lvl_name] failed!")
return
- if(GLOB.the_gateway)
+ if(choice == AWAY_MISSION_NAME && GLOB.the_gateway)
//Link any found away gate with station gate
var/obj/machinery/gateway/centeraway/new_gate
for(var/obj/machinery/gateway/centeraway/G in GLOB.machines)
- if(G.z == away_level.z_value) //I'll have to refactor gateway shitcode before multi-away support.
+ if(G.z == level.z_value) //I'll have to refactor gateway shitcode before multi-away support.
new_gate = G
break
//Link station gate with away gate and remove wait time.
diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm
deleted file mode 100644
index a462e2b645..0000000000
--- a/code/controllers/subsystem/processing/flightpacks.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-PROCESSING_SUBSYSTEM_DEF(flightpacks)
- name = "Flightpack Movement"
- priority = FIRE_PRIORITY_FLIGHTPACKS
- wait = 2
- stat_tag = "FM"
- flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING
-
- var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL
-
-/datum/controller/subsystem/processing/flightpacks/Initialize()
- sync_flightsuit_processing()
-
-/datum/controller/subsystem/processing/flightpacks/vv_edit_var(var_name, var_value)
- ..()
- switch(var_name)
- if("flightsuit_processing")
- sync_flightsuit_processing()
-
-/datum/controller/subsystem/processing/flightpacks/proc/sync_flightsuit_processing()
- for(var/obj/item/flightpack/FP in processing)
- FP.sync_processing(src)
- if(flightsuit_processing == FLIGHTSUIT_PROCESSING_NONE) //Don't even bother firing.
- can_fire = FALSE
- else
- can_fire = TRUE
diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm
index ec8b243073..ef10e0626c 100644
--- a/code/controllers/subsystem/profiler.dm
+++ b/code/controllers/subsystem/profiler.dm
@@ -5,7 +5,7 @@ SUBSYSTEM_DEF(profiler)
init_order = INIT_ORDER_PROFILER
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
wait = 3000
- flags = SS_NO_TICK_CHECK
+ flags = SS_NO_TICK_CHECK
var/fetch_cost = 0
var/write_cost = 0
@@ -31,23 +31,12 @@ SUBSYSTEM_DEF(profiler)
return ..()
/datum/controller/subsystem/profiler/proc/StartProfiling()
-#if DM_BUILD < 1506 || DM_VERSION < 513
- stack_trace("Auto profiling unsupported on this byond version")
- CONFIG_SET(flag/auto_profile, FALSE)
-#else
world.Profile(PROFILE_START)
-#endif
/datum/controller/subsystem/profiler/proc/StopProfiling()
-#if DM_BUILD >= 1506 && DM_VERSION >= 513
world.Profile(PROFILE_STOP)
-#endif
/datum/controller/subsystem/profiler/proc/DumpFile()
-#if DM_BUILD < 1506 || DM_VERSION < 513
- stack_trace("Auto profiling unsupported on this byond version")
- CONFIG_SET(flag/auto_profile, FALSE)
-#else
var/timer = TICK_USAGE_REAL
var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json")
fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
@@ -60,4 +49,3 @@ SUBSYSTEM_DEF(profiler)
timer = TICK_USAGE_REAL
WRITE_FILE(json_file, current_profile_data)
write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
-#endif
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index e4a3ff1f9a..a3e804d541 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -217,13 +217,13 @@ SUBSYSTEM_DEF(shuttle)
call_reason = trim(html_encode(call_reason))
- if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && seclevel2num(get_security_level()) > SEC_LEVEL_GREEN)
+ if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && GLOB.security_level > SEC_LEVEL_GREEN)
to_chat(user, "You must provide a reason.")
return
var/area/signal_origin = get_area(user)
var/emergency_reason = "\nNature of emergency:\n\n[call_reason]"
- var/security_num = seclevel2num(get_security_level())
+ var/security_num = GLOB.security_level
switch(security_num)
if(SEC_LEVEL_RED,SEC_LEVEL_DELTA)
emergency.request(null, signal_origin, html_decode(emergency_reason), 1) //There is a serious threat we gotta move no time to give them five minutes.
@@ -285,7 +285,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/canRecall()
if(!emergency || emergency.mode != SHUTTLE_CALL || emergencyNoRecall || SSticker.mode.name == "meteor")
return
- var/security_num = seclevel2num(get_security_level())
+ var/security_num = GLOB.security_level
switch(security_num)
if(SEC_LEVEL_GREEN)
if(emergency.timeLeft(1) < emergencyCallTime)
@@ -642,7 +642,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end without being a proper shuttle call?
if(EMERGENCY_IDLE_OR_RECALLED)
SSshuttle.emergency.request(silent = TRUE)
- priority_announce("The shift has come to an end and the shuttle called. [seclevel2num(get_security_level()) == SEC_LEVEL_RED ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [emergency.timeLeft(600)] minutes.", null, "shuttlecalled", "Priority")
+ priority_announce("The shift has come to an end and the shuttle called. [GLOB.security_level == SEC_LEVEL_RED ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [emergency.timeLeft(600)] minutes.", null, "shuttlecalled", "Priority")
log_game("Round end vote passed. Shuttle has been auto-called.")
message_admins("Round end vote passed. Shuttle has been auto-called.")
emergencyNoRecall = TRUE
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index a7be36abc2..8042631b7b 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -387,6 +387,9 @@ SUBSYSTEM_DEF(ticker)
for(var/mob/dead/new_player/N in GLOB.player_list)
var/mob/living/carbon/human/player = N.new_character
if(istype(player) && player.mind && player.mind.assigned_role)
+ var/datum/job/J = SSjob.GetJob(player.mind.assigned_role)
+ if(J)
+ J.standard_assign_skills(player.mind)
if(player.mind.assigned_role == "Captain")
captainless=0
if(player.mind.assigned_role != player.mind.special_role)
diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm
index bd2fb854af..36bf992cfb 100644
--- a/code/controllers/subsystem/timer.dm
+++ b/code/controllers/subsystem/timer.dm
@@ -94,7 +94,7 @@ SUBSYSTEM_DEF(timer)
if(ctime_timer.flags & TIMER_LOOP)
ctime_timer.spent = 0
ctime_timer.timeToRun = REALTIMEOFDAY + ctime_timer.wait
- BINARY_INSERT(ctime_timer, clienttime_timers, datum/timedevent, timeToRun)
+ BINARY_INSERT(ctime_timer, clienttime_timers, datum/timedevent, ctime_timer, timeToRun, COMPARE_KEY)
else
qdel(ctime_timer)
@@ -423,7 +423,7 @@ SUBSYSTEM_DEF(timer)
L = SStimer.second_queue
if(L)
- BINARY_INSERT(src, L, datum/timedevent, timeToRun)
+ BINARY_INSERT(src, L, datum/timedevent, src, timeToRun, COMPARE_KEY)
return
//get the list of buckets
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index a202afd905..97a5ec2c2b 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -352,7 +352,6 @@ SUBSYSTEM_DEF(vote)
if("dynamic")
if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started.
return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.")
- GLOB.master_mode = "dynamic"
var/list/runnable_storytellers = config.get_runnable_storytellers()
var/datum/dynamic_storyteller/picked
for(var/T in runnable_storytellers)
@@ -361,7 +360,7 @@ SUBSYSTEM_DEF(vote)
picked = S
runnable_storytellers[S] *= round(stored_gamemode_votes[initial(S.name)]*100000,1)
if(!picked)
- picked = pickweightAllowZero(runnable_storytellers)
+ picked = pickweight(runnable_storytellers, 0)
GLOB.dynamic_storyteller_type = picked
if("map")
var/datum/map_config/VM = config.maplist[.]
@@ -489,6 +488,7 @@ SUBSYSTEM_DEF(vote)
modes_to_add -= "traitor" // makes it so that traitor is always available
choices.Add(modes_to_add)
if("dynamic")
+ GLOB.master_mode = "dynamic"
var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight)
for(var/T in config.storyteller_cache)
var/datum/dynamic_storyteller/S = T
diff --git a/code/datums/action.dm b/code/datums/action.dm
index f2f93ac40d..8862482dc2 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -171,7 +171,7 @@
if(!..())
return 0
var/mob/M = target
- M.ghostize(1)
+ M.ghostize(can_reenter_corpse = TRUE, voluntary = TRUE)
/datum/action/proc/OnUpdatedIcon()
UpdateButtonIcon()
diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm
index ebddc187ae..9c6bb2ebfd 100644
--- a/code/datums/ai_laws.dm
+++ b/code/datums/ai_laws.dm
@@ -253,7 +253,7 @@
var/datum/ai_laws/lawtype
var/list/law_weights = CONFIG_GET(keyed_list/law_weight)
while(!lawtype && law_weights.len)
- var/possible_id = pickweightAllowZero(law_weights)
+ var/possible_id = pickweight(law_weights, 0)
lawtype = lawid_to_type(possible_id)
if(!lawtype)
law_weights -= possible_id
diff --git a/code/datums/components/bouncy.dm b/code/datums/components/bouncy.dm
index c7ca85455b..fed603410e 100644
--- a/code/datums/components/bouncy.dm
+++ b/code/datums/components/bouncy.dm
@@ -4,7 +4,7 @@
var/list/bounce_signals = list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK)
/datum/component/bouncy/Initialize(_bouncy_mod, list/_bounce_signals)
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
if(_bouncy_mod)
bouncy_mod = _bouncy_mod
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index e5625dee6a..441a161428 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -55,7 +55,7 @@
log_combat(user, H, "starts slicing the throat of")
playsound(H.loc, butcher_sound, 50, TRUE, -1)
- if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source))
+ if(do_mob(user, H, clamp(500 / source.force, 30, 100)) && H.Adjacent(source))
if(H.has_status_effect(/datum/status_effect/neck_slice))
user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse! ", 1, \
"Their neck has already been already cut, you can't make the bleeding any worse! ")
@@ -65,7 +65,7 @@
"[user] slits your throat... ")
log_combat(user, H, "finishes slicing the throat of")
H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD)
- H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30)
+ H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30)
H.apply_status_effect(/datum/status_effect/neck_slice)
/datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat)
diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm
index cf0e1bdec9..9eb3fcaaea 100644
--- a/code/datums/components/crafting/recipes/recipes_misc.dm
+++ b/code/datums/components/crafting/recipes/recipes_misc.dm
@@ -115,6 +115,33 @@
//Tools & Storage//
///////////////////
+/datum/crafting_recipe/upgraded_gauze
+ name = "Improved Gauze"
+ result = /obj/item/stack/medical/gauze/adv
+ time = 1
+ reqs = list(/obj/item/stack/medical/gauze = 1,
+ /datum/reagent/space_cleaner/sterilizine = 10)
+ category = CAT_MISC
+ subcategory = CAT_TOOL
+
+/datum/crafting_recipe/bruise_pack
+ name = "Bruise Pack"
+ result = /obj/item/stack/medical/bruise_pack
+ time = 1
+ reqs = list(/obj/item/stack/medical/gauze = 1,
+ /datum/reagent/medicine/styptic_powder = 10)
+ category = CAT_MISC
+ subcategory = CAT_TOOL
+
+/datum/crafting_recipe/burn_pack
+ name = "Brun Ointment"
+ result = /obj/item/stack/medical/ointment
+ time = 1
+ reqs = list(/obj/item/stack/medical/gauze = 1,
+ /datum/reagent/medicine/silver_sulfadiazine = 10)
+ category = CAT_MISC
+ subcategory = CAT_TOOL
+
/datum/crafting_recipe/ghettojetpack
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
diff --git a/code/datums/components/edit_complainer.dm b/code/datums/components/edit_complainer.dm
index bf52296e2c..e2cca2eb50 100644
--- a/code/datums/components/edit_complainer.dm
+++ b/code/datums/components/edit_complainer.dm
@@ -3,7 +3,7 @@
var/list/say_lines
/datum/component/edit_complainer/Initialize(list/text)
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
var/static/list/default_lines = list(
diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm
index 820208a319..2e5834c025 100644
--- a/code/datums/components/explodable.dm
+++ b/code/datums/components/explodable.dm
@@ -13,7 +13,7 @@
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/explodable_attack)
RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/explodable_insert_item)
RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/detonate)
- if(ismovableatom(parent))
+ if(ismovable(parent))
RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/explodable_impact)
RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/explodable_bump)
if(isitem(parent))
diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm
index 702ec9329a..5ef2ac2baf 100644
--- a/code/datums/components/fantasy/prefixes.dm
+++ b/code/datums/components/fantasy/prefixes.dm
@@ -54,7 +54,7 @@
/datum/fantasy_affix/pyromantic/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
- comp.appliedComponents += master.AddComponent(/datum/component/igniter, CLAMP(comp.quality, 1, 10))
+ comp.appliedComponents += master.AddComponent(/datum/component/igniter, clamp(comp.quality, 1, 10))
return "pyromantic [newName]"
/datum/fantasy_affix/vampiric
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/infective.dm b/code/datums/components/infective.dm
index ad2b7ded14..8d3c6ab81f 100644
--- a/code/datums/components/infective.dm
+++ b/code/datums/components/infective.dm
@@ -13,7 +13,7 @@
expire_time = world.time + expire_in
QDEL_IN(src, expire_in)
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean)
RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle)
diff --git a/code/datums/components/knockback.dm b/code/datums/components/knockback.dm
index 988a0e575e..3899e92a22 100644
--- a/code/datums/components/knockback.dm
+++ b/code/datums/components/knockback.dm
@@ -34,7 +34,7 @@
do_knockback(target, null, angle2dir(Angle))
/datum/component/knockback/proc/do_knockback(atom/target, mob/thrower, throw_dir)
- if(!ismovableatom(target) || throw_dir == null)
+ if(!ismovable(target) || throw_dir == null)
return
var/atom/movable/throwee = target
if(throwee.anchored && !throw_anchored)
diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm
index c7e59e0ead..181b24260b 100644
--- a/code/datums/components/magnetic_catch.dm
+++ b/code/datums/components/magnetic_catch.dm
@@ -2,7 +2,7 @@
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
- if(ismovableatom(parent))
+ if(ismovable(parent))
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/crossed_react)
RegisterSignal(parent, COMSIG_MOVABLE_UNCROSSED, .proc/uncrossed_react)
for(var/i in get_turf(parent))
diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm
index 20e3b317ec..de4425e208 100644
--- a/code/datums/components/mirage_border.dm
+++ b/code/datums/components/mirage_border.dm
@@ -14,8 +14,8 @@
var/x = target.x
var/y = target.y
var/z = target.z
- var/turf/southwest = locate(CLAMP(x - (direction & WEST ? range : 0), 1, world.maxx), CLAMP(y - (direction & SOUTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz))
- var/turf/northeast = locate(CLAMP(x + (direction & EAST ? range : 0), 1, world.maxx), CLAMP(y + (direction & NORTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz))
+ var/turf/southwest = locate(clamp(x - (direction & WEST ? range : 0), 1, world.maxx), clamp(y - (direction & SOUTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz))
+ var/turf/northeast = locate(clamp(x + (direction & EAST ? range : 0), 1, world.maxx), clamp(y + (direction & NORTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz))
//holder.vis_contents += block(southwest, northeast) // This doesnt work because of beta bug memes
for(var/i in block(southwest, northeast))
holder.vis_contents += i
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index 5e9382f88e..6938046e11 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -175,27 +175,27 @@
switch(sanity)
if(-INFINITY to SANITY_CRAZY)
setInsanityEffect(MAJOR_INSANITY_PEN)
- master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1.5) //Did we change something ? movetypes is runtiming, movetypes=(~FLYING))
+ master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/insane)
sanity_level = 6
if(SANITY_CRAZY to SANITY_UNSTABLE)
setInsanityEffect(MINOR_INSANITY_PEN)
- master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1)//, movetypes=(~FLYING))
+ master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/crazy)
sanity_level = 5
if(SANITY_UNSTABLE to SANITY_DISTURBED)
setInsanityEffect(0)
- master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.5)//, movetypes=(~FLYING))
+ master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/disturbed)
sanity_level = 4
if(SANITY_DISTURBED to SANITY_NEUTRAL)
setInsanityEffect(0)
- master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
+ master.remove_movespeed_modifier(MOVESPEED_ID_SANITY)
sanity_level = 3
if(SANITY_NEUTRAL+1 to SANITY_GREAT+1) //shitty hack but +1 to prevent it from responding to super small differences
setInsanityEffect(0)
- master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
+ master.remove_movespeed_modifier(MOVESPEED_ID_SANITY)
sanity_level = 2
if(SANITY_GREAT+1 to INFINITY)
setInsanityEffect(0)
- master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE)
+ master.remove_movespeed_modifier(MOVESPEED_ID_SANITY)
sanity_level = 1
//update_mood_icon()
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
index 7aacb745b6..29add286be 100644
--- a/code/datums/components/nanites.dm
+++ b/code/datums/components/nanites.dm
@@ -12,7 +12,7 @@
var/list/datum/nanite_program/programs = list()
var/max_programs = NANITE_PROGRAM_LIMIT
- var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when cheking for conflicts
+ var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when checking for conflicts
var/start_time = 0 ///Timestamp to when the nanites were first inserted in the host
var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans
var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners
@@ -175,7 +175,7 @@
return (nanite_volume > 0)
/datum/component/nanites/proc/adjust_nanites(datum/source, amount)
- nanite_volume = CLAMP(nanite_volume + amount, 0, max_nanites)
+ nanite_volume = clamp(nanite_volume + amount, 0, max_nanites)
if(nanite_volume <= 0) //oops we ran out
qdel(src)
@@ -187,7 +187,7 @@
if(remove || stealth)
return //bye icon
var/nanite_percent = (nanite_volume / max_nanites) * 100
- nanite_percent = CLAMP(CEILING(nanite_percent, 10), 10, 100)
+ nanite_percent = clamp(CEILING(nanite_percent, 10), 10, 100)
holder.icon_state = "nanites[nanite_percent]"
/datum/component/nanites/proc/on_emp(datum/source, severity)
@@ -249,13 +249,13 @@
return FALSE
/datum/component/nanites/proc/set_volume(datum/source, amount)
- nanite_volume = CLAMP(amount, 0, max_nanites)
+ nanite_volume = clamp(amount, 0, max_nanites)
/datum/component/nanites/proc/set_max_volume(datum/source, amount)
max_nanites = max(1, max_nanites)
/datum/component/nanites/proc/set_cloud(datum/source, amount)
- cloud_id = CLAMP(amount, 0, 100)
+ cloud_id = clamp(amount, 0, 100)
/datum/component/nanites/proc/set_cloud_sync(datum/source, method)
switch(method)
@@ -267,7 +267,7 @@
cloud_active = TRUE
/datum/component/nanites/proc/set_safety(datum/source, amount)
- safety_threshold = CLAMP(amount, 0, max_nanites)
+ safety_threshold = clamp(amount, 0, max_nanites)
/datum/component/nanites/proc/set_regen(datum/source, amount)
regen_rate = amount
diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm
index 2be22d01e5..49e6b91c6d 100644
--- a/code/datums/components/orbiter.dm
+++ b/code/datums/components/orbiter.dm
@@ -22,14 +22,14 @@
/datum/component/orbiter/RegisterWithParent()
. = ..()
var/atom/target = parent
- while(ismovableatom(target))
+ while(ismovable(target))
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react)
target = target.loc
/datum/component/orbiter/UnregisterFromParent()
. = ..()
var/atom/target = parent
- while(ismovableatom(target))
+ while(ismovable(target))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
target = target.loc
@@ -111,12 +111,12 @@
// These are prety rarely activated, how often are you following something in a bag?
if(oldloc && !isturf(oldloc)) // We used to be registered to it, probably
var/atom/target = oldloc
- while(ismovableatom(target))
+ while(ismovable(target))
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
target = target.loc
if(orbited?.loc && orbited.loc != newturf) // We want to know when anything holding us moves too
var/atom/target = orbited.loc
- while(ismovableatom(target))
+ while(ismovable(target))
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react, TRUE)
target = target.loc
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index 4d8cfc4412..00bb392787 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -21,7 +21,7 @@
var/list/offhands = list() // keyed list containing all the current riding offsets associated by mob
/datum/component/riding/Initialize()
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/vehicle_mob_buckle)
RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, .proc/vehicle_mob_unbuckle)
@@ -198,13 +198,14 @@
/datum/component/riding/human/Initialize()
. = ..()
+ directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER)
RegisterSignal(parent, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee)
/datum/component/riding/human/vehicle_mob_unbuckle(datum/source, mob/living/M, force = FALSE)
. = ..()
var/mob/living/carbon/human/H = parent
if(!length(H.buckled_mobs))
- H.remove_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING)
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/human_carry)
if(!fireman_carrying)
M.Daze(25)
REMOVE_TRAIT(M, TRAIT_MOBILITY_NOUSE, src)
@@ -213,7 +214,7 @@
. = ..()
var/mob/living/carbon/human/H = parent
if(length(H.buckled_mobs))
- H.add_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING, multiplicative_slowdown = fireman_carrying? FIREMAN_CARRY_SLOWDOWN : PIGGYBACK_CARRY_SLOWDOWN)
+ H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/human_carry, TRUE, fireman_carrying? FIREMAN_CARRY_SLOWDOWN : PIGGYBACK_CARRY_SLOWDOWN)
if(fireman_carrying)
ADD_TRAIT(M, TRAIT_MOBILITY_NOUSE, src)
@@ -261,6 +262,10 @@
/datum/component/riding/cyborg
+/datum/component/riding/cyborg/Initialize()
+ . = ..()
+ directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER)
+
/datum/component/riding/cyborg/ride_check(mob/user)
var/atom/movable/AM = parent
if(user.incapacitated())
diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm
index 422d73520e..6a32a46aef 100644
--- a/code/datums/components/rotation.dm
+++ b/code/datums/components/rotation.dm
@@ -14,7 +14,7 @@
var/default_rotation_direction = ROTATION_CLOCKWISE
/datum/component/simple_rotation/Initialize(rotation_flags = NONE ,can_user_rotate,can_be_rotated,after_rotation)
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
//throw if no rotation direction is specificed ?
diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm
new file mode 100644
index 0000000000..2052e57f49
--- /dev/null
+++ b/code/datums/components/shielded.dm
@@ -0,0 +1,191 @@
+/datum/component/shielded
+ dupe_mode = COMPONENT_DUPE_ALLOWED
+ can_transfer = TRUE
+ var/charges = 3
+ var/max_charges = 3
+ var/recharge_delay = 20 SECONDS //How long after we've been attacked before we can start recharging.
+ var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. set to zero to disable.
+ var/last_time_used //Last time the shield attempted to stop an attack.
+ var/accepted_slots
+ var/shield_state = "shield-old" //the state of the shield overlay.
+ var/broken_state //null by default.
+ var/recharge_sound = 'sound/magic/charge.ogg'
+ var/recharge_end_sound = 'sound/machines/ding.ogg'
+ var/mob/living/holder //who is currently benefiting from the shield.
+ var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging.
+ var/del_on_overload = FALSE //will delete itself once it has no charges left.
+
+/datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \
+ sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE)
+ var/isitem = isitem(parent)
+ if(!isitem && !isliving(parent))
+ return COMPONENT_INCOMPATIBLE
+ max_charges = max
+ charges = !isnull(current) ? current : max_charges
+ recharge_delay = delay
+ recharge_rate = rate
+ accepted_slots = slots
+ shield_state = state
+ broken_state = broken
+ recharge_sound = sound
+ recharge_end_sound = end_sound
+ dissipating = diss
+ del_on_overload = del_overload
+ if(dissipating && recharge_rate > 0)
+ recharge_rate = -recharge_rate
+ if(recharge_delay && recharge_rate && (charges < max_charges || dissipating))
+ START_PROCESSING(SSdcs, src)
+
+/datum/component/shielded/RegisterWithParent()
+ . = ..()
+ if(isitem(parent))
+ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
+ RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
+ else //it's a mob
+ var/mob/living/L = parent
+ RegisterSignal(L, COMSIG_LIVING_RUN_BLOCK, .proc/living_block)
+ holder = L
+ var/to_add = charges >= 1 ? shield_state : broken_state
+ if(to_add)
+ var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
+ M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01
+ holder.add_overlay(M, TRUE)
+
+/datum/component/shielded/UnregisterFromParent()
+ . = ..()
+ if(parent != holder) //not a mob, thus an item.
+ UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED))
+ if(holder)
+ UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS))
+ var/to_remove = charges >= 1 ? shield_state : broken_state
+ if(to_remove)
+ holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
+ holder = null
+
+/datum/component/shielded/process()
+ if(world.time < last_time_used && !dissipating)
+ return
+ var/old_charges = charges
+ charges = clamp(charges + recharge_rate, 0, max_charges)
+ if(round(old_charges) >= round(charges)) //only send outputs if it effectively gained at least one charge
+ return
+ var/sound = recharge_sound
+ if(dissipating ? !charges : charges == max_charges )
+ STOP_PROCESSING(SSdcs, src)
+ sound = recharge_end_sound
+ if(parent && sound)
+ playsound(parent, sound, 50, 1)
+ if(charges < 1 && del_on_overload)
+ if(holder)
+ holder.visible_message("[holder]'s shield overloads!")
+ qdel(src)
+ return
+ if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))
+ update_shield_overlay(charges < 1)
+
+/datum/component/shielded/proc/adjust_charges(amount)
+ var/old_charges = charges
+ charges = clamp(charges + amount, 0, max_charges)
+ if(recharge_delay && recharge_rate && (dissipating ? !charges : charges == max_charges))
+ STOP_PROCESSING(SSdcs, src)
+ if(charges < 1 && del_on_overload)
+ if(holder)
+ holder.visible_message("[holder]'s shield overloads!")
+ qdel(src)
+ return
+ if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))
+ update_shield_overlay(charges < 1)
+
+/datum/component/shielded/proc/update_shield_overlay(broken)
+ if(!holder)
+ return
+ var/to_remove = broken ? shield_state : broken_state
+ var/to_add = broken ? broken_state : shield_state
+ if(to_remove)
+ holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
+ if(to_add)
+ var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
+ M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
+ holder.add_overlay(M, TRUE)
+
+/datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot)
+ if(!(accepted_slots & slotdefine2slotbit(slot)))
+ return
+ holder = equipper
+ RegisterSignal(parent, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block)
+ RegisterSignal(parent, COMSIG_ITEM_CHECK_BLOCK, .proc/on_check_block)
+ RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield)
+ var/to_add = charges >= 1 ? shield_state : broken_state
+ if(to_add)
+ var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add)
+ M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01
+ equipper.add_overlay(M, TRUE)
+
+/datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper)
+ if(holder == dropper)
+ UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS)
+ UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK))
+ var/to_remove = charges >= 1 ? shield_state : broken_state
+ if(to_remove)
+ holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE)
+ holder = null
+
+/datum/component/shielded/proc/include_shield(mob/source, list/items)
+ items += parent
+
+/datum/component/shielded/proc/on_run_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
+ if(block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] >= 100) //already blocked by another shielded item, don't do anything.
+ block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges)
+ return BLOCK_NONE
+ last_time_used = world.time + recharge_delay
+ if(charges < 1)
+ return BLOCK_NONE
+ var/datum/effect_system/spark_spread/s = new
+ s.set_up(2, 1, source)
+ s.start()
+ owner.visible_message("[holder]'s shields deflect [attack_text] in a shower of sparks! ")
+ charges--
+ var/rounded_charges = round(charges)
+ if(recharge_delay && recharge_rate && !dissipating)
+ START_PROCESSING(SSdcs, src)
+ if(charges < 1)
+ owner.visible_message("[holder]'s shield overloads!")
+ if(del_on_overload)
+ qdel(src)
+ else
+ update_shield_overlay(TRUE)
+ block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100
+ block_return[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges
+ return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
+
+/datum/component/shielded/proc/on_check_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
+ if(charges >= 1)
+ block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100
+ block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges)
+
+/datum/component/shielded/proc/living_block(mob/living/source, real_attack, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list)
+ if(!real_attack)
+ if(charges >= 1)
+ return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100
+ return_list[BLOCK_RETURN_BLOCK_CAPACITY] = round(charges)
+ return
+ last_time_used = world.time + recharge_delay
+ if(charges < 1)
+ return BLOCK_NONE
+ var/datum/effect_system/spark_spread/s = new
+ s.set_up(2, 1, source)
+ s.start()
+ source.visible_message("[source]'s shields deflect [attack_text] in a shower of sparks! ")
+ charges--
+ var/rounded_charges = round(charges)
+ if(recharge_delay && recharge_rate && !dissipating)
+ START_PROCESSING(SSdcs, src)
+ if(charges < 1)
+ source.visible_message("[source]'s shield overloads!")
+ if(del_on_overload)
+ qdel(src)
+ else
+ update_shield_overlay(TRUE)
+ return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100
+ return_list[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges
+ return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm
index f070d9b22f..96807fe313 100644
--- a/code/datums/components/shrink.dm
+++ b/code/datums/components/shrink.dm
@@ -14,7 +14,7 @@
parent_atom.opacity = 0
if(isliving(parent_atom))
var/mob/living/L = parent_atom
- L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4)
+ L.add_movespeed_modifier(/datum/movespeed_modifier/shrink_ray)
if(iscarbon(L))
var/mob/living/carbon/C = L
C.unequip_everything()
@@ -35,7 +35,7 @@
parent_atom.opacity = oldopac
if(isliving(parent_atom))
var/mob/living/L = parent_atom
- L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/shrink_ray)
if(ishuman(L))
var/mob/living/carbon/human/H = L
H.physiology.damage_resistance += 100
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index ad538760db..792222b27b 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -16,7 +16,7 @@
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak)
- if(ismovableatom(parent))
+ if(ismovable(parent))
RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak)
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED), .proc/play_squeak_crossed)
RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react)
diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm
index 13267e74c3..b651133274 100644
--- a/code/datums/components/stationloving.dm
+++ b/code/datums/components/stationloving.dm
@@ -5,7 +5,7 @@
var/allow_death = FALSE
/datum/component/stationloving/Initialize(inform_admins = FALSE, allow_death = FALSE)
- if(!ismovableatom(parent))
+ if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds)
RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate)
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 4d3ecc8d17..851885b2ed 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -56,7 +56,8 @@
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
/obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
- /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol
+ /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol,
+ /obj/item/toy/plush/snakeplushie
))
/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index 4100942fec..aad6e8289f 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -15,6 +15,7 @@
var/datum/component/storage/concrete/master //If not null, all actions act on master and this is just an access point.
var/list/can_hold //if this is set, only things in this typecache will fit.
+ var/list/can_hold_extra //if this is set, it will also be able to hold these.
var/list/cant_hold //if this is set, anything in this typecache will not be able to fit.
var/list/mob/is_using //lazy list of mobs looking at the contents of this storage.
@@ -493,26 +494,25 @@
if(M && !stop_messages)
host.add_fingerprint(M)
return FALSE
- if(length(can_hold))
- if(!is_type_in_typecache(I, can_hold))
+ if(!length(can_hold_extra) || !is_type_in_typecache(I, can_hold_extra))
+ if(length(can_hold) && !is_type_in_typecache(I, can_hold))
if(!stop_messages)
to_chat(M, "[host] cannot hold [I]! ")
return FALSE
- if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold.
- if(!stop_messages)
- to_chat(M, "[host] cannot hold [I]! ")
- return FALSE
- // STORAGE LIMITS
+ if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold.
+ if(!stop_messages)
+ to_chat(M, "[host] cannot hold [I]! ")
+ return FALSE
+ if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS && I.w_class > max_w_class)
+ if(!stop_messages)
+ to_chat(M, "[I] is too long for [host]! ")
+ return FALSE
+ // STORAGE LIMITS
if(storage_flags & STORAGE_LIMIT_MAX_ITEMS)
if(real_location.contents.len >= max_items)
if(!stop_messages)
to_chat(M, "[host] has too many things in it, make some space! ")
return FALSE //Storage item is full
- if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS)
- if(I.w_class > max_w_class)
- if(!stop_messages)
- to_chat(M, "[I] is too long for [host]! ")
- return FALSE
if(storage_flags & STORAGE_LIMIT_COMBINED_W_CLASS)
var/sum_w_class = I.w_class
for(var/obj/item/_I in real_location)
diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm
index dd8607a51c..f37f574002 100644
--- a/code/datums/components/storage/ui.dm
+++ b/code/datums/components/storage/ui.dm
@@ -27,8 +27,8 @@
numbered_contents = _process_numerical_display()
adjusted_contents = numbered_contents.len
- var/columns = CLAMP(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns)
- var/rows = CLAMP(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows)
+ var/columns = clamp(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns)
+ var/rows = clamp(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows)
// First, boxes.
ui_boxes = get_ui_boxes()
@@ -105,7 +105,7 @@
// after this point we are sure we can somehow fit all items into our max number of rows.
// determine rows
- var/rows = CLAMP(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows)
+ var/rows = clamp(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows)
var/overrun = FALSE
if(used > our_volume)
@@ -198,7 +198,7 @@
M.active_storage.ui_hide(M)
M.active_storage = src
LAZYOR(is_using, M)
- if(volumetric_ui())
+ if(!M.client?.prefs?.no_tetris_storage && volumetric_ui())
//new volumetric ui bay-style
M.client.screen |= orient2hud_volumetric(M, maxallowedscreensize)
else
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index 30c6625049..0fbbcd59b0 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -181,7 +181,7 @@
/datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum)
var/time = 0
if(LAZYACCESS(time_left_list, "[type]"))
- time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum)
+ time = clamp(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum)
else
time = min(duration_minimum, duration_maximum)
LAZYSET(time_left_list, "[type]", time)
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index c31139dcd7..80570d0c3b 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -42,7 +42,7 @@
addtimer(CALLBACK(src, .proc/charge), charge_rate)
/datum/action/innate/dash/proc/charge()
- current_charges = CLAMP(current_charges + 1, 0, max_charges)
+ current_charges = clamp(current_charges + 1, 0, max_charges)
holder.update_action_buttons_icon()
if(recharge_sound)
playsound(dashing_item, recharge_sound, 50, 1)
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index f97fde6f7e..348f9e6778 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -29,7 +29,8 @@
VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object")
VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete")
VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player")
-// VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits")
+ VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element")
+ VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits")
//This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks!
//href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables!
@@ -37,8 +38,8 @@
/datum/proc/vv_do_topic(list/href_list)
if(!usr || !usr.client || !usr.client.holder || !check_rights(NONE))
return FALSE //This is VV, not to be called by anything else.
-// if(href_list[VV_HK_MODIFY_TRAITS])
-// usr.client.holder.modify_traits(src)
+ if(href_list[VV_HK_MODIFY_TRAITS])
+ usr.client.holder.modify_traits(src)
return TRUE
/datum/proc/vv_get_header()
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 330a3494d9..7e3ac29b2d 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -246,10 +246,10 @@
else
visibility_flags &= ~HIDDEN_SCANNER
- SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE))
+ SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE))
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
- cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20
+ cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20
stage_prob = max(properties["stage_rate"], 2)
SetSeverity(properties["severity"])
GenerateCure(properties)
@@ -304,7 +304,7 @@
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
/datum/disease/advance/proc/GenerateCure()
if(properties && properties.len)
- var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
+ var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len)
if(res == oldres)
return
cures = list(pick(advance_cures[res]))
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index e08d5c509c..e0df2a8f1b 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -309,7 +309,7 @@
unique_enzymes = generate_unique_enzymes()
uni_identity = generate_uni_identity()
generate_dna_blocks()
- features = random_features(species?.id)
+ features = random_features(species?.id, holder?.gender)
/datum/dna/stored //subtype used by brain mob's stored_dna
@@ -662,6 +662,6 @@
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
if(features["body_size"] < danger)
var/slowdown = 1 + round(danger/features["body_size"], 0.1) * CONFIG_GET(number/body_size_slowdown_multiplier)
- holder.add_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE, TRUE, 100, NONE, TRUE, slowdown, ALL, FLOATING|CRAWLING)
+ holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown)
else if(old_size < danger)
- holder.remove_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE)
+ holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride)
diff --git a/code/datums/elements/cleaning.dm b/code/datums/elements/cleaning.dm
index 3f80204089..d86fe22632 100644
--- a/code/datums/elements/cleaning.dm
+++ b/code/datums/elements/cleaning.dm
@@ -1,6 +1,6 @@
/datum/element/cleaning/Attach(datum/target)
. = ..()
- if(!ismovableatom(target))
+ if(!ismovable(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/Clean)
diff --git a/code/datums/elements/firestacker.dm b/code/datums/elements/firestacker.dm
index 39021d23bb..771812242f 100644
--- a/code/datums/elements/firestacker.dm
+++ b/code/datums/elements/firestacker.dm
@@ -10,7 +10,7 @@
/datum/element/firestacker/Attach(datum/target, amount)
. = ..()
- if(!ismovableatom(target))
+ if(!ismovable(target))
return ELEMENT_INCOMPATIBLE
src.amount = amount
diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm
index 7be4489e86..f763affcd1 100644
--- a/code/datums/explosion.dm
+++ b/code/datums/explosion.dm
@@ -121,14 +121,14 @@ GLOBAL_LIST_EMPTY(explosions)
if(dist <= round(max_range + world.view - 2, 1))
M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound)
if(baseshakeamount > 0)
- shake_camera(M, 25, CLAMP(baseshakeamount, 0, 10))
+ shake_camera(M, 25, clamp(baseshakeamount, 0, 10))
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
else if(dist <= far_dist)
- var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist
+ var/far_volume = clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound)
if(baseshakeamount > 0)
- shake_camera(M, 10, CLAMP(baseshakeamount*0.25, 0, 2.5))
+ shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5))
EX_PREPROCESS_CHECK_TICK
//postpone processing for a bit
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 4332b09ac6..f054867de4 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -116,7 +116,7 @@
"[A] slams your chest! You can't breathe! ")
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
if(D.losebreath <= 10)
- D.losebreath = CLAMP(D.losebreath + 5, 0, 10)
+ D.losebreath = clamp(D.losebreath + 5, 0, 10)
D.adjustOxyLoss(damage + 5)
log_combat(A, D, "quickchoked")
return TRUE
@@ -128,7 +128,7 @@
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.apply_damage(damage, BRUTE)
if(D.silent <= 10)
- D.silent = CLAMP(D.silent + 10, 0, 10)
+ D.silent = clamp(D.silent + 10, 0, 10)
log_combat(A, D, "neck chopped")
return TRUE
@@ -187,7 +187,7 @@
if(damage >= stunthreshold)
D.visible_message("[D] sputters and recoils in pain! ", "You recoil in pain as you are jabbed in a nerve! ")
D.drop_all_held_items()
-
+
return TRUE
//Krav Maga Gloves
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index c3d0deeac6..f07b1d8792 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -92,7 +92,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
/datum/material/plasma/on_applied(atom/source, amount, material_flags)
. = ..()
- if(ismovableatom(source))
+ if(ismovable(source))
source.AddElement(/datum/element/firestacker, amount=1)
source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, amount / 1250)
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 31704d5451..728c4fb51b 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -63,7 +63,11 @@
var/force_escaped = FALSE // Set by Into The Sunset command of the shuttle manipulator
var/list/learned_recipes //List of learned recipe TYPES.
+ /// Our skill holder.
+ var/datum/skill_holder/skill_holder
+
/datum/mind/New(var/key)
+ skill_holder = new
src.key = key
soulOwner = src
martial_art = default_martial_art
diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm
index 44ff87e8ae..608683c3dc 100644
--- a/code/datums/position_point_vector.dm
+++ b/code/datums/position_point_vector.dm
@@ -20,7 +20,7 @@
return sqrt(((b.x - a.x) ** 2) + ((b.y - a.y) ** 2))
/proc/angle_between_points(datum/point/a, datum/point/b)
- return ATAN2((b.y - a.y), (b.x - a.x))
+ return arctan((b.y - a.y), (b.x - a.x))
/datum/position //For positions with map x/y/z and pixel x/y so you don't have to return lists. Could use addition/subtraction in the future I guess.
var/x = 0
diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm
index faecf809cc..fbc194cc6f 100644
--- a/code/datums/progressbar.dm
+++ b/code/datums/progressbar.dm
@@ -38,7 +38,7 @@
if (user.client)
user.client.images += bar
- progress = CLAMP(progress, 0, goal)
+ progress = clamp(progress, 0, goal)
bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
if (!shown)
user.client.images += bar
diff --git a/code/datums/skills/_check_skills.dm b/code/datums/skills/_check_skills.dm
new file mode 100644
index 0000000000..d9dc6dad3d
--- /dev/null
+++ b/code/datums/skills/_check_skills.dm
@@ -0,0 +1,16 @@
+// yeah yeah verbs suck whatever I suck at this fix this someone please - kevinz000
+
+/mob/verb/check_skills()
+ set name = "Check Skills"
+ set category = "IC"
+ set desc = "Check your skills (if you have any..)"
+
+ if(!mind)
+ to_chat(usr, "How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without a mind? ")
+ return
+ if(!mind.skill_holder)
+ to_chat(usr, "How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without the capability for skills? (PROBABLY A BUG, PRESS F1.) ")
+ return
+ var/datum/browser/B = new(usr, "skilldisplay_[REF(src)]", "Skills of [src]")
+ B.set_content(mind.skill_holder.html_readout())
+ B.open()
diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm
new file mode 100644
index 0000000000..2dd321c4c6
--- /dev/null
+++ b/code/datums/skills/_skill.dm
@@ -0,0 +1,95 @@
+GLOBAL_LIST_INIT(skill_datums, init_skill_datums())
+
+/proc/init_skill_datums()
+ . = list()
+ for(var/path in subtypesof(/datum/skill))
+ var/datum/skill/S = path
+ if(initial(S.abstract_type) == path)
+ continue
+ S = new path
+ .[S.type] = S
+
+/proc/get_skill_datum(path)
+ return GLOB.skill_datums[path]
+
+/proc/sanitize_skill_value(path, value)
+ var/datum/skill/S = get_skill_datum(path)
+ // don't check, if we runtime let it happen.
+ return S.sanitize_value(value)
+
+/proc/is_skill_value_greater(path, existing, new_value)
+ var/datum/skill/S = get_skill_datum(path)
+ // don't check, if we runtime let it happen.
+ return S.is_value_greater(existing, new_value)
+
+/**
+ * Skill datums
+ */
+/datum/skill
+ /// Our name
+ var/name
+ /// Our description
+ var/desc
+ /// Our progression type
+ var/progression_type
+ /// Abstract type
+ var/abstract_type = /datum/skill
+
+/**
+ * Ensures what someone's setting as a value for this skill is valid.
+ */
+/datum/skill/proc/sanitize_value(new_value)
+ return new_value
+
+/**
+ * Checks if a value is greater
+ */
+/datum/skill/proc/is_value_greater(existing, new_value)
+ if(!existing)
+ return TRUE
+ return new_value > existing
+
+/**
+ * Standard value "render"
+ */
+/datum/skill/proc/standard_render_value(value)
+ return value
+
+// Just saying, the choice to use different sub-parent-types is to force coders to resolve issues as I won't be implementing custom procs to grab skill levels in a certain context.
+// Aka: So people don't forget to change checks if they change a skill's progression type.
+
+/datum/skill/binary
+ abstract_type = /datum/skill/binary
+ progression_type = SKILL_PROGRESSION_BINARY
+
+/datum/skill/binary/sanitize_value(new_value)
+ return new_value? TRUE : FALSE
+
+/datum/skill/binary/standard_render_value(value)
+ return value? "Yes" : "No"
+
+/datum/skill/numerical
+ abstract_type = /datum/skill/numerical
+ progression_type = SKILL_PROGRESSION_NUMERICAL
+ /// Max value of this skill
+ var/max_value = 100
+ /// Min value of this skill
+ var/min_value = 0
+ /// Display as a percent in standard_render_value?
+ var/display_as_percent = FALSE
+
+/datum/skill/numerical/sanitize_value(new_value)
+ return clamp(new_value, min_value, max_value)
+
+/datum/skill/numerical/standard_render_value(value)
+ return display_as_percent? "[round(value/max_value/100, 0.01)]%" : "[value] / [max_value]"
+
+/datum/skill/enum
+ abstract_type = /datum/skill/enum
+ progression_type = SKILL_PROGRESSION_ENUM
+ /// Valid values for the skill
+ var/list/valid_values = list()
+
+/datum/skill/enum/sanitize_value(new_value)
+ if(new_value in valid_values)
+ return new_value
diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm
new file mode 100644
index 0000000000..352adc46ff
--- /dev/null
+++ b/code/datums/skills/_skill_holder.dm
@@ -0,0 +1,78 @@
+/**
+ * Skill holder datums
+ */
+/datum/skill_holder
+ /// Our list of skills and values. Lazylist. Associative. Keys are datum typepaths to the skill.
+ var/list/skills
+ /// Same as [skills] but affinities, which are multiplied to increase amount when gaining skills.
+ var/list/skill_affinities
+
+/**
+ * Grabs the value of a skill.
+ */
+/datum/skill_holder/proc/get_skill_value(skill)
+ if(!ispath(skill))
+ 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]
+
+/**
+ * Grabs our affinity for a skill. !!This is a multiplier!!
+ */
+/datum/skill_holder/proc/get_skill_affinity(skill)
+ if(!ispath(skill))
+ 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]
+ if(isnull(affinity))
+ return 1
+ return affinity
+
+/**
+ * Sets the value of a skill.
+ */
+/datum/skill_holder/proc/set_skill_value(skill, value)
+ if(!ispath(skill))
+ CRASH("Invalid set_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
+ LAZYINITLIST(skills)
+ value = sanitize_skill_value(skill, value)
+ if(!isnull(value))
+ skills[skill] = value
+ return TRUE
+ return FALSE
+
+/**
+ * Boosts a skill to a value if not aobve
+ */
+/datum/skill_holder/proc/boost_skill_value_to(skill, value)
+ var/current = get_skill_value(skill)
+ if(!is_skill_value_greater(skill, current, value))
+ return FALSE
+ set_skill_value(skill, value)
+ return TRUE
+
+/**
+ * Automatic skill increase, multiplied by skill affinity if existing.
+ * Only works if skill is numerical.
+ */
+/datum/skill_holder/proc/auto_gain_experience(skill, value)
+ if(!ispath(skill, /datum/skill/numerical))
+ CRASH("You cannot auto increment a non numerical skill!")
+ var/current = get_skill_value(skill)
+ var/affinity = get_skill_affinity(skill)
+ boost_skill_value_to(skill, current + (value * affinity))
+
+/**
+ * Generates a HTML readout of our skills.
+ * Port to tgui-next when?
+ */
+/datum/skill_holder/proc/html_readout()
+ var/list/out = list("
Skills ")
+ out += "Skill Value "
+ for(var/path in skills)
+ var/datum/skill/S = GLOB.skill_datums[path]
+ out += "[S.name] [S.standard_render_value(skills[path])] "
+ out += "
"
+ return out.Join("")
diff --git a/code/datums/skills/medical.dm b/code/datums/skills/medical.dm
new file mode 100644
index 0000000000..3b67cacb04
--- /dev/null
+++ b/code/datums/skills/medical.dm
@@ -0,0 +1,3 @@
+/datum/skill/numerical/surgery
+ name = "Surgery"
+ desc = "How proficient you are at doing surgery."
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 69b74841df..680c0a89c4 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -120,12 +120,12 @@
/datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration)
. = ..()
ADD_TRAIT(owner, TRAIT_MUTE, "mesmerize")
- owner.add_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]", TRUE, priority = 64, override = TRUE, multiplicative_slowdown = 5, blacklisted_movetypes = FALSE? NONE : CRAWLING)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/mesmerize)
/datum/status_effect/mesmerize/on_remove()
. = ..()
REMOVE_TRAIT(owner, TRAIT_MUTE, "mesmerize")
- owner.remove_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]")
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/mesmerize)
/datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
@@ -141,9 +141,7 @@
/datum/status_effect/electrode
id = "tased"
alert_type = null
- var/slowdown = 1.5
- var/slowdown_priority = 50 //to make sure the stronger effect overrides
- var/affect_crawl = FALSE
+ var/movespeed_mod = /datum/movespeed_modifier/status_effect/tased
var/nextmove_modifier = 1
var/stamdmg_per_ds = 0 //a 20 duration would do 20 stamdmg, disablers do 24 or something
var/last_tick = 0 //fastprocess processing speed is a goddamn sham, don't trust it.
@@ -155,12 +153,12 @@
last_tick = world.time
if(iscarbon(owner))
var/mob/living/carbon/C = owner
- C.add_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]", TRUE, priority = slowdown_priority, override = TRUE, multiplicative_slowdown = slowdown, blacklisted_movetypes = affect_crawl? NONE : CRAWLING)
+ C.add_movespeed_modifier(movespeed_mod)
/datum/status_effect/electrode/on_remove()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
- C.remove_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]")
+ C.remove_movespeed_modifier(movespeed_mod)
. = ..()
/datum/status_effect/electrode/tick()
@@ -178,8 +176,7 @@
/datum/status_effect/electrode/no_combat_mode
id = "tased_strong"
- slowdown = 8
- slowdown_priority = 100
+ movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode
nextmove_modifier = 2
blocks_combatmode = TRUE
stamdmg_per_ds = 1
@@ -336,7 +333,7 @@
if(prob(severity * 0.15))
to_chat(owner, "\"[text2ratvar(pick(mania_messages))]\" ")
owner.playsound_local(get_turf(motor), hum, severity, 1)
- owner.adjust_drugginess(CLAMP(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1
+ owner.adjust_drugginess(clamp(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1
if(owner.hallucination < 50)
owner.hallucination = min(owner.hallucination + max(severity * 0.075, 1), 50) //7.5% of severity per second, minimum 1
if(owner.dizziness < 50)
@@ -594,7 +591,7 @@
old_health = owner.health
if(!old_oxyloss)
old_oxyloss = owner.getOxyLoss()
- var/health_difference = old_health - owner.health - CLAMP(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss())
+ var/health_difference = old_health - owner.health - clamp(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss())
if(!health_difference)
return
owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed! ", \
@@ -650,11 +647,11 @@
if(isnum(set_duration))
duration = set_duration
. = ..()
- owner.add_movespeed_modifier(MOVESPEED_ID_ELECTROSTAFF, multiplicative_slowdown = 1, movetypes = GROUND)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/electrostaff)
/datum/status_effect/electrostaff/on_remove()
. = ..()
- owner.remove_movespeed_modifier(MOVESPEED_ID_ELECTROSTAFF)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/electrostaff)
//GOLEM GANG
diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm
index c2855250f4..30699d36f4 100644
--- a/code/datums/world_topic.dm
+++ b/code/datums/world_topic.dm
@@ -169,7 +169,7 @@
.["real_mode"] = SSticker.mode.name
// Key-authed callers may know the truth behind the "secret"
- .["security_level"] = get_security_level()
+ .["security_level"] = NUM2SECLEVEL(GLOB.security_level)
.["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0
// Amount of world's ticks in seconds, useful for calculating round duration
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 40090c35c5..b71f51bd07 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -192,7 +192,7 @@
reagents = new()
reagents.reagent_list.Add(A)
reagents.conditional_update()
- else if(ismovableatom(A))
+ else if(ismovable(A))
var/atom/movable/M = A
if(isliving(M.loc))
var/mob/living/L = M.loc
@@ -692,7 +692,7 @@
/atom/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION("", "---------")
- if(!ismovableatom(src))
+ if(!ismovable(src))
var/turf/curturf = get_turf(src)
if(curturf)
. += "Jump To "
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/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index bb776d7bc0..c54de16e2e 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -53,7 +53,7 @@
restricted_jobs += "Assistant"
// Set number of Vamps
- recommended_enemies = CLAMP(round(num_players()/10), 1, 6);
+ recommended_enemies = clamp(round(num_players()/10), 1, 6);
// Select Antags
for(var/i = 0, i < recommended_enemies, i++)
@@ -195,7 +195,7 @@
return FALSE
if(target.stat > UNCONSCIOUS)
return FALSE
-
+
// Check Overdose: Am I even addicted to blood? Do I even have any in me?
//if (!target.reagents.addiction_list || !target.reagents.reagent_list)
//message_admins("DEBUG2: can_make_vassal() Abort: No reagents")
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index d548f373db..659d50c077 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -40,8 +40,10 @@ GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
-
+// Storyteller picked by the voting.
GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
+// Storyteller forced by admins during voting--will be used instead of above.
+GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
/datum/game_mode/dynamic
name = "dynamic mode"
@@ -164,7 +166,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
dat += "Current threat: [threat] \[Adjust\] \[View Log\] "
dat += " "
- dat += "Storyteller: [storyteller.name] "
+ dat += "Storyteller: [storyteller.name] "
dat += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width]. "
dat += "On average, [peaceful_percentage] % of the rounds are more peaceful. "
dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"] "
@@ -222,6 +224,15 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
show_threatlog(usr)
else if (href_list["stacking_limit"])
GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
+ else if (href_list["change_storyteller"])
+ var/list/choices = list()
+ for(var/T in config.storyteller_cache)
+ var/datum/dynamic_storyteller/S = T
+ choices[initial(S.name)] = T
+ var/selected_storyteller = choices[input("Select storyteller:", "Storyteller", storyteller.name) as null|anything in choices]
+ storyteller = new selected_storyteller
+ storyteller.on_start()
+ message_admins("[key_name(usr)] changed the storyteller to [storyteller].", 1)
admin_panel() // Refreshes the window
@@ -243,7 +254,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
/datum/game_mode/dynamic/send_intercept()
. = "Central Command Status Summary "
switch(round(threat_level))
- if(0 to 20)
+ if(-INFINITY to 20)
. += "Peaceful Waypoint "
. += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble."
set_security_level(SEC_LEVEL_GREEN)
@@ -275,7 +286,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
. += "Black Orbit "
. += "As part of a mandatory security protocol, we are required to inform you that as a result of your orbital pattern directly behind an astrological body (oriented from our nearest observatory), your station will be under decreased monitoring and support. It is anticipated that your extreme location and decreased surveillance could pose security risks. Avoid unnecessary risks and attempt to keep your station in one piece."
set_security_level(SEC_LEVEL_AMBER)
- if(96 to 100)
+ if(96 to INFINITY)
. += "Impending Doom "
. += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station. "
. += "Good luck."
@@ -346,6 +357,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful")
/datum/game_mode/dynamic/can_start()
+ if(GLOB.dynamic_forced_storyteller)
+ GLOB.dynamic_storyteller_type = GLOB.dynamic_forced_storyteller
storyteller = new GLOB.dynamic_storyteller_type // this is where all the initialization happens
storyteller.on_start()
SSblackbox.record_feedback("text","dynamic_storyteller",1,storyteller.name)
@@ -441,6 +454,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
if(!drafted_rules.len)
message_admins("Not enough threat level for roundstart antags!")
log_game("DYNAMIC: Not enough threat level for roundstart antags!")
+ midround_injection_cooldown = round((midround_injection_cooldown + world.time) / 2, 1)
+ latejoin_injection_cooldown = round((latejoin_injection_cooldown + world.time) / 2, 1)
var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1)
extra_rulesets_amount = 0
if (GLOB.dynamic_classic_secret)
@@ -721,7 +736,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
if (O.started_as_observer) // Observers
current_players[CURRENT_OBSERVERS].Add(M)
continue
- current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow)
+ if(!M.voluntary_ghosted)
+ current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow)
threat = storyteller.calculate_threat() + added_threat
if(threat_average_weight)
var/cur_sample_weight = world.time - last_threat_sample_time
@@ -823,3 +839,11 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
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/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 48e306b2b5..4378a5c440 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -105,7 +105,7 @@
if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles)))
job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
- var/threat = CLAMP(round(mode.threat_level/10),1,10)
+ var/threat = clamp(round(mode.threat_level/10),1,10)
if (job_check < required_enemies[threat])
SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles")
return FALSE
@@ -671,7 +671,7 @@
message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by dynamic.")
log_game("[key_name(Ninja)] was spawned as a ninja by dynamic.")
return Ninja
-
+
/datum/dynamic_ruleset/midround/from_ghosts/ninja/finish_setup(mob/new_character, index)
return
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index a7fc9b86ce..edaadeae1c 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -789,7 +789,7 @@
if (prob(meteorminutes/2))
wavetype = GLOB.meteors_catastrophic
- var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10)
+ var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10)
spawn_meteors(ramp_up_final, wavetype)
diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
index c37eb9bc2a..561b38fde1 100644
--- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm
+++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
@@ -11,7 +11,7 @@
WAROPS_ALWAYS_ALLOWED: Can always do warops, regardless of threat level.
USE_PREF_WEIGHTS: Will use peoples' preferences to change the threat centre.
FORCE_IF_WON: If this mode won the vote, forces it
- USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds.
+ USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds.
*/
var/flags = 0
var/dead_player_weight = 1 // How much dead players matter for threat calculation
@@ -22,11 +22,11 @@
var/datum/game_mode/dynamic/mode = null // Cached as soon as it's made, by dynamic.
/**
-Property weights are:
+Property weights are:
"story_potential" -- essentially how many different ways the antag can be played.
"trust" -- How much it makes the crew trust each other. Negative values means they're suspicious. Team antags are like this.
"chaos" -- How chaotic it makes the round. Has some overlap with "valid" and somewhat contradicts "extended".
-"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to
+"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to
let everyone into the armory, wizard moving around and being a nuisance, nightmare busting lights.
"extended" -- How much the antag is conducive to a long round. Nukies and cults are bad for this; Wizard is less bad; and so on.
"conversion" -- Basically a bool. Conversion antags, well, convert. It's its own class for a good reason.
@@ -34,13 +34,13 @@ Property weights are:
/datum/dynamic_storyteller/proc/start_injection_cooldowns()
var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min)
- mode.latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time
+ mode.latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time
var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max)
- mode.midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time
-
+ mode.midround_injection_cooldown = round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time
+
var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min)
- mode.event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time)
+ mode.event_injection_cooldown = (round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time)
/datum/dynamic_storyteller/proc/calculate_threat()
var/threat = 0
@@ -99,15 +99,15 @@ Property weights are:
/datum/dynamic_storyteller/proc/get_midround_cooldown()
var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min)
- return round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max))
+ return round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max))
/datum/dynamic_storyteller/proc/get_event_cooldown()
var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min)
- return round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max))
+ return round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max))
/datum/dynamic_storyteller/proc/get_latejoin_cooldown()
var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min)
- return round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max))
+ return round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max))
/datum/dynamic_storyteller/proc/get_injection_chance(dry_run = FALSE)
if(mode.forced_injection)
@@ -115,7 +115,7 @@ Property weights are:
return 100
var/threat_perc = mode.threat/mode.threat_level
- return round(max(0,100*(1-(threat_perc*threat_perc*threat_perc))))
+ return clamp(round(100*(1-(threat_perc*threat_perc))**2,1),0,100)
/datum/dynamic_storyteller/proc/roundstart_draft()
var/list/drafted_rules = list()
@@ -144,7 +144,7 @@ Property weights are:
if(!(rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway
var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat))
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
- pick this particular ruleset.
+ pick this particular ruleset.
Let's use a toy example: there's 60 threat level and 10 threat spent.
We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets.
Ruleset 1 has 30 cost, ruleset 2 has 5 cost.
@@ -152,7 +152,7 @@ Property weights are:
is 2.26 times as likely to be picked, all other things considered.
Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight.
*/
- threat_weight = 1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))
+ threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0)))
if (rule.ready())
var/property_weight = 0
for(var/property in property_weights)
@@ -209,10 +209,10 @@ Property weights are:
weight = 1
event_frequency_lower = 2 MINUTES
event_frequency_upper = 10 MINUTES
- flags = WAROPS_ALWAYS_ALLOWED
- min_players = 40
+ flags = WAROPS_ALWAYS_ALLOWED | FORCE_IF_WON
+ min_players = 30
var/refund_cooldown = 0
-
+
/datum/dynamic_storyteller/chaotic/do_process()
if(refund_cooldown < world.time)
mode.create_threat(20)
@@ -221,7 +221,7 @@ Property weights are:
/datum/dynamic_storyteller/chaotic/get_midround_cooldown()
return ..() / 4
-
+
/datum/dynamic_storyteller/chaotic/get_latejoin_cooldown()
return ..() / 4
@@ -232,7 +232,7 @@ Property weights are:
curve_centre = 2
curve_width = 1.5
weight = 2
- min_players = 30
+ min_players = 20
flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS
property_weights = list("valid" = 3, "trust" = 5)
@@ -331,7 +331,7 @@ Property weights are:
/datum/dynamic_storyteller/story/calculate_threat()
var/current_time = (world.time / SSautotransfer.targettime)*180
mode.threat_level = round(mode.initial_threat_level*(sin(current_time)+0.25),0.1)
- ..()
+ return ..()
/datum/dynamic_storyteller/classic
name = "Classic"
@@ -358,7 +358,7 @@ Property weights are:
flags = NO_ASSASSIN | FORCE_IF_WON
weight = 1
dead_player_weight = 5
- property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "story_potential" = 1, "conversion" = -10)
+ property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10)
/datum/dynamic_storyteller/no_antag
name = "Extended"
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 5affeba6d6..e2c549d911 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -272,7 +272,7 @@
reports += config.mode_reports[config_tag]
Count++
for(var/i in Count to rand(3,5)) //Between three and five wrong entries on the list.
- var/false_report_type = pickweightAllowZero(report_weights)
+ var/false_report_type = pickweight(report_weights, 0)
report_weights[false_report_type] = 0 //Make it so the same false report won't be selected twice
reports += config.mode_reports[false_report_type]
@@ -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/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm
index 858c10c46c..dca50be5b9 100644
--- a/code/game/gamemodes/gangs/dominator.dm
+++ b/code/game/gamemodes/gangs/dominator.dm
@@ -229,7 +229,7 @@
if(!was_stranded)
priority_announce("All hostile activity within station systems has ceased.","Network Alert")
- if(get_security_level() == "delta")
+ if(NUM2SECLEVEL(GLOB.security_level) == "delta")
set_security_level("red")
SSshuttle.clearHostileEnvironment(src)
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 7857eb8253..afeebb770b 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -25,7 +25,7 @@
if (prob(meteorminutes/2))
wavetype = GLOB.meteors_catastrophic
- var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10)
+ var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10)
spawn_meteors(ramp_up_final, wavetype)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 93852e917c..48a298984c 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -121,6 +121,7 @@
uniform = /obj/item/clothing/under/syndicate
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
+ back = /obj/item/storage/backpack
ears = /obj/item/radio/headset/syndicate/alt
l_pocket = /obj/item/pinpointer/nuke/syndicate
id = /obj/item/card/id/syndicate
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 74554ac9f8..9eed18d906 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -70,7 +70,7 @@
/datum/game_mode/revolution/post_setup()
var/list/heads = SSjob.get_living_heads()
var/list/sec = SSjob.get_living_sec()
- var/weighted_score = CLAMP(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs)
+ var/weighted_score = clamp(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs)
for(var/datum/mind/rev_mind in headrev_candidates) //People with return to lobby may still be in the lobby. Let's pick someone else in that case.
if(isnewplayer(rev_mind.current))
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 6fa7fa30c0..64704d4771 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -169,7 +169,7 @@
var/multiplier = text2num(href_list["multiplier"])
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
- multiplier = CLAMP(multiplier,1,50)
+ multiplier = clamp(multiplier,1,50)
/////////////////
@@ -439,8 +439,3 @@
desc = "An autolathe reprogrammed with security protocols to prevent hacking."
hackable = FALSE
circuit = /obj/item/circuitboard/machine/autolathe/secure
-
-//Called when the object is constructed by an autolathe
-//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes
-/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A)
- return
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index bc0fec68ba..3f4b389b77 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -69,7 +69,7 @@
for(var/obj/item/stock_parts/manipulator/P in component_parts)
speed_coeff += (P.rating / 2)
speed_coeff = max(1, speed_coeff)
- heal_level = CLAMP((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100)
+ heal_level = clamp((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100)
//The return of data disks?? Just for transferring between genetics machine/cloning machine.
//TO-DO: Make the genetics machine accept them.
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 6d22f9d6c8..eae2d5fa5b 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -150,7 +150,7 @@
return
log_activity("changed greater than charge filter to \"[new_filter]\"")
if(new_filter)
- new_filter = CLAMP(new_filter, 0, 100)
+ new_filter = clamp(new_filter, 0, 100)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
result_filters["Charge Above"] = new_filter
if(href_list["below_filter"])
@@ -160,7 +160,7 @@
return
log_activity("changed lesser than charge filter to \"[new_filter]\"")
if(new_filter)
- new_filter = CLAMP(new_filter, 0, 100)
+ new_filter = clamp(new_filter, 0, 100)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
result_filters["Charge Below"] = new_filter
if(href_list["access_filter"])
diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm
index 370f85b4b9..ad325455ad 100644
--- a/code/game/machinery/computer/arcade/minesweeper.dm
+++ b/code/game/machinery/computer/arcade/minesweeper.dm
@@ -308,12 +308,12 @@
var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num
if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return FALSE
- new_rows = CLAMP(new_rows + 1, 4, 30)
+ new_rows = clamp(new_rows + 1, 4, 30)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num
if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return FALSE
- new_columns = CLAMP(new_columns + 1, 4, 50)
+ new_columns = clamp(new_columns + 1, 4, 50)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
var/grid_area = (new_rows - 1) * (new_columns - 1)
var/lower_limit = round(grid_area*0.156)
@@ -324,7 +324,7 @@
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
rows = new_rows
columns = new_columns
- mine_limit = CLAMP(new_mine_limit, lower_limit, upper_limit)
+ mine_limit = clamp(new_mine_limit, lower_limit, upper_limit)
return TRUE
/obj/machinery/computer/arcade/minesweeper/proc/make_mines(var/reset_everything)
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 22e102b54b..79ea51eca4 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -296,7 +296,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
if("rate")
var/target = text2num(params["rate"])
if(!isnull(target))
- target = CLAMP(target, 0, MAX_TRANSFER_RATE)
+ target = clamp(target, 0, MAX_TRANSFER_RATE)
signal.data += list("tag" = input_tag, "set_volume_rate" = target)
. = TRUE
if("output")
@@ -305,7 +305,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
if("pressure")
var/target = text2num(params["pressure"])
if(!isnull(target))
- target = CLAMP(target, 0, MAX_OUTPUT_PRESSURE)
+ target = clamp(target, 0, MAX_OUTPUT_PRESSURE)
signal.data += list("tag" = output_tag, "set_internal_pressure" = target)
. = TRUE
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 4c3d85a162..6eb06e3be4 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -111,7 +111,7 @@
to_chat(usr, "Authorization confirmed. Modifying security level. ")
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
//Only notify people if an actual change happened
- var/security_level = get_security_level()
+ var/security_level = NUM2SECLEVEL(GLOB.security_level)
log_game("[key_name(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].")
message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].")
deadchat_broadcast("[usr.real_name] has changed the security level to [security_level] with [src] at [get_area_name(usr, TRUE)] . ", usr)
@@ -404,7 +404,7 @@
security_level_cd = world.time + 15 SECONDS
if(GLOB.security_level != old_level)
//Only notify people if an actual change happened
- var/security_level = get_security_level()
+ var/security_level = NUM2SECLEVEL(GLOB.security_level)
log_game("[key_name(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].")
message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].")
deadchat_broadcast("[usr.real_name] has changed the security level to [security_level] from [src] at [get_area_name(usr, TRUE)]. ", usr)
@@ -555,7 +555,7 @@
dat += " Biohazard \] "
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if(STATE_ALERT_LEVEL)
- dat += "Current alert level: [get_security_level()] "
+ dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)] "
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate. "
else
@@ -563,8 +563,8 @@
dat += "Blue "
dat += "Green "
if(STATE_CONFIRM_LEVEL)
- dat += "Current alert level: [get_security_level()] "
- dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)] "
+ dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)] "
+ dat += "Confirm the change to: [NUM2SECLEVEL(tmp_alertlevel)] "
dat += "Swipe ID to confirm change. "
if(STATE_TOGGLE_EMERGENCY)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
@@ -696,7 +696,7 @@
dat += " Biohazard \] "
if(STATE_ALERT_LEVEL)
- dat += "Current alert level: [get_security_level()] "
+ dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)] "
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate. "
else
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index b9bd3da95e..d465ff2022 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -604,13 +604,13 @@
if("setbufferlabel")
var/text = sanitize(input(usr, "Input a new label:", "Input a Text", null) as text|null)
if(num && text)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
buffer_slot["label"] = text
if("setbuffer")
if(num && viable_occupant)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
buffer[num] = list(
"label"="Buffer[num]:[viable_occupant.real_name]",
"UI"=viable_occupant.dna.uni_identity,
@@ -620,7 +620,7 @@
)
if("clearbuffer")
if(num)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
buffer_slot.Cut()
@@ -635,7 +635,7 @@
apply_buffer(SCANNER_ACTION_MIXED,num)
if("injector")
if(num && injectorready < world.time)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
var/obj/item/dnainjector/timed/I
@@ -662,11 +662,11 @@
injectorready = world.time + INJECTOR_TIMEOUT
if("loaddisk")
if(num && diskette && diskette.fields)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
buffer[num] = diskette.fields.Copy()
if("savedisk")
if(num && diskette && !diskette.read_only)
- num = CLAMP(num, 1, NUMBER_OF_BUFFERS)
+ num = clamp(num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[num]
if(istype(buffer_slot))
diskette.name = "data disk \[[buffer_slot["label"]]\]"
@@ -953,7 +953,7 @@
return viable_occupant
/obj/machinery/computer/scan_consolenew/proc/apply_buffer(action,buffer_num)
- buffer_num = CLAMP(buffer_num, 1, NUMBER_OF_BUFFERS)
+ buffer_num = clamp(buffer_num, 1, NUMBER_OF_BUFFERS)
var/list/buffer_slot = buffer[buffer_num]
var/mob/living/carbon/viable_occupant = get_viable_occupant()
if(istype(buffer_slot))
diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm
index e4a6a0b2d4..ca75ff1dd0 100644
--- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm
+++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm
@@ -97,7 +97,7 @@
return
if(!new_goal)
new_goal = default_goal
- contained_id.goal = CLAMP(new_goal, 0, 1000) //maximum 1000 points
+ contained_id.goal = clamp(new_goal, 0, 1000) //maximum 1000 points
return TRUE
if("toggle_open")
if(teleporter.locked)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 118145ed88..07f95c17ff 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -405,7 +405,7 @@
// Ghost and delete the mob.
if(!mob_occupant.get_ghost(1))
- mob_occupant.ghostize(FALSE, penalize = TRUE)
+ mob_occupant.ghostize(FALSE, penalize = TRUE, voluntary = TRUE)
QDEL_NULL(occupant)
for(var/I in cryo_items) //only "CRYO_DESTROY_LATER" atoms are left)
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 686b62d1c3..67113fcf78 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -33,7 +33,7 @@
to_chat(user, "You begin repairing [src]... ")
if(I.use_tool(src, user, 40, volume=40))
- obj_integrity = CLAMP(obj_integrity + 20, 0, max_integrity)
+ obj_integrity = clamp(obj_integrity + 20, 0, max_integrity)
else
return ..()
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index adc1748ded..cd22b2dc05 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -135,7 +135,7 @@
. /= 10
/obj/machinery/door_timer/proc/set_timer(value)
- var/new_time = CLAMP(value,0,MAX_TIMER)
+ var/new_time = clamp(value,0,MAX_TIMER)
. = new_time == timer_duration //return 1 on no change
timer_duration = new_time
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index d01f7e3e40..c8219e9ebf 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -68,9 +68,9 @@
if(teleporting)
return
if(!isnull(x))
- x_offset = CLAMP(x, -range, range)
+ x_offset = clamp(x, -range, range)
if(!isnull(y))
- y_offset = CLAMP(y, -range, range)
+ y_offset = clamp(y, -range, range)
/obj/machinery/launchpad/proc/doteleport(mob/user, sending)
if(teleporting)
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index b0e26ce129..c144616c05 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -55,9 +55,9 @@
new /obj/item/pipe_meter(loc)
wait = world.time + 15
if(href_list["layer_up"])
- piping_layer = CLAMP(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
+ piping_layer = clamp(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
if(href_list["layer_down"])
- piping_layer = CLAMP(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
+ piping_layer = clamp(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
return
/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index c152e302fe..34db7b0e08 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -270,7 +270,7 @@
use_stored_power(50)
/obj/machinery/shieldwallgen/proc/use_stored_power(amount)
- power = CLAMP(power - amount, 0, maximum_stored_power)
+ power = clamp(power - amount, 0, maximum_stored_power)
update_activity()
/obj/machinery/shieldwallgen/proc/update_activity()
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 41dfe8e3ac..f9f4eb3e80 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -127,7 +127,7 @@
settableTemperatureRange = cap * 30
efficiency = (cap + 1) * 10000
- targetTemperature = CLAMP(targetTemperature,
+ targetTemperature = clamp(targetTemperature,
max(settableTemperatureMedian - settableTemperatureRange, TCMB),
settableTemperatureMedian + settableTemperatureRange)
@@ -230,7 +230,7 @@
target= text2num(target) + T0C
. = TRUE
if(.)
- targetTemperature = CLAMP(round(target),
+ targetTemperature = clamp(round(target),
max(settableTemperatureMedian - settableTemperatureRange, TCMB),
settableTemperatureMedian + settableTemperatureRange)
if("eject")
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index b8d4ef26e8..50984c43b8 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -195,7 +195,7 @@
/obj/machinery/syndicatebomb/proc/settings(mob/user)
var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num
if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station
- timer_set = CLAMP(new_timer, minimum_timer, maximum_timer)
+ timer_set = clamp(new_timer, minimum_timer, maximum_timer)
loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds. ")
if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user))
if(defused || active)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 985c1166b7..16ae158ea7 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -70,7 +70,7 @@
com.target = null
visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix. ")
return
- if (ismovableatom(M))
+ if (ismovable(M))
if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
use_power(5000)
diff --git a/code/game/machinery/toylathe.dm b/code/game/machinery/toylathe.dm
index c679f3f983..4e039d304c 100644
--- a/code/game/machinery/toylathe.dm
+++ b/code/game/machinery/toylathe.dm
@@ -156,7 +156,7 @@
var/multiplier = text2num(href_list["multiplier"])
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
- multiplier = CLAMP(multiplier,1,50)
+ multiplier = clamp(multiplier,1,50)
/////////////////
@@ -240,7 +240,7 @@
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
+ 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 = "Autoylathe Menu: "
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index f1fa5ddd20..65aa001fe1 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -484,7 +484,7 @@
/obj/item/punching_glove/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!..())
- if(ismovableatom(hit_atom))
+ if(ismovable(hit_atom))
var/atom/movable/AM = hit_atom
AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2)
qdel(src)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 9acc8921b9..fb321665bc 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -19,6 +19,7 @@
var/processing_queue = 0
var/screen = "main"
var/temp
+ var/offstation_security_levels = TRUE
var/list/part_sets = list(
"Cyborg",
"Ripley",
@@ -72,6 +73,8 @@
for(var/obj/item/stock_parts/manipulator/Ml in component_parts)
T += Ml.rating
time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01)
+ var/obj/item/circuitboard/machine/mechfab/C = circuit
+ offstation_security_levels = C.offstation_security_levels
/obj/machinery/mecha_part_fabricator/examine(mob/user)
. = ..()
@@ -106,13 +109,27 @@
if(!(set_name in D.category))
continue
output += "
[output_part_info(D)]
\["
- if(check_resources(D))
+ if(check_clearance(D) && check_resources(D))
output += "
Build | "
output += "
Add to queue \]\[
? \]
"
return output
+/obj/machinery/mecha_part_fabricator/proc/check_clearance(datum/design/D)
+ if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) && !ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level))
+ return FALSE
+ return TRUE
+
/obj/machinery/mecha_part_fabricator/proc/output_part_info(datum/design/D)
- var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [get_construction_time_w_coeff(D)/10]sec"
+ var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))
+ var/sec_text = ""
+ if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
+ sec_text = " (Allowed security levels: "
+ for(var/n in D.min_security_level to D.max_security_level)
+ sec_text += NUM2SECLEVEL(n)
+ if(n + 1 <= D.max_security_level)
+ sec_text += ", "
+ sec_text += ") "
+ var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [sec_text][get_construction_time_w_coeff(D)/10]sec"
return output
/obj/machinery/mecha_part_fabricator/proc/output_part_cost(datum/design/D)
@@ -216,6 +233,11 @@
while(D)
if(stat&(NOPOWER|BROKEN))
return FALSE
+ if(!check_clearance(D))
+ say("Security level not met. Queue processing stopped.")
+ temp = {"
Security level not met to build next part.
+
Try again |
Return "}
+ return FALSE
if(!check_resources(D))
say("Not enough resources. Queue processing stopped.")
temp = {"Not enough resources to build next part.
@@ -236,7 +258,7 @@
for(var/datum/design/D in queue)
i++
var/obj/part = D.build_path
- output += ""
+ output += " "
output += initial(part.name) + " - "
output += "[i>1?"↑ ":null] "
output += "[i↓ ":null] "
@@ -440,3 +462,7 @@
return FALSE
return TRUE
+
+/obj/machinery/mecha_part_fabricator/offstation
+ offstation_security_levels = FALSE
+ circuit = /obj/item/circuitboard/machine/mechfab/offstation
diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm
index 3b5a029df4..5276062121 100644
--- a/code/game/objects/effects/alien_acid.dm
+++ b/code/game/objects/effects/alien_acid.dm
@@ -17,7 +17,7 @@
target = get_turf(src)
if(acid_amt)
- acid_level = min( (CLAMP(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor.
+ acid_level = min( (clamp(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor.
//handle APCs and newscasters and stuff nicely
pixel_x = target.pixel_x + rand(-4,4)
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 8f0ce83c82..979b811bc5 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -7,7 +7,7 @@
move_resist = INFINITY
obj_flags = 0
- vis_flags = NONE
+ vis_flags = VIS_INHERIT_PLANE
/obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
return
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 04f14692e3..851a041aab 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -483,7 +483,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
if(!SSmapping.station_room_templates[t])
log_world("Station room spawner placed at ([T.x], [T.y], [T.z]) has invalid ruin name of \"[t]\" in its list")
templates -= t
- template_name = pickweightAllowZero(templates)
+ template_name = pickweight(templates, 0)
if(!template_name)
GLOB.stationroom_landmarks -= src
qdel(src)
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 2fb068a29b..1fe5e46e25 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -170,7 +170,7 @@
if(!victim.client || !istype(victim))
return
to_chat(victim, "
You feel fast! ")
- victim.add_movespeed_modifier(MOVESPEED_ID_YELLOW_ORB, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING))
+ victim.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb)
sleep(duration)
- victim.remove_movespeed_modifier(MOVESPEED_ID_YELLOW_ORB)
+ victim.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb)
to_chat(victim, "
You slow down. ")
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 596e428c7f..b310119827 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -49,5 +49,6 @@
/obj/effect/overlay/vis
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
anchored = TRUE
+ vis_flags = NONE
var/unused = 0 //When detected to be unused it gets set to world.time, after a while it gets removed
var/cache_expiration = 2 MINUTES // overlays which go unused for 2 minutes get cleaned up
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index 01edd82ccb..80178c95c4 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -52,7 +52,7 @@
var/list/affecting = list()
/obj/effect/step_trigger/thrower/Trigger(atom/A)
- if(!A || !ismovableatom(A))
+ if(!A || !ismovable(A))
return
var/atom/movable/AM = A
var/curtiles = 0
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5c80b81ba5..c8e5b15f72 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -392,7 +392,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(item_flags & DROPDEL)
qdel(src)
item_flags &= ~IN_INVENTORY
- SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user)
+ if(SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) & COMPONENT_DROPPED_RELOCATION)
+ . = ITEM_RELOCATED_BY_DROPPED
user.update_equipment_speed_mods()
// called just as an item is picked up (loc is not yet changed)
@@ -433,11 +434,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
// for items that can be placed in multiple slots
// note this isn't called during the initial dressing of a player
/obj/item/proc/equipped(mob/user, slot)
- SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
- for(var/X in actions)
- var/datum/action/A = X
- if(item_action_slot_check(slot, user, A)) //some items only give their actions buttons when in a specific slot.
- A.Grant(user)
+ . = SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
+ if(!(. & COMPONENT_NO_GRANT_ACTIONS))
+ for(var/X in actions)
+ var/datum/action/A = X
+ if(item_action_slot_check(slot, user, A)) //some items only give their actions buttons when in a specific slot.
+ A.Grant(user)
item_flags |= IN_INVENTORY
user.update_equipment_speed_mods()
@@ -896,3 +898,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
. = ..()
if(var_name == NAMEOF(src, slowdown))
set_slowdown(var_value) //don't care if it's a duplicate edit as slowdown'll be set, do it anyways to force normal behavior.
+
+//Called when the object is constructed by an autolathe
+//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes
+/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A)
+ return
+
+/obj/item/proc/rnd_crafted(obj/machinery/rnd/production/P)
+ return
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 20e0b09d26..c23bc2bd5b 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -258,6 +258,8 @@ update_label("John Doe", "Clowny")
chameleon_action.chameleon_type = /obj/item/card/id
chameleon_action.chameleon_name = "ID Card"
chameleon_action.initialize_disguises()
+ if(!anyone)
+ AddComponent(/datum/component/identification/syndicate, ID_COMPONENT_DEL_ON_IDENTIFY, ID_COMPONENT_EFFECT_NO_ACTIONS, NONE) //no deconstructive analyzer usage.
/obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity)
if(!proximity)
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 6b3428698b..c3b6c0312f 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -193,7 +193,7 @@
/obj/effect/chrono_field/update_icon()
var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
- ttk_frame = CLAMP(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT)
+ ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT)
if(ttk_frame != RPpos)
RPpos = ttk_frame
mob_underlay.icon_state = "frame[RPpos]"
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index aaa87bbf01..57638060f3 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -308,6 +308,13 @@
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stack/sheet/glass = 1)
+ var/offstation_security_levels = TRUE
+
+/obj/item/circuitboard/machine/mechfab/offstation
+ offstation_security_levels = FALSE
+
+/obj/item/circuitboard/machine/mechfab/rnd_crafted(obj/machinery/rnd/production/P)
+ offstation_security_levels = P.offstation_security_levels
/obj/item/circuitboard/machine/cryo_tube
name = "Cryotube (Machine Board)"
@@ -759,6 +766,13 @@
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/glass/beaker = 2)
+ var/offstation_security_levels = TRUE
+
+/obj/item/circuitboard/machine/circuit_imprinter/offstation
+ offstation_security_levels = FALSE
+
+/obj/item/circuitboard/machine/mechfab/rnd_crafted(obj/machinery/rnd/production/P)
+ offstation_security_levels = P.offstation_security_levels
/obj/item/circuitboard/machine/circuit_imprinter/department
name = "Departmental Circuit Imprinter (Machine Board)"
@@ -804,7 +818,7 @@
var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null
if(new_cloud == null)
return
- cloud_id = CLAMP(round(new_cloud, 1), 1, 100)
+ cloud_id = clamp(round(new_cloud, 1), 1, 100)
/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user)
. = ..()
@@ -832,6 +846,13 @@
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/reagent_containers/glass/beaker = 2)
+ var/offstation_security_levels = TRUE
+
+/obj/item/circuitboard/machine/protolathe/offstation
+ offstation_security_levels = FALSE
+
+/obj/item/circuitboard/machine/protolathe/rnd_crafted(obj/machinery/rnd/production/P)
+ offstation_security_levels = P.offstation_security_levels
/obj/item/circuitboard/machine/protolathe/department
name = "Departmental Protolathe (Machine Board)"
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 09c045497c..3dad3877b7 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -59,7 +59,7 @@
var/edible = TRUE // That doesn't mean eating it is a good idea
- var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 1)
+ var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1)
// If the user can toggle the colour, a la vanilla spraycan
var/can_change_colour = FALSE
@@ -346,8 +346,8 @@
var/clicky
if(click_params && click_params["icon-x"] && click_params["icon-y"])
- clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
- clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ clickx = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ clicky = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
if(!instant)
to_chat(user, "
You start drawing a [temp] on the [target.name]... ")
@@ -487,56 +487,56 @@
icon_state = "crayonred"
paint_color = "#DA0000"
crayon_color = "red"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/red = 0.9)
dye_color = DYE_RED
/obj/item/toy/crayon/orange
icon_state = "crayonorange"
paint_color = "#FF9300"
crayon_color = "orange"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/orange = 0.9)
dye_color = DYE_ORANGE
/obj/item/toy/crayon/yellow
icon_state = "crayonyellow"
paint_color = "#FFF200"
crayon_color = "yellow"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 0.9)
dye_color = DYE_YELLOW
/obj/item/toy/crayon/green
icon_state = "crayongreen"
paint_color = "#A8E61D"
crayon_color = "green"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/green = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/green = 0.9)
dye_color = DYE_GREEN
/obj/item/toy/crayon/blue
icon_state = "crayonblue"
paint_color = "#00B7EF"
crayon_color = "blue"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/blue = 0.9)
dye_color = DYE_BLUE
/obj/item/toy/crayon/purple
icon_state = "crayonpurple"
paint_color = "#DA00FF"
crayon_color = "purple"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/purple = 0.9)
dye_color = DYE_PURPLE
/obj/item/toy/crayon/black
icon_state = "crayonblack"
paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black.
crayon_color = "black"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/black = 0.9)
dye_color = DYE_BLACK
/obj/item/toy/crayon/white
icon_state = "crayonwhite"
paint_color = "#FFFFFF"
crayon_color = "white"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/white = 0.9)
dye_color = DYE_WHITE
/obj/item/toy/crayon/mime
@@ -544,7 +544,7 @@
desc = "A very sad-looking crayon."
paint_color = "#FFFFFF"
crayon_color = "mime"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 0.9)
charges = -1
dye_color = DYE_MIME
@@ -552,10 +552,9 @@
icon_state = "crayonrainbow"
paint_color = "#FFF000"
crayon_color = "rainbow"
- reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1)
+ reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent = 0.9)
drawtype = RANDOM_ANY // just the default starter.
dye_color = DYE_RAINBOW
-
charges = -1
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params)
diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm
index e5dcfc0075..e3385dc13f 100644
--- a/code/game/objects/items/devices/desynchronizer.dm
+++ b/code/game/objects/items/devices/desynchronizer.dm
@@ -39,7 +39,7 @@
var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num
if(new_duration)
new_duration = new_duration SECONDS
- new_duration = CLAMP(new_duration, 50, max_duration)
+ new_duration = clamp(new_duration, 50, max_duration)
duration = new_duration
to_chat(user, "
You set the duration to [DisplayTimeText(duration)]. ")
return TRUE
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 9a09be093d..981a811bc3 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
if(!ui)
// Variable window height, depending on how many GPS units there are
// to show, clamped to relatively safe range.
- var/gps_window_height = CLAMP(325 + GLOB.GPS_list.len * 14, 325, 700)
+ var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700)
ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
ui.open()
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index bee59b254c..9ab6115634 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -171,7 +171,7 @@
// Negative numbers will subtract
/obj/item/lightreplacer/proc/AddUses(amount = 1)
- uses = CLAMP(uses + amount, 0, max_uses)
+ uses = clamp(uses + amount, 0, max_uses)
/obj/item/lightreplacer/proc/AddShards(amount = 1, user)
bulb_shards += amount
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 1eee083c80..e94d14a57d 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -81,7 +81,7 @@
if(!usr.canUseTopic(src, BE_CLOSE))
return
new_code = round(new_code)
- new_code = CLAMP(new_code, 1, 100)
+ new_code = clamp(new_code, 1, 100)
code = new_code
if(href_list["set"] == "power")
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 4bab5a5bcd..b6261b9060 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -232,7 +232,7 @@ effective or pretty fucking useless.
charge = max(0,charge - 25)//Quick decrease in light
else
charge = min(max_charge,charge + 50) //Charge in the dark
- animate(user,alpha = CLAMP(255 - charge,0,255),time = 10)
+ animate(user,alpha = clamp(255 - charge,0,255),time = 10)
/obj/item/jammer
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index f572d0a841..4fdb862288 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -170,7 +170,7 @@
/obj/item/dice/proc/diceroll(mob/user)
result = roll(sides)
if(rigged && result != rigged)
- if(prob(CLAMP(1/(sides - 1) * 100, 25, 80)))
+ if(prob(clamp(1/(sides - 1) * 100, 25, 80)))
result = rigged
var/fake_result = roll(sides)//Daredevil isn't as good as he used to be
var/comment = ""
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 9749bae313..0a705df91c 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -57,6 +57,35 @@
on_reading_finished(user)
reading = FALSE
return TRUE
+///TRAITS///
+
+/obj/item/book/granter/trait
+ var/granted_trait
+ var/traitname = "being cool"
+
+/obj/item/book/granter/trait/already_known(mob/user)
+ if(!granted_trait)
+ return TRUE
+ if(HAS_TRAIT(user, granted_trait))
+ to_chat(user, "
You already have all the insight you need about [traitname].")
+ return TRUE
+ return FALSE
+
+/obj/item/book/granter/trait/on_reading_start(mob/user)
+ to_chat(user, "You start reading about [traitname]... ")
+
+/obj/item/book/granter/trait/on_reading_finished(mob/user)
+ to_chat(user, "You feel like you've got a good handle on [traitname]! ")
+ ADD_TRAIT(user, granted_trait, BOOK_TRAIT)
+
+/obj/item/book/granter/trait/rifleman
+ name = "\proper the Neo-Russian Rifleman\'s Primer"
+ desc = "A book with stains of vodka and...blood? The back is hard to read, but says something about bolt-actions. Or pump-actions. Both, maybe."
+ oneuse = FALSE
+ granted_trait = TRAIT_FAST_PUMP
+ traitname = "riflery"
+ icon_state = "book1"
+ remarks = list("One smooth motion...", "Palm the bolt...", "Push up, rotate back, push forward, down...", "Don't slap yourself with the bolt...", "Wait, what's this about pumping?", "Who just scribbled \"Z\" and \"LMB\" on this page?")
///ACTION BUTTONS///
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index eaecae5a92..66869d6f04 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -94,7 +94,7 @@
return
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
if(user.get_active_held_item() == src)
- newtime = CLAMP(newtime, 10, 60000)
+ newtime = clamp(newtime, 10, 60000)
det_time = newtime
to_chat(user, "Timer set for [det_time] seconds.")
diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm
index c961134244..6e270b6374 100644
--- a/code/game/objects/items/his_grace.dm
+++ b/code/game/objects/items/his_grace.dm
@@ -197,9 +197,9 @@
/obj/item/his_grace/proc/adjust_bloodthirst(amt)
prev_bloodthirst = bloodthirst
if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended)
- bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER)
+ bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER)
else if(!ascended)
- bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP)
+ bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP)
update_stats()
/obj/item/his_grace/proc/update_stats()
diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm
index 5f74830c99..347ec118fd 100644
--- a/code/game/objects/items/hot_potato.dm
+++ b/code/game/objects/items/hot_potato.dm
@@ -74,7 +74,7 @@
L.SetAllImmobility(0)
L.SetSleeping(0)
L.SetUnconscious(0)
- L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, CLAMP(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck!
+ L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, clamp(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck!
colorize(L)
/obj/item/hot_potato/examine(mob/user)
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 342f756ffc..23be8cbb9a 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -201,8 +201,8 @@
return target
var/x_o = (target.x - starting.x)
var/y_o = (target.y - starting.y)
- var/new_x = CLAMP((starting.x + (x_o * range_multiplier)), 0, world.maxx)
- var/new_y = CLAMP((starting.y + (y_o * range_multiplier)), 0, world.maxy)
+ var/new_x = clamp((starting.x + (x_o * range_multiplier)), 0, world.maxx)
+ var/new_y = clamp((starting.y + (y_o * range_multiplier)), 0, world.maxy)
var/turf/newtarget = locate(new_x, new_y, starting.z)
return newtarget
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 318753e4ad..abb2d12a1f 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -649,7 +649,7 @@
continue
usage += projectile_tick_speed_ecost
usage += (tracked[I] * projectile_damage_tick_ecost_coefficient)
- energy = CLAMP(energy - usage, 0, maxenergy)
+ energy = clamp(energy - usage, 0, maxenergy)
if(energy <= 0)
deactivate_field()
visible_message("[src] blinks \"ENERGY DEPLETED\". ")
@@ -659,7 +659,7 @@
if(iscyborg(host.loc))
host = host.loc
else
- energy = CLAMP(energy + energy_recharge, 0, maxenergy)
+ energy = clamp(energy + energy_recharge, 0, maxenergy)
return
if(host.cell && (host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy))
host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient)
diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm
index 93056adc99..014d4cb159 100644
--- a/code/game/objects/items/sharpener.dm
+++ b/code/game/objects/items/sharpener.dm
@@ -35,14 +35,14 @@
if(TH.force_wielded > initial(TH.force_wielded))
to_chat(user, "[TH] has already been refined before. It cannot be sharpened further! ")
return
- TH.force_wielded = CLAMP(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay
+ TH.force_wielded = clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay
if(I.force > initial(I.force))
to_chat(user, "[I] has already been refined before. It cannot be sharpened further! ")
return
user.visible_message("[user] sharpens [I] with [src]! ", "You sharpen [I], making it much more deadly than before. ")
I.sharpness = IS_SHARP_ACCURATE
- I.force = CLAMP(I.force + increment, 0, max)
- I.throwforce = CLAMP(I.throwforce + increment, 0, max)
+ I.force = clamp(I.force + increment, 0, max)
+ I.throwforce = clamp(I.throwforce + increment, 0, max)
I.name = "[prefix] [I.name]"
name = "worn out [name]"
desc = "[desc] At least, it used to."
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 6d8e582c29..f7bf659f0a 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -33,11 +33,11 @@
return TRUE
/obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params)
- user_shieldbash(user, A, user.a_intent != INTENT_HARM)
+ user_shieldbash(user, A, user.a_intent == INTENT_HARM)
return TRUE
/obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
- user_shieldbash(user, target, user.a_intent != INTENT_HARM)
+ user_shieldbash(user, target, user.a_intent == INTENT_HARM)
return TRUE
/obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir, harmful)
@@ -52,13 +52,13 @@
px = 12
if(WEST)
px = -12
- var/oldpx = user.pixel_x
- var/oldpy = user.pixel_y
- animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW)
- animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3)
- user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]! ")
var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir)
- animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3)
+ effect.pixel_x = user.pixel_x - 32 //96x96 effect, -32.
+ effect.pixel_y = user.pixel_y - 32
+ user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]! ")
+ animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE)
+ animate(user, pixel_x = -px, pixel_y = -py, time = 3, flags = ANIMATION_RELATIVE)
+ animate(effect, alpha = 0, pixel_x = px * 1.5, pixel_y = py * 1.5, time = 3, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE)
/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir, harmful)
if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess..
@@ -76,7 +76,7 @@
"[user] shoves you with [src]! ")
for(var/i in 1 to harmful? shieldbash_knockback : shieldbash_push_distance)
var/turf/new_turf = get_step(target, bashdir)
- var/mob/living/carbon/human/H = locate() in new_turf
+ var/mob/living/carbon/human/H = locate() in (new_turf.contents - target)
if(H && harmful)
H.visible_message("[target] is sent crashing into [H]! ",
"[target] is sent crashing into you! ")
@@ -110,10 +110,14 @@
if(!(shield_flags & SHIELD_CAN_BASH))
to_chat(user, "[src] can't be used to shield bash! ")
return FALSE
+ if(!CHECK_MOBILITY(user, MOBILITY_STAND))
+ to_chat(user, "You can't bash with [src] while on the ground! ")
+ return FALSE
if(world.time < last_shieldbash + shieldbash_cooldown)
to_chat(user, "You can't bash with [src] again so soon! ")
return FALSE
- if(isliving(target)) //GROUND SLAAAM
+ var/mob/living/livingtarget = target //only access after an isliving check!
+ if(isliving(target) && !CHECK_MOBILITY(livingtarget, MOBILITY_STAND)) //GROUND SLAAAM
if(!(shield_flags & SHIELD_BASH_GROUND_SLAM))
to_chat(user, "You can't ground slam with [src]! ")
return FALSE
@@ -122,7 +126,7 @@
playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1)
last_shieldbash = world.time
user.adjustStaminaLossBuffered(shieldbash_stamcost)
- return 1
+ return TRUE
// Directional sweep!
last_shieldbash = world.time
user.adjustStaminaLossBuffered(shieldbash_stamcost)
@@ -164,11 +168,12 @@
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
var/repair_material = /obj/item/stack/sheet/mineral/titanium
+ var/can_shatter = TRUE
shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_TRANSPARENT
max_integrity = 75
/obj/item/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(ismovableatom(object))
+ if(ismovable(object))
var/atom/movable/AM = object
if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS))
return BLOCK_NONE
@@ -213,7 +218,7 @@
new /obj/item/shard((get_turf(src)))
/obj/item/shield/riot/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(obj_integrity <= damage)
+ if(can_shatter && (obj_integrity <= damage))
var/turf/T = get_turf(owner)
T.visible_message("[attack_text] destroys [src]! ")
shatter(owner)
@@ -324,7 +329,6 @@ obj/item/shield/riot/bullet_proof
armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80)
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
- icon = 'icons/obj/items_and_weapons.dmi'
item_state = "metal"
icon_state = "makeshift_shield"
custom_materials = list(/datum/material/iron = 18000)
@@ -340,7 +344,6 @@ obj/item/shield/riot/bullet_proof
armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user
item_state = "metal"
icon_state = "metal"
- icon = 'icons/obj/items_and_weapons.dmi'
block_chance = 75 //1/4 shots will hit*
force = 16
slowdown = 2
@@ -356,20 +359,47 @@ obj/item/shield/riot/bullet_proof
block_chance = 50
/obj/item/shield/riot/implant
- name = "riot tower shield"
- desc = "A massive shield that can block a lot of attacks and can take a lot of abuse before breaking." //It cant break unless it is removed from the implant
+ name = "telescoping shield implant"
+ desc = "A compact, arm-mounted telescopic shield. While nigh-indestructible when powered by a host user, it will eventually overload from damage. Recharges while inside its implant."
item_state = "metal"
icon_state = "metal"
- block_chance = 30 //May be big but hard to move around to block.
+ block_chance = 50
slowdown = 1
shield_flags = SHIELD_FLAGS_DEFAULT
+ max_integrity = 60
+ obj_integrity = 60
+ can_shatter = FALSE
item_flags = SLOWS_WHILE_IN_HAND
+ var/recharge_timerid
+ var/recharge_delay = 15 SECONDS
-/obj/item/shield/riot/implant/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(attack_type & ATTACK_TYPE_PROJECTILE)
- final_block_chance = 60 //Massive shield
- return ..()
+/// Entirely overriden take_damage. This shouldn't exist outside of an implant (other than maybe christmas).
+/obj/item/shield/riot/implant/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0)
+ obj_integrity -= damage_amount
+ if(obj_integrity < 0)
+ obj_integrity = 0
+ if(obj_integrity == 0)
+ if(ismob(loc))
+ var/mob/living/L = loc
+ playsound(src, 'sound/effects/glassbr3.ogg', 100)
+ L.visible_message("[src] overloads from the damage sustained! ")
+ L.dropItemToGround(src) //implant component catch hook will grab it.
+/obj/item/shield/riot/implant/Moved()
+ . = ..()
+ if(istype(loc, /obj/item/organ/cyberimp/arm/shield))
+ recharge_timerid = addtimer(CALLBACK(src, .proc/recharge), recharge_delay, flags = TIMER_STOPPABLE)
+ else //extending
+ if(recharge_timerid)
+ deltimer(recharge_timerid)
+ recharge_timerid = null
+
+/obj/item/shield/riot/implant/proc/recharge()
+ if(obj_integrity == max_integrity)
+ return
+ obj_integrity = max_integrity
+ if(ismob(loc.loc)) //cyberimplant.user
+ to_chat(loc, "[src] has recharged its reinforcement matrix and is ready for use! ")
/obj/item/shield/energy
name = "energy combat shield"
diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm
index 4c64ed9dd4..dc761ee3bf 100644
--- a/code/game/objects/items/singularityhammer.dm
+++ b/code/game/objects/items/singularityhammer.dm
@@ -37,7 +37,7 @@
/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder)
for(var/atom/X in orange(5,pull))
- if(ismovableatom(X))
+ if(ismovable(X))
var/atom/movable/A = X
if(A == wielder)
continue
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 50e9b94e97..adc4970175 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -100,6 +100,7 @@
if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
H.suppress_bloodloss(stop_bleeding)
to_chat(user, "You stop the bleeding of [M]! ")
+ H.adjustBruteLoss(-(heal_brute))
return TRUE
to_chat(user, "You can not use \the [src] on [M]! ")
@@ -127,6 +128,12 @@
stop_bleeding = 900
heal_brute = 0
+/obj/item/stack/medical/gauze/adv
+ name = "sterilized medical gauze"
+ desc = "A roll of elastic sterilized cloth that is extremely effective at stopping bleeding, heals minor wounds and cleans them."
+ singular_name = "sterilized medical gauze"
+ self_delay = 5
+
/obj/item/stack/medical/gauze/cyborg
custom_materials = null
is_cyborg = 1
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 70b00c72ec..add9ebd6b2 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -71,9 +71,9 @@
/obj/item/stack/proc/update_weight()
if(amount <= (max_amount * (1/3)))
- w_class = CLAMP(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class)
+ w_class = clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class)
else if (amount <= (max_amount * (2/3)))
- w_class = CLAMP(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class)
+ w_class = clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class)
else
w_class = full_w_class
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 103dabdeec..52802fa3df 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -412,7 +412,7 @@
STR.max_combined_w_class = 200
STR.max_items = 25
STR.insert_preposition = "in"
- STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart))
+ STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/cube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart))
STR.cant_hold = typecacheof(list(/obj/item/organ/brain, /obj/item/organ/liver/cybernetic, /obj/item/organ/heart/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/tongue/cybernetic, /obj/item/organ/ears/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/cyberimp))
/obj/item/storage/bag/bio/holding
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index dc6f5f701e..97b7ee8a38 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -695,7 +695,10 @@
/obj/item/gun/ballistic/revolver,
/obj/item/ammo_box,
/obj/item/toy/gun,
- /obj/item/gun/energy/e_gun/mini
+ /obj/item/gun/energy/e_gun/mini,
+ /obj/item/gun/ballistic/automatic/magrifle/pistol,
+ /obj/item/gun/energy/disabler,
+ /obj/item/gun/energy/taser
))
/obj/item/storage/belt/holster/full/PopulateContents()
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 515c39ffcb..ec443d4e48 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -454,11 +454,11 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 7
- STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube))
+ STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/cube/monkey))
/obj/item/storage/box/monkeycubes/PopulateContents()
for(var/i in 1 to 5)
- new /obj/item/reagent_containers/food/snacks/monkeycube(src)
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(src)
/obj/item/storage/box/ids
name = "box of spare IDs"
@@ -1117,9 +1117,9 @@
desc = "A box containing a gift for worthy golems."
/obj/item/storage/box/rndboards/PopulateContents()
- new /obj/item/circuitboard/machine/protolathe(src)
+ new /obj/item/circuitboard/machine/protolathe/offstation(src)
new /obj/item/circuitboard/machine/destructive_analyzer(src)
- new /obj/item/circuitboard/machine/circuit_imprinter(src)
+ new /obj/item/circuitboard/machine/circuit_imprinter/offstation(src)
new /obj/item/circuitboard/computer/rdconsole(src)
/obj/item/storage/box/silver_sulf
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 874c858b3f..ffa3d83304 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -294,18 +294,18 @@
name = "chameleon kit"
/obj/item/storage/box/syndie_kit/chameleon/PopulateContents()
- new /obj/item/clothing/under/chameleon(src)
- new /obj/item/clothing/suit/chameleon(src)
- new /obj/item/clothing/gloves/chameleon(src)
- new /obj/item/clothing/shoes/chameleon(src)
- new /obj/item/clothing/glasses/chameleon(src)
- new /obj/item/clothing/head/chameleon(src)
- new /obj/item/clothing/mask/chameleon(src)
- new /obj/item/storage/backpack/chameleon(src)
- new /obj/item/radio/headset/chameleon(src)
- new /obj/item/stamp/chameleon(src)
- new /obj/item/pda/chameleon(src)
- new /obj/item/clothing/neck/cloak/chameleon(src)
+ new /obj/item/clothing/under/chameleon/syndicate(src)
+ new /obj/item/clothing/suit/chameleon/syndicate(src)
+ new /obj/item/clothing/gloves/chameleon/insulated/syndicate(src)
+ new /obj/item/clothing/shoes/chameleon/syndicate(src)
+ new /obj/item/clothing/glasses/chameleon/syndicate(src)
+ new /obj/item/clothing/head/chameleon/syndicate(src)
+ new /obj/item/clothing/mask/chameleon/syndicate(src)
+ new /obj/item/storage/backpack/chameleon/syndicate(src)
+ new /obj/item/radio/headset/chameleon/syndicate(src)
+ new /obj/item/stamp/chameleon/syndicate(src)
+ new /obj/item/pda/chameleon/syndicate(src)
+ new /obj/item/clothing/neck/cloak/chameleon/syndicate(src)
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
@@ -501,3 +501,13 @@
new item2(src)
new item3(src)
new /obj/item/paper/contractor_guide(src) //Paper guide
+
+/obj/item/storage/box/syndie_kit/northstar
+
+/obj/item/storage/box/syndie_kit/northstar/PopulateContents()
+ new /obj/item/clothing/gloves/fingerless/pugilist/rapid(src)
+ new /obj/item/clothing/accessory/padding(src)
+ new /obj/item/clothing/under/chameleon(src)
+ new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
+ new /obj/item/lighter(src)
+
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index f592055338..e81294ceea 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -52,7 +52,7 @@
ion_trail.start()
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/move_react)
if(full_speed)
- user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
+ user.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed)
/obj/item/tank/jetpack/proc/turn_off(mob/user)
on = FALSE
@@ -60,7 +60,7 @@
icon_state = initial(icon_state)
ion_trail.stop()
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
- user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK)
+ user.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed)
/obj/item/tank/jetpack/proc/move_react(mob/user)
allow_thrust(0.01, user)
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 58e16ad615..1c92ed4e61 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -204,7 +204,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- distribute_pressure = CLAMP(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE)
+ distribute_pressure = clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE)
/obj/item/tank/remove_air(amount)
return air_contents.remove(amount)
diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index 6fbf9316ed..08390e1607 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -256,7 +256,7 @@
. = ..()
if(!sliver)
return
- if(proximity && ismovableatom(O) && O != sliver)
+ if(proximity && ismovable(O) && O != sliver)
Consume(O, user)
/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 8496a8a216..2d132e4eef 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -303,7 +303,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
custom_materials = list(/datum/material/iron=500, /datum/material/glass=500)
resistance_flags = FIRE_PROOF
-
/obj/item/switchblade
name = "switchblade"
icon_state = "switchblade"
@@ -639,6 +638,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
w_class = WEIGHT_CLASS_SMALL
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
var/list/strong_against
+ var/list/spider_panic
/obj/item/melee/flyswatter/Initialize()
. = ..()
@@ -648,7 +648,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/mob/living/simple_animal/cockroach,
/obj/item/queen_bee
))
-
+ spider_panic = typecacheof(list(
+ /mob/living/simple_animal/banana_spider,
+ /mob/living/simple_animal/hostile/poison/giant_spider,
+ ))
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
@@ -659,6 +662,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(istype(target, /mob/living/))
var/mob/living/bug = target
bug.death(1)
+ if(is_type_in_typecache(target, spider_panic))
+ to_chat(user, "You easily land a critical blow on the [target]. ")
+ if(istype(target, /mob/living/))
+ var/mob/living/bug = target
+ bug.adjustBruteLoss(-35) //What kinda mad man would go into melee with a spider?!
else
qdel(target)
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index e582aa7e67..8dac972d04 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -31,7 +31,7 @@
if(damage_flag)
armor_protection = armor.getRating(damage_flag)
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
- armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100)
+ armor_protection = clamp(armor_protection - armour_penetration, 0, 100)
return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION)
//the sound played when the obj is damaged.
@@ -213,7 +213,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
if(T.intact && level == 1) //fire can't damage things hidden below the floor.
return
if(exposed_temperature && !(resistance_flags & FIRE_PROOF))
- take_damage(CLAMP(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0)
+ take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0)
if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE))
resistance_flags |= ON_FIRE
SSfire_burning.processing[src] = src
@@ -244,7 +244,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
if(has_buckled_mobs())
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
- buckled_mob.electrocute_act((CLAMP(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA)
+ buckled_mob.electrocute_act((clamp(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA)
/obj/proc/reset_shocked()
obj_flags &= ~BEING_SHOCKED
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index d2d72193b7..5acbb2f231 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -3,6 +3,7 @@
var/crit_fail = FALSE
animate_movement = 2
speech_span = SPAN_ROBOT
+ vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace.
var/obj_flags = CAN_BE_HIT
var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT.
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index a40314c7ad..5da04a6686 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -505,7 +505,7 @@
/obj/structure/closet/container_resist(mob/living/user)
if(opened)
return
- if(ismovableatom(loc))
+ if(ismovable(loc))
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
var/atom/movable/AM = loc
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 58d72e6ee0..05798df953 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -77,6 +77,7 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson/engine(src)
new /obj/item/storage/box/emptysandbags(src)
+ new /obj/item/cartridge/engineering(src)
/obj/structure/closet/secure_closet/atmospherics
name = "\proper atmospheric technician's locker"
@@ -97,6 +98,7 @@
new /obj/item/clothing/head/hardhat/atmos(src)
new /obj/item/clothing/glasses/meson/engine/tray(src)
new /obj/item/extinguisher/advanced(src)
+ new /obj/item/cartridge/atmos(src)
/*
* Empty lockers
diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm
index ee8f285230..ca66dbd8de 100644
--- a/code/game/objects/structures/fireplace.dm
+++ b/code/game/objects/structures/fireplace.dm
@@ -130,7 +130,7 @@
if(burn_time_remaining() < MAXIMUM_BURN_TIMER)
flame_expiry_timer = world.time + MAXIMUM_BURN_TIMER
else
- fuel_added = CLAMP(fuel_added + amount, 0, MAXIMUM_BURN_TIMER)
+ fuel_added = clamp(fuel_added + amount, 0, MAXIMUM_BURN_TIMER)
/obj/structure/fireplace/proc/burn_time_remaining()
if(lit)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 7c373f2734..fd62ffd368 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -294,7 +294,7 @@
/obj/structure/girder/CanAStarPass(ID, dir, caller)
. = !density
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSGRILLE)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 61983dcb4f..54e08db210 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -129,7 +129,7 @@
/obj/structure/grille/CanAStarPass(ID, dir, caller)
. = !density
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSGRILLE)
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index be783f387e..e32def727a 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -159,7 +159,7 @@
if(H.dna.species.use_skintones)
var/list/choices = GLOB.skin_tones
- if(CONFIG_GET(number/allow_custom_skintones))
+ if(CONFIG_GET(flag/allow_custom_skintones))
choices += "custom"
var/new_s_tone = input(H, "Choose your skin tone:", "Race change") as null|anything in choices
if(new_s_tone)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 8cf5b1ee66..79a7ce0519 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -333,7 +333,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
to_chat(user, "That's not connected to anything! ")
/obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user)
- if(!ismovableatom(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user)
+ if(!ismovable(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user)
return
if(!ismob(O))
if(!istype(O, /obj/structure/closet/body_bag))
@@ -375,6 +375,6 @@ GLOBAL_LIST_EMPTY(crematoriums)
/obj/structure/tray/m_tray/CanAStarPass(ID, dir, caller)
. = !density
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSTABLE)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 550c0216c6..bbdf6925f9 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -103,7 +103,7 @@
/obj/structure/table/CanAStarPass(ID, dir, caller)
. = !density
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSTABLE)
@@ -175,8 +175,8 @@
if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
return
//Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
- I.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
- I.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ I.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
return 1
else
return ..()
@@ -610,7 +610,7 @@
/obj/structure/rack/CanAStarPass(ID, dir, caller)
. = !density
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSTABLE)
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index bc4cd8df33..3a719d05b9 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -256,9 +256,9 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if(depth)
var/list/target_baseturfs
if(length(copytarget.baseturfs))
- // with default inputs this would be Copy(CLAMP(2, -INFINITY, baseturfs.len))
+ // with default inputs this would be Copy(clamp(2, -INFINITY, baseturfs.len))
// Don't forget a lower index is lower in the baseturfs stack, the bottom is baseturfs[1]
- target_baseturfs = copytarget.baseturfs.Copy(CLAMP(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len))
+ target_baseturfs = copytarget.baseturfs.Copy(clamp(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len))
else if(!ignore_bottom)
target_baseturfs = list(copytarget.baseturfs)
if(target_baseturfs)
diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm
index 66507e7053..41c77cd57c 100644
--- a/code/game/turfs/openspace/openspace.dm
+++ b/code/game/turfs/openspace/openspace.dm
@@ -1,7 +1,20 @@
+GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdrop, new)
+
+/atom/movable/openspace_backdrop
+ name = "openspace_backdrop"
+
+ anchored = TRUE
+
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "grey"
+ plane = OPENSPACE_BACKDROP_PLANE
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ layer = SPLASHSCREEN_LAYER
+
/turf/open/openspace
name = "open space"
desc = "Watch your step!"
- icon_state = "grey"
+ icon_state = "transparent"
baseturfs = /turf/open/openspace
CanAtmosPassVertical = ATMOS_PASS_YES
//mouse_opacity = MOUSE_OPACITY_TRANSPARENT
@@ -14,8 +27,9 @@
/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
. = ..()
- plane = FLOOR_OPENSPACE_PLANE
+ plane = OPENSPACE_PLANE
layer = OPENSPACE_LAYER
+ vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
return INITIALIZE_HINT_LATELOAD
/turf/open/openspace/LateInitialize()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index f31649eaca..88f6dd6962 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -1,6 +1,8 @@
/turf
icon = 'icons/turf/floors.dmi'
level = 1
+ vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_ID //when this be added to vis_contents of something it inherit something.plane and be associatet with something on clicking,
+ //important for visualisation of turf in openspace and interraction with openspace that show you turf.
var/intact = 1
@@ -441,7 +443,7 @@
for(var/V in contents)
var/atom/A = V
if(!QDELETED(A) && A.level >= affecting_level)
- if(ismovableatom(A))
+ if(ismovable(A))
var/atom/movable/AM = A
if(!AM.ex_check(explosion_id))
continue
diff --git a/code/game/world.dm b/code/game/world.dm
index 77361310b8..1d719ee138 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -10,9 +10,7 @@ GLOBAL_LIST(topic_status_cache)
/world/New()
enable_debugger()
-#if DM_VERSION >= 513 && DM_BUILD >= 1506
world.Profile(PROFILE_START)
-#endif
log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!")
@@ -300,8 +298,8 @@ GLOBAL_LIST(topic_status_cache)
if(SSmapping.config) // this just stops the runtime, honk.
features += "[SSmapping.config.map_name]" //CIT CHANGE - makes the hub entry display the current map
- if(get_security_level())//CIT CHANGE - makes the hub entry show the security level
- features += "[get_security_level()] alert"
+ if(NUM2SECLEVEL(GLOB.security_level))//CIT CHANGE - makes the hub entry show the security level
+ features += "[NUM2SECLEVEL(GLOB.security_level)] alert"
if (n > 1)
features += "~[n] players"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 4a7e818125..a2e2b3c122 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -429,6 +429,10 @@
for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
dat += {"-> [rule.name] <- "}
dat += "(Clear Rulesets) "
+ dat += "(Force Storyteller) "
+ if (GLOB.dynamic_forced_storyteller)
+ var/datum/dynamic_storyteller/S = GLOB.dynamic_forced_storyteller
+ dat += "-> [initial(S.name)] <- "
dat += "(Dynamic mode options) "
else if (SSticker.IsRoundInProgress())
dat += "(Force Next Latejoin Ruleset) "
@@ -690,7 +694,7 @@
var/prev_dynamic_voting = CONFIG_GET(flag/dynamic_voting)
CONFIG_SET(flag/dynamic_voting,!prev_dynamic_voting)
if (!prev_dynamic_voting)
- to_chat(world, "Vote is now a ranked choice of dynamic storytellers. ")
+ to_chat(world, "Vote is now between dynamic storytellers. ")
else
to_chat(world, "Vote is now between extended and secret. ")
log_admin("[key_name(usr)] [prev_dynamic_voting ? "disabled" : "enabled"] dynamic voting.")
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index cbd429af5c..e9b8c274a8 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -81,7 +81,7 @@ GLOBAL_PROTECT(admin_verbs_admin)
)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel))
GLOBAL_PROTECT(admin_verbs_ban)
-GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/set_round_end_sound))
+GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/manual_play_web_sound, /client/proc/set_round_end_sound))
GLOBAL_PROTECT(admin_verbs_sounds)
GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/cmd_admin_dress,
@@ -364,7 +364,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
log_admin("[key_name(usr)] admin ghosted.")
message_admins("[key_name_admin(usr)] admin ghosted.")
var/mob/body = mob
- body.ghostize(1)
+ body.ghostize(1, voluntary = TRUE)
if(body && !body.key)
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
SSblackbox.record_feedback("tally", "admin_verb", 1, "Admin Ghost") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm
index 3de5e39ff4..c13353b7cd 100644
--- a/code/modules/admin/callproc/callproc.dm
+++ b/code/modules/admin/callproc/callproc.dm
@@ -120,7 +120,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
//adv proc call this, ya nerds
/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
if(target == GLOBAL_PROC)
- return call(procname)(arglist(arguments))
+ return call(text2path("/proc/[procname]"))(arglist(arguments))
else if(target != world)
return call(target, procname)(arglist(arguments))
else
diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm
index 702e2071bd..56c778dc85 100644
--- a/code/modules/admin/sound_emitter.dm
+++ b/code/modules/admin/sound_emitter.dm
@@ -95,7 +95,7 @@
var/new_volume = input(user, "Choose a volume.", "Sound Emitter", sound_volume) as null|num
if(isnull(new_volume))
return
- new_volume = CLAMP(new_volume, 0, 100)
+ new_volume = clamp(new_volume, 0, 100)
sound_volume = new_volume
to_chat(user, "Volume set to [sound_volume]%. ")
if(href_list["edit_mode"])
@@ -118,7 +118,7 @@
var/new_radius = input(user, "Choose a radius.", "Sound Emitter", sound_volume) as null|num
if(isnull(new_radius))
return
- new_radius = CLAMP(new_radius, 0, 127)
+ new_radius = clamp(new_radius, 0, 127)
play_radius = new_radius
to_chat(user, "Audible radius set to [play_radius]. ")
if(href_list["play"])
diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm
index 7b59e72403..356746ddbc 100644
--- a/code/modules/admin/sql_message_system.dm
+++ b/code/modules/admin/sql_message_system.dm
@@ -393,7 +393,7 @@
var/nsd = CONFIG_GET(number/note_stale_days)
var/nfd = CONFIG_GET(number/note_fresh_days)
if (agegate && type == "note" && isnum(nsd) && isnum(nfd) && nsd > nfd)
- var/alpha = CLAMP(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100)
+ var/alpha = clamp(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100)
if (alpha < 100)
if (alpha <= 15)
if (skipped)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 62c2dc900c..042a6e0fe9 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1394,6 +1394,32 @@
log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.")
message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1)
+ else if(href_list["f_dynamic_storyteller"])
+ if(!check_rights(R_ADMIN))
+ return
+ if(SSticker && SSticker.mode)
+ return alert(usr, "The game has already started.", null, null, null, null)
+ if(GLOB.master_mode != "dynamic")
+ return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null)
+ var/list/choices = list()
+ for(var/T in config.storyteller_cache)
+ var/datum/dynamic_storyteller/S = T
+ choices[initial(S.name)] = T
+ var/choice = choices[input("Select storyteller:", "Storyteller", "Classic") as null|anything in choices]
+ if(choice)
+ GLOB.dynamic_forced_storyteller = choice
+ log_admin("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].")
+ message_admins("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].")
+ Game()
+
+ else if(href_list["f_dynamic_storyteller_clear"])
+ if(!check_rights(R_ADMIN))
+ return
+ GLOB.dynamic_forced_storyteller = null
+ Game()
+ log_admin("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.")
+ message_admins("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.", 1)
+
else if(href_list["f_dynamic_latejoin"])
if(!check_rights(R_ADMIN))
return
@@ -2363,7 +2389,7 @@
return
var/list/offset = splittext(href_list["offset"],",")
- var/number = CLAMP(text2num(href_list["object_count"]), 1, 100)
+ var/number = clamp(text2num(href_list["object_count"]), 1, 100)
var/X = offset.len > 0 ? text2num(offset[1]) : 0
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
var/Z = offset.len > 2 ? text2num(offset[3]) : 0
diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm
index 83f2839438..869e44e4f5 100644
--- a/code/modules/admin/verbs/borgpanel.dm
+++ b/code/modules/admin/verbs/borgpanel.dm
@@ -85,7 +85,7 @@
if ("set_charge")
var/newcharge = input("New charge (0-[borg.cell.maxcharge]):", borg.name, borg.cell.charge) as num|null
if (newcharge)
- borg.cell.charge = CLAMP(newcharge, 0, borg.cell.maxcharge)
+ borg.cell.charge = clamp(newcharge, 0, borg.cell.maxcharge)
message_admins("[key_name_admin(user)] set the charge of [ADMIN_LOOKUPFLW(borg)] to [borg.cell.charge].")
log_admin("[key_name(user)] set the charge of [key_name(borg)] to [borg.cell.charge].")
if ("remove_cell")
diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm
index cbbec40f85..e7b9342645 100644
--- a/code/modules/admin/verbs/playsound.dm
+++ b/code/modules/admin/verbs/playsound.dm
@@ -10,7 +10,7 @@
var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
if(!freq)
freq = 1
- vol = CLAMP(vol, 1, 100)
+ vol = clamp(vol, 1, 100)
var/sound/admin_sound = new()
admin_sound.file = S
@@ -138,6 +138,49 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound")
+/client/proc/manual_play_web_sound()
+ set category = "Fun"
+ set name = "Manual Play Internet Sound"
+ if(!check_rights(R_SOUNDS))
+ return
+
+ var/web_sound_input = input("Enter content stream URL (fetch this from local youtube-dl!)", "Play Internet Sound via direct URL") as text|null
+ if(istext(web_sound_input))
+ if(!length(web_sound_input))
+ log_admin("[key_name(src)] stopped web sound")
+ message_admins("[key_name(src)] stopped web sound")
+ var/mob/M
+ for(var/i in GLOB.player_list)
+ M = i
+ M?.client?.chatOutput?.stopMusic()
+ return
+ else
+ if(web_sound_input && !findtext(web_sound_input, GLOB.is_http_protocol))
+ to_chat(src, "BLOCKED: Content URL not using http(s) protocol ")
+ return
+ var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num
+ if(isnull(freq))
+ return
+ if(!freq)
+ freq = 1
+ SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]"))
+ var/logstr = "[key_name(src)] played web sound at freq [freq]: [web_sound_input]"
+ log_admin(logstr)
+ message_admins(logstr)
+ var/mob/M
+ var/client/C
+ var/datum/chatOutput/O
+ for(var/i in GLOB.player_list)
+ M = i
+ C = M.client
+ if(!(C?.prefs?.toggles & SOUND_MIDI))
+ continue
+ O = C.chatOutput
+ if(!O || O.broken || !O.loaded)
+ continue
+ O.sendMusic(web_sound_input, freq)
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Manual Play Internet Sound")
+
/client/proc/set_round_end_sound(S as sound)
set category = "Fun"
set name = "Set Round End Sound"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index ef8a63a728..5530225130 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1379,3 +1379,47 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
else
message_admins("[key_name_admin(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name_admin(C)]")
log_admin("[key_name(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name(C)]")
+
+/// Allow admin to add or remove traits of datum
+/datum/admins/proc/modify_traits(datum/D)
+ if(!D)
+ return
+
+ var/add_or_remove = input("Remove/Add?", "Trait Remove/Add") as null|anything in list("Add","Remove")
+ if(!add_or_remove)
+ return
+ var/list/availible_traits = list()
+
+ switch(add_or_remove)
+ if("Add")
+ for(var/key in GLOB.traits_by_type)
+ if(istype(D,key))
+ availible_traits += GLOB.traits_by_type[key]
+ if("Remove")
+ if(!GLOB.trait_name_map)
+ GLOB.trait_name_map = generate_trait_name_map()
+ for(var/trait in D.status_traits)
+ var/name = GLOB.trait_name_map[trait] || trait
+ availible_traits[name] = trait
+
+ var/chosen_trait = input("Select trait to modify", "Trait") as null|anything in sortList(availible_traits)
+ if(!chosen_trait)
+ return
+ chosen_trait = availible_traits[chosen_trait]
+
+ var/source = "adminabuse"
+ switch(add_or_remove)
+ if("Add") //Not doing source choosing here intentionally to make this bit faster to use, you can always vv it.
+ ADD_TRAIT(D,chosen_trait,source)
+ if("Remove")
+ var/specific = input("All or specific source ?", "Trait Remove/Add") as null|anything in list("All","Specific")
+ if(!specific)
+ return
+ switch(specific)
+ if("All")
+ source = null
+ if("Specific")
+ source = input("Source to be removed","Trait Remove/Add") as null|anything in sortList(D.status_traits[chosen_trait])
+ if(!source)
+ return
+ REMOVE_TRAIT(D,chosen_trait,source)
diff --git a/code/modules/admin/view_variables/modify_variables.dm b/code/modules/admin/view_variables/modify_variables.dm
index a4ed4d45bd..5f80b3a5e4 100644
--- a/code/modules/admin/view_variables/modify_variables.dm
+++ b/code/modules/admin/view_variables/modify_variables.dm
@@ -194,9 +194,10 @@ GLOBAL_PROTECT(VVpixelmovement)
else
variable = L[index]
//EXPERIMENTAL - Keep old associated value while modifying key, if any
- var/found = L[variable]
- if(!isnull(found))
- old_assoc_value = found
+ if(IS_VALID_ASSOC_KEY(variable))
+ var/found = L[variable]
+ if(!isnull(found))
+ old_assoc_value = found
//
default = vv_get_class(objectvar, variable)
diff --git a/code/modules/admin/view_variables/topic_basic.dm b/code/modules/admin/view_variables/topic_basic.dm
index 2a0f3d7302..d6e4c2b944 100644
--- a/code/modules/admin/view_variables/topic_basic.dm
+++ b/code/modules/admin/view_variables/topic_basic.dm
@@ -47,5 +47,33 @@
usr.client.debug_variables(src)
if(href_list[VV_HK_MARK])
usr.client.mark_datum(target)
+ if(href_list[VV_HK_ADDCOMPONENT])
+ if(!check_rights(NONE))
+ return
+ var/list/names = list()
+ var/list/componentsubtypes = subtypesof(/datum/component)
+ names += "---Components---"
+ names += componentsubtypes
+ names += "---Elements---"
+ names += subtypesof(/datum/element)
+ var/result = input(usr, "Choose a component/element to add","better know what ur fuckin doin pal") as null|anything in names
+ if(!usr || !result || result == "---Components---" || result == "---Elements---")
+ return
+ if(QDELETED(src))
+ to_chat(usr, "That thing doesn't exist anymore!")
+ return
+ var/list/lst = get_callproc_args()
+ if(!lst)
+ return
+ var/datumname = "error"
+ lst.Insert(1, result)
+ if(result in componentsubtypes)
+ datumname = "component"
+ target._AddComponent(lst)
+ else
+ datumname = "element"
+ target._AddElement(lst)
+ log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].")
+ message_admins("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)]. ")
if(href_list[VV_HK_CALLPROC])
usr.client.callproc_datum(target)
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index 0d30ebe992..d9ae678bb9 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -6,6 +6,7 @@
status = ORGAN_ROBOTIC
beating = TRUE
organ_flags = ORGAN_NO_SPOIL
+ no_pump = TRUE
var/true_name = "baseline placebo referencer"
var/cooldown_low = 300
var/cooldown_high = 300
@@ -92,6 +93,7 @@
update_gland_hud()
/obj/item/organ/heart/gland/on_life()
+ . = ..()
if(!beating)
// alien glands are immune to stopping.
beating = TRUE
diff --git a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
index 3757aecd02..fbdeea6b84 100644
--- a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
+++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm
@@ -42,7 +42,7 @@
/mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume)
..()
if(exposed_temperature)
- adjustFireLoss(CLAMP(0.01 * exposed_temperature, 1, 5))
+ adjustFireLoss(clamp(0.01 * exposed_temperature, 1, 5))
else
adjustFireLoss(5)
diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm
index aed64e4039..02be432045 100644
--- a/code/modules/antagonists/blob/blob/overmind.dm
+++ b/code/modules/antagonists/blob/blob/overmind.dm
@@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
B.hud_used.blobpwrdisplay.maptext = "[round(blob_core.obj_integrity)]
"
/mob/camera/blob/proc/add_points(points)
- blob_points = CLAMP(blob_points + points, 0, max_blob_points)
+ blob_points = clamp(blob_points + points, 0, max_blob_points)
hud_used.blobpwrdisplay.maptext = "[round(blob_points)]
"
/mob/camera/blob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm
index 444b10684b..5717dc557d 100644
--- a/code/modules/antagonists/blob/blob/theblob.dm
+++ b/code/modules/antagonists/blob/blob/theblob.dm
@@ -77,7 +77,7 @@
/obj/structure/blob/CanAStarPass(ID, dir, caller)
. = 0
- if(ismovableatom(caller))
+ if(ismovable(caller))
var/atom/movable/mover = caller
. = . || (mover.pass_flags & PASSBLOB)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
index efccb5591e..1867be1594 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -14,10 +14,10 @@
set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
var/notice_healing
while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
- if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood
+ if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_FAKEDEATH)) // Deduct Blood
AddBloodVolume(passive_blood_drain) // -.1 currently
if(HandleHealing(1)) // Heal
- if(notice_healing == FALSE && owner.current.blood_volume > 0)
+ if(!notice_healing && owner.current.blood_volume > 0)
to_chat(owner, "The power of your blood begins knitting your wounds... ")
notice_healing = TRUE
else if(notice_healing == TRUE)
@@ -25,7 +25,7 @@
HandleStarving() // Death
HandleDeath() // Standard Update
update_hud()// Daytime Sleep in Coffin
- if(SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker"))
+ if(SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker"))
if(istype(owner.current.loc, /obj/structure/closet/crate/coffin))
Torpor_Begin()
// Wait before next pass
@@ -39,7 +39,7 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/datum/antagonist/bloodsucker/proc/AddBloodVolume(value)
- owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, max_blood_volume)
+ owner.current.blood_volume = clamp(owner.current.blood_volume + value, 0, max_blood_volume)
update_hud()
/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1)
@@ -83,7 +83,7 @@
// NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
//It is called from your coffin on close (by you only)
var/actual_regen = regen_rate + additional_regen
- if(poweron_masquerade == TRUE || owner.current.AmStaked())
+ if(poweron_masquerade|| owner.current.AmStaked())
return FALSE
if(owner.current.reagents.has_reagent(/datum/reagent/consumable/garlic))
return FALSE
@@ -101,8 +101,8 @@
var/mob/living/carbon/C = owner.current
var/costMult = 1 // Coffin makes it cheaper
var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire)
- var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_FAKEDEATH)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin)
- if(amInCoffinWhileTorpor)
+ // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin)
+ if(istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_FAKEDEATH)))
mult *= 4 // Increase multiplier if we're sleeping in a coffin.
fireheal = min(C.getFireLoss(), regen_rate) // NOTE: Burn damage ONLY heals in torpor.
C.ExtinguishMob()
@@ -112,7 +112,10 @@
CheckVampOrgans() // Heart, Eyes
if(check_limbs(costMult))
return TRUE
-
+ else if(owner.current.stat >= UNCONSCIOUS) //Faster regeneration and slight burn healing while unconcious
+ mult *= 2
+ fireheal = min(C.getFireLoss(), regen_rate * 0.2)
+
// BRUTE: Always Heal
var/bruteheal = min(C.getBruteLoss(), actual_regen)
var/toxinheal = min(C.getToxLoss(), actual_regen)
@@ -120,8 +123,6 @@
if(bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return.
if(mult == 0)
return TRUE
- if(owner.current.stat >= UNCONSCIOUS) //Faster regeneration while unconcious, so you dont have to wait all day
- mult *= 2
// We have damage. Let's heal (one time)
C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body.
C.adjustFireLoss(-fireheal * mult, forced = TRUE)
@@ -129,7 +130,7 @@
//C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above.
AddBloodVolume((bruteheal * -0.5 + fireheal * -1 + toxinheal * -0.2) / mult * costMult) // Costs blood to heal
return TRUE // Healed! Done for this tick.
-
+
/datum/antagonist/bloodsucker/proc/check_limbs(costMult)
@@ -137,7 +138,7 @@
var/mob/living/carbon/C = owner.current
var/list/missing = C.get_missing_limbs()
if(missing.len && C.blood_volume < limb_regen_cost + 5)
- return FALSE
+ return FALSE
for(var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it.
C.regenerate_limb(targetLimbZone, FALSE) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head"))
AddBloodVolume(50)
@@ -146,12 +147,6 @@
to_chat(C, "Your flesh knits as it regrows your [L]! ")
playsound(C, 'sound/magic/demon_consume.ogg', 50, TRUE)
return TRUE
- /*for(var/obj/item/bodypart/BP in C.bodyparts)
- if(!istype(BP) && !BP.status == 2)
- return FALSE
- to_chat(C, "Your body expels the [BP]! ")
- BP.drop_limb()
- return TRUE */
/datum/antagonist/bloodsucker/proc/CureDisabilities()
var/mob/living/carbon/C = owner.current
@@ -176,14 +171,14 @@
// EMPTY: Frenzy!
// BLOOD_VOLUME_GOOD: [336] Pale (handled in bloodsucker_integration.dm
// BLOOD_VOLUME_BAD: [224] Jitter
- if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5))
+ if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5 && HAS_TRAIT(owner, TRAIT_FAKEDEATH)) && !poweron_masquerade)
owner.current.Jitter(3)
// BLOOD_VOLUME_SURVIVE: [122] Blur Vision
if(owner.current.blood_volume < BLOOD_VOLUME_BAD / 2)
owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD))
// Nutrition
owner.current.nutrition = clamp(owner.current.blood_volume, 545, 0) //The amount of blood is how full we are.
- //A bit higher regeneration based on blood volume
+ //A bit higher regeneration based on blood volume
if(owner.current.blood_volume < 700)
additional_regen = 0.4
else if(owner.current.blood_volume < BLOOD_VOLUME_NORMAL)
@@ -230,16 +225,16 @@
Torpor_Begin()
to_chat(owner, "Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor. ")
sleep(30) //To avoid spam
- if(poweron_masquerade == TRUE)
+ if(poweron_masquerade)
to_chat(owner, "Your wounds will not heal until you disable the Masquerade power. ")
// End Torpor:
else // No damage, OR toxin healed AND brute healed and NOT in coffin (since you cannot heal burn)
if(total_damage <= 0 || total_toxloss <= 0 && total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin))
- // Not Daytime, Not in Torpor
- if(!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker"))
+ // Not Daytime, Not in Torpor, enough health to not die the moment you end torpor
+ if(!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker") && total_damage < owner.current.getMaxHealth())
Torpor_End()
// Fake Unconscious
- if(poweron_masquerade == TRUE && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT)
+ if(poweron_masquerade && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT)
owner.current.Unconscious(20, 1)
/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin = FALSE)
@@ -249,6 +244,7 @@
ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in space. Otherwise you just...heal forever.
ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker")
+ owner.current.Jitter(0)
// Visuals
owner.current.update_sight()
owner.current.reload_fullscreen()
@@ -256,6 +252,9 @@
for(var/datum/action/bloodsucker/power in powers)
if(power.active && !power.can_use_in_torpor)
power.DeactivatePower()
+ if(owner.current.suiciding)
+ owner.current.suiciding = FALSE //Youll die but not for long.
+ to_chat(owner.current, "Your body keeps you going, even as you try to end yourself. ")
/datum/antagonist/bloodsucker/proc/Torpor_End()
owner.current.stat = SOFT_CRIT
@@ -369,8 +368,8 @@
//Puke blood only if puke_blood is true, and loose some blood, else just puke normally.
if(puke_blood)
C.blood_volume = max(0, C.blood_volume - foodInGut * 2)
- C.vomit(foodInGut * 4, foodInGut * 2, 0)
- else
+ C.vomit(foodInGut * 4, foodInGut * 2, 0)
+ else
C.vomit(foodInGut * 4, FALSE, 0)
C.Stun(30)
//C.Dizzy(50)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
index 0c80ce0dee..7043c2f429 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
@@ -87,7 +87,7 @@
// Heads?
if (target_role == "HEAD")
target_amount = rand(1, round(SSticker.mode.num_players() / 20))
- target_amount = CLAMP(target_amount,1,3)
+ target_amount = clamp(target_amount,1,3)
// Department?
else
switch(target_role)
@@ -100,7 +100,7 @@
if("Quartermaster")
department_string = "Cargo"
target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10))
- target_amount = CLAMP(target_amount, 2, 4)
+ target_amount = clamp(target_amount, 2, 4)
..()
// EXPLANATION
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
index b7d98c6783..43163f6a70 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
@@ -45,15 +45,15 @@
// (FINAL LIL WARNING)
while(time_til_cycle > 5)
sleep(10)
- if (cancel_me)
+ if(cancel_me)
return
//sleep(TIME_BLOODSUCKER_DAY_FINAL_WARN - 50)
warn_daylight(3,"Seek cover, for Sol rises! ")
// Part 3: Night Ending
- while (time_til_cycle > 0)
+ while(time_til_cycle > 0)
sleep(10)
- if (cancel_me)
+ if(cancel_me)
return
//sleep(50)
warn_daylight(4,"Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death! ",\
@@ -69,11 +69,11 @@
while(time_til_cycle > 0)
punish_vamps()
sleep(TIME_BLOODSUCKER_BURN_INTERVAL)
- if (cancel_me)
+ if(cancel_me)
return
//daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL
// Issue Level Up!
- if(!issued_XP && time_til_cycle <= 15)
+ if(!issued_XP && time_til_cycle <= 5)
issued_XP = TRUE
vamps_rank_up()
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
index 946be31ed6..2e9d3c1788 100644
--- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -227,7 +227,7 @@
// Traits
for(var/T in defaultTraits)
REMOVE_TRAIT(owner.current, T, BLOODSUCKER_TRAIT)
- if(had_toxlover == TRUE)
+ if(had_toxlover)
ADD_TRAIT(owner.current, TRAIT_TOXINLOVER, SPECIES_TRAIT)
// Traits: Species
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
index f68191d6d7..dd7e835d3a 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
@@ -63,7 +63,7 @@
// Find Animals in Area
/* if(rand(0,2) == 0)
var/mobCount = 0
- var/mobMax = CLAMP(area_turfs.len / 25, 1, 4)
+ var/mobMax = clamp(area_turfs.len / 25, 1, 4)
for (var/turf/T in area_turfs)
if(!T) continue
var/mob/living/simple_animal/SA = locate() in T
diff --git a/code/modules/antagonists/bloodsucker/powers/cloak.dm b/code/modules/antagonists/bloodsucker/powers/cloak.dm
index a616c39923..347700ca9a 100644
--- a/code/modules/antagonists/bloodsucker/powers/cloak.dm
+++ b/code/modules/antagonists/bloodsucker/powers/cloak.dm
@@ -18,14 +18,11 @@
. = ..()
if(!.)
return
-
// must have nobody around to see the cloak
- var/watchers = viewers(9,get_turf(owner))
- for(var/mob/living/M in watchers)
+ for(var/mob/living/M in viewers(9, owner))
if(M != owner)
to_chat(owner, "You may only vanish into the shadows unseen. ")
return FALSE
-
return TRUE
/datum/action/bloodsucker/cloak/ActivatePower()
diff --git a/code/modules/antagonists/bloodsucker/powers/masquerade.dm b/code/modules/antagonists/bloodsucker/powers/masquerade.dm
index 7d41899dc2..d83f938e3f 100644
--- a/code/modules/antagonists/bloodsucker/powers/masquerade.dm
+++ b/code/modules/antagonists/bloodsucker/powers/masquerade.dm
@@ -52,6 +52,7 @@
REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
REMOVE_TRAIT(user, TRAIT_VIRUSIMMUNE, "bloodsucker")
+ REMOVE_TRAIT(user, TRAIT_NOBREATH, "bloodsucker")
var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART)
var/obj/item/organ/eyes/vassal/bloodsucker/E = user.getorganslot(ORGAN_SLOT_EYES)
E.flash_protect = 0
@@ -93,6 +94,7 @@
ADD_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
ADD_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
ADD_TRAIT(user, TRAIT_VIRUSIMMUNE, "bloodsucker")
+ ADD_TRAIT(user, TRAIT_NOBREATH, "bloodsucker")
// HEART
var/obj/item/organ/heart/H = user.getorganslot(ORGAN_SLOT_HEART)
diff --git a/code/modules/antagonists/bloodsucker/powers/trespass.dm b/code/modules/antagonists/bloodsucker/powers/trespass.dm
index 45d1dda3ef..c91b924bb7 100644
--- a/code/modules/antagonists/bloodsucker/powers/trespass.dm
+++ b/code/modules/antagonists/bloodsucker/powers/trespass.dm
@@ -28,7 +28,7 @@
/datum/action/bloodsucker/targeted/trespass/CheckValidTarget(atom/A)
// Can't target my tile
- if (A == get_turf(owner) || get_turf(A) == get_turf(owner))
+ if(A == get_turf(owner) || get_turf(A) == get_turf(owner))
return FALSE
return TRUE // All we care about is destination. Anything you click is fine.
@@ -43,13 +43,13 @@
// Are either tiles WALLS?
var/turf/from_turf = get_turf(owner)
var/this_dir // = get_dir(from_turf, target_turf)
- for (var/i=1 to 2)
+ for(var/i=1 to 2)
// Keep Prev Direction if we've reached final turf
- if (from_turf != final_turf)
+ if(from_turf != final_turf)
this_dir = get_dir(from_turf, final_turf) // Recalculate dir so we don't overshoot on a diagonal.
from_turf = get_step(from_turf, this_dir)
// ERROR! Wall!
- if (iswallturf(from_turf))
+ if(iswallturf(from_turf))
if (display_error)
var/wallwarning = (i == 1) ? "in the way" : "at your destination"
to_chat(owner, "There is a solid wall [wallwarning]. ")
@@ -84,7 +84,7 @@
user.next_move = world.time + mist_delay
user.Stun(mist_delay, ignore_canstun = TRUE)
user.notransform = TRUE
- user.density = 0
+ user.density = FALSE
var/invis_was = user.invisibility
user.invisibility = INVISIBILITY_MAXIMUM
@@ -94,7 +94,7 @@
sleep(mist_delay / 2)
// Move & Freeze
- if (isturf(target_turf))
+ if(isturf(target_turf))
do_teleport(owner, target_turf, no_effects=TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm?
user.next_move = world.time + mist_delay / 2
user.Stun(mist_delay / 2, ignore_canstun = TRUE)
diff --git a/code/modules/antagonists/bloodsucker/powers/veil.dm b/code/modules/antagonists/bloodsucker/powers/veil.dm
index 671f88f2c1..422d645ad2 100644
--- a/code/modules/antagonists/bloodsucker/powers/veil.dm
+++ b/code/modules/antagonists/bloodsucker/powers/veil.dm
@@ -93,7 +93,7 @@
H.socks = random_socks(H.gender)
//H.eye_color = random_eye_color()
REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
- H.dna.features = random_features(H.dna.species?.id)
+ H.dna.features = random_features(H.dna.species?.id, H.gender)
// Apply Appearance
H.update_body(TRUE) // Outfit and underwear, also body and privates.
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 967715ce2f..336d21c974 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -430,7 +430,7 @@
objectives += destroy_objective
else
if(prob(70))
- var/datum/objective/assassinate/kill_objective = new
+ var/datum/objective/assassinate/once/kill_objective = new
kill_objective.owner = owner
if(team_mode) //No backstabbing while in a team
kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
diff --git a/code/modules/antagonists/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm
index a6f7b0b6e9..91119e1c06 100644
--- a/code/modules/antagonists/changeling/powers/humanform.dm
+++ b/code/modules/antagonists/changeling/powers/humanform.dm
@@ -27,7 +27,7 @@
changeling.purchasedpowers -= src
- var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
+ var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
changeling_transform(newmob, chosen_prof)
return TRUE
diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm
index a98700683e..d8572f04cc 100644
--- a/code/modules/antagonists/changeling/powers/strained_muscles.dm
+++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm
@@ -21,7 +21,7 @@
to_chat(user, "Our muscles tense and strengthen. ")
changeling.chem_recharge_slowdown += 0.5
else
- user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
+ user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
to_chat(user, "Our muscles relax. ")
changeling.chem_recharge_slowdown -= 0.5
if(stacks >= 20)
@@ -36,12 +36,12 @@
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
while(active)
- user.add_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ user.add_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
active = !active
to_chat(user, "Our muscles relax without the energy to strengthen them. ")
user.DefaultCombatKnockdown(40)
- user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
+ user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
changeling.chem_recharge_slowdown -= 0.5
break
diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
index 05f11294de..b0259c460e 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
@@ -239,7 +239,7 @@
if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \
extra_checks = CALLBACK(fabricator, /obj/item/clockwork/replica_fabricator.proc/fabricator_repair_checks, repair_values, src, user, TRUE)))
break
- obj_integrity = CLAMP(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity)
+ obj_integrity = clamp(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity)
adjust_clockwork_power(-repair_values["power_required"])
playsound(src, 'sound/machines/click.ogg', 50, 1)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm
index f927fc237d..628add0cb3 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm
@@ -10,7 +10,7 @@
if(GLOB.ratvar_awakens)
current_power = GLOB.clockwork_power = INFINITY
else
- current_power = GLOB.clockwork_power = CLAMP(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER)
+ current_power = GLOB.clockwork_power = clamp(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER)
for(var/obj/effect/clockwork/sigil/transmission/T in GLOB.all_clockwork_objects)
T.update_icon()
var/unlock_message
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index c7c9c42ee9..de2e85a501 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -211,7 +211,7 @@
var/mob/living/carbon/C = L
C.stuttering = max(8, C.stuttering)
C.drowsyness = max(8, C.drowsyness)
- C.confused += CLAMP(16 - C.confused, 0, 8)
+ C.confused += clamp(16 - C.confused, 0, 8)
C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
L.adjustFireLoss(15)
..()
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
index 4a10862e28..234f0445e0 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
@@ -59,7 +59,7 @@
if(issilicon(L))
L.DefaultCombatKnockdown(100)
else if(iscultist(L))
- L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
+ L.confused += clamp(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
to_chat(L, "[src] crashes into you with burning force, sending you reeling! ")
L.adjust_fire_stacks(2)
L.DefaultCombatKnockdown(1)
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
index 0fd6c8a8dc..ffe9ecfa80 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
@@ -111,7 +111,7 @@
var/mob/living/L = M.current
if(ishuman(L) && L.stat != DEAD)
human_servants++
- construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
+ construct_limit = round(clamp((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
//Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage.
/datum/clockwork_scripture/create_object/summon_arbiter
diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
index 9b4ac8085c..5fbaf9fd57 100644
--- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm
@@ -63,4 +63,4 @@
break
if(!M)
M = H.apply_status_effect(STATUS_EFFECT_MANIAMOTOR, src)
- M.severity = CLAMP(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY)
+ M.severity = clamp(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY)
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index d64e99d206..28d1a66e00 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -454,16 +454,16 @@
S.emp_act(EMP_HEAVY)
else if(iscarbon(target))
var/mob/living/carbon/C = L
- C.silent += CLAMP(12 - C.silent, 0, 6)
- C.stuttering += CLAMP(30 - C.stuttering, 0, 15)
- C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15)
+ C.silent += clamp(12 - C.silent, 0, 6)
+ C.stuttering += clamp(30 - C.stuttering, 0, 15)
+ C.cultslurring += clamp(30 - C.cultslurring, 0, 15)
C.Jitter(15)
else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff
if(iscarbon(target))
var/mob/living/carbon/C = L
C.stuttering = max(10, C.stuttering)
C.drowsyness = max(10, C.drowsyness)
- C.confused += CLAMP(20 - C.confused, 0, 10)
+ C.confused += clamp(20 - C.confused, 0, 10)
L.adjustBruteLoss(15)
to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"] ")
uses--
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index b05aa7f769..ffab8174e5 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -539,7 +539,7 @@
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
var/cursetime = 1800
var/timer = SSshuttle.emergency.timeLeft(1) + cursetime
- var/security_num = seclevel2num(get_security_level())
+ var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level))
var/set_coefficient = 1
switch(security_num)
if(SEC_LEVEL_GREEN)
@@ -731,7 +731,7 @@
if(!L.anti_magic_check())
if(is_servant_of_ratvar(L))
to_chat(L, "\"Kneel for me, scum\" ")
- L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
+ L.confused += clamp(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
L.DefaultCombatKnockdown(15)
L.adjustBruteLoss(10)
else
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index b4f896fa08..dc44a3b2d8 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -41,7 +41,7 @@
STOP_PROCESSING(SSobj, core)
update_icon()
GLOB.poi_list |= src
- previous_level = get_security_level()
+ previous_level = NUM2SECLEVEL(GLOB.security_level)
/obj/machinery/nuclearbomb/Destroy()
safety = FALSE
@@ -358,7 +358,7 @@
if(NUKEUI_AWAIT_TIMER)
var/number_value = text2num(numeric_input)
if(number_value)
- timer_set = CLAMP(number_value, minimum_timer_set, maximum_timer_set)
+ timer_set = clamp(number_value, minimum_timer_set, maximum_timer_set)
playsound(src, 'sound/machines/nuke/general_beep.ogg', 50, FALSE)
set_safety()
. = TRUE
@@ -419,7 +419,7 @@
return
timing = !timing
if(timing)
- previous_level = get_security_level()
+ previous_level = NUM2SECLEVEL(GLOB.security_level)
detonation_timer = world.time + (timer_set * 10)
for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list)
S.switch_mode_to(TRACK_INFILTRATOR)
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 475438ba52..5d409a7fb9 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -64,8 +64,8 @@
/mob/living/simple_animal/slaughter/phasein()
. = ..()
- add_movespeed_modifier(MOVESPEED_ID_SLAUGHTER, update=TRUE, priority=100, multiplicative_slowdown=-1)
- addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, MOVESPEED_ID_SLAUGHTER, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+ add_movespeed_modifier(/datum/movespeed_modifier/slaughter)
+ addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, /datum/movespeed_modifier/slaughter), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index cf10f87bf8..df5e6004ba 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -48,7 +48,7 @@
var/datum/traitor_class/class = GLOB.traitor_classes[C]
var/weight = LOGISTIC_FUNCTION(1.5*class.weight,chaos_weight,class.chaos,0)
weights[C] = weight * 1000
- var/choice = pickweightAllowZero(weights)
+ var/choice = pickweight(weights, 0)
if(!choice)
choice = TRAITOR_HUMAN // it's an "easter egg"
var/datum/traitor_class/actual_class = GLOB.traitor_classes[choice]
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 7c63266255..ff3d95598d 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -159,7 +159,7 @@
/obj/item/scrying/attack_self(mob/user)
to_chat(user, "You can see...everything! ")
visible_message("[user] stares into [src], their eyes glazing over. ")
- user.ghostize(1)
+ user.ghostize(1, voluntary = TRUE)
/////////////////////////////////////////Necromantic Stone///////////////////
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index 2bcda1d400..d49a8f83c6 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -294,7 +294,7 @@
name = "Staff of Change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
item_path = /obj/item/gun/magic/staff/change
- dynamic_requirement = 60
+ dynamic_requirement = 200
/datum/spellbook_entry/item/staffanimation
name = "Staff of Animation"
@@ -361,7 +361,7 @@
desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt."
item_path = /obj/item/storage/belt/wands/full
category = "Defensive"
- dynamic_requirement = 60
+ dynamic_requirement = 200
/datum/spellbook_entry/item/armor
name = "Mastercrafted Armor Set"
@@ -386,7 +386,7 @@
name = "Plasma Fist"
desc = "A forbidden martial art designed on the surging power of plasma. Use it to harness the ancient power."
item_path = /obj/item/book/granter/martial/plasma_fist
- cost = 3
+ cost = 2
/datum/spellbook_entry/item/guardian
name = "Guardian Deck"
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index 0fbc5cf71c..8a0645f311 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -229,6 +229,7 @@
var/flashcd = 20
var/overheat = 0
var/obj/item/organ/cyberimp/arm/flash/I = null
+ var/active_light_strength = 7
/obj/item/assembly/flash/armimplant/burn_out()
if(I && I.owner)
@@ -248,6 +249,12 @@
update_icon(1)
return TRUE
+/obj/item/assembly/flash/armimplant/Moved(oldLoc, dir)
+ . = ..()
+ if(!ismob(loc))
+ set_light(0)
+ else
+ set_light(7)
/obj/item/assembly/flash/armimplant/proc/cooldown()
overheat = FALSE
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index 5c34ece723..c7ffc51458 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -192,6 +192,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
anchored = TRUE // should only appear in vis_contents, but to be safe
layer = FLY_LAYER
appearance_flags = TILE_BOUND
+ vis_flags = NONE
/obj/effect/overlay/gas/New(state, alph)
. = ..()
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index ebe894138d..59ef15b4cf 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -282,7 +282,7 @@
var/new_heat_capacity = air.heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
- air.temperature = CLAMP(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY)
+ air.temperature = clamp(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY)
return REACTING
/datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst.
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index 9238b8602b..2dc0afac26 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -159,13 +159,13 @@
pump_direction = 1
if("set_input_pressure" in signal.data)
- input_pressure_min = CLAMP(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50)
+ input_pressure_min = clamp(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50)
if("set_output_pressure" in signal.data)
- output_pressure_max = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
+ output_pressure_max = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
if("set_external_pressure" in signal.data)
- external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50)
+ external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50)
if("status" in signal.data)
spawn(2)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
index 02eb95acab..051dc965ad 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm
@@ -122,7 +122,7 @@ Passive gate is similar to the regular pump except:
pressure = text2num(pressure)
. = TRUE
if(.)
- target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE)
+ target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
@@ -144,7 +144,7 @@ Passive gate is similar to the regular pump except:
on = !on
if("set_output_pressure" in signal.data)
- target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
+ target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
if(on != old_on)
investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index 9e49953df5..0e41f78e20 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -145,7 +145,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE)
+ target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
@@ -167,7 +167,7 @@
on = !on
if("set_output_pressure" in signal.data)
- target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
+ target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50)
if(on != old_on)
investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm
index bc58ef158f..7bdd22cbd1 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm
@@ -91,7 +91,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE)
+ open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE)
investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
if("close_pressure")
var/pressure = params["close_pressure"]
@@ -106,6 +106,6 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- close_pressure = CLAMP(pressure, 0, open_pressure)
+ close_pressure = clamp(pressure, 0, open_pressure)
investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
index 864e3eef5e..1005f72afe 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm
@@ -135,7 +135,7 @@
rate = text2num(rate)
. = TRUE
if(.)
- transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE)
+ transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE)
investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
@@ -153,7 +153,7 @@
if("set_transfer_rate" in signal.data)
var/datum/gas_mixture/air1 = airs[1]
- transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume)
+ transfer_rate = clamp(text2num(signal.data["set_transfer_rate"]),0,air1.volume)
if(on != old_on)
investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS)
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index 1099020662..78258dd10a 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -175,7 +175,7 @@
rate = text2num(rate)
. = TRUE
if(.)
- transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE)
+ transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE)
investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS)
if("filter")
filter_type = null
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index 5b929452fe..dcf0d09bee 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -164,7 +164,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE)
+ target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
if("node1")
var/value = text2num(params["concentration"])
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
index 87ab4fa643..05720583f9 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -123,7 +123,7 @@
if("set_volume_rate" in signal.data)
var/number = text2num(signal.data["set_volume_rate"])
var/datum/gas_mixture/air_contents = airs[1]
- volume_rate = CLAMP(number, 0, air_contents.volume)
+ volume_rate = clamp(number, 0, air_contents.volume)
if("status" in signal.data)
spawn(2)
@@ -172,7 +172,7 @@
rate = text2num(rate)
. = TRUE
if(.)
- volume_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE)
+ volume_rate = clamp(rate, 0, MAX_TRANSFER_RATE)
investigate_log("was set to [volume_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
broadcast_status()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm
index 4b6a4a4c10..1d8b875528 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm
@@ -92,7 +92,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE)
+ open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE)
investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
if("close_pressure")
var/pressure = params["close_pressure"]
@@ -107,6 +107,6 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- close_pressure = CLAMP(pressure, 0, open_pressure)
+ close_pressure = clamp(pressure, 0, open_pressure)
investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 877826c1c1..dbe3c0b90b 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -170,7 +170,7 @@
target = text2num(target)
. = TRUE
if(.)
- target_temperature = CLAMP(target, min_temperature, max_temperature)
+ target_temperature = clamp(target, min_temperature, max_temperature)
investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
update_icon()
@@ -225,6 +225,7 @@
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
return
target_temperature = min_temperature
+ to_chat(user,"You minimize the temperature on the [src]. ")
investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
message_admins("[src.name] was minimized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
return TRUE
@@ -257,6 +258,7 @@
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
return
target_temperature = max_temperature
+ to_chat(user,"You maximize the temperature on the [src]. ")
investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
message_admins("[src.name] was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
return TRUE
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
index f2f2329661..9788bcb4ee 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm
@@ -210,13 +210,13 @@
if("set_internal_pressure" in signal.data)
var/old_pressure = internal_pressure_bound
- internal_pressure_bound = CLAMP(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50)
+ internal_pressure_bound = clamp(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50)
if(old_pressure != internal_pressure_bound)
investigate_log(" internal pressure was set to [internal_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS)
if("set_external_pressure" in signal.data)
var/old_pressure = external_pressure_bound
- external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50)
+ external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50)
if(old_pressure != external_pressure_bound)
investigate_log(" external pressure was set to [external_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS)
@@ -227,10 +227,10 @@
internal_pressure_bound = 0
if("adjust_internal_pressure" in signal.data)
- internal_pressure_bound = CLAMP(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50)
+ internal_pressure_bound = clamp(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50)
if("adjust_external_pressure" in signal.data)
- external_pressure_bound = CLAMP(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50)
+ external_pressure_bound = clamp(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50)
if("init" in signal.data)
name = signal.data["init"]
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index b98098584f..33092f5354 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -128,7 +128,7 @@
if(initialize_directions & dir)
return ..()
if((NORTH|EAST) & dir)
- user.ventcrawl_layer = CLAMP(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
+ user.ventcrawl_layer = clamp(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
if((SOUTH|WEST) & dir)
- user.ventcrawl_layer = CLAMP(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
+ user.ventcrawl_layer = clamp(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX)
to_chat(user, "You align yourself with the [user.ventcrawl_layer]\th output.")
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 0b26cfc2f0..a41bdee3b6 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -390,7 +390,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- release_pressure = CLAMP(round(pressure), can_min_release_pressure, can_max_release_pressure)
+ release_pressure = clamp(round(pressure), can_min_release_pressure, can_max_release_pressure)
investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS)
if("valve")
var/logmsg
@@ -434,7 +434,7 @@
var/N = text2num(user_input)
if(!N)
return
- timer_set = CLAMP(N,minimum_timer_set,maximum_timer_set)
+ timer_set = clamp(N,minimum_timer_set,maximum_timer_set)
log_admin("[key_name(usr)] has activated a prototype valve timer")
. = TRUE
if("toggle_timer")
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index 3603e46490..18e4da621a 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -150,7 +150,7 @@
pressure = text2num(pressure)
. = TRUE
if(.)
- pump.target_pressure = CLAMP(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE)
+ pump.target_pressure = clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE)
investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS)
if("eject")
if(holding)
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index d4c9fdbee7..6c8d8287d8 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -1,15 +1,19 @@
-// How much "space" we give the edge of the map
-GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt"))
-/proc/createRandomZlevel()
- if(GLOB.awaydestinations.len) //crude, but it saves another var!
+/proc/createRandomZlevel(name = AWAY_MISSION_NAME, list/traits = list(ZTRAIT_AWAY = TRUE), list/potential_levels = GLOB.potential_away_levels)
+ if(GLOB.random_zlevels_generated[name])
+ stack_trace("[name] level already generated.")
+ return
+ if(!length(potential_levels))
+ stack_trace("No potential [name] level to load has been found.")
return
- if(GLOB.potentialRandomZlevels && GLOB.potentialRandomZlevels.len)
- to_chat(world, "Loading away mission... ")
- var/map = pick(GLOB.potentialRandomZlevels)
- load_new_z_level(map, "Away Mission")
- to_chat(world, "Away mission loaded. ")
+ var/start_time = REALTIMEOFDAY
+ var/map = pick(potential_levels)
+ if(!load_new_z_level(map, name, traits))
+ INIT_ANNOUNCE("Failed to load [name]! map filepath: [map]!")
+ return
+ INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!")
+ GLOB.random_zlevels_generated[name] = TRUE
/proc/reset_gateway_spawns(reset = FALSE)
for(var/obj/machinery/gateway/G in world)
diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm
index 60191de934..8bba27ac88 100644
--- a/code/modules/buildmode/effects/line.dm
+++ b/code/modules/buildmode/effects/line.dm
@@ -12,7 +12,7 @@
var/matrix/mat = matrix()
mat.Translate(0, 16)
mat.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32)
- mat.Turn(90 - ATAN2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2.
+ mat.Turn(90 - arctan(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2.
mat.Translate(atom_a.pixel_x, atom_a.pixel_y)
transform = mat
diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm
index ba415c50fc..4aed8ac700 100644
--- a/code/modules/buildmode/submodes/copy.dm
+++ b/code/modules/buildmode/submodes/copy.dm
@@ -23,6 +23,6 @@
DuplicateObject(stored, perfectcopy=1, sameloc=0,newloc=T)
log_admin("Build Mode: [key_name(c)] copied [stored] to [AREACOORD(object)]")
else if(right_click)
- if(ismovableatom(object)) // No copying turfs for now.
+ if(ismovable(object)) // No copying turfs for now.
to_chat(c, "[object] set as template. ")
stored = object
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index 97b7636f58..22cb518926 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -205,7 +205,7 @@
desc = "Need some meat? With this do-it-yourself kit you'll be swimming in it! Contains a monkey cube, an IV drip, and some cryoxadone!"
cost = 2150
contraband = TRUE
- contains = list(/obj/item/reagent_containers/food/snacks/monkeycube,
+ contains = list(/obj/item/reagent_containers/food/snacks/cube/monkey,
/obj/item/restraints/handcuffs/cable,
/obj/machinery/iv_drip,
/obj/item/reagent_containers/glass/beaker/cryoxadone,
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 74885d0ac0..989ccaf450 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -888,8 +888,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
var/viewscale = getviewsize(view)
var/x = viewscale[1]
var/y = viewscale[2]
- x = CLAMP(x+change, min, max)
- y = CLAMP(y+change, min,max)
+ x = clamp(x+change, min, max)
+ y = clamp(y+change, min,max)
change_view("[x]x[y]")
/client/proc/change_view(new_size)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0e5e80eaf3..37ae8b3b09 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -208,6 +208,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/show_mismatched_markings = FALSE //determines whether or not the markings lists should show markings that don't match the currently selected species. Intentionally left unsaved.
+ var/no_tetris_storage = FALSE
+
/datum/preferences/New(client/C)
parent = C
@@ -863,6 +865,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"] "
dat += "Auto stand: [autostand ? "Enabled" : "Disabled"] "
dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"] "
+ dat += "Force Slot Storage HUD: [no_tetris_storage ? "Enabled" : "Disabled"] "
dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")] "
if (user && user.client && !user.client.prefs.screenshake==0)
dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")] "
@@ -1834,7 +1837,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("s_tone")
var/list/choices = GLOB.skin_tones - GLOB.nonstandard_skin_tones
- if(CONFIG_GET(number/allow_custom_skintones))
+ if(CONFIG_GET(flag/allow_custom_skintones))
choices += "custom"
var/new_s_tone = input(user, "Choose your character's skin tone:", "Character Preference") as null|anything in choices
if(new_s_tone)
@@ -1963,7 +1966,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
var/new_length = input(user, "Penis length in inches:\n([min_D]-[max_D])", "Character Preference") as num|null
if(new_length)
- features["cock_length"] = CLAMP(round(new_length), min_D, max_D)
+ features["cock_length"] = clamp(round(new_length), min_D, max_D)
if("cock_shape")
var/new_shape
@@ -2160,7 +2163,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
var/new_body_size = input(user, "Choose your desired sprite size:\n([min*100]%-[max*100]%), Warning: May make your character look distorted[danger > min ? ", and an exponential slowdown will occur for those smaller than [danger*100]%!" : "!"]", "Character Preference", features["body_size"]*100) as num|null
if (new_body_size)
- new_body_size = CLAMP(new_body_size * 0.01, min, max)
+ new_body_size = clamp(new_body_size * 0.01, min, max)
var/dorfy
if(danger > new_body_size)
dorfy = alert(user, "The chosen size appears to be smaller than the threshold of [danger*100]%, which will lead to an added exponential slowdown. Are you sure about that?", "Dwarfism Alert", "Yes", "Move it to the threshold", "No")
@@ -2201,6 +2204,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
autostand = !autostand
if("auto_ooc")
auto_ooc = !auto_ooc
+ if("no_tetris_storage")
+ no_tetris_storage = !no_tetris_storage
if ("screenshake")
var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num
if (!isnull(desiredshake))
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index b145cc9a34..a449079602 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -262,7 +262,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["autostand"] >> autostand
S["cit_toggles"] >> cit_toggles
S["preferred_chaos"] >> preferred_chaos
- S["auto_ooc"] >> auto_ooc
+ S["auto_ooc"] >> auto_ooc
+ S["no_tetris_storage"] >> no_tetris_storage
//try to fix any outdated data if necessary
@@ -299,10 +300,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
pda_skin = sanitize_inlist(pda_skin, GLOB.pda_reskins, PDA_SKIN_ALT)
screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake))
damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake))
- widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref))
+ widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref))
autostand = sanitize_integer(autostand, 0, 1, initial(autostand))
cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles))
auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc))
+ no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage))
return 1
@@ -367,6 +369,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["cit_toggles"], cit_toggles)
WRITE_FILE(S["preferred_chaos"], preferred_chaos)
WRITE_FILE(S["auto_ooc"], auto_ooc)
+ WRITE_FILE(S["no_tetris_storage"], no_tetris_storage)
return 1
@@ -577,11 +580,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
eye_color = sanitize_hexcolor(eye_color, 3, 0)
- use_custom_skin_tone = sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone))
- if(use_custom_skin_tone && CONFIG_GET(number/allow_custom_skintones))
+
+ var/static/allow_custom_skintones
+ if(isnull(allow_custom_skintones))
+ allow_custom_skintones = CONFIG_GET(flag/allow_custom_skintones)
+ use_custom_skin_tone = allow_custom_skintones ? sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) : FALSE
+ if(use_custom_skin_tone)
skin_tone = sanitize_hexcolor(skin_tone, 6, TRUE, "#FFFFFF")
else
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones - GLOB.nonstandard_skin_tones, initial(skin_tone))
+
horn_color = sanitize_hexcolor(horn_color, 3, FALSE)
wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF")
backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
@@ -608,7 +616,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/static/size_max
if(!size_max)
size_max = CONFIG_GET(number/body_size_max)
- features["body_size"] = sanitize_integer(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE)
+ features["body_size"] = sanitize_num_clamp(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE, 0.01)
var/static/list/B_sizes
if(!B_sizes)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 9f1111e5d9..df05eee638 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -262,7 +262,15 @@
return
random_look(owner)
-/obj/item/clothing/under/chameleon
+// Forgive me for my sins...
+#define CHAMELEON_CLOTHING_DEFINE(path) \
+##path/syndicate/Initialize(mapload){\
+ . = ..();\
+ AddComponent(/datum/component/identification/syndicate, ID_COMPONENT_DEL_ON_IDENTIFY, ID_COMPONENT_EFFECT_NO_ACTIONS, ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR);\
+}\
+##path
+
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/under/chameleon)
//starts off as black
name = "black jumpsuit"
icon_state = "black"
@@ -300,7 +308,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/clothing/suit/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/suit/chameleon)
name = "armor"
desc = "A slim armored vest that protects against most types of damage."
icon_state = "armor"
@@ -329,7 +337,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/clothing/glasses/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/glasses/chameleon)
name = "Optical Meson Scanner"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
icon_state = "meson"
@@ -357,7 +365,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/clothing/gloves/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon)
desc = "These gloves will protect the wearer from electric shock."
name = "insulated gloves"
icon_state = "yellow"
@@ -368,6 +376,9 @@
var/datum/action/item_action/chameleon/change/chameleon_action
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon/insulated)
+ siemens_coefficient = 0
+
/obj/item/clothing/gloves/chameleon/Initialize()
. = ..()
chameleon_action = new(src)
@@ -386,7 +397,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/clothing/head/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/head/chameleon)
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
@@ -429,7 +440,7 @@
var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src)
randomise_action.UpdateButtonIcon()
-/obj/item/clothing/mask/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon)
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply. While good for concealing your identity, it isn't good for blocking gas flow." //More accurate
icon_state = "gas_alt"
@@ -486,7 +497,7 @@
/obj/item/clothing/mask/chameleon/drone/attack_self(mob/user)
to_chat(user, "[src] does not have a voice changer. ")
-/obj/item/clothing/shoes/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon)
name = "black shoes"
icon_state = "black"
desc = "A pair of black shoes."
@@ -511,7 +522,7 @@
return
chameleon_action.emp_randomise()
-/obj/item/clothing/shoes/chameleon/noslip
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon/noslip)
name = "black shoes"
icon_state = "black"
desc = "A pair of black shoes."
@@ -521,7 +532,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/storage/backpack/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/backpack/chameleon)
name = "backpack"
var/datum/action/item_action/chameleon/change/chameleon_action
@@ -542,7 +553,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/storage/belt/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/belt/chameleon)
name = "toolbelt"
desc = "Holds tools."
var/datum/action/item_action/chameleon/change/chameleon_action
@@ -570,7 +581,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/radio/headset/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/radio/headset/chameleon)
name = "radio headset"
var/datum/action/item_action/chameleon/change/chameleon_action
@@ -591,7 +602,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/pda/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/pda/chameleon)
name = "PDA"
var/datum/action/item_action/chameleon/change/pda/chameleon_action
@@ -613,7 +624,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/stamp/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/stamp/chameleon)
var/datum/action/item_action/chameleon/change/chameleon_action
/obj/item/stamp/chameleon/Initialize()
@@ -627,7 +638,7 @@
. = ..()
chameleon_action.emp_randomise(INFINITY)
-/obj/item/clothing/neck/cloak/chameleon
+CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/neck/cloak/chameleon)
name = "black tie"
desc = "A neosilk clip-on tie."
icon = 'icons/obj/clothing/neck.dmi'
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index 47f4aca974..ddbeeab7f6 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -33,10 +33,7 @@
/obj/item/clothing/gloves/tackler/dropped(mob/user)
. = ..()
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src)
+ if(tackler)
qdel(tackler)
/obj/item/clothing/gloves/tackler/dolphin
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 8a7092d8a6..bc0aaf23f8 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -408,7 +408,6 @@
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl
mutantrace_variation = STYLE_DIGITIGRADE
-
//Wizard hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/wizard
name = "gem-encrusted hardsuit helmet"
@@ -473,6 +472,7 @@
name = "medical hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement."
item_state = "medical_hardsuit"
+ slowdown = 0.8
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical)
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
@@ -748,63 +748,20 @@
allowed = null
armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
- var/current_charges = 3
var/max_charges = 3 //How many charges total the shielding has
+ var/current_charges //if null, will default to max_chargs
var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here
- var/recharge_cooldown = 0 //Time since we've last been shot
var/recharge_rate = 1 //How quickly the shield recharges once it starts charging
var/shield_state = "shield-old"
- var/shield_on = "shield-old"
/obj/item/clothing/suit/space/hardsuit/shielded/Initialize()
. = ..()
if(!allowed)
allowed = GLOB.advanced_hardsuit_allowed
-/obj/item/clothing/suit/space/hardsuit/shielded/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(current_charges > 0)
- block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100
- block_return[BLOCK_RETURN_BLOCK_CAPACITY] = (block_return[BLOCK_RETURN_BLOCK_CAPACITY] || 0) + current_charges
- return ..()
-
-/obj/item/clothing/suit/space/hardsuit/shielded/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- recharge_cooldown = world.time + recharge_delay
- if(current_charges > 0)
- var/datum/effect_system/spark_spread/s = new
- s.set_up(2, 1, src)
- s.start()
- owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks! ")
- current_charges--
- if(recharge_rate)
- START_PROCESSING(SSobj, src)
- if(current_charges <= 0)
- owner.visible_message("[owner]'s shield overloads!")
- shield_state = "broken"
- owner.update_inv_wear_suit()
- return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
- return BLOCK_NONE
-
-/obj/item/clothing/suit/space/hardsuit/shielded/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/clothing/suit/space/hardsuit/shielded/process()
- if(world.time > recharge_cooldown && current_charges < max_charges)
- current_charges = CLAMP((current_charges + recharge_rate), 0, max_charges)
- playsound(loc, 'sound/magic/charge.ogg', 50, 1)
- if(current_charges == max_charges)
- playsound(loc, 'sound/machines/ding.ogg', 50, 1)
- STOP_PROCESSING(SSobj, src)
- shield_state = "[shield_on]"
- if(ishuman(loc))
- var/mob/living/carbon/human/C = loc
- C.update_inv_wear_suit()
-
-/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE)
+/obj/item/clothing/suit/space/hardsuit/shielded/ComponentInitialize()
. = ..()
- if(!isinhands)
- var/file2use = style_flags & STYLE_ALL_TAURIC ? 'modular_citadel/icons/mob/64x32_effects.dmi' : 'icons/effects/effects.dmi'
- . += mutable_appearance(file2use, shield_state, MOB_LAYER + 0.01)
+ AddComponent(/datum/component/shielded, current_charges, max_charges, recharge_delay, recharge_rate, ITEM_SLOT_OCLOTHING, shield_state)
/obj/item/clothing/head/helmet/space/hardsuit/shielded
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -833,7 +790,6 @@
hardsuit_type = "ert_security"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red
shield_state = "shield-red"
- shield_on = "shield-red"
/obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue
name = "blue shielded hardsuit"
@@ -896,7 +852,6 @@
item_state = "swat_suit"
hardsuit_type = "syndi"
max_charges = 4
- current_charges = 4
recharge_delay = 15
armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
strip_delay = 130
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 8b5e87d63b..e392a6b2d1 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -199,10 +199,9 @@
icon_state = "battlemage"
item_state = "battlemage"
recharge_rate = 0
+ max_charges = INFINITY
current_charges = 15
- recharge_cooldown = INFINITY
shield_state = "shield-red"
- shield_on = "shield-red"
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard
@@ -243,6 +242,7 @@
if(!istype(W))
to_chat(user, "The rune can only be used on battlemage armour! ")
return
- W.current_charges += 8
- to_chat(user, "You charge \the [W]. It can now absorb [W.current_charges] hits. ")
+ var/datum/component/shielded/S = GetComponent(/datum/component/shielded)
+ S.adjust_charges(8)
+ to_chat(user, "You charge \the [W]. It can now absorb [S.charges] hits. ")
qdel(src)
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 46520262d7..37aa59d16c 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -26,6 +26,8 @@
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
if(blood_DNA)
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
+ if(accessory_overlay)
+ . += accessory_overlay
/obj/item/clothing/under/attackby(obj/item/I, mob/user, params)
if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil))
@@ -99,8 +101,7 @@
if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY))
return TRUE
- var/accessory_color = attached_accessory.icon_state
- accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "[accessory_color]")
+ accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "attached_accessory.icon_state")
accessory_overlay.alpha = attached_accessory.alpha
accessory_overlay.color = attached_accessory.color
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
index a71d306e27..e1212cf337 100644
--- a/code/modules/clothing/under/skirt_dress.dm
+++ b/code/modules/clothing/under/skirt_dress.dm
@@ -1,4 +1,4 @@
-/obj/item/clothing/under/dress/skirt
+/obj/item/clothing/under/dress
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/under/dress/skirt
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index c0447a1cad..8a88e99d05 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -57,7 +57,7 @@
icon_state = "tactifool"
item_state = "bl_suit"
has_sensor = TRUE
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/syndicate/sniper
name = "Tactical turtleneck suit"
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index 3b8f8de359..60f2aef629 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -22,7 +22,7 @@
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/T = pick(turfs)
- new /datum/spacevine_controller(T) //spawn a controller at turf
+ new /datum/spacevine_controller(T, pick(subtypesof(/datum/spacevine_mutation)), rand(30,100), rand(5,10), src) //spawn a controller at turf with randomized stats and a single random mutation
/datum/spacevine_mutation
@@ -227,13 +227,13 @@
quality = NEGATIVE
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
- if(prob(severity) && istype(crosser) && !isvineimmune(holder))
+ if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
var/mob/living/M = crosser
M.adjustBruteLoss(5)
to_chat(M, "You cut yourself on the thorny vines. ")
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
- if(prob(severity) && istype(hitter) && !isvineimmune(holder))
+ if(prob(severity) && istype(hitter) && !isvineimmune(hitter))
var/mob/living/M = hitter
M.adjustBruteLoss(5)
to_chat(M, "You cut yourself on the thorny vines. ")
@@ -251,7 +251,7 @@
holder.obj_integrity = holder.max_integrity
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
- if(I.get_sharpness())
+ if(I?.get_sharpness())
. = expected_damage * 0.5
else
. = expected_damage
@@ -344,16 +344,17 @@
switch(damage_type)
if(BRUTE)
if(damage_amount)
- playsound(src, 'sound/weapons/slash.ogg', 50, 1)
+ playsound(src, 'sound/weapons/slash.ogg', 50, TRUE)
else
- playsound(src, 'sound/weapons/tap.ogg', 50, 1)
+ playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
- playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
+ playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
-/obj/structure/spacevine/Crossed(mob/crosser)
- if(isliving(crosser))
- for(var/datum/spacevine_mutation/SM in mutations)
- SM.on_cross(src, crosser)
+/obj/structure/spacevine/Crossed(atom/movable/AM)
+ if(!isliving(AM))
+ return
+ for(var/datum/spacevine_mutation/SM in mutations)
+ SM.on_cross(src, AM)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/spacevine/attack_hand(mob/user)
@@ -378,10 +379,9 @@
var/list/vine_mutations_list
var/mutativeness = 1
-/datum/spacevine_controller/New(turf/location, list/muts, potency, production)
+/datum/spacevine_controller/New(turf/location, list/muts, potency, production, datum/round_event/event = null)
vines = list()
growth_queue = list()
- spawn_spacevine_piece(location, null, muts)
START_PROCESSING(SSobj, src)
vine_mutations_list = list()
init_subtypes(/datum/spacevine_mutation/, vine_mutations_list)
@@ -428,6 +428,7 @@
for(var/datum/spacevine_mutation/SM in SV.mutations)
SM.on_birth(SV)
location.Entered(SV)
+ return SV
/datum/spacevine_controller/proc/VineDestroyed(obj/structure/spacevine/S)
S.master = null
@@ -531,14 +532,13 @@
qdel(src)
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target)
+ . = ..()
if(isvineimmune(mover))
- . = TRUE
- else
- . = ..()
+ return TRUE
/proc/isvineimmune(atom/A)
- . = FALSE
if(isliving(A))
var/mob/living/M = A
if(("vines" in M.faction) || ("plants" in M.faction))
- . = TRUE
+ return TRUE
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index b7f8b8f911..1b4716b407 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -23,6 +23,9 @@
/datum/round_event/wormholes/start()
for(var/turf/open/floor/T in world)
if(is_station_level(T.z))
+ var/area/A = get_area(T)
+ if(A.outdoors)
+ continue
pick_turfs += T
for(var/i = 1, i <= number_of_wormholes, i++)
@@ -57,7 +60,7 @@
if(!(ismecha(M) && mech_sized))
return
- if(ismovableatom(M))
+ if(ismovable(M))
if(GLOB.portals.len)
var/obj/effect/portal/P = pick(GLOB.portals)
if(P && isturf(P.loc))
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 95b9f92873..ccce186304 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -396,6 +396,16 @@
list_reagents = list(/datum/reagent/consumable/orangejuice = 100)
foodtype = FRUIT| BREAKFAST
+/obj/item/reagent_containers/food/drinks/bottle/bio_carton
+ name = "small carton box"
+ desc = "A small biodegradable carton box made from plant biomatter."
+ icon_state = "eco_box"
+ item_state = "carton"
+ lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
+ volume = 50
+ isGlass = FALSE
+
/obj/item/reagent_containers/food/drinks/bottle/cream
name = "milk cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 1342b1fcbf..203eb3eef6 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -25,7 +25,7 @@
pixel_y = rand(-5, 5)
/obj/item/reagent_containers/food/proc/adjust_food_quality(new_quality)
- food_quality = CLAMP(new_quality,0,100)
+ food_quality = clamp(new_quality,0,100)
/obj/item/reagent_containers/food/proc/checkLiked(var/fraction, mob/M)
if(last_check_time + 50 < world.time)
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 7e831b6cd6..c7c74fb560 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -222,36 +222,6 @@
tastes = list("meat" = 1, "onions" = 1, "garlic" = 1)
foodtype = MEAT
-/obj/item/reagent_containers/food/snacks/monkeycube
- name = "monkey cube"
- desc = "Just add water!"
- icon_state = "monkeycube"
- bitesize = 12
- list_reagents = list(/datum/reagent/consumable/nutriment = 2)
- filling_color = "#CD853F"
- tastes = list("the jungle" = 1, "bananas" = 1)
- foodtype = MEAT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/monkeycube/On_Consume(mob/living/carbon/M)
- if(iscarbon(M))
- M.visible_message("[src] bursts out of [M]! ")
- M.emote("scream")
- M.DefaultCombatKnockdown(40)
- M.adjustBruteLoss(60)
- Expand()
- return TRUE
- return ..()
-
-/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand()
- var/mob/spammer = get_mob_by_key(fingerprintslast)
- var/mob/living/carbon/monkey/bananas = new(drop_location(), TRUE, spammer)
- if (!QDELETED(bananas))
- visible_message("
[src] expands! ")
- bananas.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK)
- else if (!spammer) // Visible message in case there are no fingerprints
- visible_message("
[src] fails to expand! ")
- qdel(src)
-
/obj/item/reagent_containers/food/snacks/enchiladas
name = "enchiladas"
desc = "Viva La Mexico!"
@@ -372,3 +342,70 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
tastes = list("meat" = 3, "smokey sauce" = 1)
foodtype = MEAT
+
+////////////// Cubes //////////
+
+/obj/item/reagent_containers/food/snacks/cube
+ name = "debug cube"
+ desc = "Just add water!"
+ icon_state = "monkeycube"
+ bitesize = 12
+ list_reagents = list(/datum/reagent/consumable/nutriment = 2)
+ filling_color = "#CD853F"
+ tastes = list("broken" = 1, "code" = 1)
+ foodtype = MEAT | SUGAR
+ var/dried_being = /mob/living/carbon/monkey //What the cube will spawn mob wise
+
+/obj/item/reagent_containers/food/snacks/cube/On_Consume(mob/living/carbon/M)
+ if(iscarbon(M))
+ M.visible_message("[src] bursts out of [M]!")
+ M.emote("scream")
+ M.DefaultCombatKnockdown(40)
+ M.adjustBruteLoss(60)
+ Expand()
+ return TRUE
+ return ..()
+
+/obj/item/reagent_containers/food/snacks/cube/proc/Expand()
+ var/mob/spammer = get_mob_by_key(fingerprintslast)
+ var/mob/living/water = new dried_being(drop_location(), TRUE, spammer)
+ if (!QDELETED(water))
+ visible_message("
[src] expands! ")
+ water.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK)
+ else if (!spammer) // Visible message in case there are no fingerprints
+ visible_message("
[src] fails to expand! ")
+ qdel(src)
+
+/obj/item/reagent_containers/food/snacks/cube/monkey
+ name = "monkey cube"
+ desc = "Just add water!"
+ tastes = list("the jungle" = 1, "bananas" = 1)
+ dried_being = /mob/living/carbon/monkey
+
+/obj/item/reagent_containers/food/snacks/cube/beno
+ name = "alien drone cube"
+ desc = "Just add water and run!"
+ tastes = list("the jungle" = 1, "acid" = 1)
+ dried_being = /mob/living/carbon/alien/humanoid/drone
+
+/obj/item/reagent_containers/food/snacks/cube/goat
+ name = "goat cube"
+ tastes = list("grass" = 1)
+ dried_being = /mob/living/simple_animal/hostile/retaliate/goat
+
+/obj/item/reagent_containers/food/snacks/cube/cow
+ name = "cow cube"
+ tastes = list("milk" = 1, "beef" = 1)
+ dried_being = /mob/living/simple_animal/cow
+
+/obj/item/reagent_containers/food/snacks/cube/egg
+//Well eggs normally are able to hatch into small birds, this one does not.
+//Also in order to have a normal egg hatch you need a hen to lay the egg that is able to hatch, meaning this one is for on-demand hen needs.
+ name = "egg cube thing"
+ desc = "Just add water, hey wait a second..."
+ icon_state = "egg"
+ filling_color = "#F0E68C"
+ cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg
+ list_reagents = list(/datum/reagent/consumable/eggyolk = 5)
+ tastes = list("dried eggs" = 1, "confusion" = 1)
+ dried_being = /mob/living/simple_animal/chicken
diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
index 68cc84c639..feba35da97 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
@@ -118,7 +118,7 @@
break
if(href_list["portion"])
- portion = CLAMP(input("How much drink do you want to dispense per glass?") as num, 0, 50)
+ portion = clamp(input("How much drink do you want to dispense per glass?") as num, 0, 50)
if(href_list["pour"] || href_list["m_pour"])
if(glasses-- <= 0)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 3d7341308b..2318c54508 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -78,7 +78,7 @@
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
grinded -= required_grind
for(var/i = 0, i < cube_production, i++)
- new /obj/item/reagent_containers/food/snacks/monkeycube(src.loc)
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(src.loc)
to_chat(user, "
The machine's display flashes that it has [grinded] monkeys worth of material left. ")
else
to_chat(user, "
The machine needs at least [required_grind] monkey(s) worth of material to produce a monkey cube. It only has [grinded]. ")
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index 94c8d7219c..19ded25b08 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -125,7 +125,7 @@
return
else
bomb_timer = input(user, "Set the [bomb] timer from [BOMB_TIMER_MIN] to [BOMB_TIMER_MAX].", bomb, bomb_timer) as num
- bomb_timer = CLAMP(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX)
+ bomb_timer = clamp(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX)
bomb_defused = FALSE
var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds."
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
index 90036c0e2a..f25aaab6fd 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm
@@ -68,7 +68,7 @@
/datum/reagent/consumable/sodiumchloride = 1,
/datum/reagent/consumable/blackpepper = 1,
/obj/item/reagent_containers/glass/bowl = 1,
- /obj/item/reagent_containers/food/snacks/monkeycube = 1,
+ /obj/item/reagent_containers/food/snacks/cube/monkey = 1,
/obj/item/reagent_containers/food/snacks/grown/banana = 1
)
result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight
diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm
index 74432c7cbe..6d9e141309 100644
--- a/code/modules/goonchat/browserOutput.dm
+++ b/code/modules/goonchat/browserOutput.dm
@@ -138,7 +138,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
/datum/chatOutput/proc/setMusicVolume(volume = "")
if(volume)
- adminMusicVolume = CLAMP(text2num(volume), 0, 100)
+ adminMusicVolume = clamp(text2num(volume), 0, 100)
//Sends client connection details to the chat to handle and save
/datum/chatOutput/proc/sendClientData()
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 6a3fd56208..28f3387097 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -40,14 +40,14 @@
updateUsrDialog()
/obj/machinery/biogenerator/RefreshParts()
- var/E = 0
- var/P = 0
- var/max_storage = 40
+ var/E = 0.5
+ var/P = 0.5
+ var/max_storage = 20
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
- P += B.rating
- max_storage = 40 * B.rating
+ P += B.rating * 0.5
+ max_storage = max(20 * B.rating, max_storage)
for(var/obj/item/stock_parts/manipulator/M in component_parts)
- E += M.rating
+ E += M.rating * 0.5
efficiency = E
productivity = P
max_items = max_storage
@@ -196,7 +196,7 @@
dat += "
x5 "
if(ispath(D.build_path, /obj/item/stack))
dat += "
x10 "
- dat += "([D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency])
"
+ dat += "([CEILING(D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency, 1)])
"
dat += "
"
else
dat += "No container inside, please insert container.
"
@@ -214,12 +214,16 @@
to_chat(usr, "The biogenerator is in the process of working. ")
return
var/S = 0
+ var/total = 0
for(var/obj/item/reagent_containers/food/snacks/grown/I in contents)
S += 5
- if(I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) < 0.1)
- points += 1*productivity
- else points += I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment)*10*productivity
+ var/nutri_amount = I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment)
+ if(nutri_amount < 0.1)
+ total += 1*productivity
+ else
+ total += nutri_amount*10*productivity
qdel(I)
+ points += round(total)
if(S)
processing = TRUE
update_icon()
@@ -235,12 +239,13 @@
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = TRUE)
if(materials.len != 1 || materials[1] != SSmaterials.GetMaterialRef(/datum/material/biomass))
return FALSE
- if (materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency > points)
+ var/cost = CEILING(materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency, 1)
+ if (cost > points)
menustat = "nopoints"
return FALSE
else
if(remove_points)
- points -= materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency
+ points -= cost
update_icon()
updateUsrDialog()
return TRUE
@@ -311,7 +316,7 @@
else if(href_list["create"])
var/amount = (text2num(href_list["amount"]))
//Can't be outside these (if you change this keep a sane limit)
- amount = CLAMP(amount, 1, 50)
+ amount = clamp(amount, 1, 50)
var/id = href_list["create"]
if(!stored_research.researched_designs.Find(id))
//naughty naughty
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 1775a1f9b1..a18dbe165d 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -199,8 +199,8 @@
if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
return
//Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
- W.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
- W.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ W.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
+ W.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
else
return ..()
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 718033ac56..b7665d7b5d 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -928,26 +928,26 @@
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
/obj/machinery/hydroponics/proc/adjustNutri(adjustamt)
- nutrilevel = CLAMP(nutrilevel + adjustamt, 0, maxnutri)
+ nutrilevel = clamp(nutrilevel + adjustamt, 0, maxnutri)
/obj/machinery/hydroponics/proc/adjustWater(adjustamt)
- waterlevel = CLAMP(waterlevel + adjustamt, 0, maxwater)
+ waterlevel = clamp(waterlevel + adjustamt, 0, maxwater)
if(adjustamt>0)
adjustToxic(-round(adjustamt/4))//Toxicity dilutation code. The more water you put in, the lesser the toxin concentration.
/obj/machinery/hydroponics/proc/adjustHealth(adjustamt)
if(myseed && !dead)
- plant_health = CLAMP(plant_health + adjustamt, 0, myseed.endurance)
+ plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance)
/obj/machinery/hydroponics/proc/adjustToxic(adjustamt)
- toxic = CLAMP(toxic + adjustamt, 0, 100)
+ toxic = clamp(toxic + adjustamt, 0, 100)
/obj/machinery/hydroponics/proc/adjustPests(adjustamt)
- pestlevel = CLAMP(pestlevel + adjustamt, 0, 10)
+ pestlevel = clamp(pestlevel + adjustamt, 0, 10)
/obj/machinery/hydroponics/proc/adjustWeeds(adjustamt)
- weedlevel = CLAMP(weedlevel + adjustamt, 0, 10)
+ weedlevel = clamp(weedlevel + adjustamt, 0, 10)
/obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood
var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index aa0e789721..5e49a32a23 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -211,7 +211,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
/// Setters procs ///
/obj/item/seeds/proc/adjust_yield(adjustamt)
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
- yield = CLAMP(yield + adjustamt, 0, 10)
+ yield = clamp(yield + adjustamt, 0, 10)
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
yield = 1 // Mushrooms always have a minimum yield of 1.
@@ -220,39 +220,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
C.value = yield
/obj/item/seeds/proc/adjust_lifespan(adjustamt)
- lifespan = CLAMP(lifespan + adjustamt, 10, 100)
+ lifespan = clamp(lifespan + adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
if(C)
C.value = lifespan
/obj/item/seeds/proc/adjust_endurance(adjustamt)
- endurance = CLAMP(endurance + adjustamt, 10, 100)
+ endurance = clamp(endurance + adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
if(C)
C.value = endurance
/obj/item/seeds/proc/adjust_production(adjustamt)
if(yield != -1)
- production = CLAMP(production + adjustamt, 1, 10)
+ production = clamp(production + adjustamt, 1, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
if(C)
C.value = production
/obj/item/seeds/proc/adjust_potency(adjustamt)
if(potency != -1)
- potency = CLAMP(potency + adjustamt, 0, 100)
+ potency = clamp(potency + adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
if(C)
C.value = potency
/obj/item/seeds/proc/adjust_weed_rate(adjustamt)
- weed_rate = CLAMP(weed_rate + adjustamt, 0, 10)
+ weed_rate = clamp(weed_rate + adjustamt, 0, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
if(C)
C.value = weed_rate
/obj/item/seeds/proc/adjust_weed_chance(adjustamt)
- weed_chance = CLAMP(weed_chance + adjustamt, 0, 67)
+ weed_chance = clamp(weed_chance + adjustamt, 0, 67)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
if(C)
C.value = weed_chance
@@ -261,7 +261,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
/obj/item/seeds/proc/set_yield(adjustamt)
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
- yield = CLAMP(adjustamt, 0, 10)
+ yield = clamp(adjustamt, 0, 10)
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
yield = 1 // Mushrooms always have a minimum yield of 1.
@@ -270,39 +270,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
C.value = yield
/obj/item/seeds/proc/set_lifespan(adjustamt)
- lifespan = CLAMP(adjustamt, 10, 100)
+ lifespan = clamp(adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
if(C)
C.value = lifespan
/obj/item/seeds/proc/set_endurance(adjustamt)
- endurance = CLAMP(adjustamt, 10, 100)
+ endurance = clamp(adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
if(C)
C.value = endurance
/obj/item/seeds/proc/set_production(adjustamt)
if(yield != -1)
- production = CLAMP(adjustamt, 1, 10)
+ production = clamp(adjustamt, 1, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
if(C)
C.value = production
/obj/item/seeds/proc/set_potency(adjustamt)
if(potency != -1)
- potency = CLAMP(adjustamt, 0, 100)
+ potency = clamp(adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
if(C)
C.value = potency
/obj/item/seeds/proc/set_weed_rate(adjustamt)
- weed_rate = CLAMP(adjustamt, 0, 10)
+ weed_rate = clamp(adjustamt, 0, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
if(C)
C.value = weed_rate
/obj/item/seeds/proc/set_weed_chance(adjustamt)
- weed_chance = CLAMP(adjustamt, 0, 67)
+ weed_chance = clamp(adjustamt, 0, 67)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
if(C)
C.value = weed_chance
diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm
index 67feb14457..30d8b7b3a7 100644
--- a/code/modules/instruments/songs/_song.dm
+++ b/code/modules/instruments/songs/_song.dm
@@ -213,7 +213,7 @@
/datum/song/proc/sanitize_tempo(new_tempo)
new_tempo = abs(new_tempo)
- return CLAMP(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS)
+ return clamp(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS)
/datum/song/proc/get_bpm()
return 600 / tempo
@@ -242,22 +242,22 @@
cached_linear_dropoff = volume_decrease_per_decisecond
/datum/song/proc/set_volume(volume)
- src.volume = CLAMP(volume, max(0, min_volume), min(100, max_volume))
+ src.volume = clamp(volume, max(0, min_volume), min(100, max_volume))
update_sustain()
updateDialog()
/datum/song/proc/set_dropoff_volume(volume)
- sustain_dropoff_volume = CLAMP(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100)
+ sustain_dropoff_volume = clamp(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100)
update_sustain()
updateDialog()
/datum/song/proc/set_exponential_drop_rate(drop)
- sustain_exponential_dropoff = CLAMP(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX)
+ sustain_exponential_dropoff = clamp(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX)
update_sustain()
updateDialog()
/datum/song/proc/set_linear_falloff_duration(duration)
- sustain_linear_duration = CLAMP(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN)
+ sustain_linear_duration = clamp(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN)
update_sustain()
updateDialog()
diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm
index 873ff0e1a7..d9595797d7 100644
--- a/code/modules/instruments/songs/editor.dm
+++ b/code/modules/instruments/songs/editor.dm
@@ -230,7 +230,7 @@
else if(href_list["setnoteshift"])
var/amount = input(usr, "Set note shift", "Note Shift") as null|num
if(!isnull(amount))
- note_shift = CLAMP(amount, note_shift_min, note_shift_max)
+ note_shift = clamp(amount, note_shift_min, note_shift_max)
else if(href_list["setsustainmode"])
var/choice = input(usr, "Choose a sustain mode", "Sustain Mode") as null|anything in list("Linear", "Exponential")
diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm
index 2573da324a..5e7c5652a0 100644
--- a/code/modules/instruments/songs/play_synthesized.dm
+++ b/code/modules/instruments/songs/play_synthesized.dm
@@ -52,8 +52,8 @@
if(!num) //it's an accidental
accents[key] = oct_acc //if they misspelled it/fucked up that's on them lmao, no safety checks.
else //octave
- octaves[key] = CLAMP(num, octave_min, octave_max)
- compiled_chord += CLAMP((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max)
+ octaves[key] = clamp(num, octave_min, octave_max)
+ compiled_chord += clamp((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max)
compiled_chord += tempodiv //this goes last
if(length(compiled_chord))
compiled_chords[++compiled_chords.len] = compiled_chord
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index e144e4dbe6..ef63ba97f8 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -79,7 +79,9 @@
for(var/I in assembly_components)
var/obj/item/integrated_circuit/IC = I
- . += IC.external_examine(user)
+ var/text = IC.external_examine(user)
+ if(text)
+ . += text
if(opened)
interact(user)
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index 0709b179d2..f90b584d76 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -36,7 +36,9 @@ a creative player the means to solve many problems. Circuits are held inside an
/obj/item/integrated_circuit/examine(mob/user)
interact(user)
. = ..()
- . += external_examine(user)
+ var/text = external_examine(user)
+ if(text)
+ . += text
// Can be called via electronic_assembly/attackby()
/obj/item/integrated_circuit/proc/additem(var/obj/item/I, var/mob/living/user)
@@ -57,7 +59,7 @@ a creative player the means to solve many problems. Circuits are held inside an
var/datum/integrated_io/activate/A = activators[k]
if(A.linked.len)
to_chat(user, "The '[A]' is connected to [A.get_linked_to_desc()].")
- any_examine(user)
+ to_chat(user, any_examine(user))
interact(user)
// This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED.
diff --git a/code/modules/integrated_electronics/core/special_pins/index_pin.dm b/code/modules/integrated_electronics/core/special_pins/index_pin.dm
index 06267eec61..e904c4c6d0 100644
--- a/code/modules/integrated_electronics/core/special_pins/index_pin.dm
+++ b/code/modules/integrated_electronics/core/special_pins/index_pin.dm
@@ -14,7 +14,7 @@
new_data = 0
if(isnum(new_data))
- data = CLAMP(round(new_data), 0, IC_MAX_LIST_LENGTH)
+ data = clamp(round(new_data), 0, IC_MAX_LIST_LENGTH)
holder.on_data_written()
/datum/integrated_io/index/display_pin_type()
diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm
index 6b4f46f83d..219e30c57f 100644
--- a/code/modules/integrated_electronics/subtypes/atmospherics.dm
+++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm
@@ -308,7 +308,7 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir()
/obj/item/integrated_circuit/atmospherics/pump/filter/on_data_written()
var/amt = get_pin_data(IC_INPUT, 5)
- target_pressure = CLAMP(amt, 0, PUMP_MAX_PRESSURE)
+ target_pressure = clamp(amt, 0, PUMP_MAX_PRESSURE)
/obj/item/integrated_circuit/atmospherics/pump/filter/do_work()
activate_pin(2)
diff --git a/code/modules/integrated_electronics/subtypes/data_transfer.dm b/code/modules/integrated_electronics/subtypes/data_transfer.dm
index 8e1c715d83..8db1db4e00 100644
--- a/code/modules/integrated_electronics/subtypes/data_transfer.dm
+++ b/code/modules/integrated_electronics/subtypes/data_transfer.dm
@@ -125,7 +125,7 @@
/obj/item/integrated_circuit/transfer/pulsedemultiplexer/do_work()
var/output_index = get_pin_data(IC_INPUT, 1)
- if(output_index == CLAMP(output_index, 1, number_of_pins))
+ if(output_index == clamp(output_index, 1, number_of_pins))
activate_pin(round(output_index + 1 ,1))
/obj/item/integrated_circuit/transfer/pulsedemultiplexer/medium
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index 0be6fd8686..49e6855b38 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -389,8 +389,8 @@
activate_pin(3)
return
var/turf/T = get_turf(assembly)
- var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx)
- var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy)
+ var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx)
+ var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy)
var/turf/A = locate(target_x, target_y, T.z)
set_pin_data(IC_OUTPUT, 1, null)
if(!A || !(A in view(T)))
@@ -532,7 +532,7 @@
var/rad = get_pin_data(IC_INPUT, 2)
if(isnum(rad))
- rad = CLAMP(rad, 0, 8)
+ rad = clamp(rad, 0, 8)
radius = rad
/obj/item/integrated_circuit/input/advanced_locator_list/do_work()
@@ -594,7 +594,7 @@
/obj/item/integrated_circuit/input/advanced_locator/on_data_written()
var/rad = get_pin_data(IC_INPUT, 2)
if(isnum(rad))
- rad = CLAMP(rad, 0, 8)
+ rad = clamp(rad, 0, 8)
radius = rad
/obj/item/integrated_circuit/input/advanced_locator/do_work()
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index d1cd852651..fd4e6abfc5 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -236,7 +236,7 @@
var/mode = get_pin_data(IC_INPUT, 2)
switch(ord)
if(1)
- mode = CLAMP(mode, GRAB_PASSIVE, max_grab)
+ mode = clamp(mode, GRAB_PASSIVE, max_grab)
if(AM)
if(check_target(AM, exclude_contents = TRUE))
acting_object.investigate_log("grabbed ([AM]) using [src].", INVESTIGATE_CIRCUIT)
@@ -329,9 +329,9 @@
// If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it.
var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc
- var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx)
- var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy)
- var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
+ var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx)
+ var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy)
+ var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
//remove damage
A.throwforce = 0
A.embedding = list("embed_chance" = 0)
@@ -447,7 +447,7 @@
if(!S)
activate_pin(4)
return
- if(materials.insert_item(S, CLAMP(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) )
+ if(materials.insert_item(S, clamp(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) )
AfterMaterialInsert()
activate_pin(3)
else
@@ -458,7 +458,7 @@
for(var/I in 1 to mtypes.len)
var/datum/material/M = materials.materials[mtypes[I]]
if(M)
- var/U = CLAMP(get_pin_data(IC_INPUT, I+2),-100000,100000)
+ var/U = clamp(get_pin_data(IC_INPUT, I+2),-100000,100000)
if(!U)
continue
if(!mt) //Invalid input
diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm
index 6005709dde..47b6e151cb 100644
--- a/code/modules/integrated_electronics/subtypes/output.dm
+++ b/code/modules/integrated_electronics/subtypes/output.dm
@@ -112,7 +112,7 @@
var/brightness = get_pin_data(IC_INPUT, 2)
if(new_color && isnum(brightness))
- brightness = CLAMP(brightness, 0, 10)
+ brightness = clamp(brightness, 0, 10)
light_rgb = new_color
light_brightness = brightness
@@ -151,7 +151,7 @@
var/selected_sound = sounds[ID]
if(!selected_sound)
return
- vol = CLAMP(vol ,0 , 100)
+ vol = clamp(vol ,0 , 100)
playsound(get_turf(src), selected_sound, vol, freq, -1)
var/atom/A = get_object()
A.investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT)
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index 0fc9f58db8..663ba9fe16 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -94,7 +94,7 @@
else
direction_mode = SYRINGE_INJECT
if(isnum(new_amount))
- new_amount = CLAMP(new_amount, 0, volume)
+ new_amount = clamp(new_amount, 0, volume)
transfer_amount = new_amount
@@ -222,7 +222,7 @@
else
direction_mode = SYRINGE_INJECT
if(isnum(new_amount))
- new_amount = CLAMP(new_amount, 0, 50)
+ new_amount = clamp(new_amount, 0, 50)
transfer_amount = new_amount
/obj/item/integrated_circuit/reagent/pump/do_work()
@@ -468,7 +468,7 @@
else
direction_mode = SYRINGE_INJECT
if(isnum(new_amount))
- new_amount = CLAMP(new_amount, 0, 50)
+ new_amount = clamp(new_amount, 0, 50)
transfer_amount = new_amount
/obj/item/integrated_circuit/reagent/filter/do_work()
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index d0c47f0950..5dc866c556 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -57,8 +57,8 @@
activate_pin(3)
return
var/turf/T = get_turf(assembly)
- var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx)
- var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy)
+ var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx)
+ var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy)
var/turf/A = locate(target_x, target_y, T.z)
set_pin_data(IC_OUTPUT, 1, null)
if(!A||A==T)
diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm
index 1f1d5444bb..cae43718c2 100644
--- a/code/modules/integrated_electronics/subtypes/time.dm
+++ b/code/modules/integrated_electronics/subtypes/time.dm
@@ -64,7 +64,7 @@
/obj/item/integrated_circuit/time/delay/custom/do_work()
var/delay_input = get_pin_data(IC_INPUT, 1)
if(delay_input && isnum(delay_input) )
- var/new_delay = CLAMP(delay_input ,1 ,36000) //An hour.
+ var/new_delay = clamp(delay_input ,1 ,36000) //An hour.
delay = new_delay
..()
@@ -119,7 +119,7 @@
/obj/item/integrated_circuit/time/ticker/custom/on_data_written()
var/delay_input = get_pin_data(IC_INPUT, 2)
if(delay_input && isnum(delay_input) )
- var/new_delay = CLAMP(delay_input ,1 ,1 HOURS)
+ var/new_delay = clamp(delay_input ,1 ,1 HOURS)
delay = new_delay
..()
diff --git a/code/modules/integrated_electronics/subtypes/trig.dm b/code/modules/integrated_electronics/subtypes/trig.dm
index cefa25e945..75580911c3 100644
--- a/code/modules/integrated_electronics/subtypes/trig.dm
+++ b/code/modules/integrated_electronics/subtypes/trig.dm
@@ -71,7 +71,7 @@
var/result = null
var/A = get_pin_data(IC_INPUT, 1)
if(!isnull(A))
- result = TAN(A)
+ result = tan(A)
set_pin_data(IC_OUTPUT, 1, result)
push_data()
diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm
index 02340970af..2f6a2cd841 100644
--- a/code/modules/integrated_electronics/subtypes/weaponized.dm
+++ b/code/modules/integrated_electronics/subtypes/weaponized.dm
@@ -102,8 +102,8 @@
yo.data = round(yo.data, 1)
var/turf/T = get_turf(assembly)
- var/target_x = CLAMP(T.x + xo.data, 0, world.maxx)
- var/target_y = CLAMP(T.y + yo.data, 0, world.maxy)
+ var/target_x = clamp(T.x + xo.data, 0, world.maxx)
+ var/target_y = clamp(T.y + yo.data, 0, world.maxy)
assembly.visible_message("[assembly] fires [installed_gun]! ")
shootAt(locate(target_x, target_y, T.z))
@@ -191,7 +191,7 @@
var/datum/integrated_io/detonation_time = inputs[1]
var/dt
if(isnum(detonation_time.data) && detonation_time.data > 0)
- dt = CLAMP(detonation_time.data, 1, 12)*10
+ dt = clamp(detonation_time.data, 1, 12)*10
else
dt = 15
addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt)
@@ -293,9 +293,9 @@
// If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it.
var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc
- var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx)
- var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy)
- var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
+ var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx)
+ var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy)
+ var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1)
assembly.visible_message("\The [assembly] has thrown [A]! ")
log_attack("[assembly] [REF(assembly)] has thrown [A] with lethal force.")
A.forceMove(drop_location())
@@ -324,7 +324,7 @@
/obj/item/integrated_circuit/weaponized/stun/do_work()
- var/stunforce = CLAMP(get_pin_data(IC_INPUT, 1),1,70)
+ var/stunforce = clamp(get_pin_data(IC_INPUT, 1),1,70)
var/mob/living/L = assembly.loc
if(attempt_stun(L,stunforce))
activate_pin(2)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index ee441c21f7..e40c278e92 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -66,6 +66,11 @@
// How much threat this job is worth in dynamic. Is subtracted if the player's not an antag, added if they are.
var/threat = 0
+ /// Starting skill levels.
+ var/list/starting_skills
+ /// Skill affinities to set
+ var/list/skill_affinities
+
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
@@ -142,7 +147,6 @@
return TRUE //Available in 0 days = available right now = player is old enough to play.
return FALSE
-
/datum/job/proc/available_in_days(client/C)
if(!C)
return 0
@@ -166,6 +170,17 @@
/datum/job/proc/radio_help_message(mob/M)
to_chat(M, "Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset. ")
+/datum/job/proc/standard_assign_skills(datum/mind/M)
+ if(!starting_skills)
+ return
+ for(var/skill in starting_skills)
+ M.skill_holder.boost_skill_value_to(skill, starting_skills[skill])
+ // do wipe affinities though
+ M.skill_holder.skill_affinities = list()
+ for(var/skill in skill_affinities)
+ M.skill_holder.skill_affinities[skill] = skill_affinities[skill]
+ UNSETEMPTY(M.skill_holder.skill_affinities) //if we didn't set any.
+
/datum/outfit/job
name = "Standard Gear"
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
index 44b0e90ec8..571785526b 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -19,6 +19,9 @@
display_order = JOB_DISPLAY_ORDER_CHEMIST
threat = 1.5
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+ skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
+
/datum/outfit/job/chemist
name = "Chemist"
jobtype = /datum/job/chemist
diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm
index 8dd7fafab3..478c33551d 100644
--- a/code/modules/jobs/job_types/chief_medical_officer.dm
+++ b/code/modules/jobs/job_types/chief_medical_officer.dm
@@ -29,6 +29,9 @@
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
threat = 2
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+ skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
+
/datum/outfit/job/cmo
name = "Chief Medical Officer"
jobtype = /datum/job/cmo
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
index 2e8b18d772..4fb989f6e8 100644
--- a/code/modules/jobs/job_types/geneticist.dm
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -19,6 +19,8 @@
display_order = JOB_DISPLAY_ORDER_GENETICIST
threat = 1.5
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+
/datum/outfit/job/geneticist
name = "Geneticist"
jobtype = /datum/job/geneticist
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index 3eaa2ae10a..0e8b2e645b 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -17,6 +17,9 @@
display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR
threat = 0.5
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+ skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
+
/datum/outfit/job/doctor
name = "Medical Doctor"
jobtype = /datum/job/doctor
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index df6e1431ae..e8098daddc 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -19,6 +19,9 @@
threat = 0.5
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+ skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
+
/datum/outfit/job/paramedic
name = "Paramedic"
jobtype = /datum/job/paramedic
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
index 4ba65dff59..78f0ba4272 100644
--- a/code/modules/jobs/job_types/virologist.dm
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -20,6 +20,9 @@
threat = 1.5
+ starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL)
+ skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL)
+
/datum/outfit/job/virologist
name = "Virologist"
jobtype = /datum/job/virologist
diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm
index b307e66b39..f31ea9022b 100644
--- a/code/modules/language/language_holder.dm
+++ b/code/modules/language/language_holder.dm
@@ -74,7 +74,7 @@
var/datum/language_holder/other
if(istype(thing, /datum/language_holder))
other = thing
- else if(ismovableatom(thing))
+ else if(ismovable(thing))
var/atom/movable/AM = thing
other = AM.get_language_holder()
else if(istype(thing, /datum/mind))
@@ -94,7 +94,7 @@
language_menu.ui_interact(user)
/datum/language_holder/proc/get_atom()
- if(ismovableatom(owner))
+ if(ismovable(owner))
. = owner
else if(istype(owner, /datum/mind))
var/datum/mind/M = owner
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 008724b10f..144037b3a7 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -267,7 +267,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
dat += "(Order book by SS13 BN) "
dat += ""
dat += "AUTHOR TITLE CATEGORY "
- dat += libcomp_menu[CLAMP(page,1,libcomp_menu.len)]
+ dat += libcomp_menu[clamp(page,1,libcomp_menu.len)]
dat += "<<<< >>>> "
dat += "
"
dat += "(Return to main menu) "
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
index 8712a66290..779dd9c3ea 100644
--- a/code/modules/lighting/lighting_atom.dm
+++ b/code/modules/lighting/lighting_atom.dm
@@ -38,7 +38,7 @@
if (!light_power || !light_range) // We won't emit light anyways, destroy the light source.
QDEL_NULL(light)
else
- if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here.
+ if (!ismovable(loc)) // We choose what atom should be the top atom of the light here.
. = src
else
. = loc
diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm
index 3e361179de..873c10fc02 100644
--- a/code/modules/mapping/map_template.dm
+++ b/code/modules/mapping/map_template.dm
@@ -55,11 +55,11 @@
SSmachines.setup_template_powernets(cables)
SSair.setup_template_machinery(atmos_machines)
-/datum/map_template/proc/load_new_z()
+/datum/map_template/proc/load_new_z(list/traits = list(ZTRAIT_AWAY = TRUE))
var/x = round((world.maxx - width)/2)
var/y = round((world.maxy - height)/2)
- var/datum/space_level/level = SSmapping.add_new_zlevel(name, list(ZTRAIT_AWAY = TRUE))
+ var/datum/space_level/level = SSmapping.add_new_zlevel(name, traits)
var/datum/parsed_map/parsed = load_map(file(mappath), x, y, level.z_value, no_changeturf=(SSatoms.initialized == INITIALIZATION_INSSATOMS), placeOnTop=TRUE)
var/list/bounds = parsed.bounds
if(!bounds)
@@ -121,6 +121,6 @@
//for your ever biggening badminnery kevinz000
//❤ - Cyberboss
-/proc/load_new_z_level(var/file, var/name)
+/proc/load_new_z_level(file, name, list/traits)
var/datum/map_template/template = new(file, name)
- template.load_new_z()
+ return template.load_new_z(traits)
diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm
index 86b501c455..e7d7fd4898 100644
--- a/code/modules/mapping/reader.dm
+++ b/code/modules/mapping/reader.dm
@@ -93,7 +93,7 @@
gridSet.ycrd = text2num(dmmRegex.group[4])
gridSet.zcrd = text2num(dmmRegex.group[5])
- bounds[MAP_MINX] = min(bounds[MAP_MINX], CLAMP(gridSet.xcrd, x_lower, x_upper))
+ bounds[MAP_MINX] = min(bounds[MAP_MINX], clamp(gridSet.xcrd, x_lower, x_upper))
bounds[MAP_MINZ] = min(bounds[MAP_MINZ], gridSet.zcrd)
bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], gridSet.zcrd)
@@ -113,15 +113,15 @@
if(gridLines.len && gridLines[gridLines.len] == "")
gridLines.Cut(gridLines.len) // Remove only one blank line at the end.
- bounds[MAP_MINY] = min(bounds[MAP_MINY], CLAMP(gridSet.ycrd, y_lower, y_upper))
+ bounds[MAP_MINY] = min(bounds[MAP_MINY], clamp(gridSet.ycrd, y_lower, y_upper))
gridSet.ycrd += gridLines.len - 1 // Start at the top and work down
- bounds[MAP_MAXY] = max(bounds[MAP_MAXY], CLAMP(gridSet.ycrd, y_lower, y_upper))
+ bounds[MAP_MAXY] = max(bounds[MAP_MAXY], clamp(gridSet.ycrd, y_lower, y_upper))
var/maxx = gridSet.xcrd
if(gridLines.len) //Not an empty map
maxx = max(maxx, gridSet.xcrd + length(gridLines[1]) / key_len - 1)
- bounds[MAP_MAXX] = CLAMP(max(bounds[MAP_MAXX], maxx), x_lower, x_upper)
+ bounds[MAP_MAXX] = clamp(max(bounds[MAP_MAXX], maxx), x_lower, x_upper)
CHECK_TICK
// Indicate failure to parse any coordinates by nulling bounds
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index c14aa097bb..47a1d84f58 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -65,7 +65,7 @@
qdel(src)
/obj/item/organ/regenerative_core/on_life()
- ..()
+ . = ..()
if(owner.health < owner.crit_threshold)
ui_action_click()
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 56e1a04b95..4dd86a847a 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -428,7 +428,7 @@
/obj/item/projectile/hook/on_hit(atom/target)
. = ..()
- if(ismovableatom(target))
+ if(ismovable(target))
var/atom/movable/A = target
if(A.anchored)
return
@@ -833,13 +833,13 @@
force = 0
var/ghost_counter = ghost_check()
- force = CLAMP((ghost_counter * 4), 0, 75)
+ force = clamp((ghost_counter * 4), 0, 75)
user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits! ")
return ..()
/obj/item/melee/ghost_sword/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
var/ghost_counter = ghost_check()
- final_block_chance += CLAMP((ghost_counter * 5), 0, 75)
+ final_block_chance += clamp((ghost_counter * 5), 0, 75)
owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts! ")
return ..()
diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm
index c0356dd1ab..09246abc46 100644
--- a/code/modules/mining/machine_silo.dm
+++ b/code/modules/mining/machine_silo.dm
@@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
var/list/logs = GLOB.silo_access_logs[REF(src)]
var/len = LAZYLEN(logs)
var/num_pages = 1 + round((len - 1) / 30)
- var/page = CLAMP(log_page, 1, num_pages)
+ var/page = clamp(log_page, 1, num_pages)
if(num_pages > 1)
for(var/i in 1 to num_pages)
if(i == page)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 0182dec254..bcb196a103 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -194,7 +194,7 @@
prize_list += list(
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250),
new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250),
- new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300),
+ new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/cube/monkey, 300),
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index d04c0104e5..e89bbef58d 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -87,7 +87,7 @@
if(istype(new_material))
chosen = new_material
if(href_list["chooseAmt"])
- coinsToProduce = CLAMP(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000)
+ coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000)
updateUsrDialog()
if(href_list["makeCoins"])
var/temp_coins = coinsToProduce
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 35b1a69761..f7e1f24b63 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -392,6 +392,8 @@
character.update_parallax_teleport()
+ job.standard_assign_skills(character.mind)
+
SSticker.minds += character.mind
var/mob/living/carbon/human/humanc
diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm
index b669e30a06..317efc2c1f 100644
--- a/code/modules/mob/dead/new_player/preferences_setup.dm
+++ b/code/modules/mob/dead/new_player/preferences_setup.dm
@@ -23,11 +23,7 @@
if(!pref_species)
var/rando_race = pick(GLOB.roundstart_races)
pref_species = new rando_race()
- features = random_features(pref_species?.id)
- if(gender == MALE || gender != FEMALE)
- features["body_model"] = gender
- else if(gender == PLURAL)
- features["body_model"] = pick(MALE,FEMALE)
+ features = random_features(pref_species?.id, gender)
age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon(equip_job = TRUE)
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/pines.dm b/code/modules/mob/dead/new_player/sprite_accessories/spines.dm
similarity index 100%
rename from code/modules/mob/dead/new_player/sprite_accessories/pines.dm
rename to code/modules/mob/dead/new_player/sprite_accessories/spines.dm
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index b2d02d8fa2..b8e56f3d7c 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -570,7 +570,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
views |= i
var/new_view = input("Choose your new view", "Modify view range", 7) as null|anything in views
if(new_view)
- client.change_view(CLAMP(new_view, 7, max_view))
+ client.change_view(clamp(new_view, 7, max_view))
else
client.change_view(CONFIG_GET(string/default_view))
@@ -937,3 +937,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
spawners_menu = new(src)
spawners_menu.ui_interact(src)
+
+/mob/dead/observer/verb/game_info()
+ set name = "Game info"
+ set desc = "Shows various info relating to the game mode, antagonists etc."
+ set category = "Ghost"
+ if(!started_as_observer && can_reenter_corpse)
+ to_chat(src, "You cannot see this info unless you are an observer or you've chosen Do Not Resuscitate!")
+ return
+ var/list/stuff = list("[SSticker.mode.name]")
+ stuff += "Antagonists:\n"
+ for(var/datum/antagonist/A in GLOB.antagonists)
+ if(A.owner)
+ stuff += "[A.owner] the [A.name]"
+ var/ghost_info = SSticker.mode.ghost_info()
+ if(ghost_info)
+ stuff += ghost_info
+ to_chat(src,stuff.Join("\n"))
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 9f7d2067de..fad3a7e534 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -333,7 +333,8 @@
I.moveToNullspace()
else
I.forceMove(newloc)
- I.dropped(src)
+ if(I.dropped(src) == ITEM_RELOCATED_BY_DROPPED)
+ return FALSE
return TRUE
//Outdated but still in use apparently. This should at least be a human proc.
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index f32d84ae73..90621ecd3f 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -229,7 +229,7 @@
var/adjusted_amount
if(amount >= 0 && maximum)
var/brainloss = get_brain_damage()
- var/new_brainloss = CLAMP(brainloss + amount, 0, maximum)
+ var/new_brainloss = clamp(brainloss + amount, 0, maximum)
if(brainloss > new_brainloss) //brainloss is over the cap already
return 0
adjusted_amount = new_brainloss - brainloss
@@ -245,23 +245,17 @@
. = adjusted_amount
*/
-/obj/item/organ/brain/on_life()
- if(damage >= BRAIN_DAMAGE_DEATH) //rip
- to_chat(owner, "The last spark of life in your brain fizzles out... ")
- owner.death()
- brain_death = TRUE
- return
- ..()
-
-/obj/item/organ/brain/on_death()
- if(damage <= BRAIN_DAMAGE_DEATH) //rip
- brain_death = FALSE
- ..()
-
-
/obj/item/organ/brain/applyOrganDamage(var/d, var/maximum = maxHealth)
- ..()
-
+ . = ..()
+ if(!. || !owner)
+ return
+ if(damage >= BRAIN_DAMAGE_DEATH) //rip
+ if(owner.stat != DEAD)
+ to_chat(owner, "The last spark of life in your brain fizzles out... ")
+ owner.death()
+ brain_death = TRUE
+ else
+ brain_death = FALSE
/obj/item/organ/brain/check_damage_thresholds(mob/M)
. = ..()
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index bd24a4b4c4..bf9854e0b4 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -12,6 +12,13 @@
bubble_icon = "alien"
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
+ /// How much brute damage without armor piercing they do against mobs in melee
+ var/meleeSlashHumanPower = 20
+ /// How much power they have for DefaultCombatKnockdown when attacking humans
+ var/meleeKnockdownPower = 100
+ /// How much brute damage they do to simple animals
+ var/meleeSlashSAPower = 35
+
var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie
var/has_fine_manipulation = 0
var/move_delay_add = 0 // movement delay to add
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index 183bf07e8c..072c4e0231 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -4,6 +4,7 @@
maxHealth = 125
health = 125
icon_state = "aliend"
+ meleeKnockdownPower = 80
/mob/living/carbon/alien/humanoid/drone/Initialize()
AddAbility(new/obj/effect/proc_holder/alien/evolve(null))
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index faea8e9bbc..85204e5ab9 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -1,9 +1,12 @@
/mob/living/carbon/alien/humanoid/hunter
name = "alien hunter"
caste = "h"
- maxHealth = 125
- health = 125
+ maxHealth = 170
+ health = 170
icon_state = "alienh"
+ meleeKnockdownPower = 75
+ meleeSlashHumanPower = 20
+ meleeSlashSAPower = 45
var/obj/screen/leap_icon = null
/mob/living/carbon/alien/humanoid/hunter/create_internal_organs()
@@ -68,6 +71,7 @@
else
L.visible_message("[src] pounces on [L]! ", "[src] pounces on you! ")
L.DefaultCombatKnockdown(100)
+ L.Stagger(4 SECONDS)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 7c6443cfae..67cf6f7d25 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -1,9 +1,10 @@
/mob/living/carbon/alien/humanoid/sentinel
name = "alien sentinel"
caste = "s"
- maxHealth = 150
- health = 150
+ maxHealth = 140
+ health = 140
icon_state = "aliens"
+ meleeSlashHumanPower = 15
/mob/living/carbon/alien/humanoid/sentinel/Initialize()
AddAbility(new /obj/effect/proc_holder/alien/sneak)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 048b5062ec..c813ce40f0 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -112,7 +112,6 @@
return A
return FALSE
-
/mob/living/carbon/alien/humanoid/check_breath(datum/gas_mixture/breath)
if(breath && breath.total_moles() > 0 && !sneaking)
playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, 0, -5)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm
index 1d613db07a..5ebf6210d0 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm
@@ -1,4 +1,3 @@
-
/mob/living/carbon/alien/humanoid/grabbedby(mob/living/carbon/user, supress_message = 0)
if(user == src && pulling && grab_state >= GRAB_AGGRESSIVE && !pulling.anchored && iscarbon(pulling))
devour_mob(pulling, devour_time = 60)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index fd6a73ae7b..67c9285377 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -1,5 +1,3 @@
-
-
/mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost)
var/temperature = current
var/difference = abs(current-loc_temp) //get difference
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 6141a97c12..1200220ce4 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -11,6 +11,10 @@
pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
+ meleeKnockdownPower = 125
+ meleeSlashHumanPower = 30
+ meleeSlashSAPower = 60
+
var/alt_inhands_file = 'icons/mob/alienqueen.dmi'
/mob/living/carbon/alien/humanoid/royal/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, bypass_immunity = FALSE)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index fb26a40350..93050a4f9d 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -6,6 +6,7 @@
mob_size = MOB_SIZE_SMALL
density = FALSE
hud_type = /datum/hud/larva
+ mouse_opacity = MOUSE_OPACITY_OPAQUE
maxHealth = 25
health = 25
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index b57f9653a9..8485fece85 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -77,6 +77,9 @@
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
/obj/item/organ/alien/plasmavessel/on_life()
+ . = ..()
+ if(!.)
+ return
//If there are alien weeds on the ground then heal if needed or give some plasma
if(locate(/obj/structure/alien/weeds) in owner.loc)
if(owner.health >= owner.maxHealth)
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 5352329f99..0e8764a372 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -23,6 +23,8 @@
/obj/item/organ/body_egg/alien_embryo/on_life()
. = ..()
+ if(!owner)
+ return
switch(stage)
if(2, 3)
if(prob(2))
diff --git a/code/modules/mob/living/carbon/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm
index 4a63a72686..71d61cab25 100644
--- a/code/modules/mob/living/carbon/alien/status_procs.dm
+++ b/code/modules/mob/living/carbon/alien/status_procs.dm
@@ -20,5 +20,5 @@
/mob/living/carbon/alien/AdjustStun(amount, updating = 1, ignore_canstun = 0)
. = ..()
if(!.)
- move_delay_add = CLAMP(move_delay_add + round(amount/2), 0, 10)
+ move_delay_add = clamp(move_delay_add + round(amount/2), 0, 10)
*/
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 377540233f..cef445113b 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -7,6 +7,7 @@
update_body_parts() //to update the carbon's new bodyparts appearance
GLOB.carbon_list += src
blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio)
+ add_movespeed_modifier(/datum/movespeed_modifier/carbon_crawling)
/mob/living/carbon/Destroy()
//This must be done first, so the mob ghosts correctly before DNA etc is nulled
@@ -574,9 +575,9 @@
become_husk("burn")
med_hud_set_health()
if(stat == SOFT_CRIT)
- add_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE, multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN)
+ add_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit)
else
- remove_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit)
/mob/living/carbon/update_stamina()
var/stam = getStaminaLoss()
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 414f339b28..adca193ce0 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -38,7 +38,7 @@
adjustCloneLoss(damage_amount, forced = forced)
if(STAMINA)
if(BP)
- if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount)))
+ if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount), FALSE, FALSE))
update_damage_overlays()
else
adjustStaminaLoss(damage_amount, forced = forced)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 94aba6851a..7f5f912ff6 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -768,7 +768,7 @@
return
else
if(hud_used.healths)
- var/health_amount = min(health, maxHealth - CLAMP(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud
+ var/health_amount = min(health, maxHealth - clamp(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud
if(..(health_amount)) //not dead
switch(hal_screwyhud)
if(SCREWYHUD_CRIT)
@@ -1041,7 +1041,7 @@
return FALSE
/mob/living/carbon/human/proc/clear_shove_slowdown()
- remove_movespeed_modifier(MOVESPEED_ID_SHOVE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/shove)
var/active_item = get_active_held_item()
if(is_type_in_typecache(active_item, GLOB.shove_disarming_types))
visible_message("[src.name] regains their grip on \the [active_item]! ", "You regain your grip on \the [active_item] ", null, COMBAT_MESSAGE_RANGE)
@@ -1050,17 +1050,17 @@
. = ..()
if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN))
- remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN)
- remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING)
+ remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown)
+ remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying)
return
var/stambufferinfluence = (bufferedstam*(100/stambuffer))*0.2 //CIT CHANGE - makes stamina buffer influence movedelay
var/health_deficiency = ((100 + stambufferinfluence) - health + (getStaminaLoss()*0.75))//CIT CHANGE - reduces the impact of staminaloss and makes stamina buffer influence it
if(health_deficiency >= 40)
- add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 75), blacklisted_movetypes = FLOATING|FLYING)
- add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 25), movetypes = FLYING, blacklisted_movetypes = FLOATING)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, (health_deficiency-39) / 75)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying, TRUE, (health_deficiency-39) / 25)
else
- remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN)
- remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING)
+ remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown)
+ remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying)
/mob/living/carbon/human/do_after_coefficent()
. = ..()
diff --git a/code/modules/mob/living/carbon/human/human_block.dm b/code/modules/mob/living/carbon/human/human_block.dm
index b1a5153ce5..8fe0376a08 100644
--- a/code/modules/mob/living/carbon/human/human_block.dm
+++ b/code/modules/mob/living/carbon/human/human_block.dm
@@ -1,8 +1,8 @@
/mob/living/carbon/human/get_blocking_items()
. = ..()
if(wear_suit)
- . += wear_suit
+ . |= wear_suit
if(w_uniform)
- . += w_uniform
+ . |= w_uniform
if(wear_neck)
- . += wear_neck
+ . |= wear_neck
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 324420a7dd..856c57687f 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -155,7 +155,7 @@
if(M.a_intent == INTENT_HARM)
if (w_uniform)
w_uniform.add_fingerprint(M)
- var/damage = prob(90) ? 20 : 0
+ var/damage = prob(90) ? M.meleeSlashHumanPower : 0
if(!damage)
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1)
visible_message("[M] has lunged at [src]! ", \
@@ -182,10 +182,7 @@
"[M] disarmed [src]! ")
else
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
- if(!lying) //CITADEL EDIT
- DefaultCombatKnockdown(100, TRUE, FALSE, 30, 25)
- else
- DefaultCombatKnockdown(100)
+ DefaultCombatKnockdown(M.meleeKnockdownPower)
log_combat(M, src, "tackled")
visible_message("[M] has tackled down [src]! ", \
"[M] has tackled down [src]! ")
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index a26bdd99cd..09dfa602e1 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -1,11 +1,13 @@
/mob/living/carbon/human/get_movespeed_modifiers()
var/list/considering = ..()
- . = considering
if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN))
- for(var/id in .)
- var/list/data = .[id]
- if(data[MOVESPEED_DATA_INDEX_FLAGS] & IGNORE_NOSLOW)
- .[id] = data
+ . = list()
+ for(var/id in considering)
+ var/datum/movespeed_modifier/M = considering[id]
+ if(M.flags & IGNORE_NOSLOW || M.multiplicative_slowdown < 0)
+ .[id] = M
+ return
+ return considering
/mob/living/carbon/human/movement_delay()
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 03df561a23..8040f60dcc 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -331,7 +331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(mutant_bodyparts["meat_type"]) //I can't believe it's come to the meat
H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]]
- C.add_movespeed_modifier(MOVESPEED_ID_SPECIES, TRUE, 100, override=TRUE, multiplicative_slowdown=speedmod, movetypes=(~FLYING))
+ C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod)
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
@@ -349,7 +349,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/X in inherent_traits)
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
- C.remove_movespeed_modifier(MOVESPEED_ID_SPECIES)
+ C.remove_movespeed_modifier(/datum/movespeed_modifier/species)
if(mutant_bodyparts["meat_type"])
C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]]
@@ -1275,14 +1275,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(H.overeatduration < 100)
to_chat(H, "You feel fit again! ")
REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
- H.remove_movespeed_modifier(MOVESPEED_ID_FAT)
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity)
H.update_inv_w_uniform()
H.update_inv_wear_suit()
else
if(H.overeatduration >= 100)
to_chat(H, "You suddenly feel blubbery! ")
ADD_TRAIT(H, TRAIT_FAT, OBESITY)
- H.add_movespeed_modifier(MOVESPEED_ID_FAT, multiplicative_slowdown = 1.5)
+ H.add_movespeed_modifier(/datum/movespeed_modifier/obesity)
H.update_inv_w_uniform()
H.update_inv_wear_suit()
@@ -1338,9 +1338,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!HAS_TRAIT(H, TRAIT_NOHUNGER))
var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80
if(hungry >= 70)
- H.add_movespeed_modifier(MOVESPEED_ID_HUNGRY, override = TRUE, multiplicative_slowdown = (hungry / 50))
+ H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50))
else
- H.remove_movespeed_modifier(MOVESPEED_ID_HUNGRY)
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/hunger)
switch(H.nutrition)
if(NUTRITION_LEVEL_FULL to INFINITY)
@@ -1908,8 +1908,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/obj/item/target_held_item = target.get_active_held_item()
if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
target_held_item = null
- if(!target.has_movespeed_modifier(MOVESPEED_ID_SHOVE))
- target.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
+ if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove))
+ target.add_movespeed_modifier(/datum/movespeed_modifier/shove)
if(target_held_item)
if(!HAS_TRAIT(target_held_item, TRAIT_NODROP))
target.visible_message("[target.name]'s grip on \the [target_held_item] loosens! ",
@@ -2060,7 +2060,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
- H.remove_movespeed_modifier(MOVESPEED_ID_COLD)
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/cold)
var/burn_damage
var/firemodifier = H.fire_stacks / 50
@@ -2077,8 +2077,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD))
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
- //Sorry for the nasty oneline but I don't want to assign a variable on something run pretty frequently
- H.add_movespeed_modifier(MOVESPEED_ID_COLD, override = TRUE, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR), blacklisted_movetypes = FLOATING)
+ //Apply cold slowdown
+ H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR))
switch(H.bodytemperature)
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN)
@@ -2088,7 +2088,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN)
else
- H.remove_movespeed_modifier(MOVESPEED_ID_COLD)
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/cold)
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
index 7b43f6d565..57a973bf22 100644
--- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
@@ -101,12 +101,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
/obj/item/organ/dwarfgland/on_life() //Primary loop to hook into to start delayed loops for other loops..
. = ..()
- dwarf_cycle_ticker()
+ if(owner && owner.stat != DEAD)
+ dwarf_cycle_ticker()
//Handles the delayed tick cycle by just adding on increments per each on_life() tick
/obj/item/organ/dwarfgland/proc/dwarf_cycle_ticker()
- if(owner.stat == DEAD)
- return //We make sure they are not dead, so they don't increment any tickers.
dwarf_eth_ticker++
dwarf_filth_ticker++
@@ -169,7 +168,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
for(var/datum/reagent/R in owner.reagents.reagent_list)
if(istype(R, /datum/reagent/consumable/ethanol))
var/datum/reagent/consumable/ethanol/E = R
- stored_alcohol = CLAMP(stored_alcohol + E.boozepwr / 50, 0, max_alcohol)
+ stored_alcohol = clamp(stored_alcohol + E.boozepwr / 50, 0, max_alcohol)
var/heal_amt = heal_rate
stored_alcohol -= alcohol_rate //Subtracts alcohol_Rate from stored alcohol so EX: 250 - 0.25 per each loop that occurs.
if(stored_alcohol > 400) //If they are over 400 they start regenerating
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index abc2288e9b..7a5e347060 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -397,7 +397,7 @@
var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/turf/target = get_turf(P.starting)
// redirect the projectile
- P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H)
+ P.preparePixelProjectile(locate(clamp(target.x + new_x, 1, world.maxx), clamp(target.y + new_y, 1, world.maxy), H.z), H)
return BULLET_ACT_FORCE_PIERCE
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 775f36cfc7..10a29c72c1 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -606,7 +606,7 @@
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null
if(new_length)
- H.dna.features["cock_length"] = CLAMP(round(new_length), min_D, max_D)
+ H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D)
H.update_genitals()
H.apply_overlay()
H.give_genital(/obj/item/organ/genital/testicles)
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 9a6bc2659d..46c37a5b03 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -91,4 +91,9 @@
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail_lizard"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
C.dna.features["tail_lizard"] = "Smooth"
C.update_body()
+ if(C.dna.features["legs"] != "digitigrade")
+ C.dna.features["legs"] = "digitigrade"
+ for(var/obj/item/bodypart/leggie in C.bodyparts)
+ if(leggie.body_zone == BODY_ZONE_L_LEG || leggie.body_zone == BODY_ZONE_R_LEG)
+ leggie.update_limb(FALSE, C)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index f37e718462..f720aa7f8a 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -106,8 +106,8 @@
to_chat(victim, "[H] is draining your blood! ")
to_chat(H, "You drain some blood! ")
playsound(H, 'sound/items/drink.ogg', 30, 1, -2)
- victim.blood_volume = CLAMP(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM)
- H.blood_volume = CLAMP(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM)
+ victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM)
+ H.blood_volume = clamp(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM)
if(!victim.blood_volume)
to_chat(H, "You finish off [victim]'s blood supply! ")
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 8097859aac..00a0991e19 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -235,7 +235,7 @@
//TOXINS/PLASMA
if(Toxins_partialpressure > safe_tox_max)
var/ratio = (breath_gases[/datum/gas/plasma]/safe_tox_max) * 10
- adjustToxLoss(CLAMP(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
+ adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
throw_alert("too_much_tox", /obj/screen/alert/too_much_tox)
else
clear_alert("too_much_tox")
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index d3e5941e4e..6242fa56be 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -65,12 +65,11 @@
/mob/living/carbon/monkey/on_reagent_change()
. = ..()
- remove_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE)
var/amount
if(reagents.has_reagent(/datum/reagent/medicine/morphine))
amount = -1
if(amount)
- add_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_reagent_speedmod, TRUE, amount)
/mob/living/carbon/monkey/updatehealth()
. = ..()
@@ -78,7 +77,7 @@
var/health_deficiency = (100 - health)
if(health_deficiency >= 45)
slow += (health_deficiency / 25)
- add_movespeed_modifier(MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = slow)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_health_speedmod, TRUE, slow)
/mob/living/carbon/monkey/adjust_bodytemperature(amount)
. = ..()
@@ -87,7 +86,7 @@
slow += (283.222 - bodytemperature) / 10 * 1.75
if(slow <= 0)
return
- add_movespeed_modifier(MOVESPEED_ID_MONKEY_TEMPERATURE_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_temperature_speedmod, TRUE, slow)
/mob/living/carbon/monkey/Stat()
..()
@@ -99,7 +98,6 @@
if(changeling)
stat("Chemical Storage", "[changeling.chem_charges]/[changeling.chem_storage]")
stat("Absorbed DNA", changeling.absorbedcount)
- return
/mob/living/carbon/monkey/verb/removeinternal()
diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm
index 6c497bb8d4..a47bb7fb4a 100644
--- a/code/modules/mob/living/carbon/status_procs.dm
+++ b/code/modules/mob/living/carbon/status_procs.dm
@@ -23,10 +23,10 @@
clear_alert("high")
/mob/living/carbon/adjust_disgust(amount)
- disgust = CLAMP(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT)
+ disgust = clamp(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT)
/mob/living/carbon/set_disgust(amount)
- disgust = CLAMP(amount, 0, DISGUST_LEVEL_MAXEDOUT)
+ disgust = clamp(amount, 0, DISGUST_LEVEL_MAXEDOUT)
////////////////////////////////////////TRAUMAS/////////////////////////////////////////
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index d5e1fa6fc4..3257b0e3bf 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -88,7 +88,7 @@
if(EFFECT_STUN)
Stun(effect * hit_percent)
if(EFFECT_KNOCKDOWN)
- DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? CLAMP(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride)
+ DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? clamp(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride)
if(EFFECT_UNCONSCIOUS)
Unconscious(effect * hit_percent)
if(EFFECT_IRRADIATE)
@@ -140,7 +140,7 @@
/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- bruteloss = CLAMP((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
+ bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
if(updating_health)
updatehealth()
return amount
@@ -151,7 +151,7 @@
/mob/living/proc/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- oxyloss = CLAMP((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
+ oxyloss = clamp((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
if(updating_health)
updatehealth()
return amount
@@ -170,7 +170,7 @@
/mob/living/proc/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- toxloss = CLAMP((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
+ toxloss = clamp((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
if(updating_health)
updatehealth()
return amount
@@ -189,7 +189,7 @@
/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- fireloss = CLAMP((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
+ fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
if(updating_health)
updatehealth()
return amount
@@ -200,7 +200,7 @@
/mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- cloneloss = CLAMP((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
+ cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
if(updating_health)
updatehealth()
return amount
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 22a0da2cf6..89f8381087 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -68,7 +68,7 @@
var/obj/O = A
if(ObjBump(O))
return
- if(ismovableatom(A))
+ if(ismovable(A))
var/atom/movable/AM = A
if(PushAM(AM, move_force))
return
@@ -645,7 +645,7 @@
attempt_resist_grab(FALSE)
// Return as we should only resist one thing at a time. Give clickdelay if the grab wasn't passive.
return old_gs? TRUE : FALSE
-
+
// unbuckling yourself. stops the chain if you try it.
if(buckled && last_special <= world.time)
log_combat(src, buckled, "resisted buckle")
@@ -1030,7 +1030,7 @@
update_fire()
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
- fire_stacks = CLAMP(fire_stacks + add_fire_stacks, -20, 20)
+ fire_stacks = clamp(fire_stacks + add_fire_stacks, -20, 20)
if(on_fire && fire_stacks <= 0)
ExtinguishMob()
diff --git a/code/modules/mob/living/living_block.dm b/code/modules/mob/living/living_block.dm
index d9e3309e47..d39abb1250 100644
--- a/code/modules/mob/living/living_block.dm
+++ b/code/modules/mob/living/living_block.dm
@@ -57,7 +57,7 @@
if(real_attack)
for(var/obj/item/I in tocheck)
// i don't like this too
- var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example
+ var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example
var/results = I.run_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list)
. |= results
if((results & BLOCK_SUCCESS) && !(results & BLOCK_CONTINUE_CHAIN))
@@ -65,12 +65,13 @@
else
for(var/obj/item/I in tocheck)
// i don't like this too
- var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example
+ var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example
I.check_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list)
/// Gets an unsortedlist of objects to run block checks on.
/mob/living/proc/get_blocking_items()
. = list()
+ SEND_SIGNAL(src, COMSIG_LIVING_GET_BLOCKING_ITEMS, .)
for(var/obj/item/I in held_items)
// this is a bad check but i am not removing it until a better catchall is made
if(istype(I, /obj/item/clothing))
@@ -85,11 +86,13 @@
/// Runs block and returns flag for do_run_block to process.
/obj/item/proc/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return)
+ . = SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return)
+ if(. & BLOCK_SUCCESS)
+ return
if(prob(final_block_chance))
owner.visible_message("[owner] blocks [attack_text] with [src]! ")
- return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
- return BLOCK_NONE
+ return . | BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL
+ return . | BLOCK_NONE
/// Returns block information using list/block_return. Used for check_block() on mobs.
/obj/item/proc/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 7d220739d5..39a94232a3 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -88,9 +88,9 @@
/obj/item/proc/get_volume_by_throwforce_and_or_w_class()
if(throwforce && w_class)
- return CLAMP((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100
+ return clamp((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100
else if(w_class)
- return CLAMP(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100
+ return clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100
else
return 0
diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm
index 49d4a20887..32038a6102 100644
--- a/code/modules/mob/living/living_mobility.dm
+++ b/code/modules/mob/living/living_mobility.dm
@@ -94,11 +94,13 @@
if(should_be_lying)
mobility_flags &= ~MOBILITY_STAND
+ setMovetype(movement_type | CRAWLING)
if(!lying) //force them on the ground
lying = pick(90, 270)
if(has_gravity() && !buckled)
playsound(src, "bodyfall", 20, 1)
else
+ setMovetype(movement_type & ~CRAWLING)
mobility_flags |= MOBILITY_STAND
lying = 0
@@ -161,8 +163,8 @@
if(!has_legs && has_arms < 2)
limbless_slowdown += 6 - (has_arms * 3)
if(limbless_slowdown)
- add_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=limbless_slowdown, blacklisted_movetypes = FLYING|FLOATING)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown)
else
- remove_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/limbless)
return mobility_flags
diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm
index ec291094fe..ddcf3e6292 100644
--- a/code/modules/mob/living/living_movement.dm
+++ b/code/modules/mob/living/living_movement.dm
@@ -36,38 +36,26 @@
sprint_stamina_cost = CONFIG_GET(number/movedelay/sprint_stamina_cost)
return ..()
-/mob/living/movement_delay(ignorewalk = 0)
- . = ..()
- if(!CHECK_MOBILITY(src, MOBILITY_STAND))
- . += 6
-
/// whether or not we can slide under another living mob. defaults to if we're not dense. CanPass should check "overriding circumstances" like buckled mobs/having PASSMOB flag, etc.
/mob/living/proc/can_move_under_living(mob/living/other)
return !density
/mob/living/proc/update_move_intent_slowdown()
- var/mod = 0
- if(m_intent == MOVE_INTENT_WALK)
- mod = CONFIG_GET(number/movedelay/walk_delay)
- else
- mod = CONFIG_GET(number/movedelay/run_delay)
- if(!isnum(mod))
- mod = 1
- add_movespeed_modifier(MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED, TRUE, 100, override = TRUE, multiplicative_slowdown = mod)
+ add_movespeed_modifier((m_intent == MOVE_INTENT_WALK)? /datum/movespeed_modifier/config_walk_run/walk : /datum/movespeed_modifier/config_walk_run/run)
/mob/living/proc/update_turf_movespeed(turf/open/T)
- if(isopenturf(T) && !is_flying())
- add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown)
+ if(isopenturf(T))
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown, multiplicative_slowdown = T.slowdown)
else
- remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD)
+ remove_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown)
/mob/living/proc/update_pull_movespeed()
if(pulling && isliving(pulling))
var/mob/living/L = pulling
if(drag_slowdown && L.lying && !L.buckled && grab_state < GRAB_AGGRESSIVE)
- add_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
return
- remove_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING)
+ remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag)
/mob/living/canZMove(dir, turf/target)
return can_zTravel(target, dir) && (movement_type & FLYING)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index d178af9fb0..e959144ed5 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -869,7 +869,7 @@
if(istype(A, /obj/machinery/camera))
current = A
if(client)
- if(ismovableatom(A))
+ if(ismovable(A))
if(A != GLOB.ai_camera_room_landmark)
end_multicam()
client.perspective = EYE_PERSPECTIVE
@@ -1016,7 +1016,7 @@
if("Yes.")
src.ghostize(FALSE, penalize = TRUE)
var/announce_rank = "Artificial Intelligence,"
- if(GLOB.announcement_systems.len)
+ if(GLOB.announcement_systems.len)
// Sends an announcement the AI has cryoed.
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
announcer.announce("CRYOSTORAGE", src.real_name, announce_rank, list())
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 26fa3b505d..4b1b108b0e 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -154,7 +154,7 @@
/mob/living/silicon/pai/proc/process_hack()
if(cable && cable.machine && istype(cable.machine, /obj/machinery/door) && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1)
- hackprogress = CLAMP(hackprogress + 4, 0, 100)
+ hackprogress = clamp(hackprogress + 4, 0, 100)
else
temp = "Door Jack: Connection to airlock has been lost. Hack aborted."
hackprogress = 0
@@ -273,9 +273,9 @@
/mob/living/silicon/pai/Process_Spacemove(movement_dir = 0)
. = ..()
if(!.)
- add_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE, 100, multiplicative_slowdown = 2)
+ add_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk)
return TRUE
- remove_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk)
return TRUE
/mob/living/silicon/pai/examine(mob/user)
@@ -301,7 +301,7 @@
update_stat()
/mob/living/silicon/pai/process()
- emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth)
+ emitterhealth = clamp((emitterhealth + emitterregen), -50, emittermaxhealth)
/obj/item/paicard/attackby(obj/item/W, mob/user, params)
..()
diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm
index 0477492c0a..ba162ecf2c 100644
--- a/code/modules/mob/living/silicon/pai/pai_defense.dm
+++ b/code/modules/mob/living/silicon/pai/pai_defense.dm
@@ -69,7 +69,7 @@
return FALSE //No we're not flammable
/mob/living/silicon/pai/proc/take_holo_damage(amount)
- emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth)
+ emitterhealth = clamp((emitterhealth - amount), -50, emittermaxhealth)
if(emitterhealth < 0)
fold_in(force = TRUE)
if(amount > 0)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index cf67517c52..e04943a8c5 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -21,7 +21,7 @@
if(cell && cell.charge)
if(cell.charge <= 100)
uneq_all()
- var/amt = CLAMP((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
+ var/amt = clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick
else
uneq_all()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 4ef5993d2d..b389e386d4 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -237,7 +237,7 @@
return
if(!CONFIG_GET(flag/disable_secborg) && GLOB.security_level < CONFIG_GET(number/minimum_secborg_alert))
- to_chat(src, "NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [num2seclevel(CONFIG_GET(number/minimum_secborg_alert))] alert and greater. ")
+ to_chat(src, "NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [NUM2SECLEVEL(CONFIG_GET(number/minimum_secborg_alert))] alert and greater. ")
var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \
"Engineering" = /obj/item/robot_module/engineering, \
diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm
index 9b3db8af62..dced5ae869 100644
--- a/code/modules/mob/living/silicon/silicon_defense.dm
+++ b/code/modules/mob/living/silicon/silicon_defense.dm
@@ -1,3 +1,5 @@
+/mob/living/silicon/KnockToFloor(disarm_items = FALSE, silent = TRUE, updating = TRUE)
+ return
/mob/living/silicon/grippedby(mob/living/user, instant = FALSE)
return //can't upgrade a simple pull into a more aggressive grab.
diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm
index f4feab8824..fe18d48718 100644
--- a/code/modules/mob/living/simple_animal/animal_defense.dm
+++ b/code/modules/mob/living/simple_animal/animal_defense.dm
@@ -61,11 +61,10 @@
"[M] [response_disarm] [name]! ", null, COMBAT_MESSAGE_RANGE)
log_combat(M, src, "disarmed")
else
- var/damage = rand(15, 30)
visible_message("[M] has slashed at [src]! ", \
"[M] has slashed at [src]! ", null, COMBAT_MESSAGE_RANGE)
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
- attack_threshold_check(damage)
+ attack_threshold_check(M.meleeSlashSAPower)
log_combat(M, src, "attacked")
/mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L)
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index 0e48723f37..adb49938e1 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -19,6 +19,11 @@
path_image_color = "#993299"
weather_immunities = list("lava","ash")
+ var/clean_time = 50 //How long do we take to clean?
+ var/broom = FALSE //Do we have an speed buff from a broom?
+ var/adv_mop = FALSE //Do we have a cleaning buff from a better mop?
+
+
var/blood = 1
var/trash = 0
var/pests = 0
@@ -75,6 +80,26 @@
to_chat(user, "Please close the access panel before locking it. ")
else
to_chat(user, "\The [src] doesn't seem to respect your authority. ")
+
+ if(istype(W, /obj/item/mop/advanced))
+ if(bot_core.allowed(user) && open && adv_mop == TRUE)
+ to_chat(user, "You replace \the [src] old mop with a new better one! ")
+ adv_mop = TRUE
+ clean_time = 20 //2.5 the speed!
+ window_name = "Automatic Station Cleaner v2.1 BETA" //New!
+ qdel(W)
+ else
+ to_chat(user, "\the [src] already has this mop! ")
+
+ if(istype(W, /obj/item/twohanded/broom))
+ if(bot_core.allowed(user) && open && broom == TRUE)
+ to_chat(user, "You add to \the [src] a broom speeding it up! ")
+ broom = TRUE
+ base_speed = 1 //2x faster!
+ qdel(W)
+ else
+ to_chat(user, "\the [src] already has a broom! ")
+
else
return ..()
@@ -221,7 +246,7 @@
icon_state = "cleanbot-c"
visible_message("[src] begins to clean up [A]. ")
mode = BOT_CLEANING
- spawn(50)
+ spawn(clean_time)
if(mode == BOT_CLEANING)
if(A && isturf(A.loc))
var/atom/movable/AM = A
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index ab7c632214..e4e81bb5db 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -264,6 +264,9 @@
if((last_newpatient_speak + 300) < world.time) //Don't spam these messages!
var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/coming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/medbot/help.ogg',"[H.name], you appear to be injured!" = 'sound/voice/medbot/injured.ogg')
var/message = pick(messagevoice)
+ if(prob(1) && ISINRANGE_EX(H.getFireLoss(), 0, 20))
+ message = "Notices your minor burns*OwO what's this?"
+ messagevoice[message] = 'sound/voice/medbot/owo.ogg'
speak(message)
playsound(loc, messagevoice[message], 50, 0)
last_newpatient_speak = world.time
diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm
index 0cc097dc08..90fdeb0a62 100644
--- a/code/modules/mob/living/simple_animal/damage_procs.dm
+++ b/code/modules/mob/living/simple_animal/damage_procs.dm
@@ -2,7 +2,7 @@
/mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
- bruteloss = round(CLAMP(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION)
+ bruteloss = round(clamp(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION)
if(updating_health)
updatehealth()
return amount
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 9e1ae48bdd..cce5edc513 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -11,7 +11,7 @@
blood_volume = 350
speak_chance = 1
turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 1)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 4)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 3b9700bb58..2045e194d2 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -175,7 +175,7 @@
AddElement(/datum/element/cleaning)
/mob/living/simple_animal/hostile/alien/maid/AttackingTarget()
- if(ismovableatom(target))
+ if(ismovable(target))
if(istype(target, /obj/effect/decal/cleanable))
visible_message("[src] cleans up \the [target].")
qdel(target)
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 9c89ff4a4f..ced56f0705 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -7,7 +7,7 @@
icon_living = "carp"
icon_dead = "carp_dead"
icon_gib = "carp_gib"
- threat = 0.2
+ threat = 0.1
mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_chance = 0
turns_per_move = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 439bedf3cc..f19aa0a2a7 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -186,10 +186,10 @@
. = ..()
if(slowed_by_webs)
if(!(locate(/obj/structure/spider/stickyweb) in loc))
- remove_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB)
+ remove_movespeed_modifier(/datum/movespeed_modifier/tarantula_web)
slowed_by_webs = FALSE
else if(locate(/obj/structure/spider/stickyweb) in loc)
- add_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB, priority=100, multiplicative_slowdown=3)
+ add_movespeed_modifier(/datum/movespeed_modifier/tarantula_web)
slowed_by_webs = TRUE
//midwives are the queen of the spiders, can send messages to all them and web faster. That rare round where you get a queen spider and turn your 'for honor' players into 'r6siege' players will be a fun one.
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 5e75088f53..d2680fbf61 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -65,10 +65,10 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/bubblegum/Life()
..()
- move_to_delay = CLAMP(round((health/maxHealth) * 10), 3, 10)
+ move_to_delay = clamp(round((health/maxHealth) * 10), 3, 10)
/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire()
- anger_modifier = CLAMP(((maxHealth - health)/50),0,20)
+ anger_modifier = clamp(((maxHealth - health)/50),0,20)
if(charging)
return
ranged_cooldown = world.time + ranged_cooldown_time
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 83d27e7ea6..73fb9d4e48 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -56,7 +56,7 @@ Difficulty: Very Hard
L.dust()
/mob/living/simple_animal/hostile/megafauna/colossus/OpenFire()
- anger_modifier = CLAMP(((maxHealth - health)/50),0,20)
+ anger_modifier = clamp(((maxHealth - health)/50),0,20)
ranged_cooldown = world.time + 120
if(enrage(target))
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 4644992ad0..159f8a7f5c 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -105,7 +105,7 @@ Difficulty: Medium
/mob/living/simple_animal/hostile/megafauna/dragon/OpenFire()
if(swooping)
return
- anger_modifier = CLAMP(((maxHealth - health)/50),0,20)
+ anger_modifier = clamp(((maxHealth - health)/50),0,20)
ranged_cooldown = world.time + ranged_cooldown_time
if(prob(15 + anger_modifier) && !client)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index a9d42373a2..477c2ce3aa 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -191,7 +191,7 @@ Difficulty: Normal
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall
did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall
- anger_modifier = CLAMP(((maxHealth - health) / 42),0,50)
+ anger_modifier = clamp(((maxHealth - health) / 42),0,50)
burst_range = initial(burst_range) + round(anger_modifier * 0.08)
beam_range = initial(beam_range) + round(anger_modifier * 0.12)
diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
index 13a4d1793e..5111b0b180 100644
--- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
+++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
@@ -1,5 +1,13 @@
-
-
+/**
+ * Kudzu Flower Bud
+ *
+ * A flower created by flowering kudzu which spawns a venus human trap after a certain amount of time has passed.
+ *
+ * A flower created by kudzu with the flowering mutation. Spawns a venus human trap after 2 minutes under normal circumstances.
+ * Also spawns 4 vines going out in diagonal directions from the bud. Any living creature not aligned with plants is damaged by these vines.
+ * Once it grows a venus human trap, the bud itself will destroy itself.
+ *
+ */
/obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures
name = "flower bud"
desc = "A large pulsating plant..."
@@ -9,9 +17,9 @@
opacity = 0
canSmoothWith = list()
smooth = SMOOTH_FALSE
+ /// The amount of time it takes to create a venus human trap, in deciseconds
var/growth_time = 1200
-
/obj/structure/alien/resin/flower_bud_enemy/Initialize()
. = ..()
var/list/anchors = list()
@@ -25,36 +33,49 @@
B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow)
addtimer(CALLBACK(src, .proc/bear_fruit), growth_time)
+/**
+ * Spawns a venus human trap, then qdels itself.
+ *
+ * Displays a message, spawns a human venus trap, then qdels itself.
+ */
/obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit()
- visible_message("the plant has borne fruit! ")
+ visible_message("The plant has borne fruit! ")
new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src))
qdel(src)
-
/obj/effect/ebeam/vine
name = "thick vine"
mouse_opacity = MOUSE_OPACITY_ICON
desc = "A thick vine, painful to the touch."
-
/obj/effect/ebeam/vine/Crossed(atom/movable/AM)
+ . = ..()
if(isliving(AM))
var/mob/living/L = AM
- if(!("vines" in L.faction))
+ if(!isvineimmune(L))
L.adjustBruteLoss(5)
to_chat(L, "You cut yourself on the thorny vines. ")
-
-
+/**
+ * Venus Human Trap
+ *
+ * The result of a kudzu flower bud, these enemies use vines to drag prey close to them for attack.
+ *
+ * A carnivorious plant which uses vines to catch and ensnare prey. Spawns from kudzu flower buds.
+ * Each one has a maximum of four vines, which can be attached to a variety of things. Carbons are stunned when a vine is attached to them, and movable entities are pulled closer over time.
+ * Attempting to attach a vine to something with a vine already attached to it will pull all movable targets closer on command.
+ * Once the prey is in melee range, melee attacks from the venus human trap heals itself for 10% of its max health, assuming the target is alive.
+ * Akin to certain spiders, venus human traps can also be possessed and controlled by ghosts.
+ *
+ */
/mob/living/simple_animal/hostile/venus_human_trap
name = "venus human trap"
desc = "Now you know how the fly feels."
icon_state = "venus_human_trap"
- threat = 1
layer = SPACEVINE_MOB_LAYER
health = 50
maxHealth = 50
- ranged = 1
+ ranged = TRUE
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 25
@@ -63,65 +84,110 @@
attack_sound = 'sound/weapons/bladeslice.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 0
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
faction = list("hostile","vines","plants")
- var/list/grasping = list()
- var/max_grasps = 4
- var/grasp_chance = 20
- var/grasp_pull_chance = 85
- var/grasp_range = 4
- del_on_death = 1
+ initial_language_holder = /datum/language_holder/venus
+ del_on_death = TRUE
+ /// A list of all the plant's vines
+ var/list/vines = list()
+ /// The maximum amount of vines a plant can have at one time
+ var/max_vines = 4
+ /// How far away a plant can attach a vine to something
+ var/vine_grab_distance = 5
+ /// Whether or not this plant is ghost possessable
+ var/playable_plant = FALSE //Normal plants can **not** have players.
-/mob/living/simple_animal/hostile/venus_human_trap/Destroy()
- for(var/L in grasping)
- var/datum/beam/B = grasping[L]
- if(B)
- qdel(B)
- grasping = null
- return ..()
+/mob/living/simple_animal/hostile/venus_human_trap/ghost_playable
+ playable_plant = TRUE //For admins that want to buss some harmless plants
-/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action()
- if(..())
- for(var/mob/living/L in grasping)
- if(L.stat == DEAD)
- var/datum/beam/B = grasping[L]
- if(B)
- B.End()
- grasping -= L
-
- //Can attack+pull multiple times per cycle
- if(L.Adjacent(src))
- L.attack_animal(src)
- else
- if(prob(grasp_pull_chance))
- setDir(get_dir(src,L) )//staaaare
- step(L,get_dir(L,src)) //reel them in
- L.DefaultCombatKnockdown(60) //you can't get away now~
-
- if(grasping.len < max_grasps)
- grasping:
- for(var/mob/living/L in view(grasp_range, src))
- if(L == src || faction_check_mob(L) || (L in grasping) || L == target)
- continue
- for(var/t in getline(src,L))
- for(var/a in t)
- var/atom/A = a
- if(A.density && A != L)
- continue grasping
- if(prob(grasp_chance))
- to_chat(L, "\The [src] has you entangled! ")
- grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine)
-
- break //only take 1 new victim per cycle
+/mob/living/simple_animal/hostile/venus_human_trap/Life()
+ . = ..()
+ pull_vines()
+/mob/living/simple_animal/hostile/venus_human_trap/AttackingTarget()
+ . = ..()
+ if(isliving(target))
+ var/mob/living/L = target
+ if(L.stat != DEAD)
+ adjustHealth(-maxHealth * 0.1)
/mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target)
- var/dist = get_dist(src,the_target)
- Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine)
- the_target.attack_animal(src)
+ for(var/datum/beam/B in vines)
+ if(B.target == the_target)
+ pull_vines()
+ ranged_cooldown = world.time + (ranged_cooldown_time * 0.5)
+ return
+ if(get_dist(src,the_target) > vine_grab_distance || vines.len == max_vines)
+ return
+ for(var/turf/T in getline(src,target))
+ if (T.density)
+ return
+ for(var/obj/O in T)
+ if(O.density)
+ return
+ var/datum/beam/newVine = Beam(the_target, "vine", time=INFINITY, maxdistance = vine_grab_distance, beam_type=/obj/effect/ebeam/vine)
+ RegisterSignal(newVine, COMSIG_PARENT_QDELETING, .proc/remove_vine, newVine)
+ vines += newVine
+ if(isliving(the_target))
+ var/mob/living/L = the_target
+ L.Paralyze(20)
+ ranged_cooldown = world.time + ranged_cooldown_time
-/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target)
+/mob/living/simple_animal/hostile/venus_human_trap/Login()
+ . = ..()
+ to_chat(src, "You a venus human trap! Protect the kudzu at all costs, and feast on those who oppose you! ")
+
+/mob/living/simple_animal/hostile/venus_human_trap/attack_ghost(mob/user)
. = ..()
if(.)
- if(the_target in grasping)
- return 0
+ return
+ humanize_plant(user)
+
+/**
+ * Sets a ghost to control the plant if the plant is eligible
+ *
+ * Asks the interacting ghost if they would like to control the plant.
+ * If they answer yes, and another ghost hasn't taken control, sets the ghost to control the plant.
+ * Arguments:
+ * * mob/user - The ghost to possibly control the plant
+ */
+
+/mob/living/simple_animal/hostile/venus_human_trap/proc/humanize_plant(mob/user)
+ if(key || !playable_plant || stat)
+ return
+ var/plant_ask = alert("Become a venus human trap?", "Are you reverse vegan?", "Yes", "No")
+ if(plant_ask == "No" || QDELETED(src))
+ return
+ if(key)
+ to_chat(user, "Someone else already took this plant! ")
+ return
+ key = user.key
+ log_game("[key_name(src)] took control of [name].")
+
+/**
+ * Manages how the vines should affect the things they're attached to.
+ *
+ * Pulls all movable targets of the vines closer to the plant
+ * If the target is on the same tile as the plant, destroy the vine
+ * Removes any QDELETED vines from the vines list.
+ */
+/mob/living/simple_animal/hostile/venus_human_trap/proc/pull_vines()
+ for(var/datum/beam/B in vines)
+ if(istype(B.target, /atom/movable))
+ var/atom/movable/AM = B.target
+ if(!AM.anchored)
+ step(AM,get_dir(AM,src))
+ if(get_dist(src,B.target) == 0)
+ B.End()
+
+/**
+ * Removes a vine from the list.
+ *
+ * Removes the vine from our list.
+ * Called specifically when the vine is about to be destroyed, so we don't have any null references.
+ * Arguments:
+ * * datum/beam/vine - The vine to be removed from the list.
+ */
+mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine, force)
+ vines -= vine
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 3feed2129b..def6327461 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -128,7 +128,7 @@
/mob/living/simple_animal/updatehealth()
..()
- health = CLAMP(health, 0, maxHealth)
+ health = clamp(health, 0, maxHealth)
/mob/living/simple_animal/update_stat()
if(status_flags & GODMODE)
@@ -292,8 +292,8 @@
/mob/living/simple_animal/proc/update_simplemob_varspeed()
if(speed == 0)
- remove_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE)
- add_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE, 100, multiplicative_slowdown = speed, override = TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed, multiplicative_slowdown = speed)
/mob/living/simple_animal/Stat()
..()
diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm
index 4f8e271d6f..d5da6d76fc 100644
--- a/code/modules/mob/living/simple_animal/slime/powers.dm
+++ b/code/modules/mob/living/simple_animal/slime/powers.dm
@@ -190,7 +190,7 @@
step_away(M,src)
M.Friends = Friends.Copy()
babies += M
- M.mutation_chance = CLAMP(mutation_chance+(rand(5,-5)),0,100)
+ M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100)
SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour)
var/mob/living/simple_animal/slime/new_slime = pick(babies)
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 8594d53bd1..dd454c4243 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -147,25 +147,25 @@
/mob/living/simple_animal/slime/on_reagent_change()
. = ..()
- remove_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod)
var/amount = 0
if(reagents.has_reagent(/datum/reagent/medicine/morphine)) // morphine slows slimes down
amount = 2
if(reagents.has_reagent(/datum/reagent/consumable/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow
amount = 5
if(amount)
- add_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod, multiplicative_slowdown = amount)
/mob/living/simple_animal/slime/updatehealth()
. = ..()
- remove_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, FALSE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod)
var/health_deficiency = (100 - health)
var/mod = 0
if(health_deficiency >= 45)
mod += (health_deficiency / 25)
if(health <= 0)
mod += 2
- add_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, TRUE, 100, multiplicative_slowdown = mod)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod, multiplicative_slowdown = mod)
/mob/living/simple_animal/slime/adjust_bodytemperature()
. = ..()
@@ -173,9 +173,8 @@
if(bodytemperature >= 330.23) // 135 F or 57.08 C
mod = -1 // slimes become supercharged at high temperatures
else if(bodytemperature < 183.222)
- mod = (283.222 - bodytemperature) / 10 * 1.75
- if(mod)
- add_movespeed_modifier(MOVESPEED_ID_SLIME_TEMPMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = mod)
+ mod = min(15, (283.222 - bodytemperature) / 10 * 1.75)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_tempmod, multiplicative_slowdown = mod)
/mob/living/simple_animal/slime/ObjBump(obj/O)
if(!client && powerlevel > 0)
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 1375d88948..0d41347179 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -622,10 +622,40 @@
tod = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
update_stat()
+///Unignores all slowdowns that lack the IGNORE_NOSLOW flag.
/mob/living/proc/unignore_slowdown(source)
REMOVE_TRAIT(src, TRAIT_IGNORESLOWDOWN, source)
- update_movespeed(FALSE)
+ update_movespeed()
+///Ignores all slowdowns that lack the IGNORE_NOSLOW flag.
/mob/living/proc/ignore_slowdown(source)
ADD_TRAIT(src, TRAIT_IGNORESLOWDOWN, source)
- update_movespeed(FALSE)
+ update_movespeed()
+
+///Ignores specific slowdowns. Accepts a list of slowdowns.
+/mob/living/proc/add_movespeed_mod_immunities(source, slowdown_type, update = TRUE)
+ if(islist(slowdown_type))
+ for(var/listed_type in slowdown_type)
+ if(ispath(listed_type))
+ listed_type = "[listed_type]" //Path2String
+ LAZYADDASSOC(movespeed_mod_immunities, listed_type, source)
+ else
+ if(ispath(slowdown_type))
+ slowdown_type = "[slowdown_type]" //Path2String
+ LAZYADDASSOC(movespeed_mod_immunities, slowdown_type, source)
+ if(update)
+ update_movespeed()
+
+///Unignores specific slowdowns. Accepts a list of slowdowns.
+/mob/living/proc/remove_movespeed_mod_immunities(source, slowdown_type, update = TRUE)
+ if(islist(slowdown_type))
+ for(var/listed_type in slowdown_type)
+ if(ispath(listed_type))
+ listed_type = "[listed_type]" //Path2String
+ LAZYREMOVEASSOC(movespeed_mod_immunities, listed_type, source)
+ else
+ if(ispath(slowdown_type))
+ slowdown_type = "[slowdown_type]" //Path2String
+ LAZYREMOVEASSOC(movespeed_mod_immunities, slowdown_type, source)
+ if(update)
+ update_movespeed()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index fd786c8631..b5dc25e4dc 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -284,7 +284,7 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
/mob/proc/reset_perspective(atom/A)
if(client)
if(A)
- if(ismovableatom(A))
+ if(ismovable(A))
//Set the the thing unless it's us
if(A != src)
client.perspective = EYE_PERSPECTIVE
@@ -1033,17 +1033,22 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
/// Updates the grab state of the mob and updates movespeed
/mob/setGrabState(newstate)
. = ..()
- if(grab_state == GRAB_PASSIVE)
- remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE)
- else
- add_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=grab_state*3, blacklisted_movetypes=FLOATING)
+ switch(grab_state)
+ if(GRAB_PASSIVE)
+ remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE)
+ if(GRAB_AGGRESSIVE)
+ add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/aggressive)
+ if(GRAB_NECK)
+ add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/neck)
+ if(GRAB_KILL)
+ add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/kill)
/mob/proc/update_equipment_speed_mods()
var/speedies = equipped_speed_mods()
if(!speedies)
- remove_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, update=TRUE)
else
- add_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speedies, blacklisted_movetypes=FLOATING)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, multiplicative_slowdown = speedies)
/// Gets the combined speed modification of all worn items
/// Except base mob type doesnt really wear items
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index bf9dad1bc7..825f015ef4 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -10,6 +10,8 @@
throwforce = 10
blocks_emissive = EMISSIVE_BLOCK_GENERIC
+ vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
+
var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
var/datum/mind/mind
var/list/datum/action/actions = list()
@@ -42,8 +44,11 @@
var/lying_prev = 0
var/is_shifted = FALSE
- //MOVEMENT SPEED
+ /// List of movement speed modifiers applying to this mob
var/list/movespeed_modification //Lazy list, see mob_movespeed.dm
+ /// List of movement speed modifiers ignored by this mob. List -> List (id) -> List (sources)
+ var/list/movespeed_mod_immunities //Lazy list, see mob_movespeed.dm
+ /// The calculated mob speed slowdown based on the modifiers list
var/cached_multiplicative_slowdown
/////////////////
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index ffc0970bdf..fdc60b30cb 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -80,12 +80,12 @@
var/oldloc = mob.loc
if(L.confused)
- var/newdir = 0
- if(L.confused > 40)
+ var/newdir = NONE
+ if((L.confused > 50) && prob(min(L.confused * 0.5, 50)))
newdir = pick(GLOB.alldirs)
- else if(prob(L.confused * 1.5))
+ else if(prob(L.confused))
newdir = angle2dir(dir2angle(direction) + pick(90, -90))
- else if(prob(L.confused * 3))
+ else if(prob(L.confused * 2))
newdir = angle2dir(dir2angle(direction) + pick(45, -45))
if(newdir)
direction = newdir
@@ -251,9 +251,9 @@
/mob/proc/update_gravity(has_gravity, override=FALSE)
var/speed_change = max(0, has_gravity - STANDARD_GRAVITY)
if(!speed_change)
- remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE)
+ remove_movespeed_modifier(/datum/movespeed_modifier/gravity)
else
- add_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speed_change, blacklisted_movetypes=FLOATING)
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gravity, multiplicative_slowdown = speed_change)
//bodypart selection - Cyberboss
//8 toggles through head - eyes - mouth
diff --git a/code/modules/mob/mob_movespeed.dm b/code/modules/mob/mob_movespeed.dm
deleted file mode 100644
index a0be8ff7cb..0000000000
--- a/code/modules/mob/mob_movespeed.dm
+++ /dev/null
@@ -1,126 +0,0 @@
-
-/*Current movespeed modification list format: list(id = list(
- priority,
- flags,
- legacy slowdown/speedup amount,
- movetype_flags,
- blacklisted_movetypes,
- conflict
- ))
-*/
-
-//ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE!
-/mob/proc/add_movespeed_modifier(id, update=TRUE, priority=0, flags=NONE, override=FALSE, multiplicative_slowdown=0, movetypes=ALL, blacklisted_movetypes=NONE, conflict=FALSE)
- var/list/temp = list(priority, flags, multiplicative_slowdown, movetypes, blacklisted_movetypes, conflict) //build the modification list
- var/resort = TRUE
- if(LAZYACCESS(movespeed_modification, id))
- var/list/existing_data = movespeed_modification[id]
- if(movespeed_modifier_identical_check(existing_data, temp))
- return FALSE
- if(!override)
- return FALSE
- if(priority == existing_data[MOVESPEED_DATA_INDEX_PRIORITY])
- resort = FALSE // We don't need to re-sort if we're replacing something already there and it's the same priority
- LAZYSET(movespeed_modification, id, temp)
- if(update)
- update_movespeed(resort)
- return TRUE
-
-/mob/proc/remove_movespeed_modifier(id, update = TRUE)
- if(!LAZYACCESS(movespeed_modification, id))
- return FALSE
- LAZYREMOVE(movespeed_modification, id)
- UNSETEMPTY(movespeed_modification)
- if(update)
- update_movespeed(FALSE)
- return TRUE
-
-/mob/vv_edit_var(var_name, var_value)
- var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
- var/diff
- if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
- remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT)
- diff = var_value - cached_multiplicative_slowdown
- . = ..()
- if(. && slowdown_edit && isnum(diff))
- add_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, TRUE, 100, override = TRUE, multiplicative_slowdown = diff)
-
-/mob/proc/has_movespeed_modifier(id)
- return LAZYACCESS(movespeed_modification, id)
-
-/mob/proc/update_config_movespeed()
- add_movespeed_modifier(MOVESPEED_ID_CONFIG_SPEEDMOD, FALSE, 100, override = TRUE, multiplicative_slowdown = get_config_multiplicative_speed())
-
-/mob/proc/get_config_multiplicative_speed()
- if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type])
- return 0
- else
- return GLOB.mob_config_movespeed_type_lookup[type]
-
-/mob/proc/update_movespeed(resort = TRUE)
- if(resort)
- sort_movespeed_modlist()
- . = 0
- var/list/conflict_tracker = list()
- for(var/id in get_movespeed_modifiers())
- var/list/data = movespeed_modification[id]
- if(!(data[MOVESPEED_DATA_INDEX_MOVETYPE] & movement_type)) // We don't affect any of these move types, skip
- continue
- if(data[MOVESPEED_DATA_INDEX_BL_MOVETYPE] & movement_type) // There's a movetype here that disables this modifier, skip
- continue
- var/conflict = data[MOVESPEED_DATA_INDEX_CONFLICT]
- var/amt = data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN]
- if(conflict)
- // Conflicting modifiers prioritize the larger slowdown or the larger speedup
- // We purposefuly don't handle mixing speedups and slowdowns on the same id
- if(abs(conflict_tracker[conflict]) < abs(amt))
- conflict_tracker[conflict] = amt
- else
- continue
- . += amt
- cached_multiplicative_slowdown = .
-
-/mob/proc/get_movespeed_modifiers()
- return movespeed_modification
-
-/mob/proc/movespeed_modifier_identical_check(list/mod1, list/mod2)
- if(!islist(mod1) || !islist(mod2) || mod1.len < MOVESPEED_DATA_INDEX_MAX || mod2.len < MOVESPEED_DATA_INDEX_MAX)
- return FALSE
- for(var/i in 1 to MOVESPEED_DATA_INDEX_MAX)
- if(mod1[i] != mod2[i])
- return FALSE
- return TRUE
-
-/mob/proc/total_multiplicative_slowdown()
- . = 0
- for(var/id in get_movespeed_modifiers())
- var/list/data = movespeed_modification[id]
- . += data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN]
-
-/proc/movespeed_data_null_check(list/data) //Determines if a data list is not meaningful and should be discarded.
- . = TRUE
- if(data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN])
- . = FALSE
-
-/mob/proc/sort_movespeed_modlist() //Verifies it too. Sorts highest priority (first applied) to lowest priority (last applied)
- if(!movespeed_modification)
- return
- var/list/assembled = list()
- for(var/our_id in movespeed_modification)
- var/list/our_data = movespeed_modification[our_id]
- if(!islist(our_data) || (our_data.len < MOVESPEED_DATA_INDEX_PRIORITY) || movespeed_data_null_check(our_data))
- movespeed_modification -= our_id
- continue
- var/our_priority = our_data[MOVESPEED_DATA_INDEX_PRIORITY]
- var/resolved = FALSE
- for(var/their_id in assembled)
- var/list/their_data = assembled[their_id]
- if(their_data[MOVESPEED_DATA_INDEX_PRIORITY] < our_priority)
- assembled.Insert(assembled.Find(their_id), our_id)
- assembled[our_id] = our_data
- resolved = TRUE
- break
- if(!resolved)
- assembled[our_id] = our_data
- movespeed_modification = assembled
- UNSETEMPTY(movespeed_modification)
\ No newline at end of file
diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm
index 10abf460c6..cf86e962bd 100644
--- a/code/modules/mob/status_procs.dm
+++ b/code/modules/mob/status_procs.dm
@@ -20,7 +20,7 @@
dizziness = max(amount, 0)
/**
- * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work
+ * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work
*/
/mob/proc/blind_eyes(amount)
var/old_blind = eye_blind || HAS_TRAIT(src, TRAIT_BLIND)
@@ -90,8 +90,8 @@
return
var/obj/screen/plane_master/game_world/GW = locate(/obj/screen/plane_master/game_world) in client.screen
var/obj/screen/plane_master/floor/F = locate(/obj/screen/plane_master/floor) in client.screen
- GW.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3)))
- F.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3)))
+ GW.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3)))
+ F.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3)))
/mob/proc/remove_eyeblur()
if(!client)
@@ -120,4 +120,4 @@
///Adjust the body temperature of a mob, with min/max settings
/mob/proc/adjust_bodytemperature(amount,min_temp=0,max_temp=INFINITY)
if(bodytemperature >= min_temp && bodytemperature <= max_temp)
- bodytemperature = CLAMP(bodytemperature + amount,min_temp,max_temp)
+ bodytemperature = clamp(bodytemperature + amount,min_temp,max_temp)
diff --git a/code/modules/movespeed/_movespeed_modifier.dm b/code/modules/movespeed/_movespeed_modifier.dm
new file mode 100644
index 0000000000..0976f4d067
--- /dev/null
+++ b/code/modules/movespeed/_movespeed_modifier.dm
@@ -0,0 +1,217 @@
+/*! Movespeed modification datums.
+
+ How move speed for mobs works
+
+Move speed is now calculated by using modifier datums which are added to mobs. Some of them (nonvariable ones) are globally cached, the variable ones are instanced and changed based on need.
+
+This gives us the ability to have multiple sources of movespeed, reliabily keep them applied and remove them when they should be
+
+THey can have unique sources and a bunch of extra fancy flags that control behaviour
+
+Previously trying to update move speed was a shot in the dark that usually meant mobs got stuck going faster or slower
+
+Movespeed modification list is a simple key = datum system. Key will be the datum's ID if it is overridden to not be null, or type if it is not.
+
+DO NOT override datum IDs unless you are going to have multiple types that must overwrite each other. It's more efficient to use types, ID functionality is only kept for cases where dynamic creation of modifiers need to be done.
+
+When update movespeed is called, the list of items is iterated, according to flags priority and a bunch of conditions
+this spits out a final calculated value which is used as a modifer to last_move + modifier for calculating when a mob
+can next move
+
+Key procs
+* [add_movespeed_modifier](mob.html#proc/add_movespeed_modifier)
+* [remove_movespeed_modifier](mob.html#proc/remove_movespeed_modifier)
+* [has_movespeed_modifier](mob.html#proc/has_movespeed_modifier)
+* [update_movespeed](mob.html#proc/update_movespeed)
+*/
+
+/datum/movespeed_modifier
+ /// Whether or not this is a variable modifier. Variable modifiers can NOT be ever auto-cached. ONLY CHECKED VIA INITIAL(), EFFECTIVELY READ ONLY (and for very good reason)
+ var/variable = FALSE
+
+ /// Unique ID. You can never have different modifications with the same ID. By default, this SHOULD NOT be set. Only set it for cases where you're dynamically making modifiers/need to have two types overwrite each other. If unset, uses path (converted to text) as ID.
+ var/id
+
+ /// Higher ones override lower priorities. This is NOT used for ID, ID must be unique, if it isn't unique the newer one overwrites automatically if overriding.
+ var/priority = 0
+ var/flags = NONE
+
+ /// Multiplicative slowdown
+ var/multiplicative_slowdown = 0
+
+ /// Movetypes this applies to
+ var/movetypes = ALL
+
+ /// Movetypes this never applies to
+ var/blacklisted_movetypes = NONE
+
+ /// Other modification datums this conflicts with.
+ var/conflicts_with
+
+/datum/movespeed_modifier/New()
+ . = ..()
+ if(!id)
+ id = "[type]" //We turn the path into a string.
+
+GLOBAL_LIST_EMPTY(movespeed_modification_cache)
+
+/// Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO!
+/proc/get_cached_movespeed_modifier(modtype)
+ if(!ispath(modtype, /datum/movespeed_modifier))
+ CRASH("[modtype] is not a movespeed modification typepath.")
+ var/datum/movespeed_modifier/M = modtype
+ if(initial(M.variable))
+ CRASH("[modtype] is a variable modifier, and can never be cached.")
+ M = GLOB.movespeed_modification_cache[modtype]
+ if(!M)
+ M = GLOB.movespeed_modification_cache[modtype] = new modtype
+ return M
+
+///Add a move speed modifier to a mob. If a variable subtype is passed in as the first argument, it will make a new datum. If ID conflicts, it will overwrite the old ID.
+/mob/proc/add_movespeed_modifier(datum/movespeed_modifier/type_or_datum, update = TRUE)
+ if(ispath(type_or_datum))
+ if(!initial(type_or_datum.variable))
+ type_or_datum = get_cached_movespeed_modifier(type_or_datum)
+ else
+ type_or_datum = new type_or_datum
+ var/datum/movespeed_modifier/existing = LAZYACCESS(movespeed_modification, type_or_datum.id)
+ if(existing)
+ if(existing == type_or_datum) //same thing don't need to touch
+ return TRUE
+ remove_movespeed_modifier(existing, FALSE)
+ if(length(movespeed_modification))
+ BINARY_INSERT(type_or_datum.id, movespeed_modification, datum/movespeed_modifier, type_or_datum, priority, COMPARE_VALUE)
+ LAZYSET(movespeed_modification, type_or_datum.id, type_or_datum)
+ if(update)
+ update_movespeed()
+ return TRUE
+
+/// Remove a move speed modifier from a mob, whether static or variable.
+/mob/proc/remove_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE)
+ var/key
+ if(ispath(type_id_datum))
+ key = initial(type_id_datum.id) || "[type_id_datum]" //id if set, path set to string if not.
+ else if(!istext(type_id_datum)) //if it isn't text it has to be a datum, as it isn't a type.
+ key = type_id_datum.id
+ else //assume it's an id
+ key = type_id_datum
+ if(!LAZYACCESS(movespeed_modification, key))
+ return FALSE
+ LAZYREMOVE(movespeed_modification, key)
+ if(update)
+ update_movespeed(FALSE)
+ return TRUE
+
+/*! Used for variable slowdowns like hunger/health loss/etc, works somewhat like the old list-based modification adds. Returns the modifier datum if successful
+ How this SHOULD work is:
+ 1. Ensures type_id_datum one way or another refers to a /variable datum. This makes sure it can't be cached. This includes if it's already in the modification list.
+ 2. Instantiate a new datum if type_id_datum isn't already instantiated + in the list, using the type. Obviously, wouldn't work for ID only.
+ 3. Add the datum if necessary using the regular add proc
+ 4. If any of the rest of the args are not null (see: multiplicative slowdown), modify the datum
+ 5. Update if necessary
+*/
+/mob/proc/add_or_update_variable_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE, multiplicative_slowdown)
+ var/modified = FALSE
+ var/inject = FALSE
+ var/datum/movespeed_modifier/final
+ if(istext(type_id_datum))
+ final = LAZYACCESS(movespeed_modification, type_id_datum)
+ if(!final)
+ CRASH("Couldn't find existing modification when provided a text ID.")
+ else if(ispath(type_id_datum))
+ if(!initial(type_id_datum.variable))
+ CRASH("Not a variable modifier")
+ final = LAZYACCESS(movespeed_modification, initial(type_id_datum.id) || "[type_id_datum]")
+ if(!final)
+ final = new type_id_datum
+ inject = TRUE
+ modified = TRUE
+ else
+ if(!initial(type_id_datum.variable))
+ CRASH("Not a variable modifier")
+ final = type_id_datum
+ if(!LAZYACCESS(movespeed_modification, final.id))
+ inject = TRUE
+ modified = TRUE
+ if(!isnull(multiplicative_slowdown))
+ final.multiplicative_slowdown = multiplicative_slowdown
+ modified = TRUE
+ if(inject)
+ add_movespeed_modifier(final, FALSE)
+ if(update && modified)
+ update_movespeed(TRUE)
+ return final
+
+/// Handles the special case of editing the movement var
+/mob/vv_edit_var(var_name, var_value)
+ var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
+ var/diff
+ if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
+ remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit)
+ diff = var_value - cached_multiplicative_slowdown
+ . = ..()
+ if(. && slowdown_edit && isnum(diff))
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff)
+
+///Is there a movespeed modifier for this mob
+/mob/proc/has_movespeed_modifier(datum/movespeed_modifier/datum_type_id)
+ var/key
+ if(ispath(datum_type_id))
+ key = initial(datum_type_id.id) || "[datum_type_id]"
+ else if(istext(datum_type_id))
+ key = datum_type_id
+ else
+ key = datum_type_id.id
+ return LAZYACCESS(movespeed_modification, key)
+
+/// Set or update the global movespeed config on a mob
+/mob/proc/update_config_movespeed()
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/mob_config_speedmod, multiplicative_slowdown = get_config_multiplicative_speed())
+
+/// Get the global config movespeed of a mob by type
+/mob/proc/get_config_multiplicative_speed()
+ if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type])
+ return 0
+ else
+ return GLOB.mob_config_movespeed_type_lookup[type]
+
+/// Go through the list of movespeed modifiers and calculate a final movespeed. ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE!
+/mob/proc/update_movespeed()
+ . = 0
+ var/list/conflict_tracker = list()
+ for(var/key in get_movespeed_modifiers())
+ var/datum/movespeed_modifier/M = movespeed_modification[key]
+ if(!(M.movetypes & movement_type)) // We don't affect any of these move types, skip
+ continue
+ if(M.blacklisted_movetypes & movement_type) // There's a movetype here that disables this modifier, skip
+ continue
+ var/conflict = M.conflicts_with
+ var/amt = M.multiplicative_slowdown
+ if(conflict)
+ // Conflicting modifiers prioritize the larger slowdown or the larger speedup
+ // We purposefuly don't handle mixing speedups and slowdowns on the same id
+ if(abs(conflict_tracker[conflict]) < abs(amt))
+ conflict_tracker[conflict] = amt
+ else
+ continue
+ . += amt
+ cached_multiplicative_slowdown = .
+
+/// Get the move speed modifiers list of the mob
+/mob/proc/get_movespeed_modifiers()
+ . = LAZYCOPY(movespeed_modification)
+ for(var/id in movespeed_mod_immunities)
+ . -= id
+
+/// Calculate the total slowdown of all movespeed modifiers
+/mob/proc/total_multiplicative_slowdown()
+ . = 0
+ for(var/id in get_movespeed_modifiers())
+ var/datum/movespeed_modifier/M = movespeed_modification[id]
+ . += M.multiplicative_slowdown
+
+/// Checks if a move speed modifier is valid and not missing any data
+/proc/movespeed_data_null_check(datum/movespeed_modifier/M) //Determines if a data list is not meaningful and should be discarded.
+ . = TRUE
+ if(M.multiplicative_slowdown)
+ . = FALSE
diff --git a/code/modules/movespeed/modifiers/components.dm b/code/modules/movespeed/modifiers/components.dm
new file mode 100644
index 0000000000..436b85e2e1
--- /dev/null
+++ b/code/modules/movespeed/modifiers/components.dm
@@ -0,0 +1,21 @@
+/datum/movespeed_modifier/shrink_ray
+ movetypes = GROUND
+ multiplicative_slowdown = 4
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/snail_crawl
+ multiplicative_slowdown = -7
+ movetypes = GROUND
+
+/datum/movespeed_modifier/sanity
+ id = MOVESPEED_ID_SANITY
+ blacklisted_movetypes = FLYING
+
+/datum/movespeed_modifier/sanity/insane
+ multiplicative_slowdown = 1.5
+
+/datum/movespeed_modifier/sanity/crazy
+ multiplicative_slowdown = 1
+
+/datum/movespeed_modifier/sanity/disturbed
+ multiplicative_slowdown = 0.5
diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm
new file mode 100644
index 0000000000..a0357ddf0f
--- /dev/null
+++ b/code/modules/movespeed/modifiers/innate.dm
@@ -0,0 +1,20 @@
+/datum/movespeed_modifier/strained_muscles
+ multiplicative_slowdown = -1
+ blacklisted_movetypes = (FLYING|FLOATING)
+
+/datum/movespeed_modifier/pai_spacewalk
+ multiplicative_slowdown = 2
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/species
+ movetypes = ~FLYING
+ variable = TRUE
+
+/datum/movespeed_modifier/dna_vault_speedup
+ blacklisted_movetypes = (FLYING|FLOATING)
+ multiplicative_slowdown = -1
+
+/datum/movespeed_modifier/small_stride
+ blacklisted_movetypes = (FLOATING|CRAWLING)
+ variable = TRUE
+ flags = IGNORE_NOSLOW
diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm
new file mode 100644
index 0000000000..94dc2a1553
--- /dev/null
+++ b/code/modules/movespeed/modifiers/items.dm
@@ -0,0 +1,12 @@
+/datum/movespeed_modifier/jetpack
+ conflicts_with = MOVE_CONFLICT_JETPACK
+ movetypes = FLOATING
+
+/datum/movespeed_modifier/jetpack/cybernetic
+ multiplicative_slowdown = -0.5
+
+/datum/movespeed_modifier/jetpack/fullspeed
+ multiplicative_slowdown = -2
+
+/datum/movespeed_modifier/die_of_fate
+ multiplicative_slowdown = 1
diff --git a/code/modules/movespeed/modifiers/misc.dm b/code/modules/movespeed/modifiers/misc.dm
new file mode 100644
index 0000000000..55c1aef527
--- /dev/null
+++ b/code/modules/movespeed/modifiers/misc.dm
@@ -0,0 +1,6 @@
+/datum/movespeed_modifier/admin_varedit
+ variable = TRUE
+
+/datum/movespeed_modifier/yellow_orb
+ multiplicative_slowdown = -2
+ blacklisted_movetypes = (FLYING|FLOATING)
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
new file mode 100644
index 0000000000..aa60966591
--- /dev/null
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -0,0 +1,120 @@
+/datum/movespeed_modifier/obesity
+ multiplicative_slowdown = 1.5
+
+/datum/movespeed_modifier/monkey_reagent_speedmod
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/monkey_health_speedmod
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/monkey_temperature_speedmod
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/hunger
+ variable = TRUE
+
+/datum/movespeed_modifier/slaughter
+ multiplicative_slowdown = -1
+
+/datum/movespeed_modifier/damage_slowdown
+ blacklisted_movetypes = FLOATING|FLYING
+ variable = TRUE
+
+/datum/movespeed_modifier/damage_slowdown_flying
+ movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/equipment_speedmod
+ variable = TRUE
+ blacklisted_movetypes = FLOATING
+
+/datum/movespeed_modifier/grab_slowdown
+ id = MOVESPEED_ID_MOB_GRAB_STATE
+ blacklisted_movetypes = FLOATING
+
+/datum/movespeed_modifier/grab_slowdown/aggressive
+ multiplicative_slowdown = 3
+
+/datum/movespeed_modifier/grab_slowdown/neck
+ multiplicative_slowdown = 6
+
+/datum/movespeed_modifier/grab_slowdown/kill
+ multiplicative_slowdown = 9
+
+/datum/movespeed_modifier/slime_reagentmod
+ variable = TRUE
+
+/datum/movespeed_modifier/slime_healthmod
+ variable = TRUE
+
+/datum/movespeed_modifier/config_walk_run
+ multiplicative_slowdown = 1
+ id = MOVESPEED_ID_MOB_WALK_RUN
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/config_walk_run/proc/sync()
+
+/datum/movespeed_modifier/config_walk_run/walk/sync()
+ var/mod = CONFIG_GET(number/movedelay/walk_delay)
+ multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
+
+/datum/movespeed_modifier/config_walk_run/run/sync()
+ var/mod = CONFIG_GET(number/movedelay/run_delay)
+ multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
+
+/datum/movespeed_modifier/turf_slowdown
+ movetypes = GROUND
+ blacklisted_movetypes = (FLYING|FLOATING)
+ variable = TRUE
+
+/datum/movespeed_modifier/bulky_drag
+ variable = TRUE
+
+/datum/movespeed_modifier/cold
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/shove
+ multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH
+
+/datum/movespeed_modifier/human_carry
+ variable = TRUE
+
+/datum/movespeed_modifier/limbless
+ variable = TRUE
+ movetypes = GROUND
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/simplemob_varspeed
+ variable = TRUE
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/tarantula_web
+ multiplicative_slowdown = 3
+
+/datum/movespeed_modifier/gravity
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/carbon_softcrit
+ multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN
+
+/datum/movespeed_modifier/slime_tempmod
+ variable = TRUE
+
+/datum/movespeed_modifier/carbon_crawling
+ multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN
+ movetypes = CRAWLING
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/mob_config_speedmod
+ variable = TRUE
+ flags = IGNORE_NOSLOW
+
+/datum/movespeed_modifier/liver_cirrhosis
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
diff --git a/code/modules/movespeed/modifiers/reagents.dm b/code/modules/movespeed/modifiers/reagents.dm
new file mode 100644
index 0000000000..b6c2458670
--- /dev/null
+++ b/code/modules/movespeed/modifiers/reagents.dm
@@ -0,0 +1,14 @@
+/datum/movespeed_modifier/reagent
+ blacklisted_movetypes = (FLYING|FLOATING)
+
+/datum/movespeed_modifier/reagent/stimulants
+ multiplicative_slowdown = -0.5
+
+/datum/movespeed_modifier/reagent/changelinghaste
+ multiplicative_slowdown = -2
+
+/datum/movespeed_modifier/reagent/skooma
+ multiplicative_slowdown = -1
+
+/datum/movespeed_modifier/reagent/nitryl
+ multiplicative_slowdown = -1
diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm
new file mode 100644
index 0000000000..4c710cb483
--- /dev/null
+++ b/code/modules/movespeed/modifiers/status_effects.dm
@@ -0,0 +1,44 @@
+/datum/movespeed_modifier/status_effect/bloodchill
+ multiplicative_slowdown = 3
+
+/datum/movespeed_modifier/status_effect/bonechill
+ multiplicative_slowdown = 3
+
+/datum/movespeed_modifier/status_effect/tarfoot
+ multiplicative_slowdown = 0.5
+ blacklisted_movetypes = (FLYING|FLOATING)
+
+/datum/movespeed_modifier/status_effect/sepia
+ variable = TRUE
+ blacklisted_movetypes = (FLYING|FLOATING)
+
+/datum/movespeed_modifier/status_effect/mesmerize
+ blacklisted_movetypes = CRAWLING
+ multiplicative_slowdown = 5
+ priority = 64
+
+/datum/movespeed_modifier/status_effect/tased
+ multiplicative_slowdown = 1.5
+ priority = 50
+
+/datum/movespeed_modifier/status_effect/tased/no_combat_mode
+ multiplicative_slowdown = 8
+ priority = 100
+
+/datum/movespeed_modifier/status_effect/electrostaff
+ multiplicative_slowdown = 1
+ movetypes = GROUND
+
+//no comment.
+/datum/movespeed_modifier/status_effect/breast_hypertrophy
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+//this shouldn't even exist.
+/datum/movespeed_modifier/status_effect/penis_hypertrophy
+ blacklisted_movetypes = FLOATING
+ variable = TRUE
+
+/datum/movespeed_modifier/status_effect/mkultra
+ multiplicative_slowdown = -2
+ blacklisted_movetypes= FLYING|FLOATING
diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm
index b7b7bc36b7..f039dc32b2 100644
--- a/code/modules/photography/camera/camera.dm
+++ b/code/modules/photography/camera/camera.dm
@@ -53,8 +53,8 @@
return
var/desired_x = input(user, "How high do you want the camera to shoot, between [picture_size_x_min] and [picture_size_x_max]?", "Zoom", picture_size_x) as num
var/desired_y = input(user, "How wide do you want the camera to shoot, between [picture_size_y_min] and [picture_size_y_max]?", "Zoom", picture_size_y) as num
- picture_size_x = min(CLAMP(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT)
- picture_size_y = min(CLAMP(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT)
+ picture_size_x = min(clamp(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT)
+ picture_size_y = min(clamp(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT)
return TRUE
/obj/item/camera/attack(mob/living/carbon/human/M, mob/user)
@@ -155,8 +155,8 @@
if(!isturf(target_turf))
blending = FALSE
return FALSE
- size_x = CLAMP(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
- size_y = CLAMP(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
+ size_x = clamp(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
+ size_y = clamp(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT)
var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.")
var/ai_user = isAI(user)
var/list/seen
diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm
index f25d80c050..5bd9c108d1 100644
--- a/code/modules/photography/camera/camera_image_capturing.dm
+++ b/code/modules/photography/camera/camera_image_capturing.dm
@@ -4,7 +4,7 @@
if(istype(A))
appearance = A.appearance
dir = A.dir
- if(ismovableatom(A))
+ if(ismovable(A))
var/atom/movable/AM = A
step_x = AM.step_x
step_y = AM.step_y
@@ -68,7 +68,7 @@
for(var/atom/A in sorted)
var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp
var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp
- if(ismovableatom(A))
+ if(ismovable(A))
var/atom/movable/AM = A
xo += AM.step_x
yo += AM.step_y
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 1b23b1bb5d..7eabeafcb1 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -208,7 +208,7 @@
GLOB.apcs_list -= src
if(malfai && operating)
- malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000)
+ malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
area.power_light = FALSE
area.power_equip = FALSE
area.power_environ = FALSE
@@ -1350,7 +1350,7 @@
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
area.poweralert(0, src)
-
+
else if(cell_percent < 15 && longtermpower < 0) // <15%, turn off lighting & equipment
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 2)
@@ -1447,7 +1447,7 @@
/obj/machinery/power/apc/proc/set_broken()
if(malfai && operating)
- malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000)
+ malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
stat |= BROKEN
operating = FALSE
if(occupier)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index ed90ed407f..eecc1394de 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -217,7 +217,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/cable/proc/surplus()
if(powernet)
- return CLAMP(powernet.avail-powernet.load, 0, powernet.avail)
+ return clamp(powernet.avail-powernet.load, 0, powernet.avail)
else
return 0
@@ -233,7 +233,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/cable/proc/delayed_surplus()
if(powernet)
- return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail)
+ return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail)
else
return 0
@@ -533,7 +533,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(affecting && affecting.status == BODYPART_ROBOTIC)
if(user == H)
user.visible_message("[user] starts to fix some of the wires in [H]'s [affecting.name]. ", "You start fixing some of the wires in [H]'s [affecting.name]. ")
- if(!do_after(user, H, 50))
+ if(!do_mob(user, H, 50))
return
if(item_heal_robotic(H, user, 0, 15))
use(1)
@@ -565,7 +565,7 @@ By design, d1 is the smallest direction and d2 is the highest
return
var/obj/item/restraints/handcuffs/cable/result = new(get_turf(user))
user.put_in_hands(result)
- result.color = color
+ result.color = color
to_chat(user, "You make some restraints out of cable ")
//add cables to the stack
@@ -848,4 +848,4 @@ By design, d1 is the smallest direction and d2 is the highest
. = ..()
var/list/cable_colors = GLOB.cable_colors
color = pick(cable_colors)
-
+
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 93fe7e8fa6..cc321fdb4d 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -157,7 +157,7 @@
/obj/item/stock_parts/cell/proc/get_electrocute_damage()
if(charge >= 1000)
- return CLAMP(round(charge/10000), 10, 90) + rand(-5,5)
+ return clamp(round(charge/10000), 10, 90) + rand(-5,5)
else
return 0
@@ -334,7 +334,7 @@
. = ..()
if(. & EMP_PROTECT_SELF)
return
- charge = CLAMP((charge-(10000/severity)),0,maxcharge)
+ charge = clamp((charge-(10000/severity)),0,maxcharge)
/obj/item/stock_parts/cell/emergency_light
name = "miniature power cell"
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 02ff4127eb..7ad9f3a6ce 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -314,7 +314,7 @@
. = ..()
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(on && status == LIGHT_OK)
- SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, CLAMP(light_power*250, 30, 200))
+ SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, clamp(light_power*250, 30, 200))
// update the icon_state and luminosity of the light depending on its state
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index fba526edbd..4cec49945a 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -42,7 +42,7 @@
/obj/machinery/power/proc/surplus()
if(powernet)
- return CLAMP(powernet.avail-powernet.load, 0, powernet.avail)
+ return clamp(powernet.avail-powernet.load, 0, powernet.avail)
else
return 0
@@ -58,7 +58,7 @@
/obj/machinery/power/proc/delayed_surplus()
if(powernet)
- return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail)
+ return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail)
else
return 0
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 3b70383bee..65d5202ff4 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -96,6 +96,6 @@
/datum/powernet/proc/get_electrocute_damage()
if(avail >= 1000)
- return CLAMP(round(avail/10000), 10, 90) + rand(-5,5)
+ return clamp(round(avail/10000), 10, 90) + rand(-5,5)
else
return 0
\ No newline at end of file
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index c471047682..ed3a098dae 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -201,7 +201,7 @@
// if(defer_powernet_rebuild != 2)
// defer_powernet_rebuild = 1
for(var/atom/X in urange(consume_range,src,1))
- if(isturf(X) || ismovableatom(X))
+ if(isturf(X) || ismovable(X))
consume(X)
// if(defer_powernet_rebuild != 2)
// defer_powernet_rebuild = 0
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 47de07cd71..41ed28f0a5 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -220,7 +220,7 @@
. += "smes-og[clevel]"
/obj/machinery/power/smes/proc/chargedisplay()
- return CLAMP(round(5.5*charge/capacity),0,5)
+ return clamp(round(5.5*charge/capacity),0,5)
/obj/machinery/power/smes/process()
if(stat & BROKEN)
@@ -372,7 +372,7 @@
target = text2num(target)
. = TRUE
if(.)
- input_level = CLAMP(target, 0, input_level_max)
+ input_level = clamp(target, 0, input_level_max)
log_smes(usr)
if("output")
var/target = params["target"]
@@ -394,7 +394,7 @@
target = text2num(target)
. = TRUE
if(.)
- output_level = CLAMP(target, 0, output_level_max)
+ output_level = clamp(target, 0, output_level_max)
log_smes(usr)
/obj/machinery/power/smes/proc/log_smes(mob/user)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 73ea3ccd59..89452affcb 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -28,10 +28,8 @@
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
panel = new()
-#if DM_VERSION >= 513
panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE
vis_contents += panel
-#endif
panel.icon = icon
panel.icon_state = "solar_panel"
panel.layer = FLY_LAYER
@@ -170,7 +168,7 @@
else
//dot product of sun and panel -- Lambert's Cosine Law
. = cos(azimuth_current - sun_azimuth)
- . = CLAMP(round(., 0.01), 0, 1)
+ . = clamp(round(., 0.01), 0, 1)
sunfrac = .
/obj/machinery/power/solar/process()
@@ -385,7 +383,7 @@
if(adjust)
value = azimuth_rate + adjust
if(value != null)
- azimuth_rate = round(CLAMP(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01)
+ azimuth_rate = round(clamp(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01)
return TRUE
return FALSE
if(action == "tracking")
@@ -464,7 +462,7 @@
///Rotates the panel to the passed angles
/obj/machinery/power/solar_control/proc/set_panels(azimuth)
- azimuth = CLAMP(round(azimuth, 0.01), -360, 719.99)
+ azimuth = clamp(round(azimuth, 0.01), -360, 719.99)
if(azimuth >= 360)
azimuth -= 360
if(azimuth < 0)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index f91dc43990..92d97365b3 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -346,7 +346,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
else
if(takes_damage)
//causing damage
- damage = max(damage + (max(CLAMP(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
+ damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0)
@@ -389,10 +389,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25)
if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD)
- powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling + CLAMP(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
+ powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1)
else
- powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling - 0.05,0, 1)
- powerloss_inhibitor = CLAMP(1-(powerloss_dynamic_scaling * CLAMP(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1)
+ powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05,0, 1)
+ powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1)
if(matter_power)
var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40)
@@ -442,7 +442,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
var/D = sqrt(1 / max(1, get_dist(l, src)))
l.hallucination += power_calc * config_hallucination_power * D
- l.hallucination = CLAMP(0, 200, l.hallucination)
+ l.hallucination = clamp(0, 200, l.hallucination)
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) )
@@ -452,7 +452,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if ((100-get_integrity()) < 75)
power = (power_calc * ((100 - (0.15*(100-get_integrity()) - 5)**2) / 100)) + power_calc*0.1
else
- power = power_calc * (((100-get_integrity())^((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear
+ power = power_calc * (((100-get_integrity())**((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear
//power = power_calc * ((((100-get_integrity())**1.3)-(2*(100-get_integrity())))/100)
if(power > POWER_PENALTY_THRESHOLD || damage > damage_penalty_point)
@@ -466,7 +466,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
supermatter_zap(src, 5, min(power*2, 20000))
else if (damage > damage_penalty_point && prob(20))
playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10)
- supermatter_zap(src, 5, CLAMP(power*2, 4000, 20000))
+ supermatter_zap(src, 5, clamp(power*2, 4000, 20000))
if(prob(15) && power > POWER_PENALTY_THRESHOLD)
supermatter_pull(src, power/750)
@@ -736,7 +736,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 10)
playsound(src.loc, 'sound/weapons/marauder.ogg', 100, 1, extrarange = 7)
for(var/atom/P in orange(pull_range,center))
- if(ismovableatom(P))
+ if(ismovable(P))
var/atom/movable/pulled_object = P
if(ishuman(P))
var/mob/living/carbon/human/H = P
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 1b08693d1c..e98fe3c88e 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -65,7 +65,7 @@
pixel_x = -32
pixel_y = -32
for (var/ball in orbiting_balls)
- var/range = rand(1, CLAMP(orbiting_balls.len, 3, 7))
+ var/range = rand(1, clamp(orbiting_balls.len, 3, 7))
tesla_zap(ball, range, TESLA_MINI_POWER/7*range)
else
energy = 0 // ensure we dont have miniballs of miniballs
diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm
index 58a5bfb497..461166ab0d 100644
--- a/code/modules/projectiles/ammunition/ballistic/pistol.dm
+++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm
@@ -1,28 +1,28 @@
// 10mm (Stechkin)
/obj/item/ammo_casing/c10mm
- name = ".10mm bullet casing"
+ name = "10mm bullet casing"
desc = "A 10mm bullet casing."
caliber = "10mm"
projectile_type = /obj/item/projectile/bullet/c10mm
/obj/item/ammo_casing/c10mm/ap
- name = ".10mm armor-piercing bullet casing"
+ name = "10mm armor-piercing bullet casing"
desc = "A 10mm armor-piercing bullet casing."
projectile_type = /obj/item/projectile/bullet/c10mm_ap
/obj/item/ammo_casing/c10mm/hp
- name = ".10mm hollow-point bullet casing"
+ name = "10mm hollow-point bullet casing"
desc = "A 10mm hollow-point bullet casing."
projectile_type = /obj/item/projectile/bullet/c10mm_hp
/obj/item/ammo_casing/c10mm/fire
- name = ".10mm incendiary bullet casing"
+ name = "10mm incendiary bullet casing"
desc = "A 10mm incendiary bullet casing."
projectile_type = /obj/item/projectile/bullet/incendiary/c10mm
/obj/item/ammo_casing/c10mm/soporific
- name = ".10mm soporific bullet casing"
+ name = "10mm soporific bullet casing"
desc = "A 10mm soporific bullet casing."
projectile_type = /obj/item/projectile/bullet/c10mm/soporific
diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm
index 39e3ca06ff..15e9b68912 100644
--- a/code/modules/projectiles/ammunition/energy/special.dm
+++ b/code/modules/projectiles/ammunition/energy/special.dm
@@ -3,6 +3,10 @@
select_name = "ion"
fire_sound = 'sound/weapons/ionrifle.ogg'
+/obj/item/ammo_casing/energy/ion/hos
+ projectile_type = /obj/item/projectile/ion/weak
+ e_cost = 300
+
/obj/item/ammo_casing/energy/declone
projectile_type = /obj/item/projectile/energy/declone
select_name = "declone"
diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm
index 2abc472138..f063672654 100644
--- a/code/modules/projectiles/ammunition/energy/stun.dm
+++ b/code/modules/projectiles/ammunition/energy/stun.dm
@@ -16,9 +16,6 @@
fire_sound = 'sound/weapons/gunshot.ogg'
e_cost = 100
-/obj/item/ammo_casing/energy/electrode/hos
- projectile_type = /obj/item/projectile/energy/electrode/security/hos
- e_cost = 200
/obj/item/ammo_casing/energy/electrode/old
e_cost = 1000
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index 4f37cf3ba9..594734c86a 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -112,11 +112,7 @@
update_icon()
/obj/item/ammo_box/update_icon()
- switch(multiple_sprites)
- if(1)
- icon_state = "[initial(icon_state)]-[stored_ammo.len]"
- if(2)
- icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]"
+ . = ..()
desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!"
for (var/material in bullet_cost)
var/material_amount = bullet_cost[material]
@@ -124,6 +120,13 @@
custom_materials[material] = material_amount
set_custom_materials(custom_materials)//make sure we setup the correct properties again
+/obj/item/ammo_box/update_icon_state()
+ switch(multiple_sprites)
+ if(1)
+ icon_state = "[initial(icon_state)]-[stored_ammo.len]"
+ if(2)
+ icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]"
+
//Behavior for magazines
/obj/item/ammo_box/magazine/proc/ammo_count()
return stored_ammo.len
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 7fb17ced57..4894a8d8eb 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -41,9 +41,12 @@
to_chat(user, "You're too exhausted for that. ")//CIT CHANGE - ditto
return//CIT CHANGE - ditto
pump(user, TRUE)
- recentpump = world.time + 10
- if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
- user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
+ if(HAS_TRAIT(user, TRAIT_FAST_PUMP))
+ recentpump = world.time + 2
+ else
+ recentpump = world.time + 10
+ if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
+ user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
return
/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
@@ -90,7 +93,7 @@
fire_delay = 7
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
sawn_desc = "Come with me if you want to live."
- unique_reskin = list("Tatical" = "riotshotgun",
+ unique_reskin = list("Tactical" = "riotshotgun",
"Wood Stock" = "wood_riotshotgun"
)
@@ -212,7 +215,7 @@
fire_delay = 5
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = WEIGHT_CLASS_HUGE
- unique_reskin = list("Tatical" = "cshotgun",
+ unique_reskin = list("Tactical" = "cshotgun",
"Slick" = "cshotgun_slick"
)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index e0c84e7047..ff3f127817 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -232,7 +232,7 @@
..()
if(!automatic_charge_overlays)
return
- var/ratio = can_shoot() ? CEILING(CLAMP(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0
+ var/ratio = can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0
// Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if it's power cell is removed.
// TG issues #5361 & #47908
if(ratio == old_ratio && !force_update)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index efe107a3f8..71ee8bc5ef 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -52,13 +52,16 @@
/obj/item/gun/energy/e_gun/hos
name = "\improper X-01 MultiPhase Energy Gun"
- desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time."
+ desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time in exchange for inbuilt advanced firearm EMP shielding."
icon_state = "hoslaser"
force = 10
- ammo_type = list(/obj/item/ammo_casing/energy/electrode/hos, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos)
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/ion/hos)
ammo_x_offset = 4
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+/obj/item/gun/energy/e_gun/hos/emp_act(severity)
+ return
+
/obj/item/gun/energy/e_gun/dragnet
name = "\improper DRAGnet"
desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology."
diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm
index f230dc7fea..f8ddcb5aae 100644
--- a/code/modules/projectiles/guns/misc/beam_rifle.dm
+++ b/code/modules/projectiles/guns/misc/beam_rifle.dm
@@ -318,7 +318,7 @@
AC.sync_stats()
/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount)
- aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time)
+ aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time)
/obj/item/ammo_casing/energy/beam_rifle
name = "particle acceleration lens"
@@ -369,11 +369,11 @@
HS_BB.stun = projectile_stun
HS_BB.impact_structure_damage = impact_structure_damage
HS_BB.aoe_mob_damage = aoe_mob_damage
- HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock
+ HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock
HS_BB.aoe_fire_chance = aoe_fire_chance
HS_BB.aoe_fire_range = aoe_fire_range
HS_BB.aoe_structure_damage = aoe_structure_damage
- HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock
+ HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock
HS_BB.wall_devastate = wall_devastate
HS_BB.wall_pierce_amount = wall_pierce_amount
HS_BB.structure_pierce_amount = structure_piercing
@@ -465,7 +465,7 @@
else
target.ex_act(EXPLODE_HEAVY)
return TRUE
- if(ismovableatom(target))
+ if(ismovable(target))
var/atom/movable/AM = target
if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM))
if(structure_pierce < structure_pierce_amount)
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index e754a9c070..8a1db49762 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -241,3 +241,87 @@
to_chat(user, "The pin beeps, refusing to fire. ")
return FALSE
return TRUE
+
+/obj/item/firing_pin/security_level
+ name = "security level firing pin"
+ desc = "A sophisticated firing pin that authorizes operation based on its settings and current security level."
+ icon_state = "firing_pin_sec_level"
+ var/min_sec_level = SEC_LEVEL_GREEN
+ var/max_sec_level = SEC_LEVEL_DELTA
+ var/only_lethals = FALSE
+ var/can_toggle = TRUE
+
+/obj/item/firing_pin/security_level/Initialize()
+ . = ..()
+ fail_message = "INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \
+ MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \
+ ONLY LETHALS: [only_lethals ? "YES" : "NO"]. "
+ update_icon()
+
+/obj/item/firing_pin/security_level/examine(mob/user)
+ . = ..()
+ var/lethal = only_lethals ? "only lethal " : ""
+ if(min_sec_level != max_sec_level)
+ . += "It's currently set to disallow [lethal]operation when the security level isn't between [NUM2SECLEVEL(min_sec_level)] and [NUM2SECLEVEL(max_sec_level)] . "
+ else
+ . += "It's currently set to disallow [lethal]operation when the security level isn't [NUM2SECLEVEL(min_sec_level)] . "
+ if(can_toggle)
+ . += "You can use a multitool to modify its settings. "
+
+/obj/item/firing_pin/security_level/multitool_act(mob/living/user, obj/item/I)
+ . = TRUE
+ if(!can_toggle || !user.canUseTopic(src, BE_CLOSE))
+ return
+ var/selection = alert(user, "Which setting would you want to modify?", "Firing Pin Settings", "Minimum Level Setting", "Maximum Level Setting", "Lethals Only Toggle")
+ if(QDELETED(src) || QDELETED(user) || !user.canUseTopic(src, BE_CLOSE))
+ return
+ var/static/list/till_designs_pr_isnt_merged = list("green", "blue", "amber", "red", "delta")
+ switch(selection)
+ if("Minimum Level Setting")
+ var/input = input(user, "Input the new minimum level setting.", "Firing Pin Settings", NUM2SECLEVEL(min_sec_level)) as null|anything in till_designs_pr_isnt_merged
+ if(!input)
+ return
+ min_sec_level = till_designs_pr_isnt_merged.Find(input) - 1
+ if(min_sec_level > max_sec_level)
+ max_sec_level = SEC_LEVEL_DELTA
+ if("Maximum Level Setting")
+ var/input = input(user, "Input the new maximum level setting.", "Firing Pin Settings", NUM2SECLEVEL(max_sec_level)) as null|anything in till_designs_pr_isnt_merged
+ if(!input)
+ return
+ max_sec_level = till_designs_pr_isnt_merged.Find(input) - 1
+ if(max_sec_level < max_sec_level)
+ min_sec_level = SEC_LEVEL_GREEN
+ if("Lethals Only Toggle")
+ only_lethals = !only_lethals
+
+ fail_message = "INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \
+ MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \
+ ONLY LETHALS: [only_lethals ? "YES" : "NO"]. "
+ update_icon()
+
+/obj/item/firing_pin/security_level/update_overlays()
+ . = ..()
+ var/offset = 0
+ for(var/level in list(min_sec_level, max_sec_level))
+ var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay")
+ overlay.pixel_x += offset
+ offset += 4
+ switch(level)
+ if(SEC_LEVEL_GREEN)
+ overlay.color = "#b2ff59" //light green
+ if(SEC_LEVEL_BLUE)
+ overlay.color = "#99ccff" //light blue
+ if(SEC_LEVEL_AMBER)
+ overlay.color = "#ffae42" //light yellow/orange
+ if(SEC_LEVEL_RED)
+ overlay.color = "#ff3f34" //light red
+ else
+ overlay.color = "#fe59c2" //neon fuchsia
+ . += overlay
+ var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay")
+ overlay.pixel_x += offset
+ overlay.color = only_lethals ? "#b2ff59" : "#ff3f34"
+ . += overlay
+
+/obj/item/firing_pin/security_level/pin_auth(mob/living/user)
+ return (only_lethals && !(gun.chambered?.harmful)) || ISINRANGE(GLOB.security_level, min_sec_level, max_sec_level)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 6094a7aa46..f55ce75baa 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -224,7 +224,7 @@
/obj/item/projectile/proc/vol_by_damage()
if(src.damage)
- return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100
+ return clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100
else
return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
@@ -255,7 +255,7 @@
def_zone = ran_zone(def_zone, max(100-(7*distance), 5) * zone_accuracy_factor) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
if(isturf(A) && hitsound_wall)
- var/volume = CLAMP(vol_by_damage() + 20, 0, 100)
+ var/volume = clamp(vol_by_damage() + 20, 0, 100)
if(suppressed)
volume = 5
playsound(loc, hitsound_wall, volume, 1, -1)
@@ -315,6 +315,8 @@
objs += O
var/obj/O = safepick(objs)
if(O)
+ if(length(O.buckled_mobs))
+ return pick(O.buckled_mobs)
return O
//Nothing else is here that we can hit, hit the turf if we haven't.
if(!(T in permutated) && can_hit_target(T, permutated, T == original, TRUE))
@@ -392,7 +394,7 @@
stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!")
qdel(src)
return
- var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z)
+ var/turf/target = locate(clamp(starting + xo, 1, world.maxx), clamp(starting + yo, 1, world.maxy), starting.z)
setAngle(Get_Angle(src, target))
original_angle = Angle
if(!nondirectional_sprite)
@@ -525,10 +527,10 @@
if(!homing_target)
return FALSE
var/datum/point/PT = RETURN_PRECISE_POINT(homing_target)
- PT.x += CLAMP(homing_offset_x, 1, world.maxx)
- PT.y += CLAMP(homing_offset_y, 1, world.maxy)
+ PT.x += clamp(homing_offset_x, 1, world.maxx)
+ PT.y += clamp(homing_offset_y, 1, world.maxy)
var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT))
- setAngle(Angle + CLAMP(angle, -homing_turn_speed, homing_turn_speed))
+ setAngle(Angle + clamp(angle, -homing_turn_speed, homing_turn_speed))
/obj/item/projectile/proc/set_homing_target(atom/A)
if(!A || (!isturf(A) && !isturf(A.loc)))
@@ -622,7 +624,7 @@
var/ox = round(screenviewX/2) - user.client.pixel_x //"origin" x
var/oy = round(screenviewY/2) - user.client.pixel_y //"origin" y
- angle = ATAN2(y - oy, x - ox)
+ angle = arctan(y - oy, x - ox)
return list(angle, p_x, p_y)
/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it.
diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
index 06d94414be..25809cc7ca 100644
--- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm
+++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
@@ -60,11 +60,11 @@
if(R.overdose_threshold == 0 || emptrig == TRUE) //Is there a possible OD?
M.reagents.add_reagent(R.type, R.volume)
else
- var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1)
+ var/transVol = clamp(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1)
M.reagents.add_reagent(R.type, transVol)
else
if(!R.overdose_threshold == 0)
- var/transVol = CLAMP(R.volume, 0, R.overdose_threshold-1)
+ var/transVol = clamp(R.volume, 0, R.overdose_threshold-1)
M.reagents.add_reagent(R.type, transVol)
else
M.reagents.add_reagent(R.type, R.volume)
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index 4411334883..ff95b65a49 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -51,7 +51,7 @@
/obj/item/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE)
. = ..()
- if(ismovableatom(target))
+ if(ismovable(target))
var/atom/movable/M = target
var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
M.safe_throw_at(throw_target, 3, 2)
diff --git a/code/modules/projectiles/projectile/special/ion.dm b/code/modules/projectiles/projectile/special/ion.dm
index ae0888d3df..9755269031 100644
--- a/code/modules/projectiles/projectile/special/ion.dm
+++ b/code/modules/projectiles/projectile/special/ion.dm
@@ -3,7 +3,7 @@
icon_state = "ion"
damage = 0
damage_type = BURN
- nodamage = 1
+ nodamage = TRUE
flag = "energy"
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
var/emp_radius = 1
@@ -14,4 +14,4 @@
return BULLET_ACT_HIT
/obj/item/projectile/ion/weak
- emp_radius = 0
+ emp_radius = 0
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm
index a72d078384..2f6a55a7d0 100644
--- a/code/modules/projectiles/projectile/special/neurotoxin.dm
+++ b/code/modules/projectiles/projectile/special/neurotoxin.dm
@@ -1,8 +1,9 @@
/obj/item/projectile/bullet/neurotoxin
name = "neurotoxin spit"
icon_state = "neurotoxin"
- damage = 5
+ damage = 15
damage_type = TOX
+ var/stagger_duration = 8 SECONDS
/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE)
if(isalien(target))
@@ -10,5 +11,6 @@
nodamage = TRUE
else if(iscarbon(target))
var/mob/living/L = target
- L.DefaultCombatKnockdown(100, TRUE, FALSE, 30, 25)
+ L.KnockToFloor(TRUE)
+ L.Stagger(stagger_duration)
return ..()
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 89dd229407..f4c06f39cc 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -728,7 +728,7 @@
return
//Make sure things are limited, but superacids/bases can push forward the reaction
- pH = CLAMP(pH, 0, 14)
+ pH = clamp(pH, 0, 14)
//return said amount to compare for next step.
return (reactedVol)
@@ -849,7 +849,7 @@
/datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000)
var/S = specific_heat()
- chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), min_temp, max_temp)
+ chem_temp = clamp(chem_temp + (J / (S * total_volume)), min_temp, max_temp)
if(istype(my_atom, /obj/item/reagent_containers))
var/obj/item/reagent_containers/RC = my_atom
RC.temp_check()
@@ -877,7 +877,7 @@
for (var/datum/reagent/reagentgas in reagent_list)
R.add_reagent(reagentgas, amount/5)
remove_reagent(reagentgas, amount/5)
- s.set_up(R, CLAMP(amount/10, 0, 2), T)
+ s.set_up(R, clamp(amount/10, 0, 2), T)
s.start()
return FALSE
@@ -995,7 +995,7 @@
RC.pH_check()//checks beaker resilience)
//clamp the removal amount to be between current reagent amount
//and zero, to prevent removing more than the holder has stored
- amount = CLAMP(amount, 0, R.volume)
+ amount = clamp(amount, 0, R.volume)
R.volume -= amount
update_total()
if(!safety)//So it does not handle reactions when it need not to
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 63e9d724a4..8572d30efe 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -151,7 +151,7 @@
target = text2num(target)
. = TRUE
if(.)
- target_temperature = CLAMP(target, 0, 1000)
+ target_temperature = clamp(target, 0, 1000)
if("eject")
on = FALSE
replace_beaker(usr)
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 5eb5b94de9..a85ac8b085 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
var/inverse_chem // What chem is metabolised when purity is below inverse_chem_val, this shouldn't be made, but if it does, well, I guess I'll know about it.
var/metabolizing = FALSE
var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME
- var/value = 0 //How much does it sell for in cargo?
+ var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo?
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
. = ..()
@@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
return 0
if(method == VAPOR) //smoke, foam, spray
if(M.reagents)
- var/modifier = CLAMP((1 - touch_protection), 0, 1)
+ var/modifier = clamp((1 - touch_protection), 0, 1)
var/amount = round(reac_volume*modifier, 0.1)
if(amount >= 0.5)
M.reagents.add_reagent(type, amount)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index bff9c8dcef..464557f617 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -14,6 +14,7 @@
taste_description = "alcohol"
var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning
pH = 7.33
+ value = REAGENT_VALUE_VERY_COMMON //don't bother tweaking all drinks values, way too many can easily be done roundstart or with an upgraded dispenser.
/*
Boozepwr Chart
@@ -88,7 +89,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
pH = 4
- value = 0.1
/datum/reagent/consumable/ethanol/beer/light
name = "Light Beer"
@@ -98,7 +98,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of light beer"
glass_desc = "A freezing pint of watery light beer."
pH = 5
- value = 0.3
/datum/reagent/consumable/ethanol/beer/green
name = "Green Beer"
@@ -109,7 +108,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of green beer"
glass_desc = "A freezing pint of green beer. Festive."
pH = 6
- value = 0.3
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M)
if(M.color != color)
@@ -129,7 +127,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "DAMN, THIS THING LOOKS ROBUST!"
shot_glass_icon_state = "shotglasscream"
pH = 6
- value = 0.1
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M)
@@ -152,7 +149,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
- value = 0.1
/datum/reagent/consumable/ethanol/thirteenloko
name = "Thirteen Loko"
@@ -167,7 +163,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "thirteen_loko_glass"
glass_name = "glass of Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
- value = 0.3
/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-7)
@@ -229,7 +224,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "The glass contain wodka. Xynta."
shot_glass_icon_state = "shotglassclear"
pH = 8.1
- value = 0.1
/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M)
M.radiation = max(M.radiation-2,0)
@@ -245,7 +239,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_brown"
glass_name = "glass of bilk"
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
- value = 0.5
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(10))
@@ -264,7 +257,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Three Mile Island Ice Tea"
glass_desc = "A glass of this is sure to prevent a meltdown."
pH = 3.5
- value = 1
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
@@ -280,7 +273,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of gin"
glass_desc = "A crystal clear glass of Griffeater gin."
pH = 6.9
- value = 0.1
/datum/reagent/consumable/ethanol/rum
name = "Rum"
@@ -293,7 +285,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
shot_glass_icon_state = "shotglassbrown"
pH = 6.5
- value = 0.1
/datum/reagent/consumable/ethanol/tequila
name = "Tequila"
@@ -306,7 +297,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Now all that's missing is the weird colored shades!"
shot_glass_icon_state = "shotglassgold"
pH = 4
- value = 0.1
/datum/reagent/consumable/ethanol/vermouth
name = "Vermouth"
@@ -319,7 +309,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "You wonder why you're even drinking this straight."
shot_glass_icon_state = "shotglassclear"
pH = 3.25
- value = 0.1
/datum/reagent/consumable/ethanol/wine
name = "Wine"
@@ -332,7 +321,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A very classy looking drink."
shot_glass_icon_state = "shotglassred"
pH = 3.45
- value = 0.1
/datum/reagent/consumable/ethanol/lizardwine
name = "Lizard wine"
@@ -342,7 +330,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
quality = DRINK_FANTASTIC
taste_description = "scaley sweetness"
pH = 3
- value = 2
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/consumable/ethanol/grappa
name = "Grappa"
@@ -354,7 +342,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of grappa"
glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
pH = 3.5
- value = 0.1
/datum/reagent/consumable/ethanol/cognac
name = "Cognac"
@@ -367,7 +354,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
shot_glass_icon_state = "shotglassbrown"
pH = 3.5
- value = 0.1
/datum/reagent/consumable/ethanol/absinthe
name = "Absinthe"
@@ -379,7 +365,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of absinthe"
glass_desc = "It's as strong as it smells."
shot_glass_icon_state = "shotglassgreen"
- value = 0.1
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M)
if(prob(10) && !HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
@@ -395,6 +380,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_brown2"
glass_name = "Hooch"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role == "Assistant")
@@ -412,7 +398,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of ale"
glass_desc = "A freezing pint of delicious Ale."
pH = 4.5
- value = 0.1
/datum/reagent/consumable/ethanol/goldschlager
name = "Goldschlager"
@@ -425,7 +410,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of goldschlager"
glass_desc = "100% proof that teen girls will drink anything with gold in it."
shot_glass_icon_state = "shotglassgold"
- value = 0.5
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/patron
name = "Patron"
@@ -439,7 +424,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Drinking patron in the bar, with all the subpar ladies."
shot_glass_icon_state = "shotglassclear"
pH = 4.5
- value = 0.1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/gintonic
name = "Gin and Tonic"
@@ -452,7 +437,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Gin and Tonic"
glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
pH = 3
- value = 0.5
/datum/reagent/consumable/ethanol/rum_coke
name = "Rum and Coke"
@@ -465,7 +449,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Rum and Coke"
glass_desc = "The classic go-to of space-fratboys."
pH = 4
- value = 1
/datum/reagent/consumable/ethanol/cuba_libre
name = "Cuba Libre"
@@ -477,8 +460,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "cubalibreglass"
glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!"
- value = 0.5
-
/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries.
@@ -499,7 +480,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "whiskeycolaglass"
glass_name = "whiskey cola"
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
- value = 0.5
/datum/reagent/consumable/ethanol/martini
name = "Classic Martini"
@@ -511,7 +491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "martiniglass"
glass_name = "Classic Martini"
glass_desc = "Damn, the bartender even stirred it, not shook it."
- value = 1
/datum/reagent/consumable/ethanol/vodkamartini
name = "Vodka Martini"
@@ -523,7 +502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "martiniglass"
glass_name = "Vodka martini"
glass_desc ="A bastardisation of the classic martini. Still great."
- value = 1
/datum/reagent/consumable/ethanol/white_russian
@@ -536,7 +514,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "whiterussianglass"
glass_name = "White Russian"
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
- value = 1
/datum/reagent/consumable/ethanol/screwdrivercocktail
name = "Screwdriver"
@@ -548,7 +525,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "screwdriverglass"
glass_name = "Screwdriver"
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
- value = 1
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M)
if(M.mind && (M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer"))) //Engineers lose radiation poisoning at a massive rate.
@@ -564,7 +540,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "booger"
glass_name = "Booger"
glass_desc = "Ewww..."
- value = 0.3
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/bloody_mary
name = "Bloody Mary"
@@ -576,7 +552,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bloodymaryglass"
glass_name = "Bloody Mary"
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
- value = 1.3
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
if(AmBloodsucker(C))
@@ -595,7 +570,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bravebullglass"
glass_name = "Brave Bull"
glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up."
- value = 2
var/tough_text
/datum/reagent/consumable/ethanol/brave_bull/on_mob_metabolize(mob/living/M)
@@ -619,7 +593,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "tequilasunriseglass"
glass_name = "tequila Sunrise"
glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
- value = 2
var/obj/effect/light_holder
/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/M)
@@ -649,7 +622,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Toxins Special"
glass_desc = "Whoah, this thing is on FIRE!"
shot_glass_icon_state = "toxinsspecialglass"
- value = 2
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M)
M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
@@ -668,7 +641,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
pH = 2
overdose_threshold = 40
- value = 3
var/datum/brain_trauma/special/beepsky/B
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/M)
@@ -709,7 +681,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "irishcreamglass"
glass_name = "Irish Cream"
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
- value = 1
/datum/reagent/consumable/ethanol/manly_dorf
name = "The Manly Dorf"
@@ -721,7 +692,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "manlydorfglass"
glass_name = "The Manly Dorf"
glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only."
- value = 2
var/dorf_mode
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/M)
@@ -752,7 +722,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "longislandicedteaglass"
glass_name = "Long Island Iced Tea"
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- value = 1
/datum/reagent/consumable/ethanol/moonshine
name = "Moonshine"
@@ -763,7 +732,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_clear"
glass_name = "Moonshine"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
- value = 2
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/b52
name = "B-52"
@@ -776,7 +745,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "B-52"
glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
shot_glass_icon_state = "b52glass"
- value = 5.2
/datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/M)
playsound(M, 'sound/effects/explosion_distant.ogg', 100, FALSE)
@@ -791,7 +759,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "irishcoffeeglass"
glass_name = "Irish Coffee"
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
- value = 2
/datum/reagent/consumable/ethanol/margarita
name = "Margarita"
@@ -803,7 +770,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "margaritaglass"
glass_name = "Margarita"
glass_desc = "On the rocks with salt on the rim. Arriba~!"
- value = 2
/datum/reagent/consumable/ethanol/black_russian
name = "Black Russian"
@@ -815,7 +781,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "blackrussianglass"
glass_name = "Black Russian"
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
- value = 3
/datum/reagent/consumable/ethanol/manhattan
@@ -828,7 +793,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "manhattanglass"
glass_name = "Manhattan"
glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
- value = 3
/datum/reagent/consumable/ethanol/manhattan_proj
@@ -841,7 +805,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "proj_manhattanglass"
glass_name = "Manhattan Project"
glass_desc = "A scientist's drink of choice, for thinking how to blow up the station."
- value = 6
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M)
@@ -858,7 +822,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "whiskeysodaglass2"
glass_name = "whiskey soda"
glass_desc = "Ultimate refreshment."
- value = 1
/datum/reagent/consumable/ethanol/antifreeze
name = "Anti-freeze"
@@ -870,7 +833,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "antifreeze"
glass_name = "Anti-freeze"
glass_desc = "The ultimate refreshment."
- value = 3
/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
@@ -886,7 +848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "b&p"
glass_name = "Barefoot"
glass_desc = "Barefoot and pregnant."
- value = 4
/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M)
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
@@ -906,7 +867,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "snowwhite"
glass_name = "Snow White"
glass_desc = "A cold refreshment."
- value = 1
/datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon.
name = "Demon's Blood"
@@ -918,7 +878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "demonsblood"
glass_name = "Demons Blood"
glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up."
- value = 2
/datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it.
name = "Devil's Kiss"
@@ -930,7 +889,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "devilskiss"
glass_name = "Devils Kiss"
glass_desc = "Creepy time!"
- value = 2
/datum/reagent/consumable/ethanol/vodkatonic
name = "Vodka and Tonic"
@@ -942,7 +900,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "vodkatonicglass"
glass_name = "vodka and tonic"
glass_desc = "For when a gin and tonic isn't Russian enough."
- value = 1
/datum/reagent/consumable/ethanol/ginfizz
name = "Gin Fizz"
@@ -954,7 +911,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "ginfizzglass"
glass_name = "gin fizz"
glass_desc = "Refreshingly lemony, deliciously dry."
- value = 1
/datum/reagent/consumable/ethanol/bahama_mama
name = "Bahama Mama"
@@ -966,7 +922,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bahama_mama"
glass_name = "Bahama Mama"
glass_desc = "A tropical cocktail with a complex blend of flavors."
- value = 2
/datum/reagent/consumable/ethanol/singulo
name = "Singulo"
@@ -978,7 +933,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "singulo"
glass_name = "Singulo"
glass_desc = "A blue-space beverage."
- value = 4
/datum/reagent/consumable/ethanol/sbiten
name = "Sbiten"
@@ -990,7 +944,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "sbitenglass"
glass_name = "Sbiten"
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
- value = 2
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp.
@@ -1006,7 +959,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "red_meadglass"
glass_name = "Red Mead"
glass_desc = "A True Viking's Beverage, though its color is strange."
- value = 5
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/mead
name = "Mead"
@@ -1019,7 +972,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "meadglass"
glass_name = "Mead"
glass_desc = "A Viking's Beverage, though a cheap one."
- value = 1
/datum/reagent/consumable/ethanol/iced_beer
name = "Iced Beer"
@@ -1030,7 +982,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "iced_beerglass"
glass_name = "iced beer"
glass_desc = "A beer so frosty, the air around it freezes."
- value = 1
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp.
@@ -1045,7 +996,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "grogglass"
glass_name = "Grog"
glass_desc = "A fine and cepa drink for Space."
- value = 2.1
/datum/reagent/consumable/ethanol/aloe
name = "Aloe"
@@ -1057,7 +1007,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "aloe"
glass_name = "Aloe"
glass_desc = "Very, very, very good."
- value = 1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/andalusia
name = "Andalusia"
@@ -1069,7 +1019,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "andalusia"
glass_name = "Andalusia"
glass_desc = "A nice, strangely named drink."
- value = 1
/datum/reagent/consumable/ethanol/alliescocktail
name = "Allies Cocktail"
@@ -1081,7 +1030,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "alliescocktail"
glass_name = "Allies cocktail"
glass_desc = "A drink made from your allies."
- value = 4
/datum/reagent/consumable/ethanol/acid_spit
name = "Acid Spit"
@@ -1093,7 +1041,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "acidspitglass"
glass_name = "Acid Spit"
glass_desc = "A drink from Nanotrasen. Made from live aliens."
- value = 3
/datum/reagent/consumable/ethanol/amasec
name = "Amasec"
@@ -1105,7 +1052,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "amasecglass"
glass_name = "Amasec"
glass_desc = "Always handy before COMBAT!!!"
- value = 2
/datum/reagent/consumable/ethanol/changelingsting
name = "Changeling Sting"
@@ -1117,14 +1063,13 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "changelingsting"
glass_name = "Changeling Sting"
glass_desc = "A stingy drink."
- value = 1.5
/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M)
if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals.
var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.chem_charges += metabolization_rate
- changeling.chem_charges = CLAMP(changeling.chem_charges, 0, changeling.chem_storage)
+ changeling.chem_charges = clamp(changeling.chem_charges, 0, changeling.chem_storage)
return ..()
/datum/reagent/consumable/ethanol/irishcarbomb
@@ -1137,7 +1082,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "irishcarbomb"
glass_name = "Irish Car Bomb"
glass_desc = "An Irish car bomb."
- value = 5
/datum/reagent/consumable/ethanol/syndicatebomb
name = "Syndicate Bomb"
@@ -1149,7 +1093,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "syndicatebomb"
glass_name = "Syndicate Bomb"
glass_desc = "A syndicate bomb."
- value = 2
/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -1177,7 +1120,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "erikasurprise"
glass_name = "Erika Surprise"
glass_desc = "The surprise is, it's green!"
- value = 4
/datum/reagent/consumable/ethanol/driestmartini
name = "Driest Martini"
@@ -1190,7 +1132,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "driestmartiniglass"
glass_name = "Driest Martini"
glass_desc = "Only for the experienced. You think you see sand floating in the glass."
- value = 5
/datum/reagent/consumable/ethanol/bananahonk
name = "Banana Honk"
@@ -1203,7 +1144,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bananahonkglass"
glass_name = "Banana Honk"
glass_desc = "A drink from Clown Heaven."
- value = 8
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M)
if((ishuman(M) && M.job == "Clown") || ismonkey(M))
@@ -1222,7 +1162,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "silencerglass"
glass_name = "Silencer"
glass_desc = "A drink from Mime Heaven."
- value = 2
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job == "Mime")
@@ -1240,7 +1179,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "drunkenblumpkin"
glass_name = "Drunken Blumpkin"
glass_desc = "A drink for the drunks."
- value = 3
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour.
name = "Whiskey Sour"
@@ -1252,7 +1191,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "whiskey_sour"
glass_name = "whiskey sour"
glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying."
- value = 2
/datum/reagent/consumable/ethanol/hcider
name = "Hard Cider"
@@ -1265,7 +1203,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "hard cider"
glass_desc = "Tastes like autumn... no wait, fall!"
shot_glass_icon_state = "shotglassbrown"
- value = 3
/datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber!
name = "Fetching Fizz"
@@ -1278,7 +1215,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "fetching_fizz"
glass_name = "Fetching Fizz"
glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
- value = 2
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M)
for(var/obj/item/stack/ore/O in orange(3, M))
@@ -1297,7 +1234,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "hearty_punch"
glass_name = "Hearty Punch"
glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
- value = 1
+ value = REAGENT_VALUE_RARE //considering the low recipe yield.
/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M)
if(M.health <= 0)
@@ -1318,8 +1255,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_brown2"
glass_name = "Bacchus' Blessing"
glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
- value = 8
-
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/atomicbomb
name = "Atomic Bomb"
@@ -1331,7 +1267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "atomicbombglass"
glass_name = "Atomic Bomb"
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
- value = 3.56
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
@@ -1360,7 +1296,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "gargleblasterglass"
glass_name = "Pan-Galactic Gargle Blaster"
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
- value = 5
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M)
M.dizziness +=1.5
@@ -1393,7 +1328,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
impure_chem = /datum/reagent/consumable/ethanol/neuroweak
inverse_chem_val = 0.5 //Clear conversion
inverse_chem = /datum/reagent/consumable/ethanol/neuroweak
- value = 4
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt()
return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG))
@@ -1434,7 +1369,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins."
boozepwr = 60
pH = 8
- value = 3
/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin))
@@ -1460,7 +1394,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "hippiesdelightglass"
glass_name = "Hippie's Delight"
glass_desc = "A drink enjoyed by people during the 1960's."
- value = 1.96
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
M.slurring = max(M.slurring,50)
@@ -1504,8 +1438,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "nog3"
glass_name = "eggnog"
glass_desc = "The traditional way to get absolutely hammered at a Christmas party."
- value = 4
-
/datum/reagent/consumable/ethanol/narsour
name = "Nar'Sour"
@@ -1517,7 +1449,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "narsour"
glass_name = "Nar'Sour"
glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!"
- value = 6.66
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M)
M.cultslurring = min(M.cultslurring + 3, 3)
@@ -1534,7 +1466,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "cogchamp"
glass_name = "CogChamp"
glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!"
- value = 8.13
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/cogchamp/on_mob_life(mob/living/carbon/M)
M.clockcultslurring = min(M.clockcultslurring + 3, 3)
@@ -1550,7 +1482,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_orange"
glass_name = "Triple Sec"
glass_desc = "A glass of straight Triple Sec."
- value = 1.5
/datum/reagent/consumable/ethanol/creme_de_menthe
name = "Creme de Menthe"
@@ -1561,7 +1492,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_green"
glass_name = "Creme de Menthe"
glass_desc = "You can almost feel the first breath of spring just looking at it."
- value = 2
/datum/reagent/consumable/ethanol/creme_de_cacao
name = "Creme de Cacao"
@@ -1572,7 +1502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "glass_brown"
glass_name = "Creme de Cacao"
glass_desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient."
- value = 1
/datum/reagent/consumable/ethanol/creme_de_coconut
name = "Creme de Coconut"
@@ -1594,7 +1523,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "quadruple_sec"
glass_name = "Quadruple Sec"
glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though."
- value = 3.04
/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M)
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes.
@@ -1613,7 +1541,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "quintuple_sec"
glass_name = "Quintuple Sec"
glass_desc = "Now you are become law, destroyer of clowns."
- value = 4.01
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M)
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG..
@@ -1657,7 +1585,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "grasshopper"
glass_name = "Grasshopper"
glass_desc = "You weren't aware edible beverages could be that green."
- value = 1
/datum/reagent/consumable/ethanol/stinger
name = "Stinger"
@@ -1669,7 +1596,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "stinger"
glass_name = "Stinger"
glass_desc = "You wonder what would happen if you pointed this at a heat source..."
- value = 1
/datum/reagent/consumable/ethanol/bastion_bourbon
name = "Bastion Bourbon"
@@ -1684,7 +1610,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon."
shot_glass_icon_state = "shotglassgreen"
pH = 4
- value = 8
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_metabolize(mob/living/L)
var/heal_points = 10
@@ -1721,7 +1647,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Squirt Cider"
glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste."
shot_glass_icon_state = "shotglassgreen"
- value = 1
/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M)
M.satiety += 5 //for context, vitamins give 30 satiety per tick
@@ -1738,7 +1663,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "fringe_weaver"
glass_name = "Fringe Weaver"
glass_desc = "It's a wonder it doesn't spill out of the glass."
- value = 1
/datum/reagent/consumable/ethanol/sugar_rush
name = "Sugar Rush"
@@ -1751,7 +1675,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "sugar_rush"
glass_name = "Sugar Rush"
glass_desc = "If you can't mix a Sugar Rush, you can't tend bar."
- value = 1
/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M)
M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food
@@ -1768,7 +1691,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "crevice_spike"
glass_name = "Crevice Spike"
glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably."
- value = 1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/crevice_spike/on_mob_metabolize(mob/living/L) //damage only applies when drink first enters system and won't again until drink metabolizes out
L.adjustBruteLoss(3 * min(5,volume)) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15
@@ -1782,7 +1705,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "sakecup"
glass_name = "cup of sake"
glass_desc = "A traditional cup of sake."
- value = 0.1
/datum/reagent/consumable/ethanol/peppermint_patty
name = "Peppermint Patty"
@@ -1794,7 +1716,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "peppermint_patty"
glass_name = "Peppermint Patty"
glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night."
- value = 2
/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M)
M.apply_status_effect(/datum/status_effect/throat_soothed)
@@ -1812,7 +1733,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Alexander"
glass_desc = "A creamy, indulgent delight that is stronger than it seems."
var/obj/item/shield/mighty_shield
- value = 1
/datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/L)
if(ishuman(L))
@@ -1844,7 +1764,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "sidecar"
glass_name = "Sidecar"
glass_desc = "The one ride you'll gladly give up the wheel for."
- value = 1
/datum/reagent/consumable/ethanol/between_the_sheets
name = "Between the Sheets"
@@ -1856,7 +1775,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "between_the_sheets"
glass_name = "Between the Sheets"
glass_desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy."
- value = 2
/datum/reagent/consumable/ethanol/between_the_sheets/on_mob_life(mob/living/L)
..()
@@ -1881,7 +1799,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "kamikaze"
glass_name = "Kamikaze"
glass_desc = "Divinely windy."
- value = 1
/datum/reagent/consumable/ethanol/mojito
name = "Mojito"
@@ -1893,7 +1810,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "mojito"
glass_name = "Mojito"
glass_desc = "A drink that looks as refreshing as it tastes."
- value = 1
/datum/reagent/consumable/ethanol/moscow_mule
name = "Moscow Mule"
@@ -1914,7 +1830,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
taste_description = "utter bitterness"
glass_name = "glass of fernet"
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone."
- value = 0.1
/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
@@ -1933,7 +1848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "godlyblend"
glass_name = "glass of fernet cola"
glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass."
- value = 1
/datum/reagent/consumable/ethanol/fernet_cola/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
@@ -1943,7 +1857,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
return ..()
/datum/reagent/consumable/ethanol/fanciulli
-
name = "Fanciulli"
description = "What if the Manhattan coctail ACTUALLY used a bitter herb liquour? Helps you sobers up." //also causes a bit of stamina damage to symbolize the afterdrink lazyness
color = "#CA933F" // rgb: 202, 147, 63
@@ -1953,7 +1866,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "fanciulli"
glass_name = "glass of fanciulli"
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
- value = 1
/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M)
M.nutrition = max(M.nutrition - 5, 0)
@@ -1966,7 +1878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
. = TRUE
..()
-
/datum/reagent/consumable/ethanol/branca_menta
name = "Branca Menta"
description = "A refreshing mixture of bitter Fernet with mint creme liquour."
@@ -1977,7 +1888,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state= "minted_fernet"
glass_name = "glass of branca menta"
glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this
- value = 1
/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C)
@@ -2000,7 +1910,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "blank_paper"
glass_name = "glass of blank paper"
glass_desc = "A fizzy cocktail for those looking to start fresh."
- value = 1
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M)
if(ishuman(M) && M.job == "Mime")
@@ -2017,7 +1927,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "champagne_glass"
glass_name = "Champagne"
glass_desc = "The flute clearly displays the slowly rising bubbles."
- value = 1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/wizz_fizz
name = "Wizz Fizz"
@@ -2029,7 +1939,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "wizz_fizz"
glass_name = "Wizz Fizz"
glass_desc = "The glass bubbles and froths with an almost magical intensity."
- value = 1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/M)
//A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting
@@ -2049,7 +1959,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bug_spray"
glass_name = "Bug Spray"
glass_desc = "Your eyes begin to water as the sting of alcohol reaches them."
- value = 1
/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M)
//Bugs should not drink Bug spray.
@@ -2071,7 +1980,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "applejack_glass"
glass_name = "Applejack"
glass_desc = "You feel like you could drink this all neight."
- value = 0.1
/datum/reagent/consumable/ethanol/jack_rose
name = "Jack Rose"
@@ -2083,7 +1991,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "jack_rose"
glass_name = "Jack Rose"
glass_desc = "Enough of these, and you really will start to suppose your toeses are roses."
- value = 1
/datum/reagent/consumable/ethanol/turbo
name = "Turbo"
@@ -2095,7 +2002,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "turbo"
glass_name = "Turbo"
glass_desc = "A turbulent cocktail for outlaw hoverbikers."
- value = 0.3
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/turbo/on_mob_life(mob/living/carbon/M)
if(prob(4))
@@ -2113,7 +2020,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "old_timer"
glass_name = "Old Timer"
glass_desc = "WARNING! May cause premature aging!"
- value = 2
+ value = REAGENT_VALUE_UNCOMMON //Parsnip juice? Really? lol
/datum/reagent/consumable/ethanol/old_timer/on_mob_life(mob/living/carbon/M)
if(prob(20))
@@ -2146,7 +2053,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "rubberneck"
glass_name = "Rubberneck"
glass_desc = "A popular drink amongst those adhering to an all synthetic diet."
- value = 1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/duplex
name = "Duplex"
@@ -2158,7 +2065,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "duplex"
glass_name = "Duplex"
glass_desc = "To imbibe one component separately from the other is consider a great faux pas."
- value = 1
/datum/reagent/consumable/ethanol/trappist
name = "Trappist Beer"
@@ -2170,7 +2076,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "trappistglass"
glass_name = "Trappist Beer"
glass_desc = "boozy Catholicism in a glass."
- value = 1
/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M)
if(M.mind.isholy)
@@ -2188,8 +2093,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "blazaamglass"
glass_name = "Blazaam"
glass_desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover."
+ value = REAGENT_VALUE_UNCOMMON
var/stored_teleports = 0
- value = 4
/datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M)
if(M.drunkenness > 40)
@@ -2211,7 +2116,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "planet_cracker"
glass_name = "Planet Cracker"
glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy."
- value = 1
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/consumable/ethanol/mauna_loa
name = "Mauna Loa"
@@ -2223,6 +2128,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "mauna_loa"
glass_name = "Mauna Loa"
glass_desc = "Lavaland in a drink... mug... volcano... thing."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/mauna_loa/on_mob_life(mob/living/carbon/M)
// Heats the user up while the reagent is in the body. Occasionally makes you burst into flames.
@@ -2236,13 +2142,14 @@ All effects don't start immediately, but rather get worse over time; the rate is
name = "Commander and Chief"
description = "A cocktail for the captain on the go."
color = "#ffffc9"
+ can_synth = FALSE
boozepwr = 50
quality = DRINK_FANTASTIC
taste_description = "duty and responsibility"
glass_icon_state = "commander_and_chief"
glass_name = "Commander and Chief"
glass_desc = "The gems of this majestic chalice represent the departments and their Heads."
- value = 10
+ value = REAGENT_VALUE_AMAZING
/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
@@ -2281,6 +2188,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "hellfire"
glass_name = "Hellfire"
glass_desc = "An amber colored drink that isn't quite as hot as it looks."
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 30)
@@ -2296,6 +2204,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "sins_delight"
glass_name = "Sin's Delight"
glass_desc = "You can smell the seven sins rolling off the top of the glass."
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/ethanol/strawberry_daiquiri
name = "Strawberry Daiquiri"
@@ -2328,6 +2237,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "miami_vice"
glass_name = "Miami Vice"
glass_desc = "Strawberries and coconut, like yin and yang."
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/ethanol/malibu_sunset
name = "Malibu Sunset"
@@ -2350,6 +2260,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "hotlime_miami"
glass_name = "Hotlime Miami"
glass_desc = "This looks very aesthetically pleasing."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
@@ -2580,7 +2491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit.
var/list/tastes = list("bad coding" = 1) //List of tastes. See above.
pH = 4
- value = 4
/datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data)
names = data["names"]
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index ebbce61c57..62aea28009 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -165,6 +165,7 @@
metabolization_rate = INFINITY
color = "#FF4DD2"
taste_description = "laughter"
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M)
M.emote("laugh")
@@ -177,6 +178,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
color = "#FF4DD2"
taste_description = "laughter"
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M)
if(prob(30))
@@ -210,6 +212,7 @@
glass_name = "glass of milk"
glass_desc = "White and nutritious goodness!"
pH = 6.5
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
@@ -231,6 +234,7 @@
glass_icon_state = "glass_white"
glass_name = "glass of soy milk"
glass_desc = "White and nutritious soy goodness!"
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
@@ -324,17 +328,18 @@
glass_icon_state = "lemonpitcher"
glass_name = "pitcher of lemonade"
glass_desc = "This drink leaves you feeling nostalgic for some reason."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/tea/arnold_palmer
name = "Arnold Palmer"
description = "Encourages the patient to go golfing."
color = "#FFB766"
quality = DRINK_NICE
- nutriment_factor = 2
taste_description = "bitter tea"
glass_icon_state = "arnold_palmer"
glass_name = "Arnold Palmer"
glass_desc = "You feel like taking a few golf swings after a few swigs of this."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -384,6 +389,7 @@
/datum/reagent/consumable/space_cola
name = "Cola"
description = "A refreshing beverage."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#100800" // rgb: 16, 8, 0
taste_description = "cola"
glass_icon_state = "glass_brown"
@@ -404,6 +410,7 @@
glass_icon_state = "nuka_colaglass"
glass_name = "glass of Nuka Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
M.Jitter(20)
@@ -418,6 +425,7 @@
/datum/reagent/consumable/spacemountainwind
name = "SM Wind"
description = "Blows right through you like a space wind."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#102000" // rgb: 16, 32, 0
taste_description = "sweet citrus soda"
glass_icon_state = "Space_mountain_wind_glass"
@@ -435,6 +443,7 @@
/datum/reagent/consumable/dr_gibb
name = "Dr. Gibb"
description = "A delicious blend of 42 different flavours."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#102000" // rgb: 16, 32, 0
taste_description = "cherry soda" // FALSE ADVERTISING
glass_icon_state = "dr_gibb_glass"
@@ -449,6 +458,7 @@
/datum/reagent/consumable/space_up
name = "Space-Up"
description = "Tastes like a hull breach in your mouth."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#00FF00" // rgb: 0, 255, 0
taste_description = "cherry soda"
glass_icon_state = "space-up_glass"
@@ -463,6 +473,7 @@
/datum/reagent/consumable/lemon_lime
name = "Lemon Lime"
description = "A tangy substance made of 0.5% natural citrus!"
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#8CFF00" // rgb: 135, 255, 0
taste_description = "tangy lime and lemon soda"
glass_icon_state = "glass_yellow"
@@ -476,6 +487,7 @@
/datum/reagent/consumable/pwr_game
name = "Pwr Game"
description = "The only drink with the PWR that true gamers crave."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#9385bf" // rgb: 58, 52, 75
taste_description = "sweet and salty tang"
glass_icon_state = "glass_red"
@@ -489,6 +501,7 @@
/datum/reagent/consumable/shamblers
name = "Shambler's Juice"
description = "~Shake me up some of that Shambler's Juice!~"
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#f00060" // rgb: 94, 0, 38
taste_description = "carbonated metallic soda"
glass_icon_state = "glass_red"
@@ -502,6 +515,7 @@
/datum/reagent/consumable/buzz_fuzz
name = "Buzz Fuzz"
description = "~A Hive of Flavour!~ NOTICE: Addicting."
+ nutriment_factor = 0
addiction_threshold = 26 //A can and a sip
color = "#8CFF00" // rgb: 135, 255, 0
taste_description = "carbonated honey and pollen"
@@ -552,6 +566,7 @@
glass_icon_state = "grey_bull_glass"
glass_name = "glass of Grey Bull"
glass_desc = "Surprisingly it isnt grey."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/L)
..()
@@ -572,6 +587,7 @@
/datum/reagent/consumable/sodawater
name = "Soda Water"
description = "A can of club soda. Why not make a scotch and soda?"
+ nutriment_factor = 0
color = "#619494" // rgb: 97, 148, 148
taste_description = "carbonated water"
glass_icon_state = "glass_clear"
@@ -604,6 +620,7 @@
/datum/reagent/consumable/ice
name = "Ice"
description = "Frozen water, your dentist wouldn't like you chewing this."
+ nutriment_factor = 0 //Its water why would this even geive nutriments?
reagent_state = SOLID
color = "#619494" // rgb: 97, 148, 148
taste_description = "ice"
@@ -624,6 +641,7 @@
glass_icon_state = "soy_latte"
glass_name = "soy latte"
glass_desc = "A nice and refreshing beverage while you're reading."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -645,6 +663,7 @@
glass_icon_state = "cafe_latte"
glass_name = "cafe latte"
glass_desc = "A nice, strong and refreshing beverage while you're reading."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -666,6 +685,7 @@
glass_icon_state = "doctorsdelightglass"
glass_name = "Doctor's Delight"
glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-0.5, 0)
@@ -688,6 +708,7 @@
glass_icon_state = "chocolatepudding"
glass_name = "chocolate pudding"
glass_desc = "Tasty."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/vanillapudding
name = "Vanilla Pudding"
@@ -699,50 +720,55 @@
glass_icon_state = "vanillapudding"
glass_name = "vanilla pudding"
glass_desc = "Tasty."
+ value = REAGENT_VALUE_UNCOMMON //real vanilla.
/datum/reagent/consumable/cherryshake
name = "Cherry Shake"
description = "A cherry flavored milkshake."
color = "#FFB6C1"
quality = DRINK_VERYGOOD
- nutriment_factor = 4 * REAGENTS_METABOLISM
+ nutriment_factor = 2 * REAGENTS_METABOLISM
taste_description = "creamy cherry"
glass_icon_state = "cherryshake"
glass_name = "cherry shake"
glass_desc = "A cherry flavored milkshake."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/bluecherryshake
name = "Blue Cherry Shake"
description = "An exotic milkshake."
color = "#00F1FF"
quality = DRINK_VERYGOOD
- nutriment_factor = 4 * REAGENTS_METABOLISM
+ nutriment_factor = 2 * REAGENTS_METABOLISM
taste_description = "creamy blue cherry"
glass_icon_state = "bluecherryshake"
glass_name = "blue cherry shake"
glass_desc = "An exotic blue milkshake."
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/consumable/pumpkin_latte
name = "Pumpkin Latte"
description = "A mix of pumpkin juice and coffee."
color = "#F4A460"
quality = DRINK_VERYGOOD
- nutriment_factor = 3 * REAGENTS_METABOLISM
+ nutriment_factor = 2 * REAGENTS_METABOLISM
taste_description = "creamy pumpkin"
glass_icon_state = "pumpkin_latte"
glass_name = "pumpkin latte"
glass_desc = "A mix of coffee and pumpkin juice."
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/gibbfloats
name = "Gibb Floats"
description = "Ice cream on top of a Dr. Gibb glass."
color = "#B22222"
quality = DRINK_NICE
- nutriment_factor = 3 * REAGENTS_METABOLISM
+ nutriment_factor = 1 * REAGENTS_METABOLISM
taste_description = "creamy cherry"
glass_icon_state = "gibbfloats"
glass_name = "Gibbfloat"
glass_desc = "Dr. Gibb with ice cream on top."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/pumpkinjuice
name = "Pumpkin Juice"
@@ -755,6 +781,7 @@
description = "Juiced from real blumpkin."
color = "#00BFFF"
taste_description = "a mouthful of pool water"
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/triple_citrus
name = "Triple Citrus"
@@ -784,6 +811,7 @@
color = "#7D4E29"
quality = DRINK_NICE
taste_description = "chocolate milk"
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/menthol
name = "Menthol"
@@ -812,6 +840,7 @@
color = "#FFA500"
taste_description = "parsnip"
glass_name = "glass of parsnip juice"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/peachjuice //Intended to be extremely rare due to being the limiting ingredients in the blazaam drink
name = "Peach Juice"
@@ -837,6 +866,7 @@
glass_icon_state = "cream_soda"
glass_name = "Cream Soda"
glass_desc = "A classic space-American vanilla flavored soft drink."
+ value = REAGENT_VALUE_VERY_COMMON //just a little vanilla
/datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -845,6 +875,7 @@
/datum/reagent/consumable/sol_dry
name = "Sol Dry"
description = "A soothing, mellow drink made from ginger."
+ nutriment_factor = 0.5 * REAGENTS_METABOLISM
color = "#f7d26a"
quality = DRINK_NICE
taste_description = "sweet ginger spice"
@@ -864,6 +895,7 @@
glass_icon_state = "red_queen"
glass_name = "Red Queen"
glass_desc = "DRINK ME."
+ value = REAGENT_VALUE_COMMON //growth serum.
var/current_size = RESIZE_DEFAULT_SIZE
/datum/reagent/consumable/red_queen/on_mob_life(mob/living/carbon/H)
@@ -889,10 +921,11 @@
description = "A drink of a bygone era of milk and artificial sweetener back on a rock."
color = "#f76aeb"//rgb(247, 106, 235)
glass_icon_state = "pinkmilk"
- quality = DRINK_FANTASTIC //Love drink
+ quality = DRINK_VERYGOOD
taste_description = "sweet strawberry and milk cream"
glass_name = "tall glass of strawberry milk"
glass_desc = "Delicious flavored strawberry syrup mixed with milk."
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/consumable/tea/pinkmilk/on_mob_life(mob/living/carbon/M)
if(prob(15))
@@ -905,7 +938,7 @@
description = "A timeless classic!"
color = "#f76aeb"//rgb(247, 106, 235)
glass_icon_state = "pinktea"
- quality = DRINK_FANTASTIC //Love drink
+ quality = DRINK_VERYGOOD
taste_description = "sweet tea with a hint of strawberry"
glass_name = "mug of strawberry tea"
glass_desc = "Delicious traditional tea flavored with strawberries."
@@ -948,6 +981,7 @@
glass_icon_state = "monkey_energy_glass"
glass_name = "glass of Monkey Energy"
glass_desc = "You can unleash the ape, but without the pop of the can?"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M)
M.Jitter(20)
@@ -965,3 +999,4 @@
glass_icon_state = "glass_yellow"
glass_name = "glass of bungo juice"
glass_desc = "Exotic! You feel like you are on vacation already."
+ value = REAGENT_VALUE_COMMON
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index c96feec4e2..ef4b7f3a53 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -1,6 +1,5 @@
/datum/reagent/drug
name = "Drug"
- value = 12
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
var/trippy = TRUE //Does this drug make you trip?
@@ -11,7 +10,7 @@
/datum/reagent/drug/space_drugs
name = "Space drugs"
- value = 6
+ value = REAGENT_VALUE_VERY_COMMON
description = "An illegal chemical compound used as drug."
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 30
@@ -38,7 +37,6 @@
/datum/reagent/drug/nicotine
name = "Nicotine"
- value = 0
description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
@@ -66,6 +64,7 @@
overdose_threshold = 20
addiction_threshold = 10
pH = 10
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -112,6 +111,7 @@
overdose_threshold = 20
addiction_threshold = 15
pH = 9
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M)
@@ -167,6 +167,7 @@
var/jitter = TRUE
var/confusion = TRUE
pH = 5
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L)
..()
@@ -196,7 +197,7 @@
. = 1
/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M)
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i in 1 to 4)
step(M, pick(GLOB.cardinals))
if(prob(20))
@@ -223,7 +224,7 @@
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M)
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 4, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(15)
@@ -233,7 +234,7 @@
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M)
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(20)
@@ -250,6 +251,7 @@
overdose_threshold = 35
jitter = FALSE
brain_damage = FALSE
+ value = REAGENT_VALUE_RARE
/datum/reagent/drug/bath_salts
name = "Bath Salts"
@@ -261,6 +263,7 @@
taste_description = "salt" // because they're bathsalts?
var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage
pH = 8.2
+ value = REAGENT_VALUE_RARE
/datum/reagent/drug/bath_salts/on_mob_metabolize(mob/living/L)
..()
@@ -285,7 +288,7 @@
M.adjustStaminaLoss(-5, 0)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4)
M.hallucination += 5
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
step(M, pick(GLOB.cardinals))
step(M, pick(GLOB.cardinals))
..()
@@ -293,7 +296,7 @@
/datum/reagent/drug/bath_salts/overdose_process(mob/living/M)
M.hallucination += 5
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i in 1 to 8)
step(M, pick(GLOB.cardinals))
if(prob(20))
@@ -304,7 +307,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M)
M.hallucination += 10
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(5)
@@ -315,7 +318,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M)
M.hallucination += 20
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(10)
@@ -327,7 +330,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M)
M.hallucination += 30
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 12, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(15)
@@ -339,7 +342,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M)
M.hallucination += 30
- if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
+ if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
for(var/i = 0, i < 16, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(50)
@@ -357,6 +360,7 @@
reagent_state = LIQUID
color = "#78FFF0"
pH = 9.2
+ value = REAGENT_VALUE_RARE
/datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M)
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
@@ -378,6 +382,7 @@
addiction_threshold = 10
overdose_threshold = 20
pH = 10.5
+ value = REAGENT_VALUE_RARE
/datum/reagent/drug/happiness/on_mob_add(mob/living/L)
..()
@@ -457,10 +462,11 @@
addiction_stage3_end = 40
addiction_stage4_end = 240
pH = 12.5
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/drug/skooma/on_mob_metabolize(mob/living/L)
. = ..()
- L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma)
L.next_move_modifier *= 2
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -473,7 +479,7 @@
/datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L)
. = ..()
- L.remove_movespeed_modifier(type)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma)
L.next_move_modifier *= 0.5
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -521,3 +527,35 @@
if(prob(40))
M.emote(pick("twitch","drool","moan"))
..()
+
+/datum/reagent/syndicateadrenals
+ name = "Syndicate Adrenaline"
+ description = "Regenerates your stamina and increases your reaction time."
+ color = "#E62111"
+ overdose_threshold = 6
+ value = REAGENT_VALUE_VERY_RARE
+
+/datum/reagent/syndicateadrenals/on_mob_life(mob/living/M)
+ M.adjustStaminaLoss(-5*REM)
+ . = ..()
+
+/datum/reagent/syndicateadrenals/on_mob_metabolize(mob/living/M)
+ . = ..()
+ if(istype(M))
+ M.next_move_modifier *= 0.5
+ to_chat(M, "You feel an intense surge of energy rushing through your veins. ")
+
+/datum/reagent/syndicateadrenals/on_mob_end_metabolize(mob/living/M)
+ . = ..()
+ if(istype(M))
+ M.next_move_modifier *= 2
+ to_chat(M, "You feel as though the world around you is going faster. ")
+
+/datum/reagent/syndicateadrenals/overdose_start(mob/living/M)
+ to_chat(M, "You feel an intense pain in your chest... ")
+
+/datum/reagent/syndicateadrenals/overdose_process(mob/living/M)
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(!C.undergoing_cardiac_arrest())
+ C.set_heartattack(TRUE)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 819af8513f..c7ff3f01c9 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -11,7 +11,7 @@
name = "Consumable"
taste_description = "generic food"
taste_mult = 4
- value = 0.1
+ value = REAGENT_VALUE_VERY_COMMON
var/nutriment_factor = 1 * REAGENTS_METABOLISM
var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes
@@ -41,7 +41,7 @@
name = "Nutriment"
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
+ nutriment_factor = 10 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
var/brute_heal = 1
@@ -90,8 +90,8 @@
/datum/reagent/consumable/nutriment/vitamin
name = "Vitamin"
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
- value = 0.5
-
+ value = REAGENT_VALUE_COMMON
+ nutriment_factor = 15 * REAGENTS_METABOLISM //The are the best food for you!
brute_heal = 1
burn_heal = 1
@@ -105,9 +105,9 @@
description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying."
color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil)
taste_mult = 0.8
- value = 1
+ value = REAGENT_VALUE_COMMON
taste_description = "oil"
- nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own
+ nutriment_factor = 5 * REAGENTS_METABOLISM //Not very healthy on its own
metabolization_rate = 10 * REAGENTS_METABOLISM
var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world
var/boiling //Used in mob life to determine if the oil kills, and only on touch application
@@ -151,11 +151,11 @@
reagent_state = SOLID
color = "#FFFFFF" // rgb: 255, 255, 255
taste_mult = 1.5 // stop sugar drowning out other flavours
- nutriment_factor = 5 * REAGENTS_METABOLISM
+ nutriment_factor = 3 * REAGENTS_METABOLISM
metabolization_rate = 2 * REAGENTS_METABOLISM
overdose_threshold = 200 // Hyperglycaemic shock
taste_description = "sweetness"
- value = 1
+ value = REAGENT_VALUE_NONE
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
to_chat(M, "You go into hyperglycaemic shock! Lay off the twinkies! ")
@@ -177,21 +177,21 @@
/datum/reagent/consumable/soysauce
name = "Soysauce"
description = "A salty sauce made from the soy plant."
- nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#792300" // rgb: 121, 35, 0
taste_description = "umami"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/ketchup
name = "Ketchup"
description = "Ketchup, catsup, whatever. It's tomato paste."
- nutriment_factor = 5 * REAGENTS_METABOLISM
+ nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#731008" // rgb: 115, 16, 8
taste_description = "ketchup"
/datum/reagent/consumable/mustard
name = "Mustard"
description = "Mustard, mostly used on hotdogs, corndogs and burgers."
- nutriment_factor = 5 * REAGENTS_METABOLISM
+ nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#DDED26" // rgb: 221, 237, 38
taste_description = "mustard"
@@ -231,7 +231,7 @@
description = "A special oil that noticably chills the body. Extracted from Icepeppers and slimes."
color = "#8BA6E9" // rgb: 139, 166, 233
taste_description = "mint"
- value = 2
+ value = REAGENT_VALUE_COMMON
pH = 13 //HMM! I wonder
/datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M)
@@ -376,14 +376,13 @@
name = "Coco Powder"
description = "A fatty, bitter paste made from coco beans."
reagent_state = SOLID
- nutriment_factor = 5 * REAGENTS_METABOLISM
+ nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
taste_description = "bitterness"
/datum/reagent/consumable/hot_coco
name = "Hot Chocolate"
description = "Made with love! And coco beans."
- nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#660000" // rgb: 221, 202, 134
taste_description = "creamy chocolate"
glass_icon_state = "chocolateglass"
@@ -401,6 +400,7 @@
metabolization_rate = 0.2 * REAGENTS_METABOLISM
taste_description = "mushroom"
pH = 11
+ value = REAGENT_VALUE_COMMON
/datum/reagent/drug/mushroomhallucinogen/on_mob_life(mob/living/carbon/M)
M.slurring = max(M.slurring,50)
@@ -431,6 +431,7 @@
color = "#FEFEFE"
taste_description = "garlic"
metabolization_rate = 0.15 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/garlic/on_mob_life(mob/living/carbon/M)
if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit.
@@ -461,7 +462,7 @@
M.emote("scream")
if(prob(min(5, current_cycle)) && iscarbon(M))
var/mob/living/carbon/C
- C.vomit()
+ C.vomit()
if(INJECT)
if(prob(min(20, current_cycle)))
to_chat(M, "You feel like your veins are boiling! ")
@@ -470,10 +471,10 @@
..()
/datum/reagent/consumable/sprinkles
name = "Sprinkles"
- value = 3
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
color = "#FF00FF" // rgb: 255, 0, 255
taste_description = "childhood whimsy"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M)
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
@@ -485,15 +486,15 @@
name = "Peanut Butter"
description = "A popular food paste made from ground dry-roasted peanuts."
color = "#C29261"
- value = 3
- nutriment_factor = 15 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_UNCOMMON
+ nutriment_factor = 10 * REAGENTS_METABOLISM
taste_description = "peanuts"
/datum/reagent/consumable/cornoil
name = "Corn Oil"
description = "An oil derived from various types of corn."
- nutriment_factor = 20 * REAGENTS_METABOLISM
- value = 4
+ nutriment_factor = 12 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_UNCOMMON
color = "#302000" // rgb: 48, 32, 0
taste_description = "slime"
@@ -511,7 +512,7 @@
/datum/reagent/consumable/enzyme
name = "Universal Enzyme"
- value = 1
+ value = REAGENT_VALUE_COMMON
description = "A universal enzyme used in the preperation of certain chemicals and foods."
color = "#365E30" // rgb: 54, 94, 48
taste_description = "sweetness"
@@ -547,7 +548,6 @@
/datum/reagent/consumable/flour
name = "Flour"
- value = 0.5
description = "This is what you rub all over yourself to pretend to be a ghost."
reagent_state = SOLID
color = "#FFFFFF" // rgb: 0, 0, 0
@@ -564,19 +564,18 @@
name = "Cherry Jelly"
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
color = "#801E28" // rgb: 128, 30, 40
- value = 1
+ value = REAGENT_VALUE_COMMON
taste_description = "cherry"
/datum/reagent/consumable/bluecherryjelly
name = "Blue Cherry Jelly"
description = "Blue and tastier kind of cherry jelly."
color = "#00F0FF"
- value = 12
+ value = REAGENT_VALUE_UNCOMMON
taste_description = "blue cherry"
/datum/reagent/consumable/rice
name = "Rice"
- value = 0.5
description = "tiny nutritious grains"
reagent_state = SOLID
nutriment_factor = 3 * REAGENTS_METABOLISM
@@ -585,7 +584,7 @@
/datum/reagent/consumable/vanilla
name = "Vanilla Powder"
- value = 1
+ value = REAGENT_VALUE_UNCOMMON
description = "A fatty, bitter paste made from vanilla pods."
reagent_state = SOLID
nutriment_factor = 5 * REAGENTS_METABOLISM
@@ -594,7 +593,6 @@
/datum/reagent/consumable/eggyolk
name = "Egg Yolk"
- value = 1
description = "It's full of protein."
nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#FFB500"
@@ -602,14 +600,13 @@
/datum/reagent/consumable/corn_starch
name = "Corn Starch"
- value = 2
description = "A slippery solution."
color = "#f7f6e4"
taste_description = "slime"
/datum/reagent/consumable/corn_syrup
name = "Corn Syrup"
- value = 1
+ value = REAGENT_VALUE_UNCOMMON
description = "Decays into sugar."
color = "#fff882"
metabolization_rate = 3 * REAGENTS_METABOLISM
@@ -623,8 +620,8 @@
name = "honey"
description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties."
color = "#d3a308"
- value = 15
- nutriment_factor = 15 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_COMMON
+ nutriment_factor = 10 * REAGENTS_METABOLISM
metabolization_rate = 1 * REAGENTS_METABOLISM
taste_description = "sweetness"
@@ -651,6 +648,7 @@
color = "#DFDFDF"
value = 5
taste_description = "mayonnaise"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/tearjuice
name = "Tear Juice"
@@ -658,6 +656,7 @@
color = "#c0c9a0"
taste_description = "bitterness"
pH = 5
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(!istype(M))
@@ -694,8 +693,9 @@
name = "Stabilized Nutriment"
description = "A bioengineered protien-nutrient structure designed to decompose in high saturation. In layman's terms, it won't get you fat."
reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
+ nutriment_factor = 12 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M)
if(M.nutrition > NUTRITION_LEVEL_FULL - 25)
@@ -711,6 +711,7 @@
color = "#1d043d"
taste_description = "bitter mushroom"
pH = 12
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
@@ -731,6 +732,7 @@
color = "#b5a213"
taste_description = "tingling mushroom"
pH = 11.2
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/tinlux/reaction_mob(mob/living/M)
M.set_light(2)
@@ -745,6 +747,7 @@
nutriment_factor = 3 * REAGENTS_METABOLISM
taste_description = "fruity mushroom"
pH = 10.4
+ value = REAGENT_VALUE_RARE
/datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M)
if(prob(80))
@@ -805,11 +808,12 @@
/datum/reagent/consumable/caramel
name = "Caramel"
description = "Who would have guessed that heated sugar could be so delicious?"
- nutriment_factor = 10 * REAGENTS_METABOLISM
+ nutriment_factor = 4 * REAGENTS_METABOLISM
color = "#D98736"
taste_mult = 2
taste_description = "caramel"
reagent_state = SOLID
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/secretsauce
name = "secret sauce"
@@ -820,6 +824,7 @@
taste_mult = 100
can_synth = FALSE
pH = 6.1
+ value = REAGENT_VALUE_AMAZING
/datum/reagent/consumable/secretsauce/reaction_obj(obj/O, reac_volume)
//splashing any amount above or equal to 1u of secret sauce onto a piece of food turns its quality to 100
@@ -840,6 +845,7 @@
taste_mult = 6
taste_description = "smoke"
overdose_threshold = 25
+ value = REAGENT_VALUE_COMMON
/datum/reagent/consumable/char/overdose_process(mob/living/carbon/M)
if(prob(10))
@@ -852,3 +858,4 @@
color = "#78280A" // rgb: 120 40, 10
taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground.
taste_description = "smokey sweetness"
+ value = REAGENT_VALUE_COMMON
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index ecceb6e8bf..e4973dd2d5 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -7,8 +7,8 @@
/datum/reagent/medicine
name = "Medicine"
- value = 2
taste_description = "bitterness"
+ value = REAGENT_VALUE_VERY_COMMON //Low prices, spess medical companies are cheapstakes and products are taxed honk...
/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
current_cycle++
@@ -19,6 +19,7 @@
description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels."
pH = 8.4
color = "#82b8aa"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature > BODYTEMP_NORMAL)
@@ -33,6 +34,7 @@
color = "#ffffff"
can_synth = FALSE
taste_description = "badmins"
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
@@ -101,6 +103,7 @@
description = "Reduces drowsiness, hallucinations, and Histamine from body."
color = "#EC536D" // rgb: 236, 83, 109
pH = 5.2
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(M.drowsyness-5, 0)
@@ -131,6 +134,7 @@
color = "#0000C8"
taste_description = "sludge"
pH = 11
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M)
var/power = -0.00003 * (M.bodytemperature ** 2) + 3
@@ -152,6 +156,7 @@
taste_description = "muscle"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
pH = 13
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature < T0C)
@@ -167,6 +172,7 @@
color = "#f7832a"
taste_description = "spicy jelly"
pH = 12
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
@@ -198,7 +204,7 @@
overdose_threshold = 30
taste_description = "fish"
pH = 12.2
- value = 20
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M)
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
@@ -239,7 +245,13 @@
color = "#ffeac9"
metabolization_rate = 5 * REAGENTS_METABOLISM
overdose_threshold = 50
- value = 3
+
+/datum/reagent/medicine/silver_sulfadiazine/reaction_obj(obj/O, reac_volume)
+ if(istype(O, /obj/item/stack/medical/gauze))
+ var/obj/item/stack/medical/gauze/G = O
+ reac_volume = min((reac_volume / 10), G.amount)
+ new/obj/item/stack/medical/ointment(get_turf(G), reac_volume)
+ G.use(reac_volume)
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
@@ -277,7 +289,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 25
pH = 10.7
- value = 4
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M)
if(M.getFireLoss() > 25)
@@ -301,7 +313,6 @@
pH = 6.7
metabolization_rate = 5 * REAGENTS_METABOLISM
overdose_threshold = 50
- value = 3
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
@@ -317,6 +328,12 @@
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
..()
+/datum/reagent/medicine/styptic_powder/reaction_obj(obj/O, reac_volume)
+ if(istype(O, /obj/item/stack/medical/gauze))
+ var/obj/item/stack/medical/gauze/G = O
+ reac_volume = min((reac_volume / 10), G.amount)
+ new/obj/item/stack/medical/bruise_pack(get_turf(G), reac_volume)
+ G.use(reac_volume)
/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-2*REM, 0)
@@ -343,7 +360,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
var/last_added = 0
var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active
pH = 5.5
- value = 1
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
@@ -384,6 +400,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#6D6374"
metabolization_rate = 0.4 * REAGENTS_METABOLISM
pH = 2.6
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C)
C.hal_screwyhud = SCREWYHUD_HEALTHY
@@ -424,7 +441,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 11.5
metabolization_rate = 5 * REAGENTS_METABOLISM
overdose_threshold = 40
- value = 6
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M))
@@ -461,7 +478,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "ash"
pH = 5
- value = 1
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-2*REM, 0)
@@ -480,7 +496,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
pH = 2
- value = 5
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-0.5*REM, 0)
@@ -537,6 +553,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#003153" // RGB 0, 49, 83
metabolization_rate = 0.5 * REAGENTS_METABOLISM
pH = 8.9
+ value = REAGENT_VALUE_COMMON //uncraftable
/datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M)
if(M.radiation > 0)
@@ -550,6 +567,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#E6FFF0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
pH = 1 //One of the best buffers, NEVERMIND!
+ value = REAGENT_VALUE_UNCOMMON
var/healtoxinlover = FALSE
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M)
@@ -568,6 +586,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#91D865"
healtoxinlover = TRUE
pH = 12//invert
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/sal_acid
name = "Salicyclic Acid"
@@ -577,6 +596,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 25
pH = 2.1
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M)
@@ -688,6 +708,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#64FFE6"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
pH = 11.5
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M)
if(prob(10))
@@ -708,10 +729,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/morphine/on_mob_metabolize(mob/living/L)
..()
- L.ignore_slowdown(type)
+ L.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
/datum/reagent/medicine/morphine/on_mob_end_metabolize(mob/living/L)
- L.unignore_slowdown(type)
+ L.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
..()
/datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M)
@@ -803,6 +824,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 35
pH = 12
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M)
if(M.health < 0)
@@ -867,6 +889,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "magnets"
pH = 0
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.stat == DEAD)
@@ -990,14 +1013,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 60
pH = 8.7
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/L)
..()
- L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-0.5, blacklisted_movetypes=(FLYING|FLOATING))
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
/datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/L)
- L.remove_movespeed_modifier(type)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
..()
@@ -1154,6 +1178,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
reagent_state = LIQUID
color = "#91D865"
taste_description = "jelly"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1.5*REM, FALSE)
@@ -1169,6 +1194,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
reagent_state = SOLID
color = "#555555"
pH = 11
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-5*REM, FALSE) //A ton of healing - this is a 50 telecrystal investment.
@@ -1189,6 +1215,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
reagent_state = SOLID
color = "#555555"
pH = 11
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3*REM, FALSE) // hidden gold shh
@@ -1212,6 +1239,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
overdose_threshold = 30
taste_description = "jelly"
pH = 11.8
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1.5*REM, FALSE)
@@ -1234,6 +1262,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = rgb(255, 175, 0)
overdose_threshold = 25
pH = 11
+ value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already.
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3 * REM, FALSE)
@@ -1261,6 +1290,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
color = "#27870a"
metabolization_rate = 0.4 * REAGENTS_METABOLISM
pH = 4.3
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M)
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
@@ -1283,6 +1313,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
can_synth = FALSE
pH = 14
+ value = REAGENT_VALUE_AMAZING
/datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M)
M.heal_bodypart_damage(5,5)
@@ -1302,6 +1333,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed."
color = "#918e53"
overdose_threshold = 30
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
..()
@@ -1329,13 +1361,14 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
description = "Drastically increases movement speed, but deals toxin damage."
color = "#669153"
metabolization_rate = 1
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
..()
- L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING))
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
/datum/reagent/medicine/changelinghaste/on_mob_end_metabolize(mob/living/L)
- L.remove_movespeed_modifier(type)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
..()
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
@@ -1365,14 +1398,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/muscle_stimulant
name = "Muscle Stimulant"
description = "A potent chemical that allows someone under its influence to be at full physical ability even when under massive amounts of pain."
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/muscle_stimulant/on_mob_metabolize(mob/living/M)
. = ..()
- M.ignore_slowdown(type)
+ M.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
/datum/reagent/medicine/muscle_stimulant/on_mob_end_metabolize(mob/living/M)
. = ..()
- M.unignore_slowdown(type)
+ M.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
/datum/reagent/medicine/modafinil
name = "Modafinil"
@@ -1382,6 +1416,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.1 * REAGENTS_METABOLISM
overdose_threshold = 20 // with the random effects this might be awesome or might kill you at less than 10u (extensively tested)
taste_description = "salt" // it actually does taste salty
+ value = REAGENT_VALUE_RARE
var/overdose_progress = 0 // to track overdose progress
pH = 7.89
@@ -1448,6 +1483,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
pH = 9.12
+ value = REAGENT_VALUE_COMMON
/datum/reagent/medicine/psicodine/on_mob_add(mob/living/L)
..()
@@ -1480,6 +1516,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
reagent_state = SOLID
color = "#FFFFD0"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M)
M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented.
@@ -1494,6 +1531,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 50
taste_description = "numbing bitterness"
+ value = REAGENT_VALUE_RARE
/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I wanted a collection of small positive effects, this is as hard to obtain as coniine after all.
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index e66ebc5f20..5fb27bd074 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1,7 +1,7 @@
/datum/reagent/blood
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null)
name = "Blood"
- value = 1
+ value = REAGENT_VALUE_UNCOMMON // $$$ blood ""donations"" $$$
color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0
description = "Blood from some creature."
metabolization_rate = 5 //fast rate so it disappears fast.
@@ -140,8 +140,9 @@
data = list("donor"=null,"viruses"=null,"blood_DNA"="REPLICATED", "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
name = "Synthetic Blood"
description = "A synthetically produced imitation of blood."
- taste_description = "oily"
+ taste_description = "oil"
color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48
+ value = REAGENT_VALUE_NONE
/datum/reagent/blood/jellyblood
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
@@ -158,6 +159,7 @@
description = "This highly resembles blood, but it doesnt actually function like it, resembling more ketchup, with a more blood-like consistency."
taste_description = "sap" //Like tree sap?
pH = 7.45
+ value = REAGENT_VALUE_NONE
/datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M)
if(prob(10))
@@ -271,9 +273,9 @@
/datum/reagent/water/reaction_obj(obj/O, reac_volume)
O.extinguish()
O.acid_level = 0
- // Monkey cube
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
- var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
+ // cubes
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube))
+ var/obj/item/reagent_containers/food/snacks/cube/cube = O
cube.Expand()
// Dehydrated carp
@@ -387,6 +389,7 @@
description = "Something that shouldn't exist on this plane of existence."
taste_description = "suffering"
pH = 6.5
+ value = REAGENT_VALUE_RARE
/datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
@@ -423,6 +426,7 @@
name = "Hell Water"
description = "YOUR FLESH! IT BURNS!"
taste_description = "burning"
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/hellwater/on_mob_life(mob/living/carbon/M)
M.fire_stacks = min(5,M.fire_stacks + 3)
@@ -437,6 +441,7 @@
name = "Zelus Oil"
description = "Oil blessed by a greater being."
taste_description = "metallic oil"
+ value = REAGENT_VALUE_RARE
/datum/reagent/fuel/holyoil/on_mob_life(mob/living/carbon/M)
if(is_servant_of_ratvar(M))
@@ -475,6 +480,7 @@
name = "Godblood"
description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power."
overdose_threshold = 150
+ value = REAGENT_VALUE_RARE
/datum/reagent/lube
name = "Space Lube"
@@ -591,6 +597,7 @@
color = "#5EFF3B" //RGB: 94, 255, 59
metabolization_rate = INFINITY //So it instantly removes all of itself
taste_description = "slime"
+ value = REAGENT_VALUE_RARE
var/datum/species/race = /datum/species/human
var/mutationtext = "The pain subsides. You feel... human. "
@@ -750,6 +757,7 @@
color = "#5EFF3B" //RGB: 94, 255, 59
taste_description = "slime"
metabolization_rate = 0.2
+ value = REAGENT_VALUE_RARE
/datum/reagent/slime_toxin/on_mob_life(mob/living/carbon/human/H)
..()
@@ -786,6 +794,7 @@
color = "#5EFF3B" //RGB: 94, 255, 59
metabolization_rate = INFINITY
taste_description = "slime"
+ value = REAGENT_VALUE_RARE
/datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H)
..()
@@ -800,6 +809,7 @@
description = "An advanced corruptive toxin produced by slimes."
color = "#13BC5E" // rgb: 19, 188, 94
taste_description = "slime"
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
if(method != TOUCH)
@@ -811,6 +821,7 @@
color = "#5EFF3B" //RGB: 94, 255, 59
can_synth = FALSE
taste_description = "decay"
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE)
@@ -1034,6 +1045,14 @@
// +20% success propability on each step, useful while operating in less-than-perfect conditions
..()
+/datum/reagent/space_cleaner/sterilizine/reaction_obj(obj/O, reac_volume)
+ if(istype(O, /obj/item/stack/medical/gauze))
+ var/obj/item/stack/medical/gauze/G = O
+ reac_volume = min((reac_volume / 10), G.amount)
+ new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
+ G.use(reac_volume)
+
+
/datum/reagent/iron
name = "Iron"
description = "Pure iron is a metal."
@@ -1113,6 +1132,7 @@
color = "#0000CC"
taste_description = "fizzling blue"
pH = 12
+ value = REAGENT_VALUE_RARE
/datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
@@ -1239,6 +1259,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "acid"
pH = 2
+ value = REAGENT_VALUE_RARE
/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(3.33)
@@ -1290,6 +1311,7 @@
color = "#535E66" // rgb: 83, 94, 102
can_synth = FALSE
taste_description = "sludge"
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/nanomachines/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
@@ -1301,6 +1323,7 @@
color = "#535E66" // rgb: 83, 94, 102
can_synth = FALSE
taste_description = "sludge"
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
@@ -1313,6 +1336,7 @@
can_synth = FALSE
taste_description = "slime"
pH = 11
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
@@ -1340,6 +1364,7 @@
color = "#664B63" // rgb: 102, 75, 99
taste_description = "metal"
pH = 11.8
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/ammonia
name = "Ammonia"
@@ -1417,6 +1442,7 @@
metabolization_rate = 1.5 * REAGENTS_METABOLISM
color = "E1A116"
taste_description = "sourness"
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/stimulum/on_mob_metabolize(mob/living/L)
..()
@@ -1442,13 +1468,14 @@
color = "90560B"
taste_description = "burning"
pH = 2
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/nitryl/on_mob_metabolize(mob/living/L)
..()
- L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl)
/datum/reagent/nitryl/on_mob_end_metabolize(mob/living/L)
- L.remove_movespeed_modifier(type)
+ L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl)
..()
/////////////////////////Coloured Crayon Powder////////////////////////////
@@ -1463,6 +1490,7 @@
color = "#FFFFFF" // rgb: 207, 54, 0
taste_description = "the back of class"
no_mob_color = TRUE
+ value = REAGENT_VALUE_NONE
/datum/reagent/colorful_reagent/crayonpowder/New()
description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents."
@@ -1633,6 +1661,7 @@
color = "#FFFF00"
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
taste_description = "rainbows"
+ value = REAGENT_VALUE_RARE
var/no_mob_color = FALSE
/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
@@ -1662,6 +1691,7 @@
color = "#ff00dd"
var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
taste_description = "sourness"
+ value = REAGENT_VALUE_RARE
/datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
@@ -1677,6 +1707,7 @@
reagent_state = LIQUID
color = "#fac34b"
taste_description = "sourness"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
@@ -1694,6 +1725,7 @@
reagent_state = LIQUID
color = "#ffaf00"
taste_description = "sourness"
+ value = REAGENT_VALUE_RARE
/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
@@ -1726,6 +1758,7 @@
color = "#A70FFF"
taste_description = "dryness"
pH = 10.7
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume)
if(istype(T))
@@ -1863,6 +1896,7 @@
color = "#00ff80"
taste_description = "strange honey"
pH = 3
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M)
if(prob(2))
@@ -1884,6 +1918,7 @@
can_synth = FALSE
taste_description = "brains"
pH = 0.5
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume)
// Silently add the zombie infection organ to be activated upon death
@@ -1897,6 +1932,7 @@
description = "An experimental serum which causes rapid muscular growth in Hominidae. Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas."
reagent_state = LIQUID
color = "#00f041"
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/magillitis/on_mob_life(mob/living/carbon/M)
..()
@@ -1908,6 +1944,7 @@
description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant
color = "#ff0000"//strong red. rgb 255, 0, 0
var/current_size = RESIZE_DEFAULT_SIZE
+ value = REAGENT_VALUE_COMMON
taste_description = "bitterness" // apparently what viagra tastes like
/datum/reagent/growthserum/on_mob_life(mob/living/carbon/H)
@@ -1978,6 +2015,7 @@
color = "#AAAAAA55"
taste_description = "water"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_RARE
pH = 15
/datum/reagent/pax/on_mob_metabolize(mob/living/L)
@@ -1994,6 +2032,7 @@
color = "#FAFF00"
taste_description = "acrid cinnamon"
metabolization_rate = 0.2 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/L)
..()
@@ -2014,18 +2053,20 @@
name = "synth-pax"
description = "A colorless liquid that suppresses violence on the subjects. Cheaper to synthetize, but wears out faster than normal Pax."
metabolization_rate = 1.5 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_COMMON
/datum/reagent/peaceborg_confuse
name = "Dizzying Solution"
description = "Makes the target off balance and dizzy"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "dizziness"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/peaceborg_confuse/on_mob_life(mob/living/carbon/M)
if(M.confused < 6)
- M.confused = CLAMP(M.confused + 3, 0, 5)
+ M.confused = clamp(M.confused + 3, 0, 5)
if(M.dizziness < 6)
- M.dizziness = CLAMP(M.dizziness + 3, 0, 5)
+ M.dizziness = clamp(M.dizziness + 3, 0, 5)
if(prob(20))
to_chat(M, "You feel confused and disorientated.")
..()
@@ -2035,6 +2076,7 @@
description = "An extremely weak stamina-toxin that tires out the target. Completely harmless."
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "tiredness"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/peaceborg_tire/on_mob_life(mob/living/carbon/M)
var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS.
@@ -2050,6 +2092,7 @@
color = "#9A6750" //RGB: 154, 103, 80
taste_description = "inner peace"
can_synth = FALSE
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/tranquility/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
@@ -2060,6 +2103,7 @@
description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results."
color = "#FAEAFF"
taste_description = "synthetic catnip"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/moonsugar/on_mob_life(mob/living/carbon/M)
if(prob(20))
@@ -2076,6 +2120,7 @@
var/datum/dna/original_dna
var/reagent_ticks = 0
chemical_flags = REAGENT_INVISIBLE
+ value = REAGENT_VALUE_GLORIOUS
/datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C)
if(ishuman(C) && C.dna && data["desired_dna"])
@@ -2111,6 +2156,7 @@
taste_description = "grass"
description = "A colorless liquid that makes people more peaceful and felines more happy."
metabolization_rate = 1.75 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_COMMON
/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M)
if(prob(20))
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index 939d5c9707..67ff61610d 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -5,6 +5,7 @@
reagent_state = SOLID
color = "#550000"
taste_description = "sweet tasting metal"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
if(reac_volume >= 1)
@@ -21,13 +22,14 @@
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
color = "#808080" // rgb: 128, 128, 128
taste_description = "oil"
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/stabilizing_agent
name = "Stabilizing Agent"
description = "Keeps unstable chemicals stable. This does not work on everything."
reagent_state = LIQUID
color = "#FFFF00"
- value = 3
+ value = REAGENT_VALUE_VERY_COMMON
taste_description = "metal"
/datum/reagent/clf3
@@ -37,6 +39,7 @@
color = "#FFC8C8"
metabolization_rate = 4
taste_description = "burning"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/clf3/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(2)
@@ -79,13 +82,14 @@
reagent_state = LIQUID
color = "#5A64C8"
taste_description = "air and bitterness"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/liquid_dark_matter
name = "Liquid Dark Matter"
description = "Sucks everything into the detonation point."
reagent_state = LIQUID
color = "#210021"
- value = 10
+ value = REAGENT_VALUE_UNCOMMON
taste_description = "compressed bitterness"
/datum/reagent/blackpowder
@@ -93,9 +97,9 @@
description = "Explodes. Violently."
reagent_state = LIQUID
color = "#000000"
- value = 5
metabolization_rate = 0.05
taste_description = "salt"
+ value = REAGENT_VALUE_RARE
/datum/reagent/blackpowder/on_mob_life(mob/living/carbon/M)
..()
@@ -115,6 +119,7 @@
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "salt"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/smoke_powder
name = "Smoke Powder"
@@ -122,6 +127,7 @@
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "smoke"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/sonic_powder
name = "Sonic Powder"
@@ -129,6 +135,7 @@
reagent_state = LIQUID
color = "#C8C8C8"
taste_description = "loud noises"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/phlogiston
name = "Phlogiston"
@@ -136,6 +143,7 @@
reagent_state = LIQUID
color = "#FA00AF"
taste_description = "burning"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
M.adjust_fire_stacks(1)
@@ -156,8 +164,8 @@
description = "Very flammable."
reagent_state = LIQUID
color = "#FA00AF"
- value = 1
taste_description = "burning"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/napalm/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(1)
@@ -174,7 +182,7 @@
color = "#0000DC"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
-
+ value = REAGENT_VALUE_COMMON
/datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube
if(M.reagents.has_reagent(/datum/reagent/oxygen))
@@ -193,6 +201,7 @@
color = "#64FAC8"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "bitterness"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M)
if(M.reagents.has_reagent(/datum/reagent/oxygen))
@@ -208,6 +217,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
taste_description = "charged metal"
var/shock_timer = 0
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/teslium/on_mob_life(mob/living/carbon/M)
shock_timer++
@@ -242,6 +252,7 @@
reagent_state = LIQUID
color = "#A6FAFF55"
taste_description = "the inside of a fire extinguisher"
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume)
if (!istype(T))
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index bd79ed5fb8..3169d2d3aa 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -7,6 +7,7 @@
color = "#CF3600" // rgb: 207, 54, 0
taste_description = "bitterness"
taste_mult = 1.2
+ value = REAGENT_VALUE_COMMON //Encouraging people to mix toxins for reasons beyond harming each other or mixing reagents such as pen acid.
var/toxpwr = 1.5
/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
@@ -21,6 +22,7 @@
color = "#792300" // rgb: 121, 35, 0
toxpwr = 2.5
taste_description = "mushroom"
+ value = REAGENT_VALUE_UNCOMMON
pH = 13
/datum/reagent/toxin/mutagen
@@ -30,6 +32,7 @@
toxpwr = 0
taste_description = "slime"
taste_mult = 0.9
+ value = REAGENT_VALUE_VERY_COMMON
pH = 2.3
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
@@ -60,6 +63,7 @@
color = "#8228A0"
toxpwr = 3
pH = 4
+ value = REAGENT_VALUE_RARE //sheets are worth more
/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
if(holder.has_reagent(/datum/reagent/medicine/epinephrine))
@@ -92,6 +96,7 @@
toxpwr = 0
taste_description = "acid"
pH = 1.2
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C)
. = TRUE
@@ -114,6 +119,7 @@
taste_description = "slime"
taste_mult = 1.3
pH = 10
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M)
if(prob(10))
@@ -132,6 +138,7 @@
toxpwr = 0
taste_description = "mint"
pH = 8
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_FAT))
@@ -145,6 +152,7 @@
toxpwr = 2
taste_description = "fish"
pH = 12
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/zombiepowder
name = "Zombie Powder"
@@ -155,6 +163,7 @@
taste_description = "death"
var/fakedeath_active = FALSE
pH = 13
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/L)
..()
@@ -193,6 +202,7 @@
toxpwr = 0.8
taste_description = "death"
pH = 14.5
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/ghoulpowder/on_mob_metabolize(mob/living/L)
..()
@@ -214,6 +224,7 @@
toxpwr = 0
taste_description = "sourness"
pH = 11
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M)
M.hallucination += 5
@@ -226,6 +237,7 @@
toxpwr = 1
taste_mult = 1
pH = 2.7
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/structure/alien/weeds))
@@ -250,6 +262,7 @@
description = "A harmful toxic mixture to kill weeds. Do not ingest!"
color = "#4B004B" // rgb: 75, 0, 75
pH = 3
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/pestkiller
name = "Pest Killer"
@@ -257,6 +270,7 @@
color = "#4B004B" // rgb: 75, 0, 75
toxpwr = 1
pH = 3.2
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
..()
@@ -270,6 +284,7 @@
color = "#9ACD32"
toxpwr = 1
pH = 11
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C)
C.damageoverlaytemp = 60
@@ -284,6 +299,7 @@
toxpwr = 0.5
taste_description = "burning"
pH = 13
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(2)
@@ -323,6 +339,7 @@
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
pH = 2
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
@@ -340,6 +357,7 @@
color = "#5B2E0D" // rgb: 91, 46, 13
toxpwr = 0.5
pH = 4.2
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/toxin/teapowder
name = "Ground Tea Leaves"
@@ -348,6 +366,7 @@
color = "#7F8400" // rgb: 127, 132, 0
toxpwr = 0.5
pH = 4.9
+ value = REAGENT_VALUE_VERY_COMMON
/datum/reagent/toxin/mutetoxin //the new zombie powder.
name = "Mute Toxin"
@@ -367,6 +386,7 @@
color = "#6E2828"
data = 15
toxpwr = 0
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/staminatoxin/on_mob_life(mob/living/carbon/M)
M.adjustStaminaLoss(REM * data, 0)
@@ -381,6 +401,7 @@
color = "#787878"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 0
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M)
M.radiation += 4
@@ -394,6 +415,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
toxpwr = 0
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M)
if(prob(50))
@@ -441,6 +463,7 @@
color = "#F0FFF0"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M)
toxpwr = 0.2*volume
@@ -476,6 +499,7 @@
color = "#00B4FF"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1.25
+ value = REAGENT_VALUE_UNCOMMON
/datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -494,6 +518,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0.5
taste_description = "bad cooking"
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/condensed_cooking_oil
name = "Condensed Cooking Oil"
@@ -504,6 +529,7 @@
toxpwr = 0
taste_mult = -2
taste_description = "awful cooking"
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/condensed_cooking_oil/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -551,6 +577,7 @@
color = "#7F10C0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 2.5
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C)
if(prob(25))
@@ -582,6 +609,7 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0
taste_mult = 0 // undetectable, I guess?
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
@@ -598,6 +626,7 @@
color = "#6496FA"
metabolization_rate = 0.75 * REAGENTS_METABOLISM
toxpwr = 0
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
@@ -626,6 +655,7 @@
color = "#FFFFFF"
toxpwr = 0
metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/amanitin/on_mob_end_metabolize(mob/living/M)
var/toxdamage = current_cycle*3*REM
@@ -656,6 +686,7 @@
color = "#7DC3A0"
metabolization_rate = 0.06 * REAGENTS_METABOLISM
toxpwr = 1.75
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M)
M.losebreath += 5
@@ -670,6 +701,7 @@
overdose_threshold = 29
toxpwr = 0
taste_description = "vomit"
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C)
.=..()
@@ -693,6 +725,7 @@
color = "#191919"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 11)
@@ -708,6 +741,7 @@
color = "#C8C8C8" //RGB: 200, 200, 200
metabolization_rate = 0.2 * REAGENTS_METABOLISM
toxpwr = 0
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M)
if(ishuman(M))
@@ -726,6 +760,7 @@
metabolization_rate = 0.6 * REAGENTS_METABOLISM
toxpwr = 0.5
taste_description = "spinning"
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
@@ -752,6 +787,7 @@
metabolization_rate = 0.8 * REAGENTS_METABOLISM
toxpwr = 0.25
taste_description = "skewing"
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M)
/*
@@ -788,6 +824,7 @@
color = "#3C5133"
metabolization_rate = 0.08 * REAGENTS_METABOLISM
toxpwr = 0.15
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M)
var/remove_amt = 5
@@ -809,6 +846,7 @@
taste_description = "acid"
self_consuming = TRUE
pH = 2.75
+ value = REAGENT_VALUE_NONE
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
if(!istype(C))
@@ -840,6 +878,7 @@
color = "#5050FF"
toxpwr = 2
acidpwr = 42.0
+ value = REAGENT_VALUE_COMMON
/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(current_cycle/10, 0)
@@ -853,6 +892,7 @@
metabolization_rate = 0 //stays in the system until active.
var/actual_metaboliztion_rate = REAGENTS_METABOLISM
toxpwr = 0
+ value = REAGENT_VALUE_VERY_RARE
var/actual_toxpwr = 5
var/delay = 30
@@ -871,6 +911,7 @@
color = "#F0F8FF" // rgb: 240, 248, 255
toxpwr = 0
taste_description = "stillness"
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/mimesbane/on_mob_metabolize(mob/living/L)
ADD_TRAIT(L, TRAIT_EMOTEMUTE, type)
@@ -885,6 +926,7 @@
toxpwr = 0
taste_description = "bone hurting"
overdose_threshold = 20
+ value = REAGENT_VALUE_VERY_RARE //because it's very funny.
/datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M)
M.say("oof ouch my bones", forced = /datum/reagent/toxin/bonehurtingjuice)
@@ -944,6 +986,7 @@
toxpwr = 0
taste_description = "brain hurting"
metabolization_rate = 5
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/toxin/brainhurtingjuice/on_mob_life(mob/living/carbon/M)
if(prob(50))
@@ -962,6 +1005,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
taste_description = "tannin"
+ value = REAGENT_VALUE_RARE
/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M)
M.adjustOrganLoss(ORGAN_SLOT_HEART, 3)
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index 0b32952d20..9cf9acb424 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -105,7 +105,7 @@
if(St.purity < 1)
St.volume *= St.purity
St.purity = 1
- var/amount = CLAMP(0.002, 0, N.volume)
+ var/amount = clamp(0.002, 0, N.volume)
N.volume -= amount
St.data["grown_volume"] = St.data["grown_volume"] + added_volume
St.name = "[initial(St.name)] [round(St.data["grown_volume"], 0.1)]u colony"
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 2c8be10ace..8782d65f76 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -195,7 +195,7 @@
return
holder.remove_reagent(/datum/reagent/sorium, multiplier*4)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(multiplier*4), 1, 6)
+ var/range = clamp(sqrt(multiplier*4), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/sorium_vortex
@@ -206,7 +206,7 @@
/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(multiplier), 1, 6)
+ var/range = clamp(sqrt(multiplier), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/liquid_dark_matter
@@ -220,7 +220,7 @@
return
holder.remove_reagent(/datum/reagent/liquid_dark_matter, multiplier*3)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(multiplier*3), 1, 6)
+ var/range = clamp(sqrt(multiplier*3), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/ldm_vortex
@@ -231,7 +231,7 @@
/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(multiplier/2), 1, 6)
+ var/range = clamp(sqrt(multiplier/2), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/flash_powder
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index eb473950d5..ead47e2a42 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -42,7 +42,7 @@
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder)
for(var/i in 1 to 3)
- new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom))
+ new /obj/item/reagent_containers/food/snacks/cube/monkey(get_turf(holder.my_atom))
..()
//Green
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 89de7c409d..f326b94e44 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -185,7 +185,7 @@
START_PROCESSING(SSobj, src)
else if((reagents.pH < -3) || (reagents.pH > 17))
visible_message("[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform! ")
- reagents.pH = CLAMP(reagents.pH, -3, 17)
+ reagents.pH = clamp(reagents.pH, -3, 17)
container_HP -= 1
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 62ca5d658e..7fea8250d9 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -66,7 +66,7 @@
/obj/item/reagent_containers/spray/proc/spray(atom/A)
- var/range = CLAMP(get_dist(src, A), 1, current_range)
+ var/range = clamp(get_dist(src, A), 1, current_range)
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
D.create_reagents(amount_per_transfer_from_this, NONE, NO_REAGENTS_VALUE)
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index b8957775b1..1a2742d2a6 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -180,7 +180,7 @@
///Used by update_icon() and update_overlays()
/obj/item/reagent_containers/syringe/proc/get_rounded_vol()
if(reagents && reagents.total_volume)
- return CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15)
+ return clamp(round((reagents.total_volume / volume * 15),5), 1, 15)
else
return 0
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index d6ad1bf042..b47f0de032 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -57,7 +57,7 @@
return ..()
/obj/structure/bigDelivery/relay_container_resist(mob/living/user, obj/O)
- if(ismovableatom(loc))
+ if(ismovable(loc))
var/atom/movable/AM = loc //can't unwrap the wrapped container if it's inside something.
AM.relay_container_resist(user, O)
return
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index f3ac118134..cfb6d92723 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -36,6 +36,9 @@ other types of metals and chemistry for reagents).
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
var/departmental_flags = ALL //bitflags for deplathes.
var/list/datum/techweb_node/unlocked_by = list()
+ ///minimum and security levels the design can be printed on. Currently only available for rnd production machinery and mechfab.
+ var/min_security_level = SEC_LEVEL_GREEN
+ var/max_security_level = SEC_LEVEL_DELTA
var/research_icon //Replaces the item icon in the research console
var/research_icon_state
var/icon_cache
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index e82dffbe07..2cf9df6d50 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -2,6 +2,9 @@
///////Biogenerator Designs ///////
///////////////////////////////////
+//Please be wary to not add inorganic items to the results such as generic glass bottles and metal.
+//as they kind of defeat the design of this feature.
+
/datum/design/milk
name = "10u Milk"
id = "milk"
@@ -18,22 +21,6 @@
make_reagents = list(/datum/reagent/consumable/cream = 10)
category = list("initial","Food")
-/datum/design/milk_carton
- name = "Milk Carton"
- id = "milk_carton"
- build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 100)
- build_path = /obj/item/reagent_containers/food/condiment/milk
- category = list("initial","Food")
-
-/datum/design/cream_carton
- name = "Cream Carton"
- id = "cream_carton"
- build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 300)
- build_path = /obj/item/reagent_containers/food/drinks/bottle/cream
- category = list("initial","Food")
-
/datum/design/black_pepper
name = "10u Black Pepper"
id = "black_pepper"
@@ -42,15 +29,6 @@
make_reagents = list(/datum/reagent/consumable/blackpepper = 10)
category = list("initial","Food")
-/datum/design/pepper_mill
- name = "Pepper Mill"
- id = "pepper_mill"
- build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 50)
- build_path = /obj/item/reagent_containers/food/condiment/peppermill
- make_reagents = list()
- category = list("initial","Food")
-
/datum/design/enzyme
name = "10u Universal Enzyme"
id = "enzyme"
@@ -59,20 +37,12 @@
make_reagents = list(/datum/reagent/consumable/enzyme = 10)
category = list("initial","Food")
-/datum/design/flour_sack
- name = "Flour Sack"
- id = "flour_sack"
- build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 150)
- build_path = /obj/item/reagent_containers/food/condiment/flour
- category = list("initial","Food")
-
/datum/design/monkey_cube
name = "Monkey Cube"
id = "mcube"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 250)
- build_path = /obj/item/reagent_containers/food/snacks/monkeycube
+ build_path = /obj/item/reagent_containers/food/snacks/cube/monkey
category = list("initial", "Food")
/datum/design/smeat
@@ -84,43 +54,43 @@
category = list("initial", "Food")
/datum/design/ez_nut
- name = "E-Z Nutrient"
+ name = "10u E-Z Nutrient"
id = "ez_nut"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 10)
- build_path = /obj/item/reagent_containers/glass/bottle/nutrient/ez
+ materials = list(/datum/material/biomass = 2)
+ make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/l4z_nut
- name = "Left 4 Zed"
+ name = "10u Left 4 Zed"
id = "l4z_nut"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 20)
- build_path = /obj/item/reagent_containers/glass/bottle/nutrient/l4z
+ materials = list(/datum/material/biomass = 4)
+ make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/rh_nut
- name = "Robust Harvest"
+ name = "10u Robust Harvest"
id = "rh_nut"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 25)
- build_path = /obj/item/reagent_containers/glass/bottle/nutrient/rh
+ materials = list(/datum/material/biomass = 5)
+ make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/weed_killer
name = "Weed Killer"
id = "weed_killer"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 50)
- build_path = /obj/item/reagent_containers/glass/bottle/killer/weedkiller
+ materials = list(/datum/material/biomass = 10)
+ make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 10)
category = list("initial","Botany Chemicals")
/datum/design/pest_spray
name = "Pest Killer"
id = "pest_spray"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 50)
- build_path = /obj/item/reagent_containers/glass/bottle/killer/pestkiller
+ materials = list(/datum/material/biomass = 10)
+ make_reagents = list(/datum/reagent/toxin/pestkiller = 10)
category = list("initial","Botany Chemicals")
/datum/design/ammonia
@@ -139,13 +109,13 @@
make_reagents = list(/datum/reagent/saltpetre = 10)
category = list("initial","Botany Chemicals")
-/datum/design/botany_bottle
- name = "Empty Bottle"
- id = "botany_bottle"
+/datum/design/empty_carton
+ name = "Small Empty Carton Box"
+ id = "empty_carton"
build_type = BIOGENERATOR
- materials = list(/datum/material/biomass = 5)
- build_path = /obj/item/reagent_containers/glass/bottle/nutrient/empty
- category = list("initial", "Botany Chemicals")
+ materials = list(/datum/material/biomass = 15)
+ build_path = /obj/item/reagent_containers/food/drinks/bottle/bio_carton
+ category = list("initial", "Organic Materials")
/datum/design/cloth
name = "Roll of Cloth"
diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm
index c72ee4fb8c..b157d0c349 100644
--- a/code/modules/research/designs/nanite_designs.dm
+++ b/code/modules/research/designs/nanite_designs.dm
@@ -529,7 +529,6 @@
////////////////////NANITE PROTOCOLS//////////////////////////////////////
//Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories
//Because of this, Protocols was getting cut down to "P", so i had to add some padding
-/*
/datum/design/nanites/kickstart
name = "Kickstart Protocol"
desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation."
@@ -557,4 +556,10 @@
id = "offline_nanites"
program_type = /datum/nanite_program/protocol/offline
category = list("Protocols_Nanites")
-*/
+
+/datum/design/nanites/synergy
+ name = "Synergy Protocol"
+ desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume."
+ id = "synergy_nanites"
+ program_type = /datum/nanite_program/protocol/synergy
+ category = list("Protocols_Nanites")
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 42b8a4dcbb..cc02e271f9 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -101,7 +101,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if(!istype(loaded_item) || !istype(linked_console))
return FALSE
- if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID)
+ if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID && id != RESEARCH_DEEP_SCAN_ID)
var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id)
if(!istype(TN))
return FALSE
@@ -125,7 +125,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if(destroy_item(loaded_item))
linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(TN.id), dpath)
- else
+ else if(id == RESEARCH_MATERIAL_RECLAMATION_ID)
var/list/point_value = techweb_item_point_check(loaded_item)
if(linked_console.stored_research.deconstructed_items[loaded_item.type])
point_value = list()
@@ -143,6 +143,15 @@ Note: Must be placed within 3 tiles of the R&D Console
if(destroy_item(loaded_item))
linked_console.stored_research.add_point_list(point_value)
linked_console.stored_research.deconstructed_items[loaded_type] = point_value
+ else if(id == RESEARCH_DEEP_SCAN_ID)
+ var/list/return_list = list()
+ . = SEND_SIGNAL(loaded_item, COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN, src, user, return_list)
+ flick("d_analyzer_process", src)
+ if(. & COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION)
+ say("New information uncovered from item deep scan[length(return_list)? ": [english_list(return_list)]" : ""].")
+ else
+ say("Item deep scan uncovered no new information.")
+
return TRUE
/obj/machinery/rnd/destructive_analyzer/proc/unload_item()
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 41ed6a556e..0550fa9334 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -3,6 +3,7 @@
desc = "Makes researched and prototype items with materials and energy."
layer = BELOW_OBJ_LAYER
var/consoleless_interface = TRUE //Whether it can be used without a console.
+ var/offstation_security_levels = TRUE
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
var/list/categories = list()
var/datum/component/remote_materials/materials
@@ -98,6 +99,7 @@
var/obj/item/I = O
I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this.
I.set_custom_materials(matlist.Copy())
+ I.rnd_crafted(src)
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
@@ -134,6 +136,12 @@
if(D.build_type && !(D.build_type & allowed_buildtypes))
say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!")
return FALSE
+ if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)))
+ if(GLOB.security_level < D.min_security_level)
+ say("Minimum security alert level required to print this design not met, please contact the command staff.")
+ return FALSE
+ if(GLOB.security_level > D.max_security_level)
+ say("Exceeded maximum security alert level required to print this design, please contact the command staff.")
if(!materials.mat_container)
say("No connection to material storage, please contact the quartermaster.")
return FALSE
@@ -141,7 +149,7 @@
say("Mineral access is on hold, please contact the quartermaster.")
return FALSE
var/power = 1000
- amount = CLAMP(amount, 1, 50)
+ amount = clamp(amount, 1, 50)
for(var/M in D.materials)
power += round(D.materials[M] * amount / 35)
power = min(3000, power)
@@ -275,15 +283,26 @@
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
c = min(c,t)
- if (c >= 1)
+ var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))
+ var/sec_text = ""
+ if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
+ sec_text = " (Allowed security levels: "
+ for(var/n in D.min_security_level to D.max_security_level)
+ sec_text += NUM2SECLEVEL(n)
+ if(n + 1 <= D.max_security_level)
+ sec_text += ", "
+ sec_text += ")"
+
+ clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
+ if (c >= 1 && clearance)
l += "[D.name] [RDSCREEN_NOBREAK]"
if(c >= 5)
l += "x5 [RDSCREEN_NOBREAK]"
if(c >= 10)
l += "x10 [RDSCREEN_NOBREAK]"
- l += "[temp_material][RDSCREEN_NOBREAK]"
+ l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
else
- l += "[D.name] [temp_material][RDSCREEN_NOBREAK]"
+ l += "[D.name] [temp_material][sec_text][RDSCREEN_NOBREAK]"
l += ""
return l
diff --git a/code/modules/research/machinery/circuit_imprinter.dm b/code/modules/research/machinery/circuit_imprinter.dm
index 948dad61db..661ebe31c0 100644
--- a/code/modules/research/machinery/circuit_imprinter.dm
+++ b/code/modules/research/machinery/circuit_imprinter.dm
@@ -30,3 +30,9 @@
total_rating += M.rating * 2 //There is only one.
total_rating = max(1, total_rating)
efficiency_coeff = total_rating
+ var/obj/item/circuitboard/machine/circuit_imprinter/C = circuit
+ offstation_security_levels = C.offstation_security_levels
+
+/obj/machinery/rnd/production/circuit_imprinter/offstation
+ offstation_security_levels = FALSE
+ circuit = /obj/item/circuitboard/machine/circuit_imprinter/offstation
diff --git a/code/modules/research/machinery/protolathe.dm b/code/modules/research/machinery/protolathe.dm
index 684f27ccad..b1b31a279c 100644
--- a/code/modules/research/machinery/protolathe.dm
+++ b/code/modules/research/machinery/protolathe.dm
@@ -23,3 +23,12 @@
/obj/machinery/rnd/production/protolathe/disconnect_console()
linked_console.linked_lathe = null
..()
+
+/obj/machinery/rnd/production/protolathe/calculate_efficiency()
+ . = ..()
+ var/obj/item/circuitboard/machine/protolathe/C = circuit
+ offstation_security_levels = C.offstation_security_levels
+
+/obj/machinery/rnd/production/protolathe/offstation
+ offstation_security_levels = FALSE
+ circuit = /obj/item/circuitboard/machine/protolathe/offstation
diff --git a/code/modules/research/nanites/extra_settings/number.dm b/code/modules/research/nanites/extra_settings/number.dm
index 6e63ae067e..75489635f5 100644
--- a/code/modules/research/nanites/extra_settings/number.dm
+++ b/code/modules/research/nanites/extra_settings/number.dm
@@ -16,7 +16,7 @@
value = text2num(value)
if(!value || !isnum(value))
return
- src.value = CLAMP(value, min, max)
+ src.value = clamp(value, min, max)
/datum/nanite_extra_setting/number/get_copy()
return new /datum/nanite_extra_setting/number(value, min, max, unit)
diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm
index 0750d3d268..4650af5c80 100644
--- a/code/modules/research/nanites/nanite_chamber_computer.dm
+++ b/code/modules/research/nanites/nanite_chamber_computer.dm
@@ -72,14 +72,14 @@
if("set_safety")
var/threshold = text2num(params["value"])
if(!isnull(threshold))
- chamber.set_safety(CLAMP(round(threshold, 1),0,500))
+ chamber.set_safety(clamp(round(threshold, 1),0,500))
playsound(src, "terminal_type", 25, FALSE)
chamber.occupant.investigate_log("'s nanites' safety threshold was set to [threshold] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES)
. = TRUE
if("set_cloud")
var/cloud_id = text2num(params["value"])
if(!isnull(cloud_id))
- chamber.set_cloud(CLAMP(round(cloud_id, 1),0,100))
+ chamber.set_cloud(clamp(round(cloud_id, 1),0,100))
playsound(src, "terminal_type", 25, FALSE)
chamber.occupant.investigate_log("'s nanites' cloud id was set to [cloud_id] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES)
. = TRUE
diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm
index 439d0c5750..f9d4d71b01 100644
--- a/code/modules/research/nanites/nanite_cloud_controller.dm
+++ b/code/modules/research/nanites/nanite_cloud_controller.dm
@@ -174,7 +174,7 @@
var/cloud_id = new_backup_id
if(!isnull(cloud_id))
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE)
- cloud_id = CLAMP(round(cloud_id, 1),1,100)
+ cloud_id = clamp(round(cloud_id, 1),1,100)
generate_backup(cloud_id, usr)
. = TRUE
if("delete_backup")
diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm
index ea4392f236..47ee2447d2 100644
--- a/code/modules/research/nanites/nanite_program_hub.dm
+++ b/code/modules/research/nanites/nanite_program_hub.dm
@@ -21,7 +21,7 @@
list(name = "Augmentation Nanites"),
list(name = "Suppression Nanites"),
list(name = "Weaponized Nanites"),
- //list(name = "Protocols") B.E.P.I.S Content, which we dont have
+ list(name = "Protocols") //Moved to default techweb from B.E.P.I.S. research, for now
)
/obj/machinery/nanite_program_hub/Initialize()
diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm
index d81880c6d9..5315a7a507 100644
--- a/code/modules/research/nanites/nanite_programmer.dm
+++ b/code/modules/research/nanites/nanite_programmer.dm
@@ -86,13 +86,13 @@
var/target_code = params["target_code"]
switch(target_code)
if("activation")
- program.activation_code = CLAMP(round(new_code, 1),0,9999)
+ program.activation_code = clamp(round(new_code, 1),0,9999)
if("deactivation")
- program.deactivation_code = CLAMP(round(new_code, 1),0,9999)
+ program.deactivation_code = clamp(round(new_code, 1),0,9999)
if("kill")
- program.kill_code = CLAMP(round(new_code, 1),0,9999)
+ program.kill_code = clamp(round(new_code, 1),0,9999)
if("trigger")
- program.trigger_code = CLAMP(round(new_code, 1),0,9999)
+ program.trigger_code = clamp(round(new_code, 1),0,9999)
. = TRUE
if("set_extra_setting")
program.set_extra_setting(params["target_setting"], params["value"])
@@ -102,7 +102,7 @@
var/timer = text2num(params["delay"])
if(!isnull(timer))
playsound(src, "terminal_type", 25, FALSE)
- timer = CLAMP(round(timer, 1), 0, 3600)
+ timer = clamp(round(timer, 1), 0, 3600)
timer *= 10 //convert to deciseconds
program.timer_restart = timer
. = TRUE
@@ -110,7 +110,7 @@
var/timer = text2num(params["delay"])
if(!isnull(timer))
playsound(src, "terminal_type", 25, FALSE)
- timer = CLAMP(round(timer, 1), 0, 3600)
+ timer = clamp(round(timer, 1), 0, 3600)
timer *= 10 //convert to deciseconds
program.timer_shutdown = timer
. = TRUE
@@ -118,7 +118,7 @@
var/timer = text2num(params["delay"])
if(!isnull(timer))
playsound(src, "terminal_type", 25, FALSE)
- timer = CLAMP(round(timer, 1), 0, 3600)
+ timer = clamp(round(timer, 1), 0, 3600)
timer *= 10 //convert to deciseconds
program.timer_trigger = timer
. = TRUE
@@ -126,7 +126,7 @@
var/timer = text2num(params["delay"])
if(!isnull(timer))
playsound(src, "terminal_type", 25, FALSE)
- timer = CLAMP(round(timer, 1), 0, 3600)
+ timer = clamp(round(timer, 1), 0, 3600)
timer *= 10 //convert to deciseconds
program.timer_trigger_delay = timer
. = TRUE
diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm
index 72f969a77e..faa81be0a5 100644
--- a/code/modules/research/nanites/nanite_programs.dm
+++ b/code/modules/research/nanites/nanite_programs.dm
@@ -290,7 +290,7 @@
qdel(src)
///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once.
-//Currently unused due to us lacking the B.E.P.I.S
+//Moved to being 'normally' researched due to lack of B.E.P.I.S.
/datum/nanite_program/protocol
name = "Nanite Protocol"
var/protocol_class = NONE
diff --git a/code/modules/research/nanites/nanite_programs/protocols.dm b/code/modules/research/nanites/nanite_programs/protocols.dm
index 73976abe09..3830e7c8ba 100644
--- a/code/modules/research/nanites/nanite_programs/protocols.dm
+++ b/code/modules/research/nanites/nanite_programs/protocols.dm
@@ -105,3 +105,14 @@
/datum/nanite_program/protocol/offline/active_effect()
nanites.adjust_nanites(null, boost)
+
+/datum/nanite_program/protocol/synergy
+ name = "Synergy Protocol"
+ desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume."
+ use_rate = 0
+ rogue_types = list(/datum/nanite_program/necrotic)
+ protocol_class = NANITE_PROTOCOL_REPLICATION
+ var/max_boost = 2 //The maximum boost this program applies to the nanite replication, multiplied with the current nanite 'saturation' percentage
+
+/datum/nanite_program/protocol/synergy/active_effect()
+ nanites.adjust_nanites(null, round(max_boost * (nanites.nanite_volume / nanites.max_nanites), 0.1))
diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm
index bd2b9618de..ae0d8d35aa 100644
--- a/code/modules/research/nanites/nanite_programs/weapon.dm
+++ b/code/modules/research/nanites/nanite_programs/weapon.dm
@@ -84,7 +84,7 @@
/datum/nanite_program/explosive/on_trigger(comm_message)
host_mob.visible_message("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow... ",\
"You start emitting a high-pitched buzzing, and your skin begins to glow... ")
- addtimer(CALLBACK(src, .proc/boom), CLAMP((nanites.nanite_volume * 0.35), 25, 150))
+ addtimer(CALLBACK(src, .proc/boom), clamp((nanites.nanite_volume * 0.35), 25, 150))
/datum/nanite_program/explosive/proc/boom()
var/nanite_amount = nanites.nanite_volume
diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm
index 71aecc8f2c..0d9361b534 100644
--- a/code/modules/research/nanites/nanite_remote.dm
+++ b/code/modules/research/nanites/nanite_remote.dm
@@ -106,7 +106,7 @@
return
var/new_code = text2num(params["code"])
if(!isnull(new_code))
- new_code = CLAMP(round(new_code, 1),0,9999)
+ new_code = clamp(round(new_code, 1),0,9999)
code = new_code
. = TRUE
if("set_relay_code")
@@ -114,7 +114,7 @@
return
var/new_code = text2num(params["code"])
if(!isnull(new_code))
- new_code = CLAMP(round(new_code, 1),0,9999)
+ new_code = clamp(round(new_code, 1),0,9999)
relay_code = new_code
. = TRUE
if("update_name")
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index be1b9460b0..4c29d72987 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -47,6 +47,9 @@ Nothing else in the console has ID requirements.
var/research_control = TRUE
+ /// Long action cooldown to prevent spam
+ var/last_long_action = 0
+
/obj/machinery/computer/rdconsole/production
circuit = /obj/item/circuitboard/computer/rdconsole/production
research_control = FALSE
@@ -301,15 +304,26 @@ Nothing else in the console has ID requirements.
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
c = min(c,t)
- if (c >= 1)
+ var/clearance = !(linked_lathe.obj_flags & EMAGGED) && (linked_lathe.offstation_security_levels || is_station_level(linked_lathe.z))
+ var/sec_text = ""
+ if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
+ sec_text = " (Allowed security levels: "
+ for(var/n in D.min_security_level to D.max_security_level)
+ sec_text += NUM2SECLEVEL(n)
+ if(n + 1 <= D.max_security_level)
+ sec_text += ", "
+ sec_text += ")"
+
+ clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
+ if (c >= 1 && clearance)
l += "[D.name] [RDSCREEN_NOBREAK]"
if(c >= 5)
l += "x5 [RDSCREEN_NOBREAK]"
if(c >= 10)
l += "x10 [RDSCREEN_NOBREAK]"
- l += "[temp_material][RDSCREEN_NOBREAK]"
+ l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
else
- l += "[D.name] [temp_material][RDSCREEN_NOBREAK]"
+ l += "[D.name] [temp_material][sec_text][RDSCREEN_NOBREAK]"
l += ""
l += ""
return l
@@ -572,10 +586,8 @@ Nothing else in the console has ID requirements.
l += "[icon2html(linked_destroy.loaded_item, usr)] [linked_destroy.loaded_item.name] Eject
[RDSCREEN_NOBREAK]"
l += "Select a node to boost by deconstructing this item. This item can boost:"
- var/anything = FALSE
var/list/boostable_nodes = techweb_item_boost_check(linked_destroy.loaded_item)
for(var/id in boostable_nodes)
- anything = TRUE
var/list/worth = boostable_nodes[id]
var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id)
@@ -609,7 +621,6 @@ Nothing else in the console has ID requirements.
// point deconstruction and material reclamation use the same ID to prevent accidentally missing the points
var/list/point_values = techweb_item_point_check(linked_destroy.loaded_item)
if(point_values)
- anything = TRUE
l += "[RDSCREEN_NOBREAK]"
if (stored_research.deconstructed_items[linked_destroy.loaded_item.type])
l += "Point Deconstruction "
@@ -625,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 += ""
l += ""
return l
@@ -915,6 +924,9 @@ Nothing else in the console has ID requirements.
screen = RDSCREEN_MENU
say("Ejecting Technology Disk")
if(ls["deconstruct"])
+ if((last_long_action + 1 SECONDS) > world.time)
+ return
+ last_long_action = world.time
if(QDELETED(linked_destroy))
say("No Destructive Analyzer Linked!")
return
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 24b9ccf81c..002bb3d64b 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -957,6 +957,14 @@
design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
+/datum/techweb_node/nanite_replication_protocols
+ id = "nanite_replication_protocols"
+ display_name = "Nanite Replication Protocols"
+ description = "Advanced behaviours that allow nanites to exploit certain circumstances to replicate faster."
+ prereq_ids = list("nanite_smart")
+ design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites","offline_nanites","synergy_nanites")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
+
////////////////////////Alien technology////////////////////////
/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
id = "alientech"
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 95d6c49529..e153176cbe 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -191,7 +191,7 @@
alert_type = /obj/screen/alert/status_effect/bloodchill
/datum/status_effect/bloodchill/on_apply()
- owner.add_movespeed_modifier("bloodchilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
return ..()
/datum/status_effect/bloodchill/tick()
@@ -199,7 +199,7 @@
owner.adjustFireLoss(2)
/datum/status_effect/bloodchill/on_remove()
- owner.remove_movespeed_modifier("bloodchilled")
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
return ..()
/obj/screen/alert/status_effect/bloodchill
@@ -213,7 +213,7 @@
alert_type = /obj/screen/alert/status_effect/bonechill
/datum/status_effect/bonechill/on_apply()
- owner.add_movespeed_modifier("bonechilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
return ..()
/datum/status_effect/bonechill/tick()
@@ -223,7 +223,7 @@
owner.adjust_bodytemperature(-10)
/datum/status_effect/bonechill/on_remove()
- owner.remove_movespeed_modifier("bonechilled")
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
return ..()
/obj/screen/alert/status_effect/bonechill
@@ -385,11 +385,11 @@ datum/status_effect/rebreathing/tick()
duration = 30
/datum/status_effect/tarfoot/on_apply()
- owner.add_movespeed_modifier(MOVESPEED_ID_TARFOOT, update=TRUE, priority=100, multiplicative_slowdown=0.5, blacklisted_movetypes=(FLYING|FLOATING))
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
return ..()
/datum/status_effect/tarfoot/on_remove()
- owner.remove_movespeed_modifier(MOVESPEED_ID_TARFOOT)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
return ..()
/datum/status_effect/spookcookie
@@ -624,9 +624,9 @@ datum/status_effect/stabilized/blue/on_remove()
O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
O.acid_level = 0
// Monkey cube
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube))
to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand! ")
- var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O
+ var/obj/item/reagent_containers/food/snacks/cube/cube = O
cube.Expand()
// Dehydrated carp
@@ -707,15 +707,15 @@ datum/status_effect/stabilized/blue/on_remove()
/datum/status_effect/stabilized/sepia/tick()
if(prob(50) && mod > -1)
mod--
- owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1)
else if(mod < 1)
mod++
// yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
- owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=0, blacklisted_movetypes=(FLYING|FLOATING))
+ owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
return ..()
/datum/status_effect/stabilized/sepia/on_remove()
- owner.remove_movespeed_modifier(MOVESPEED_ID_SEPIA)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia)
return ..()
/datum/status_effect/stabilized/cerulean
@@ -777,11 +777,11 @@ datum/status_effect/stabilized/blue/on_remove()
colour = "red"
/datum/status_effect/stabilized/red/on_apply()
- owner.ignore_slowdown("slimestatus")
- return ..()
+ . = ..()
+ owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
/datum/status_effect/stabilized/red/on_remove()
- owner.unignore_slowdown("slimestatus")
+ owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
return ..()
/datum/status_effect/stabilized/green
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index bec2c2c1ae..ac9d2e58c5 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -53,7 +53,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/grey
colour = "grey"
- itempath = /obj/item/reagent_containers/food/snacks/monkeycube
+ itempath = /obj/item/reagent_containers/food/snacks/cube/monkey
itemamount = 5
/obj/item/slimecross/industrial/orange
diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
index 2f6ca9555a..3662f45355 100644
--- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm
+++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
@@ -19,14 +19,14 @@ Reproductive extracts:
return
if(istype(O, /obj/item/storage/bag/bio))
var/list/inserted = list()
- SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted)
+ SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/cube/monkey, src, 1, null, null, user, inserted)
if(inserted.len)
- var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1]
+ var/obj/item/reagent_containers/food/snacks/cube/monkey/M = inserted[1]
if(istype(M))
eat_cube(M, user)
else
to_chat(user, "There are no monkey cubes in the bio bag! ")
- if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(O,/obj/item/reagent_containers/food/snacks/cube/monkey))
eat_cube(O, user)
if(cubes_eaten >= 3)
var/cores = rand(1,4)
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 5492e9bc38..ef9c751d57 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -146,7 +146,7 @@
else
to_chat(user, "[src] already has the contents of [O] installed! ")
return
- if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
+ if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
monkeys++
to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored. ")
qdel(O)
@@ -155,7 +155,7 @@
var/obj/item/storage/P = O
var/loaded = FALSE
for(var/obj/G in P.contents)
- if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube))
+ if(istype(G, /obj/item/reagent_containers/food/snacks/cube/monkey))
loaded = TRUE
monkeys++
qdel(G)
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index a346cd697f..573a735f98 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -83,7 +83,7 @@
/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
switch(activation_type)
if(SLIME_ACTIVATE_MINOR)
- var/obj/item/reagent_containers/food/snacks/monkeycube/M = new
+ var/obj/item/reagent_containers/food/snacks/cube/monkey/M = new
if(!user.put_in_active_hand(M))
M.forceMove(user.drop_location())
playsound(user, 'sound/effects/splat.ogg', 50, 1)
@@ -801,7 +801,7 @@
return
to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate. ")
- M.mutation_chance = CLAMP(M.mutation_chance-15,0,100)
+ M.mutation_chance = clamp(M.mutation_chance-15,0,100)
qdel(src)
/obj/item/slimepotion/slime/mutator
@@ -825,7 +825,7 @@
return
to_chat(user, "You feed the slime the mutator. It is now more likely to mutate. ")
- M.mutation_chance = CLAMP(M.mutation_chance+12,0,100)
+ M.mutation_chance = clamp(M.mutation_chance+12,0,100)
M.mutator_used = TRUE
qdel(src)
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 8a58563407..b9dc9b92d3 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -41,7 +41,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
var/list/data = list()
data["waiting"] = waiting
data["auth_required"] = event_source ? event_source.event : 0
- data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0
+ data["red_alert"] = (SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level)) >= SEC_LEVEL_RED) ? 1 : 0
data["emergency_maint"] = GLOB.emergency_access
data["bsa_unlock"] = GLOB.bsa_unlock
return data
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 887891ca16..52fafb81be 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -5,20 +5,17 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
//SEC_LEVEL_RED = code red
//SEC_LEVEL_DELTA = code delta
+ /*
+ * All security levels, per ascending alert. Nothing too fancy, really.
+ * Their positions should also match their numerical values.
+ */
+GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "delta"))
+
//config.alert_desc_blue_downto
/proc/set_security_level(level)
- switch(level)
- if("green")
- level = SEC_LEVEL_GREEN
- if("blue")
- level = SEC_LEVEL_BLUE
- if("amber")
- level = SEC_LEVEL_AMBER
- if("red")
- level = SEC_LEVEL_RED
- if("delta")
- level = SEC_LEVEL_DELTA
+ if(!isnum(level))
+ level = GLOB.all_security_levels.Find(level)
//Will not be announced if you try to set to the same level as it already is
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level)
@@ -111,46 +108,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(D.red_alert_access)
D.visible_message("[D] whirrs as it automatically lifts access requirements! ")
playsound(D, 'sound/machines/boltsup.ogg', 50, TRUE)
- SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level())
+ SSblackbox.record_feedback("tally", "security_level_changes", 1, NUM2SECLEVEL(GLOB.security_level))
SSnightshift.check_nightshift()
else
return
-
-/proc/get_security_level()
- switch(GLOB.security_level)
- if(SEC_LEVEL_GREEN)
- return "green"
- if(SEC_LEVEL_BLUE)
- return "blue"
- if(SEC_LEVEL_AMBER)
- return "amber"
- if(SEC_LEVEL_RED)
- return "red"
- if(SEC_LEVEL_DELTA)
- return "delta"
-
-/proc/num2seclevel(num)
- switch(num)
- if(SEC_LEVEL_GREEN)
- return "green"
- if(SEC_LEVEL_BLUE)
- return "blue"
- if(SEC_LEVEL_AMBER)
- return "amber"
- if(SEC_LEVEL_RED)
- return "red"
- if(SEC_LEVEL_DELTA)
- return "delta"
-
-/proc/seclevel2num(seclevel)
- switch( lowertext(seclevel) )
- if("green")
- return SEC_LEVEL_GREEN
- if("blue")
- return SEC_LEVEL_BLUE
- if("amber")
- return SEC_LEVEL_AMBER
- if("red")
- return SEC_LEVEL_RED
- if("delta")
- return SEC_LEVEL_DELTA
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index cd08b7290a..f3b4cbddc9 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -310,7 +310,7 @@
/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signalOrigin, reason, redAlert, set_coefficient=null, silent = FALSE)
if(!isnum(set_coefficient))
- var/security_num = seclevel2num(get_security_level())
+ var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level))
switch(security_num)
if(SEC_LEVEL_GREEN)
set_coefficient = 2
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 2c466564ff..665361af49 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -757,13 +757,13 @@
var/change_per_engine = (1 - ENGINE_COEFF_MIN) / ENGINE_DEFAULT_MAXSPEED_ENGINES // 5 by default
if(initial_engines > 0)
change_per_engine = (1 - ENGINE_COEFF_MIN) / initial_engines // or however many it had
- return CLAMP(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
+ return clamp(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
if(new_value < initial_engines)
var/delta = initial_engines - new_value
var/change_per_engine = 1 //doesn't really matter should not be happening for 0 engine shuttles
if(initial_engines > 0)
change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay
- return CLAMP(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
+ return clamp(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
/obj/docking_port/mobile/proc/in_flight()
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index 033187e353..87f9b55aa9 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -122,7 +122,7 @@
/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper)
if(sleeper in sleepers)
to_chat(sleeper, "While you slumber, you have the strangest dream, like you can see yourself from the outside. ")
- sleeper.ghostize(TRUE)
+ sleeper.ghostize(TRUE, voluntary = TRUE)
/obj/structure/table/abductor/wabbajack/left
desc = "You sleep so it may wake."
diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm
index ace542126c..e9432e2f58 100644
--- a/code/modules/spells/spell_types/wizard.dm
+++ b/code/modules/spells/spell_types/wizard.dm
@@ -297,7 +297,7 @@
var/mob/living/M = AM
M.DefaultCombatKnockdown(stun_amt, override_hardstun = stun_amt * 0.2)
to_chat(M, "You're thrown back by [user]! ")
- AM.throw_at(throwtarget, ((CLAMP((maxthrow - (CLAMP(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
+ AM.throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
safety--
/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?!
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 2aae17b0f3..6c21456e63 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -276,7 +276,7 @@
ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault")
if(VAULT_SPEED)
to_chat(H, "Your legs feel faster. ")
- H.add_movespeed_modifier(MOVESPEED_ID_DNA_VAULT, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
+ H.add_movespeed_modifier(/datum/movespeed_modifier/dna_vault_speedup)
if(VAULT_QUICK)
to_chat(H, "Your arms move as fast as lightning. ")
H.next_move_modifier = 0.5
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index d6f0866936..dd31145491 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -164,8 +164,8 @@
return FALSE
switch(animal_origin)
- if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take double burn //nothing can burn with so much snowflake code around
- burn *= 2
+ if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take some additional burn //nothing can burn with so much snowflake code around
+ burn *= 1.2
var/can_inflict = max_damage - get_damage()
if(can_inflict <= 0)
@@ -183,7 +183,7 @@
//We've dealt the physical damages, if there's room lets apply the stamina damage.
var/current_damage = get_damage(TRUE) //This time around, count stamina loss too.
var/available_damage = max_damage - current_damage
- stamina_dam += round(CLAMP(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION)
+ stamina_dam += round(clamp(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION)
if(disabled && stamina > 10)
incoming_stam_mult = max(0.01, incoming_stam_mult/(stamina*0.1))
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index 276d4893de..66bca919c4 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -16,7 +16,7 @@
return FALSE
var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST)
- affecting.receive_damage(CLAMP(brute_dam/2 * affecting.body_damage_coeff, 15, 50), CLAMP(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage
+ affecting.receive_damage(clamp(brute_dam/2 * affecting.body_damage_coeff, 15, 50), clamp(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage
C.visible_message("[C]'s [src.name] has been violently dismembered! ")
C.emote("scream")
SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered)
diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm
index 9da20e4921..c737e8bc30 100644
--- a/code/modules/surgery/organs/appendix.dm
+++ b/code/modules/surgery/organs/appendix.dm
@@ -12,12 +12,10 @@
var/inflamed
/obj/item/organ/appendix/on_life()
- ..()
- if(!(organ_flags & ORGAN_FAILING))
+ . = ..()
+ if(. || !owner)
return
- var/mob/living/carbon/M = owner
- if(M)
- M.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person
+ owner.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person
/obj/item/organ/appendix/update_icon_state()
if(inflamed)
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index daf3324980..e01059204c 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -20,7 +20,28 @@
update_icon()
SetSlotFromZone()
- items_list = contents.Copy()
+ for(var/obj/item/I in contents)
+ add_item(I)
+
+/obj/item/organ/cyberimp/arm/proc/add_item(obj/item/I)
+ if(I in items_list)
+ return
+ I.forceMove(src)
+ items_list += I
+ // ayy only dropped signal for performance, we can't possibly have shitcode that doesn't call it when removing items from a mob, right?
+ // .. right??!
+ RegisterSignal(I, COMSIG_ITEM_DROPPED, .proc/magnetic_catch)
+
+/obj/item/organ/cyberimp/arm/proc/magnetic_catch(datum/source, mob/user)
+ . = COMPONENT_DROPPED_RELOCATION
+ var/obj/item/I = source //if someone is misusing the signal, just runtime
+ if(I in items_list)
+ if(I in contents) //already in us somehow? i probably shouldn't catch this so it's easier to spot bugs but eh..
+ return
+ I.visible_message("[I] snaps back into [src]! ")
+ I.forceMove(src)
+ if(I == holder)
+ holder = null
/obj/item/organ/cyberimp/arm/proc/SetSlotFromZone()
switch(zone)
@@ -62,7 +83,7 @@
. = ..()
if(. & EMP_PROTECT_SELF)
return
- if(prob(15/severity) && owner)
+ if(owner)
to_chat(owner, "[src] is hit by EMP! ")
// give the owner an idea about why his implant is glitching
Retract()
@@ -75,29 +96,20 @@
"[holder] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm. ",
"You hear a short mechanical noise. ")
- if(istype(holder, /obj/item/assembly/flash/armimplant))
- var/obj/item/assembly/flash/F = holder
- F.set_light(0)
-
owner.transferItemToLoc(holder, src, TRUE)
holder = null
playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1)
-/obj/item/organ/cyberimp/arm/proc/Extend(var/obj/item/item)
+/obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item)
if(!(item in src))
return
holder = item
- ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
holder.slot_flags = null
holder.set_custom_materials(null)
- if(istype(holder, /obj/item/assembly/flash/armimplant))
- var/obj/item/assembly/flash/F = holder
- F.set_light(7)
-
var/obj/item/arm_item = owner.get_active_held_item()
if(arm_item)
@@ -223,21 +235,6 @@
icon_state = "arm_taser"
contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted)
-/obj/item/organ/cyberimp/arm/gun/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- if(prob(30/severity) && owner && !(organ_flags & ORGAN_FAILING))
- Retract()
- owner.visible_message("A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm! ")
- playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1)
- to_chat(owner, "You feel an explosion erupt inside your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as your implant breaks! ")
- owner.adjust_fire_stacks(20)
- owner.IgniteMob()
- owner.adjustFireLoss(25)
- crit_fail = 1
- organ_flags |= ORGAN_FAILING
-
/obj/item/organ/cyberimp/arm/flash
name = "integrated high-intensity photon projector" //Why not
desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash."
@@ -275,6 +272,12 @@
desc = "A deployable riot shield to help deal with civil unrest."
contents = newlist(/obj/item/shield/riot/implant)
+/obj/item/organ/cyberimp/arm/shield/Extend(obj/item/I)
+ if(I.obj_integrity == 0) //that's how the shield recharge works
+ to_chat(owner, "[I] is still too unstable to extend. Give it some time! ")
+ return FALSE
+ return ..()
+
/obj/item/organ/cyberimp/arm/shield/emag_act()
. = ..()
if(obj_flags & EMAGGED)
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 47a452cc76..46092ff0c2 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -16,7 +16,8 @@
slot = ORGAN_SLOT_STOMACH_AID
/obj/item/organ/cyberimp/chest/nutriment/on_life()
- if(synthesizing)
+ . = ..()
+ if(!. || synthesizing)
return
if(owner.nutrition <= hunger_threshold)
@@ -59,23 +60,25 @@
var/convalescence_time = 0
/obj/item/organ/cyberimp/chest/reviver/on_life()
+ . = ..()
if(reviving)
- var/do_heal = world.time < convalescence_time
+ var/do_heal = . && world.time < convalescence_time
if(revive_cost >= MAX_HEAL_COOLDOWN)
do_heal = FALSE
- else if(owner.stat && owner.stat != DEAD)
+ else if(owner?.stat && owner.stat != DEAD)
do_heal = TRUE
else if(!do_heal)
convalescence_time = world.time + DEF_CONVALESCENCE_TIME
- if(do_heal)
+ if(. && (do_heal || world.time < convalescence_time))
addtimer(CALLBACK(src, .proc/heal), 3 SECONDS)
else
cooldown = revive_cost + world.time
reviving = FALSE
- to_chat(owner, "Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)]. ")
+ if(owner)
+ to_chat(owner, "Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)]. ")
return
- if(cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding)
+ if(!. || cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding)
return
revive_cost = 0
@@ -165,14 +168,14 @@
if(allow_thrust(0.01))
ion_trail.start()
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/move_react)
- owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic)
if(!silent)
to_chat(owner, "You turn your thrusters set on. ")
else
ion_trail.stop()
if(!QDELETED(owner))
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
- owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic)
if(!silent)
to_chat(owner, "You turn your thrusters set off. ")
on = FALSE
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index a678482ef3..6705b4c7b4 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -102,8 +102,8 @@
slot = ORGAN_SLOT_BRAIN_ANTISTUN
/obj/item/organ/cyberimp/brain/anti_stun/on_life()
- ..()
- if(crit_fail || !(organ_flags & ORGAN_FAILING))
+ . = ..()
+ if(!. || crit_fail)
return
owner.adjustStaminaLoss(-3.5, FALSE) //Citadel edit, makes it more useful in Stamina based combat
owner.HealAllImmobilityUpTo(STUN_SET_AMOUNT)
diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm
index 63febd1a9f..c1e33c7dac 100644
--- a/code/modules/surgery/organs/ears.dm
+++ b/code/modules/surgery/organs/ears.dm
@@ -29,22 +29,17 @@
var/damage_multiplier = 1
/obj/item/organ/ears/on_life()
- if(!iscarbon(owner))
- return
- ..()
- var/mob/living/carbon/C = owner
- if((damage < maxHealth) && (organ_flags & ORGAN_FAILING)) //ear damage can be repaired from the failing condition
- organ_flags &= ~ORGAN_FAILING
+ . = ..()
// genetic deafness prevents the body from using the ears, even if healthy
- if(HAS_TRAIT(C, TRAIT_DEAF))
+ if(owner && HAS_TRAIT(owner, TRAIT_DEAF))
deaf = max(deaf, 1)
- else if(!(organ_flags & ORGAN_FAILING)) // if this organ is failing, do not clear deaf stacks.
+ else if(.) // if this organ is failing, do not clear deaf stacks.
deaf = max(deaf - 1, 0)
if(prob(damage / 20) && (damage > low_threshold))
adjustEarDamage(0, 4)
- SEND_SOUND(C, sound('sound/weapons/flash_ring.ogg'))
- to_chat(C, "The ringing in your ears grows louder, blocking out any external noises for a moment. ")
- else if((organ_flags & ORGAN_FAILING) && (deaf == 0))
+ SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg'))
+ to_chat(owner, "The ringing in your ears grows louder, blocking out any external noises for a moment. ")
+ else if(!. && !deaf)
deaf = 1 //stop being not deaf you deaf idiot
/obj/item/organ/ears/proc/restoreEars()
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 6b93995e62..049fc5b5d4 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -1,3 +1,7 @@
+#define BLURRY_VISION_ONE 1
+#define BLURRY_VISION_TWO 2
+#define BLIND_VISION_THREE 3
+
/obj/item/organ/eyes
name = BODY_ZONE_PRECISE_EYES
icon_state = "eyeballs"
@@ -10,7 +14,7 @@
decay_factor = STANDARD_ORGAN_DECAY
maxHealth = 0.5 * STANDARD_ORGAN_THRESHOLD //half the normal health max since we go blind at 30, a permanent blindness at 50 therefore makes sense unless medicine is administered
high_threshold = 0.3 * STANDARD_ORGAN_THRESHOLD //threshold at 30
- low_threshold = 0.15 * STANDARD_ORGAN_THRESHOLD //threshold at 15
+ low_threshold = 0.2 * STANDARD_ORGAN_THRESHOLD //threshold at 15
low_threshold_passed = "Distant objects become somewhat less tangible. "
high_threshold_passed = "Everything starts to look a lot less clear. "
@@ -27,14 +31,17 @@
var/flash_protect = 0
var/see_invisible = SEE_INVISIBLE_LIVING
var/lighting_alpha
- var/damaged = FALSE //damaged indicates that our eyes are undergoing some level of negative effect
+ var/eye_damaged = FALSE //indicates that our eyes are undergoing some level of negative effect
/obj/item/organ/eyes/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE)
. = ..()
if(!.)
return
- if(damage == initial(damage))
- clear_eye_trauma()
+ switch(eye_damaged)
+ if(BLURRY_VISION_ONE, BLURRY_VISION_TWO)
+ owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged)
+ if(BLIND_VISION_THREE)
+ owner.become_blind(EYE_DAMAGE)
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
old_eye_color = H.eye_color
@@ -48,46 +55,49 @@
owner.update_sight()
/obj/item/organ/eyes/Remove(special = FALSE)
- clear_eye_trauma()
. = ..()
var/mob/living/carbon/C = .
- if(!QDELETED(C))
- if(ishuman(C) && eye_color)
- var/mob/living/carbon/human/H = C
- H.eye_color = old_eye_color
- if(!special)
- H.dna.species.handle_body(H)
+ if(QDELETED(C))
+ return
+ switch(eye_damaged)
+ if(BLURRY_VISION_ONE, BLURRY_VISION_TWO)
+ C.clear_fullscreen("eye_damage")
+ if(BLIND_VISION_THREE)
+ C.cure_blind(EYE_DAMAGE)
+ if(ishuman(C) && eye_color)
+ var/mob/living/carbon/human/H = C
+ H.eye_color = old_eye_color
if(!special)
- C.update_tint()
- C.update_sight()
+ H.dna.species.handle_body(H)
+ if(!special)
+ C.update_tint()
+ C.update_sight()
-/obj/item/organ/eyes/on_life()
- ..()
- var/mob/living/carbon/C = owner
- //since we can repair fully damaged eyes, check if healing has occurred
- if((organ_flags & ORGAN_FAILING) && (damage < maxHealth))
- organ_flags &= ~ORGAN_FAILING
- C.cure_blind(EYE_DAMAGE)
- //various degrees of "oh fuck my eyes", from "point a laser at your eye" to "staring at the Sun" intensities
- if(damage > 20)
- damaged = TRUE
- if(organ_flags & ORGAN_FAILING)
- C.become_blind(EYE_DAMAGE)
- else if(damage > 30)
- C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2)
+
+/obj/item/organ/eyes/applyOrganDamage(d, maximum = maxHealth)
+ . = ..()
+ if(!.)
+ return
+ var/old_damaged = eye_damaged
+ switch(damage)
+ if(INFINITY to maxHealth)
+ eye_damaged = BLIND_VISION_THREE
+ if(maxHealth to high_threshold)
+ eye_damaged = BLURRY_VISION_TWO
+ if(high_threshold to low_threshold)
+ eye_damaged = BLURRY_VISION_ONE
else
- C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1)
- //called once since we don't want to keep clearing the screen of eye damage for people who are below 20 damage
- else if(damaged)
- damaged = FALSE
- C.clear_fullscreen("eye_damage")
- return
-
-/obj/item/organ/eyes/proc/clear_eye_trauma()
- var/mob/living/carbon/C = owner
- C.clear_fullscreen("eye_damage")
- C.cure_blind(EYE_DAMAGE)
- damaged = FALSE
+ eye_damaged = FALSE
+ if(eye_damaged == old_damaged || !owner)
+ return
+ if(old_damaged == BLIND_VISION_THREE)
+ owner.cure_blind(EYE_DAMAGE)
+ else if(eye_damaged == BLIND_VISION_THREE)
+ owner.become_blind(EYE_DAMAGE)
+ if(eye_damaged && eye_damaged != BLIND_VISION_THREE)
+ owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged)
+ else
+ owner.clear_fullscreen("eye_damage")
/obj/item/organ/eyes/night_vision
name = "shadow eyes"
@@ -259,7 +269,7 @@
if(!isnum(range))
return
- set_distance(CLAMP(range, 0, max_light_beam_distance))
+ set_distance(clamp(range, 0, max_light_beam_distance))
assume_rgb(C)
/obj/item/organ/eyes/robotic/glow/proc/assume_rgb(newcolor)
@@ -382,4 +392,8 @@
/obj/item/organ/eyes/ipc
name = "ipc eyes"
- icon_state = "cybernetic_eyeballs"
\ No newline at end of file
+ icon_state = "cybernetic_eyeballs"
+
+#undef BLURRY_VISION_ONE
+#undef BLURRY_VISION_TWO
+#undef BLIND_VISION_THREE
\ No newline at end of file
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index ea98ecd32b..1fee605b12 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -15,6 +15,7 @@
// Heart attack code is in code/modules/mob/living/carbon/human/life.dm
var/beating = 1
+ var/no_pump = FALSE
var/icon_base = "heart"
attack_verb = list("beat", "thumped")
var/beat = BEAT_NONE//is this mob having a heatbeat sound played? if so, which?
@@ -66,27 +67,28 @@
return S
/obj/item/organ/heart/on_life()
- ..()
+ . = ..()
+ if(!owner || no_pump)
+ return
if(owner.client && beating)
failed = FALSE
var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE)
var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE)
- var/mob/living/carbon/H = owner
- if(H.health <= H.crit_threshold && beat != BEAT_SLOW)
+ if(owner.health <= owner.crit_threshold && beat != BEAT_SLOW)
beat = BEAT_SLOW
- H.playsound_local(get_turf(H), slowbeat,40,0, channel = CHANNEL_HEARTBEAT)
+ owner.playsound_local(get_turf(owner), slowbeat,40,0, channel = CHANNEL_HEARTBEAT)
to_chat(owner, "You feel your heart slow down... ")
- if(beat == BEAT_SLOW && H.health > H.crit_threshold)
- H.stop_sound_channel(CHANNEL_HEARTBEAT)
+ if(beat == BEAT_SLOW && owner.health > owner.crit_threshold)
+ owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
- if(H.jitteriness)
- if(H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
- H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
+ if(owner.jitteriness)
+ if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
+ owner.playsound_local(get_turf(owner),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
beat = BEAT_FAST
else if(beat == BEAT_FAST)
- H.stop_sound_channel(CHANNEL_HEARTBEAT)
+ owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
if(organ_flags & ORGAN_FAILING) //heart broke, stopped beating, death imminent
@@ -107,6 +109,7 @@ obj/item/organ/heart/slime
icon_state = "cursedheart-off"
icon_base = "cursedheart"
decay_factor = 0
+ no_pump = TRUE
actions_types = list(/datum/action/item_action/organ_action/cursed_heart)
var/last_pump = 0
var/add_colour = TRUE //So we're not constantly recreating colour datums
@@ -128,6 +131,9 @@ obj/item/organ/heart/slime
return ..()
/obj/item/organ/heart/cursed/on_life()
+ . = ..()
+ if(!owner)
+ return
if(world.time > (last_pump + pump_delay))
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
var/mob/living/carbon/human/H = owner
@@ -208,6 +214,8 @@ obj/item/organ/heart/slime
obj/item/organ/heart/cybernetic/upgraded/on_life()
. = ..()
+ if(!.)
+ return
if(dose_available && owner.health <= owner.crit_threshold && !owner.reagents.has_reagent(rid))
owner.reagents.add_reagent(rid, ramount)
used_dose()
@@ -233,7 +241,7 @@ obj/item/organ/heart/cybernetic/upgraded/on_life()
/obj/item/organ/heart/freedom/on_life()
. = ..()
- if(owner.health < 5 && world.time > min_next_adrenaline)
+ if(. && owner.health < 5 && world.time > min_next_adrenaline)
min_next_adrenaline = world.time + rand(250, 600) //anywhere from 4.5 to 10 minutes
to_chat(owner, "You feel yourself dying, but you refuse to give up! ")
owner.heal_overall_damage(15, 15)
diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm
index 6e5ea0e111..b24034ca4a 100755
--- a/code/modules/surgery/organs/liver.dm
+++ b/code/modules/surgery/organs/liver.dm
@@ -25,25 +25,24 @@
var/cachedmoveCalc = 1
/obj/item/organ/liver/on_life()
- var/mob/living/carbon/C = owner
+ . = ..()
+ if(!. || !owner)//can't process reagents with a failing liver
+ return
- if(istype(C))
- if(!(organ_flags & ORGAN_FAILING))//can't process reagents with a failing liver
+ if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
+ //handle liver toxin filtration
+ for(var/datum/reagent/toxin/T in owner.reagents.reagent_list)
+ var/thisamount = owner.reagents.get_reagent_amount(T.type)
+ if (thisamount && thisamount <= toxTolerance)
+ owner.reagents.remove_reagent(T.type, 1)
+ else
+ damage += (thisamount*toxLethality)
- if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
- //handle liver toxin filtration
- for(var/datum/reagent/toxin/T in C.reagents.reagent_list)
- var/thisamount = C.reagents.get_reagent_amount(T.type)
- if (thisamount && thisamount <= toxTolerance)
- C.reagents.remove_reagent(T.type, 1)
- else
- damage += (thisamount*toxLethality)
+ //metabolize reagents
+ owner.reagents.metabolize(owner, can_overdose=TRUE)
- //metabolize reagents
- C.reagents.metabolize(C, can_overdose=TRUE)
-
- if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
- to_chat(C, "You feel a dull pain in your abdomen. ")
+ if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
+ to_chat(owner, "You feel a dull pain in your abdomen. ")
/obj/item/organ/liver/prepare_eat()
var/obj/S = ..()
@@ -56,22 +55,22 @@
return
if(damage >= high_threshold)
var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
- owner.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
+ owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc)
sizeMoveMod(move_calc, owner)
else
- owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis)
sizeMoveMod(1, owner)
/obj/item/organ/liver/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE)
. = ..()
if(. && damage >= high_threshold)
var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
- M.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
+ M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc)
sizeMoveMod(move_calc, owner)
/obj/item/organ/liver/Remove(special = FALSE)
if(!QDELETED(owner))
- owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis)
sizeMoveMod(1, owner)
return ..()
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index ac2b34b855..b3020ae13f 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -146,7 +146,7 @@
if(safe_oxygen_max)
if((O2_pp > safe_oxygen_max) && safe_oxygen_max == 0) //I guess plasma men technically need to have a check.
var/ratio = (breath_gases[/datum/gas/oxygen]/safe_oxygen_max) * 10
- H.apply_damage_type(CLAMP(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type)
+ H.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type)
H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy)
else if((O2_pp > safe_oxygen_max) && !(safe_oxygen_max == 0)) //Why yes, this is like too much CO2 and spahget. Dirty lizards.
@@ -188,7 +188,7 @@
if(safe_nitro_max)
if(N2_pp > safe_nitro_max)
var/ratio = (breath_gases[/datum/gas/nitrogen]/safe_nitro_max) * 10
- H.apply_damage_type(CLAMP(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type)
+ H.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type)
H.throw_alert("too_much_nitro", /obj/screen/alert/too_much_nitro)
H.losebreath += 2
else
@@ -255,7 +255,7 @@
if(safe_toxins_max)
if(Toxins_pp > safe_toxins_max)
var/ratio = (breath_gases[/datum/gas/plasma]/safe_toxins_max) * 10
- H.apply_damage_type(CLAMP(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type)
+ H.apply_damage_type(clamp(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type)
H.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox)
else
H.clear_alert("too_much_tox")
@@ -446,17 +446,17 @@
if(prob(20))
to_chat(H, "You feel [hot_message] in your [name]! ")
-
-/obj/item/organ/lungs/on_life()
- ..()
- if((!failed) && ((organ_flags & ORGAN_FAILING)))
- if(owner.stat == CONSCIOUS)
+/obj/item/organ/lungs/applyOrganDamage(d, maximum = maxHealth)
+ . = ..()
+ if(!.)
+ return
+ if(!failed && organ_flags & ORGAN_FAILING)
+ if(owner && owner.stat == CONSCIOUS)
owner.visible_message("[owner] grabs [owner.p_their()] throat, struggling for breath! ", \
"You suddenly feel like you can't breathe! ")
failed = TRUE
else if(!(organ_flags & ORGAN_FAILING))
failed = FALSE
- return
/obj/item/organ/lungs/prepare_eat()
var/obj/S = ..()
@@ -547,5 +547,6 @@
color = "#68e83a"
/obj/item/organ/lungs/yamerol/on_life()
- ..()
- damage += 2 //Yamerol lungs are temporary
\ No newline at end of file
+ . = ..()
+ if(.)
+ applyOrganDamage(2) //Yamerol lungs are temporary
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index d95901bdbe..534261f63d 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -108,7 +108,7 @@
var/datum/gas_mixture/enviro = T.return_air()
local_temp = enviro.temperature
- else if(istype(loc, /mob/) && !owner)
+ else if(!owner && ismob(loc))
var/mob/M = loc
if(is_type_in_typecache(M.loc, GLOB.freezing_objects))
if(!(organ_flags & ORGAN_FROZEN))
@@ -134,18 +134,17 @@
organ_flags &= ~ORGAN_FROZEN
return FALSE
-/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing
- if(organ_flags & ORGAN_FAILING)
- return
- if(is_cold())
- return
- ///Damage decrements by a percent of its maxhealth
- var/healing_amount = -(maxHealth * healing_factor)
- ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's health
- healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
- if(healing_amount)
- applyOrganDamage(healing_amount) //to FERMI_TWEAK
- //Make it so each threshold is stuck.
+/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing or synthetic
+ if(organ_flags & ORGAN_FAILING || !owner)
+ return FALSE
+ if(!is_cold() && damage)
+ ///Damage decrements by a percent of its maxhealth
+ var/healing_amount = -(maxHealth * healing_factor)
+ ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's satiety
+ healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
+ if(healing_amount)
+ applyOrganDamage(healing_amount) //to FERMI_TWEAK
+ return TRUE
/obj/item/organ/examine(mob/user)
. = ..()
@@ -205,11 +204,9 @@
///Adjusts an organ's damage by the amount "d", up to a maximum amount, which is by default max damage
/obj/item/organ/proc/applyOrganDamage(var/d, var/maximum = maxHealth) //use for damaging effects
- if(!d) //Micro-optimization.
+ if(!d || maximum < damage) //Micro-optimization.
return FALSE
- if(maximum < damage)
- return FALSE
- damage = CLAMP(damage + d, 0, maximum)
+ damage = clamp(damage + d, 0, maximum)
var/mess = check_damage_thresholds()
prev_damage = damage
if(mess && owner)
diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm
index 3b383581cf..d9cbf9be03 100755
--- a/code/modules/surgery/organs/stomach.dm
+++ b/code/modules/surgery/organs/stomach.dm
@@ -17,33 +17,24 @@
low_threshold_cleared = "The last bouts of pain in your stomach have died out. "
/obj/item/organ/stomach/on_life()
- ..()
- var/datum/reagent/consumable/nutriment/Nutri
+ . = ..()
+ if(!owner)
+ return
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
- if(!(organ_flags & ORGAN_FAILING))
+ if(.)
H.dna.species.handle_digestion(H)
handle_disgust(H)
- Nutri = locate(/datum/reagent/consumable/nutriment) in H.reagents.reagent_list
- if(Nutri)
- if(prob((damage/40) * Nutri.volume * Nutri.volume))
- H.vomit(damage)
- to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food! ")
-
- else if(Nutri && damage > high_threshold)
- if(prob((damage/10) * Nutri.volume * Nutri.volume))
- H.vomit(damage)
- to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food! ")
-
-
- else if(iscarbon(owner))
- var/mob/living/carbon/C = owner
- Nutri = locate(/datum/reagent/consumable/nutriment) in C.reagents.reagent_list
-
- if(damage < low_threshold)
+ if(!damage)
return
-
+ var/datum/reagent/consumable/nutriment/Nutri = locate(/datum/reagent/consumable/nutriment) in owner.reagents.reagent_list
+ if(!Nutri)
+ return
+ var/prob_divisor = damage > high_threshold ? 10 : 40
+ if(prob((damage/prob_divisor) * (Nutri.volume**2)))
+ owner.vomit(damage)
+ to_chat(owner, "Your stomach reels in pain as you're incapable of holding down all that food! ")
/obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/H)
if(H.disgust)
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 1857f8db48..7127b41ee3 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -58,7 +58,10 @@
return FALSE
if(tool)
speed_mod = tool.toolspeed
- if(do_after(user, time * speed_mod, target = target))
+ var/skill_mod = 1
+ if(user?.mind?.skill_holder)
+ skill_mod = SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(user.mind.skill_holder.get_skill_value(/datum/skill/numerical/surgery))
+ if(do_after(user, time * speed_mod * skill_mod, target = target))
var/prob_chance = 100
if(implement_type) //this means it isn't a require hand or any item step.
prob_chance = implements[implement_type]
@@ -66,6 +69,7 @@
if((prob(prob_chance) || (iscyborg(user) && !silicons_obey_prob)) && chem_check(target) && !try_to_fail)
if(success(user, target, target_zone, tool, surgery))
+ user?.mind?.skill_holder?.auto_gain_experience(/datum/skill/numerical/surgery, SKILL_GAIN_SURGERY_PER_STEP)
advance = TRUE
else
if(failure(user, target, target_zone, tool, surgery))
diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm
index f3e95fa61c..478be5960e 100644
--- a/code/modules/uplink/uplink_items/uplink_bundles.dm
+++ b/code/modules/uplink/uplink_items/uplink_bundles.dm
@@ -41,6 +41,16 @@
player_minimum = 30
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+/datum/uplink_item/bundles_TC/northstar_bundle
+ name = "Northstar Bundle"
+ desc = "An item usually reserved for the Gorlex Marauders and their operatives, now available for recreational use. \
+ These armbands let the user punch people very fast and with the lethality of a legendary martial artist. \
+ Does not improve weapon attack speed or the meaty fists of a hulk, but you will be unmatched in martial power. \
+ Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands."
+ item = /obj/item/storage/box/syndie_kit/northstar
+ cost = 20
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+
/datum/uplink_item/suits/infiltrator_bundle
name = "Insidious Infiltration Gear Case"
desc = "Developed by Roseus Galactic in conjunction with the Gorlex Marauders to produce a functional suit for urban operations, \
diff --git a/code/modules/uplink/uplink_items/uplink_devices.dm b/code/modules/uplink/uplink_items/uplink_devices.dm
index 194281ded6..cda83cf684 100644
--- a/code/modules/uplink/uplink_items/uplink_devices.dm
+++ b/code/modules/uplink/uplink_items/uplink_devices.dm
@@ -188,6 +188,16 @@
item = /obj/item/healthanalyzer/rad_laser
cost = 3
+/datum/uplink_item/device_tools/riflery_primer
+ name = "Riflery Primer"
+ desc = "An old book with blood and vodka stains on it. Freshly pulled from a dusty crate in some old warehouse, \
+ this primer of questionable worth and value is rumored to increase your rifle-bolt-working and/or shotgun \
+ racking fivefold. Then again, the techniques here only work on bolt-actions and pump-actions..."
+ item = /obj/item/book/granter/trait/rifleman
+ cost = 3
+ restricted_roles = list("Operative") // i want it to be surplusable but i also want it to be mostly nukie only, please advise
+ surplus = 90
+
/datum/uplink_item/device_tools/stimpack
name = "Stimpack"
desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \
diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm
index 868610a149..8ad8b5f1ee 100644
--- a/code/modules/vehicles/secway.dm
+++ b/code/modules/vehicles/secway.dm
@@ -22,7 +22,7 @@
/obj/vehicle/ridden/secway/process()
var/diff = world.time - last_tick
var/regen = chargerate * diff
- charge = CLAMP(charge + regen, 0, chargemax)
+ charge = clamp(charge + regen, 0, chargemax)
last_tick = world.time
/obj/vehicle/ridden/secway/relaymove(mob/user, direction)
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 4f7502bb02..e27431f8ee 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -579,39 +579,36 @@ GLOBAL_LIST_EMPTY(vending_products)
if(!R || !istype(R) || !R.product_path)
vend_ready = TRUE
return
+ if(R.amount <= 0)
+ to_chat(usr, "Sold out. ")
+ vend_ready = TRUE
+ return
if(R in hidden_records)
if(!extended_inventory)
vend_ready = TRUE
return
else if(R in coin_records)
- if(!(coin))
- to_chat(usr, "You need to a coin to get this item! ")
+ if(!coin)
+ to_chat(usr, "You need to insert a coin to get this item! ")
vend_ready = TRUE
return
if(coin && coin.string_attached)
- if(!prob(50))
- to_chat(usr, "You weren't able to pull [coin] out fast enough, the machine ate it, string and all! ")
- QDEL_NULL(coin)
- return
- if(!usr.CanReach(src))
- to_chat(usr, "You successfully pull [coin] out of [src] to the floor. ")
- coin = null
- if(!usr.put_in_hands(coin))
+ if(prob(50))
+ if(usr.put_in_hands(coin))
+ to_chat(usr, "You successfully pull [coin] out before [src] could swallow it. ")
+ coin = null
+ else
to_chat(usr, "You couldn't pull [coin] out because your hands are full! ")
QDEL_NULL(coin)
- to_chat(usr, "You successfully pull [coin] out before [src] could swallow it. ")
- coin = null
- QDEL_NULL(coin)
+ else
+ to_chat(usr, "You weren't able to pull [coin] out fast enough, the machine ate it, string and all! ")
+ QDEL_NULL(coin)
+ else
+ QDEL_NULL(coin)
else if(!(R in product_records))
vend_ready = TRUE
message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!")
return
- if(R.amount <= 0)
- to_chat(usr, "Sold out. ")
- vend_ready = TRUE
- return
- else
- R.amount--
if(((last_reply + 200) <= world.time) && vend_reply)
speak(vend_reply)
last_reply = world.time
@@ -623,8 +620,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(usr, "You take [R.name] out of the slot. ")
else
to_chat(usr, "[capitalize(R.name)] falls onto the floor! ")
-
-
+ R.amount--
SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]"))
vend_ready = TRUE
return
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/dinnerware.dm
similarity index 95%
rename from code/modules/vending/drinnerware.dm
rename to code/modules/vending/dinnerware.dm
index 8f257d07ec..da8baa7e1c 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/dinnerware.dm
@@ -20,7 +20,7 @@
/obj/item/reagent_containers/food/condiment/saltshaker = 5,
/obj/item/reagent_containers/food/condiment/peppermill = 5)
contraband = list(
- /obj/item/reagent_containers/food/snacks/monkeycube = 1,
+ /obj/item/reagent_containers/food/snacks/cube/monkey= 1,
/obj/item/kitchen/knife/butcher = 2,
/obj/item/reagent_containers/syringe = 3)
premium = list(
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index ec741ef574..b1a6297981 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -21,7 +21,7 @@
/obj/item/clothing/head/helmet/blueshirt = 1,
/obj/item/clothing/suit/armor/vest/blueshirt = 1,
/obj/item/clothing/under/rank/security/officer/blueshirt = 1,
- /obj/item/clothing/gloves/tackler = 5,
+ /obj/item/clothing/gloves/tackler = 5,
/obj/item/ssword_kit = 1)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt
index 545394f3e9..c6a5d9ef8f 100644
--- a/config/awaymissionconfig.txt
+++ b/config/awaymissionconfig.txt
@@ -7,16 +7,16 @@
#Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once.
#DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors!
-#_maps/RandomZLevels/blackmarketpackers.dmm
-#_maps/RandomZLevels/spacebattle.dmm
-#_maps/RandomZLevels/TheBeach.dmm
-#_maps/RandomZLevels/Academy.dmm
-#_maps/RandomZLevels/wildwest.dmm
-#_maps/RandomZLevels/challenge.dmm
-#_maps/RandomZLevels/centcomAway.dmm
-#_maps/RandomZLevels/moonoutpost19.dmm
-#_maps/RandomZLevels/undergroundoutpost45.dmm
-#_maps/RandomZLevels/caves.dmm
-#_maps/RandomZLevels/snowdin.dmm
-#_maps/RandomZLevels/research.dmm
-#_maps/RandomZLevels/Cabin.dmm
+#_maps/RandomZLevels/away_mission/blackmarketpackers.dmm
+#_maps/RandomZLevels/away_mission/spacebattle.dmm
+#_maps/RandomZLevels/away_mission/TheBeach.dmm
+#_maps/RandomZLevels/away_mission/Academy.dmm
+#_maps/RandomZLevels/away_mission/wildwest.dmm
+#_maps/RandomZLevels/away_mission/challenge.dmm
+#_maps/RandomZLevels/away_mission/centcomAway.dmm
+#_maps/RandomZLevels/away_mission/moonoutpost19.dmm
+#_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm
+#_maps/RandomZLevels/away_mission/caves.dmm
+#_maps/RandomZLevels/away_mission/snowdin.dmm
+#_maps/RandomZLevels/away_mission/research.dmm
+#_maps/RandomZLevels/away_mission/Cabin.dmm
diff --git a/config/game_options.txt b/config/game_options.txt
index e1294f688a..781be6d5b1 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -288,6 +288,9 @@ MINIMUM_SECBORG_ALERT 3
## Uncomment to load one of the missions from awaymissionconfig.txt at roundstart.
#ROUNDSTART_AWAY
+## Uncomment to load one of the virtual reality levels from vr_config at roundstart.
+#ROUNDSTART_VR
+
## How long the delay is before the Away Mission gate opens. Default is half an hour.
## 600 is one minute.
GATEWAY_DELAY 18000
diff --git a/config/vr_config.txt b/config/vr_config.txt
new file mode 100644
index 0000000000..0c6354f8fe
--- /dev/null
+++ b/config/vr_config.txt
@@ -0,0 +1,13 @@
+#List the potential virtual reality Z-levels here. awaymissionconfig copypasta follows.
+
+#Maps must be the full path to them
+#Maps should be 255x255 or smaller and be bounded. Falling off the edge of the map will result in undefined behavior.
+#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START
+
+#!!IMPORTANT NOTES FOR HOSTING VR MAPS!!:
+#Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once.
+#DO tick the associated code file for the virtual reality levels you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors!
+
+#_maps/RandomZLevels/VR/murderdome.dmm
+#_maps/RandomZLevels/VR/snowdin_VR.dmm
+#_maps/RandomZLevels/VR/syndicate_trainer.dmm
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index b02b2d74a5..3d05d75736 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -833,555 +833,6 @@
box brig miscellaneous issues
box station hos office
-
- 26 February 2020
- AnturK ported by kevinz000 updated:
-
- Dueling pistols have been added.
-
- Arturlang updated:
-
- Replaces a lot of ingame UIs with TGUI next, increasing performance drastically.
- Each night for bloodsuckers will last longer due to the sun dimming.
- You cant level up for free, now you have to pay blood for power.
- Bloodsuckers are no longer as resistant to hard stuns and regenerate less stamina. and a lot of their cooldowns are a lot higher.
- Removed text macros from the chem dispenser.
- Replaced with dispenser input recording macros.
- Fancifying makeshift switchblades now works
- Shields will no longer block lasers, and will break if they take too much damage.
- Added a TGUI Next interface for crafting
- Removed the old TGUI slow crafting interface
- The MK2 hypospray now
- The debug outfit is now kitted out for whatever debbuging needs.
- Fixed the pandemic naming and the radiation healing symptom UI crashing
- Hyposprays now switch modes on CTRL click, instead of alt, as it was already reserved for dispension amount.
- Nanite interfaces have gotten a rework to TGUI Next, and can now support sub-programs. add:Adds the nanite sting program, which will allow you to manually sting people to give them nanites, changeling style.
- The pandemic can no longer make vaccines or synthblood as quickly.
- The syndicate uplinks interface has been redone in TGUI Next
- Valentines can now be converted by bloodsuckers
-
- Bhijn updated:
-
- Click-dragging will now only perform the quick item usage behavior if you're in combat mode.
-
- BlueWildrose updated:
-
- podpeople tail wagging
- lifebringer ghost role fixes
-
- BuffEngineering, nemvar. updated:
-
- Addicts can now feel like they're getting their fix or kicking it.
- Aheals now remove addictions and restore your mood to default.
-
- CameronWoof updated:
-
- Lighting looks better now. I can say that because the PR wouldn't be merged and you wouldn't be reading this if it wasn't true.
- Ammonia and saltpetre can now be made at the biogenerator.
-
- Commandersand updated:
-
- uplink centcomm suit doesn't have sensors
-
- DeltaFire15 updated:
-
- Nar'Sie runes no longer benefit from runed floors.
-
- Detective-Google updated:
-
- the POOL. remove: boxstation dorms 7
- valentines candy no longer prefbreaks
- Loudness Booster pAI program
- Encryption Key pAI program
-
- EmeraldSundisk updated:
-
- Connects mining's disposal unit on Delta.
- Slight visual adjustments to the immediate affected area.
-
- Feasel updated:
-
- Buffed dissection success chances.
-
- Ghommie updated:
-
- The anomalous honking crystal should now properly clown your mind.
- Stopped the ellipsis question mark from being displayed twice in the examine message for masked/unknown human mobs.
- Made the aforementioned ellipsis question mark display on flavor-text-less masked/unknown human mobs too for consistency.
- Stopped an APTFT exploit with spray bottles.
- Fixed the detective revolver being quite risky to use.
- Hair styles and undergarments are yet again free from gender restrictions.
- Clown ops will find bombananas and clown bomb beacons instead of minibombs and bomb beacons in their infiltrator ship now.
- For safety, the syndicate shuttle minibombs and bombananas come shipped in a box. Please don't instinctively eat any of those nanas, thank you.
- Uplink items excluded (such as mulligan, chameleon, ebow) from or exclusive (such as cyber implants) to normal nuke ops will now be properly unavailable/available to clown ops.
- Fixed bananium energy sword/shield slips.
- Buffed said slips to ignore no-grav/crawling/flying as well as adding some deadly force to the e-sword.
- Fixed the 'stache grenade anti-non-clumsy user check.
- Doubled the timer for the sticky mustaches effect from the above grenade (from 1 to 2 minutes)
- Fixed an edge case with the chaplain armaments beacon spawning the box in nullspace.
- The playback device's cooldown now proportionally increases with messages longer than 60 characters (3 seconds is the default assembly cooldown).
- Fixed space ninjas "Nothing" objective. Now you gotta steal some dandy stuff such as corgi meat and pinpointers as a ninja too.
- Fixed maploaded APC terminals direction.
- Nerfed magnetic rifles/pistols by re(?)adding power cell requirements for it. These firearms must be recharged after firing 2 magazines worth of projectiles and are slightly more susceptible to EMPs.
- Fixed the tearstache nade not properly working.
- Buffed it against space helmet internals.
- Holographic fans won't display above mobs and other objects anymore.
- Fixed paraplegics appearing as shoeless.
- Fixed the petting element.
- Fixed slipping.
- Refactored mob holders into an element.
- Fixed a few minor issues with that feature. such as mismatching sprites for certain held mobs and a slight lack of safety checks.
- holdable mobs can't force themselves into people's hands anymore.
- Milkies fix.
- Fixed some mounted defibrillator issue with the altclicking functionality.
- Fixed no-grav lavaland labor/mining shuttle areas.
- Fixed a little issue with sleeper UI and blood types.
- Fixing accidental nerfs to the magpistol magazine.
- The Lavaland's Herald speech sound should only play if they are actually speaking.
- Nerfed cargo passive points generation from 500 to 125 creds per minute.
- Fixed whitelisted/donor loadouts
- Childproofs double-esword and hypereuplastic blade toys.
- Some reagent holders (such as cigarettes, food) are not suitable for reagents export anymore, while unprocessed botany crops will only net 1/3 of the standard reagents values.
- Export scanners now include the reagents value in the price report.
- Fixed a little inconvenience with the character setup preview dummy having extra unwarranted bits.
- Stopped role restricted uplink items from being discounted despite not being purchasable most times.
- Missing words replacement file for the gondola mask.
- Fixed an issue with the nearsighted prescription glasses taking over worn eyewear.
- Fixed AI unanchoring not properly removing the no teleport trait. My bad.
- Fixed another issue with hering comsig.
- Fixed dozen missing privates sprites.
- A little fix concerning some R&D and reagents.
- Further mob holder fixes.
- Fixed being unable to dump a trash bag's contents directly into disposal bins.
- Doubled the halved flavor text maximum length.
- Reduced tongue organ damage and tasting pH message spam.
- Fixed agent IDs not registering the inputted name. Thanks MrPerson.
- Fixed solar panels/trackers (de)construction being a bit wonky.
- Fixed something about slime blood and the law of conservation of mass.
- Fixed flypeople being emetic machine guns.
- Fixed virology being unable to be done with synthetic blood.
- Renamed "blaster carbine" and "blaster rifles" back to "energy gun" and "laser gun" respectively
- Fixed magnetic rifles & co being inconsistent with printed energy guns and start with an empty power cell.
- Reverted practice laser gun sprites back to their former glory. Mostly.
- Fixed sprint buffer cost and regen being rounded down.
- Nerfed the fermenting barrel export industry.
- Reagent dispensers selling price no longer takes in account the reagents volume. It's already handled by reagents export.
- pAIs are yet again unable to perform certain silicon interactions with machineries yet again.
- Fixed pAI radios inability to be toggled on/off.
-
- Ghommie (original PRs by Floyd/Qustinnus, 4Dplanner, Willox, ninjanomnom, mrdoombringer, Fikou, Fox McCloud, TheChosenEvilOne, nemvar, bobbahbrown, Time-Green, Stonebaykyle, MrPerson, ArcaneMusic and zxaber) updated:
-
- You can now make toolboxes out of almost any solid material in an autolathe
- adds Knight's Armour made out of any materials
- new ruin found in lavaland protected by dark wizards, I wonder what they're guarding
- You can now put a bunch more mats in the coin mint and autolathe
- Adamantine and Mythril are now materials (Adamantine still only from xenobio, Mythril still only from badminnery). Adamantine boosts an item's force by 1.5, Mythril gives an item RPG statistics.
- most custom sprites for coins have been lost
- You can now give your ass acute radiation poisoning
- floydmats now apply to all objs / items
- you can now make tables and chairs out of any material
- Fixes being able to exploit fully upgraded destructive analyzers to multiply materials
- An old monastery from a previously abandoned sector of space has recently resurfaced in some regions surrounding the station.
- Latent scans of the surrounding systems have picked up trace signs of new, smaller cult constructs, however these signatures quickly vanished.
- In other news, scavengers in your sector have been seen occasionally with classically recreated maces, so autolathe firmware has been upgraded to accommodate this.
-
- Hatterhat updated:
-
- Zombie powder is now instant when ingested, but delayed when injected or applied through touch.
- The H.E.C.K. suit is now goliath tentacle resistant and probably better for acid resistance.
- The Engineering techfab can now print standard and large RCD compressed matter cartridges.
- The Experimental Tools node now has the Combifan projector, blocking both temperature and atmospheric changes.
- fiddles with the seed extractor upgrade examine to make it not shit
- Formaldehyde prevents organ decay and corpses' miasma production at 1u in the body.
- Epinephrine pens now contain 3u formaldehyde. This should not kill you.
- The ships often crashed by Free Golems on Lavaland now have GPSes. They're off, by default, but an awakening Golem could easily turn one on.
- Standard RCD ammo can now be printed from Engineering-keyed techfabs once you hit Industrial Engineering.
- Consoleless interfaces are now default - this means unrestricted protolathes and circuit imprinters can now be interfaced with by interacting with the machine itself.
- Multitools can now actually be printed from Engineering and Science protolathes/techfabs once you unlock Basic Tools.
- Husking (from being burned to shit) can now be reverted! 5u rezadone or 100u synthflesh, at below 50 burn.
- Turning a body into a burnt husk now takes more effort. 300 burn's worth of effort.
- Buckshot individual pellet damage up from 10 to 12.5. Still firing 6 pellets.
- Preservahyde! Made with water, bromine, and formaldehyde, it doesn't decay into histamine. Instead, it just prevents your organs from rotting into nothing.
- You can now purify eldritch longswords with a bible. This creates purified longswords, which do not have anti-magic properties, but are still good for swinging at cultists.
- Extend votes! Ported from Hyper, ported from AUstation.
- mechs with stock parts now have icons
- Pie reagent transfer now requires an uncovered mouth.
- Biogenerators can now actually generate universal enzyme.
- The Basic Tools node now unlocks the multitool for printing on Engineering and Science fabricators.
- The Ash Walkers' nest on Lavaland now starts with three bowyery slabs.
- You can now welder-harden arrows. It might take longer.
- Silkstring's costs adjusted for bows and whatnot.
- Grammar adjusted on a lot of things relating to bows.
- Pipe bows' bowstring doesn't look like it replicated itself upon draw.
-
- IHOPMommyLich updated:
-
- Changed the multiplicative_slowdown of Stimulants from -1 to -0.5
-
- IronEleven updated:
-
- Minor stat changes to Choking, Spontaneous Combustion, Autophagocytosis Necrosis, Hallucigen, Narcolepsy, Shivering, and Vomiting symptoms.
-
- KathrinBailey updated:
-
- Missing turf_decals in Cargo Office.
- Turns on the docking beacons on Box.
- Fixes Starboard Quarter maint room being spaced. It was never intended to be like how it was.
- The aforementioned maint room not having stuff in it.
- varedited photocopier sometimes not opening any UI.
- Atmos differences in Starboard Quarter maint.
- Atmos differences in destroyed shuttle/EVA bridge. Plating replaced with airless plating.
- Rotates AI satellite computers. These have probably been like this since computers had the old sprites and no directional ones. You shouldn't sit at a chair to operate a sideways computer.
-
- KrabSpider updated:
-
- The Van Dyke is no longer Fu Manchu.
- Gets rid of a Fu Manchu imitation.
-
- Kraseo updated:
-
- You can no longer pull before wearing boxing gloves to bypass the grab check.
- Nightmares no longer delete entire guns from existence for merely having a light on them.
-
- Linzolle updated:
-
- Bows now will not delete an arrow if it cant fire it.
- bows now like and respect sprite changes
-
- MalricB updated:
-
- "Shaggy" sprite from virgo
- "shaggy" option in the character customization
-
- MrJWhit updated:
-
- Removed meteor defense tech node
- TEG
-
- Naksu updated:
-
- Odysseus chem synthesizing now works again.
-
- Owai-Seek updated:
-
- Burger, Cargo Packaging, Dirty Magazine, Air Pump, and Scrubber crates.
- Duplicate Crate, Festive Wrapping Paper Crate, Contraband Monkey Meat Crate
- Gave Seed Crate Ambrosia Seed, gave Biker Gang Crate Spraypaint.
- Organised some crates with sub-categories. Also, moved all vendor refills to a new tab.
- Moved Grill to Service Tab
- Engineering Hardsuit Access
- Blood Crate now has all of the current blood types.
- Birthday Cake Recipe is now the same as TG.
- Added Soy Sauce and BBQ Packets to Dinnerware Vendor.
- Added nurse outfit, nurse cap, and mailman hat to loadout.
- Changed the name of scrubs to blue, green, and purple scrubs.
- Bacon and Eggs food item. Delicious! Added a Lemony Poppy Seed Muffin.
- Snack Vendor has Chocolates, Tortilla Chips, and a Marshmallow Box
- Mops can now be printed at service lathe once tools are researched.
- Biobags can hold most organic limbs/organs, but not brains, implants, or cybernetics.
- Trash Bag can now hold limbs (but not heads.)
- Most snack vendor items reduced by 1.
- Trash Cans are now actually craftable, and only require metal instead of plastic.
- Bacon and Eggs, Drying Agent Bottle.
- Mugs now show reagent colors of contained reagents. Thanks Seris!
- Reorganized all food recipes, (hopefully) making things easier to find.
- Trays now have a whitelist, allowing them to pick up normal sized foods, bowls, glassware, booze, ect.
- Easter foods are no longer their own Misc Food Category on the top of the menu.
- fixed a few typos/capitalization consistency.
- Mexican Foods are their own Subcategory.
- Donuts are their own Subcategory
- Moved Sweets from Misc Food in with Pies. Renamed to Pies & Sweets
- BROOM
- Janitor Vendor now has gear for two Janitors.
-
- PersianXerxes updated:
-
- SMES and PACMAN attached to gulag Security to power electrified windows remove: Removed Sec vendor from gulag Security
- Separation of gulag and public mining
- Better clarified the comment explaining the contraband tag.
- Cargo nuclear defusal kits now require an emag'd drop pod console to be purchased.
- Added Kilo Station
- Adjusts Kilo Station to be more in line with Citadel standards
- Added area icons required to make Kilo Station editable on Citadel code
- Fixed a reagent container on Kilo pointing to a nonexistent reagent
- Adds Kilo Station to the maps config file, does not fix Meta Station's population requirement
-
- Psody-Mordheim updated:
-
- You can now make synth-flesh with synthetic blood.
- You can now make synthetic blood via mixing saline glucose, iron, stable plasma and heating it to 350 temp.
- You can mix synthetic blood and cryoxadone to create synth-meat in addition to normal blood.
- Disfiguration Symptom.
- Deoxyribonucleic Acid Saboteur Symptom.
- Polyvitiligo Symptom.
- Revitiligo Symptom.
- Vitiligo Symptom.
-
- Putnam3145 updated:
-
- Added logging to various consent things.
- Lots of new traitor objectives
- gender change potion now respects prefs
- Hypno prefs work better.
- Panic bunker is now round-to-round persistent
- Relief valve now has a TGUI-next UI
- Atmos reaction priority works now.
- map voting doesn't suck anymore
- Dynamic now defaults to "classic" storyteller instead of just failing if the vote didn't choose a storyteller.
- antag quirk blacklisting works now
- default should be... default
- all supermatter damage is now hardcapped
- Supermatter sabotage objective no longer shows up with no supermatter
- Mining vendors no longer fail and eat your points iff you have precisely enough points to pay for an item
- Licking pref
- Fixed IRV.
- Runtime if nobody has a chaos pref set
- IRV fixed... again
- temporary flavor text can now be of reasonable length
- Shooting the supermatter now adds to the supermatter's power. CO2 setups beware!
- Logging for renaming
-
- Raiq & Linzolle updated:
-
- Bone bow - Ash walkers crafting , bone arrows - Ash walkers crafting, silk string used in bow crafting, harden arrows - Ash walkers crafting, ash walker only crafting book, basic pipe bow, and bow & arrow selling. Quivers for ash walkers as well, just to hold some arrows well out on the hunt!
-
- Seris02 updated:
-
- tweaked the way the SM works
- custom reagent pie smite
- hijack implant
- changed mentions of the issilion proc to hasSiliconAccessInArea based on what the proc is used for
- recipe for mammal mutation toxin
- polychromic winter coat
- thief's gloves
- crushing magboots
- golden plastitanium toolbox being actually plastitanuium
- character slot amount
- rebalanced rising bass
- string highlighting whitespace
- glitch with PKA
- meteor hallucinations (again)
- Added naked hallucination
- crowbarring manifests off crates
- makes RCDs cost a better amount
- apc icons
- rest hotkey
- hsl instead of sum of rgb for spraycan lum check
- bloodcrawl's cooldown
-
- ShadeAware updated:
-
- Craftable Switchblades, a weaker subtype of normal switchblades that can be crafted using a Kitchen Knife, Modular Receiver, Rifle Stock and some Cable Coil. Requires a welder to complete.
- You can now actually craft Switchblades.
- Switchblades no longer regain their old Makeshift sprite after retracting if you've made them fancy with Silver.
- The Captain's Wardrobe, a special one-of-a-kind and ID-locked wardrobe for the Captain that holds all of their snowflakey gear. Remove: Snowflake gear from the Captain's locker, since now it has its own vendor.
-
- Tlaltecuhtli, ported by Hatterhat updated:
-
- Ripley, Firefighter, Odysseus and H.O.N.K. mechs now also use scanning modules and capacitors on construction. This means that they also gain reduced power consumption and EMP protection from higher-tier stock parts.
-
- Trilbyspaceclone updated:
-
- Vault hallway door being all access
- Updates change logs
- Crafts are now made of plasteel and can be made with 5 sheets
- Takes away NT's connections to the Aliens that run the Syndicats
- Carps have evolved to take more damage
- restock crates for each vender
- restock units for all station venders
- Sec-vender missing icon
- Box station captain office issues maping: Gulag on box can now be accessed
- Alien stools and chairs
- Bone armor/Dagger are now crafting from bones rather then crafting menu
- Firing pins that only works when not on station
- Medical locked crates
- Russian gear crates have less gear in some cases but all will cost more
- Medical locked crates that were not locked
- Crates that were out of date are corrected
- Heads of staff have been better screened by NT before being promoted
- The suit full of spiders also known as a ninja now is a tactical turtleneck
- The Wiznerds now dont have suits set to max
- Meat wheat no longer has blood
- Flat guns can no longer be suppressed
- replaced stickmans .45 caliber with 10mm, for consistency.
- Meatwheat and Oats now have rarity
- Oats now have at lest 50% more flour in them
- BDM now uses a PKA rather then a normal KA
- Gang tower shield is no longer transparent
- Cosmic winter coat now glows like the bedsheet, and holds normal winter coat gear
- Express console is now logging what it buys, like the normal console should
- Crabs are now made of crab meat.
- AIs now understand the old ways of drunken dwarfs
- Removes some armored Russian hats from box station round start
- Doner items spawning
- Engi/Sec Trek suit no longer has 10% melee protection
- IPC hearts are now made of robomeat and roboblood thats emp proof. Heals and is all and all just like an normal heart
- All robotic organs now have an animation.
- IPC's now organs now look like robotic ones, even tho thats not the case game wise
- Added a new bee themed bar sign
- Makes plywood chair not look as bad.
- corndog sprite being miss-spelled
- Ash from land of lava now is useable for sandstone
- Peach cake slices are no long made by mimes
-
- Tupinambis updated:
-
- the portion of laws that require harm prevention by silicons has been removed.
- silicon_laws.txt config file is required to be modified for full implementation.
- masks no longer improperly stick out of helmets when they should be hidden.
- Status Displays should now update correctly.
- stunbatons now take 4 hits to inflict hard crit, up from 3.
- stunbatons no longer disarm targets.
-
- Yakumo Chen updated:
-
- Rings for your fingers!
- New cargo crates and loadout options to bling your rings!
-
- YakumoChen updated:
-
- Observe is back in the OOC tab
- Rings look nicer. Sprites used from RP.
- Ring on-hands. Diamond rings sparkle!
- You can now propose using a diamond ring in your hand.
- Legion skulls behave like bees!!!!
-
- Zellular updated:
-
- Movement state for pupdozer and its decals
- Tweaked the movement state for the pupdozer's eyes
-
- ancientpower updated:
-
- Fixes an error in pH strips' feedback message.
- Ported drink sliding from /vg/station.
- Fixes color mismatching with the "genitals use skintone" preference.
- Bunny ear style for humanoid species.
- Ghosts are now literate.
-
- bunny232 updated:
-
- Changes the simple animal sentience event from the xenomorph preference to sentience potion preference.
-
- coiax updated:
-
- Admin and event only pair pinpointers! They come in a box of two, and each pinpointer will always point at its corresponding pair. Aww.
-
- deathride58 updated:
-
- Spacemen no longer run at lightspeed on local servers.
-
- kappa-sama updated:
-
- the plant dudes can actually make plant disks now
-
- keronshb updated:
-
- Added repairable turrets
- Adds Tiny Fans to the pirate ship
- changes some reinforced windows to plastinanium pirate windows
- made the pirate shuttle + turrets bomb resistant
- made most pirate machines + consoles indestructible
- increased pirate turret health
- Adds the CogChamp drink and Sprite
- Added burn and knockback to stunhand during HALOS on cult.
- fixed accelerated regeneration nanites
- fixed mechanical repair nanites
- fixed bio reconstruction nanites
-
- kevinz000 updated:
-
- Custom snowflake plushies are now in config rather than code.
- Abductor mindsnapping (aka abductee objectives) can now be "cured" with brain surgery.
- Shuttle hijacking has been completely reworked. Alt-click the shuttle as a hijack-capable mind (so traitors, and especially traitors with hijack) to begin or continue a hacking process.
- A good amount of the blood RGB rework was cleaned up/reverted, with some notable gameplay changes including: Gibs and blood not having max blood by default (no more easy rampages, cultists), infinite gib streaking, etc etc.
- meteor waves are now directional and announces the direction on the command report.
- CTF CLAYMORES
- shoves buffed, now shoving into a wall twice rapidly will also disarm their weapon.
- traitor+bro gamemode minimum population set to 25 until there can be more in depth configuration systems for gamemodes.
- no more bluespace skittish locker diving,
- moths now have unique laughs and can *chitter.
- nuke explosion is now full dev radius for anti lag purposes
- Gangs can now only tag with a gang uplink bought spraycan.
- dueling pistol accesses have been changed to be more accessible.
- mechs no longer have admin logs flooding into IC control console log viewing
- Guncode and energy guns have been refactored a bit.
- You can now combat mode ight click on an energy gun to attempt to switch firing modes. This only works on guns without right click functions overridden.
- shoes can now fit magpistols again.
- Projectiles now always hit chest if targeting chest, snipers have 100% targeting zone accuracy. All other cases are unchanged.
- The lawyer's PDA cartridge has been rebranded to something more accurate to its true nature.
- Refactored ghostreading/etc
- Cyborgization will now de-gang people, even gangheads.
- reactive repulse armor now has an item limit
- beam rifle runtime fix during aiming_beam
- fail2topic runtime fix: taking out an ip while incrementing index resulted in accessing the next-next entry instead of the next and results in out of bound errors.
- gravity gun repulse and chaos now work in all angles, rather than just basic cardinals and diagonals. fun.
- Public autolathes can no longer be hacked.
- Energy weapons now once again have their lens in contents.
- pais are no longer muted for literally a whole hour on emp.
- auto profiler subsystem from tg
- Brig cells now are more accurate by using timeofday instead of realtime
- Cryo now actually transfers reagents at tier 4 on enter rather than every 80 machine fire()-process()s regardless of if it was "reset" by open/close.
- cmo now gets advanced surgery drapes that techweb-sync for advanced surgeries without an operating console.
- ctf claymores now actually spawn (and fit).
- STOP_PROCESSING now removes from currentrun to prevent another process cycle from happening where it shouldn't.
- hand teleporters now require 30 deciseconds of still movement by the user to dispel portals. there's a beam effect too.
- Sort of a bugfix but cult blood magic and all guns now respect stamina softcrit.
- Organ healing rate doubled. Organ decay rate halved to match its define (15 minutes for full decay, so at around 8-10 minutes it'll be really fucked).
- Storage now caches max screen size and only stores when being opened by a non ghost, meaning ghosts will no longer distort living player screens when viewing storage.
- Stunbatons changed yet again.
- the game's built in autoclicker aka CanMobAutoclick no longer triggers client/Click()'s anti clickspam guard.
- pais can no longer bodyblock bullets
- pai radio short changed to 3 minutes down from 5
- pais are no longer fulltile click opacity.
- vampire "immortal haste" has been reworked to be more reliable and consistent.
- hand teles use a less atrocious beam
-
- necromanceranne updated:
-
- Ebows now disarm people hit by them.
- Ebows now do 60 stamina damage on hit.
- Ebows no longer inflict drowsiness
- Miniature ebows do 15 toxin damage, up from 8.
- Ebows have considerably shorter knockdowns.
- Ebows now make you slur rather than stutter.
- Large ebows are now heavy and bulky.
- You can no longer order spinfusors or their ammo from cargo.
- Removed the formal security officer jacket from the secdrobe
- formal security jackets are now armor vests
- Bullets causing bleed rates equal to unmitigated damage through all forms of defense.
- Reverted #9092, crew mecha no longer spawn with tracking beacons.
- [Port] Mecha ballistics weapons now require ammo created from an Exosuit Fabricator or the Security Protolathe, though they will start with a full magazine and in most cases enough for one full reload. Reloading these weapons no longer chunks your power cell. Clown (and mime) mecha equipment have not changed.
- [Port] The SRM-8 Missile Launcher has been replaced with the BRM-6 Breaching Missile Launcher in techwebs (Nukie Mauler remains equipped with the SRM-8).
- [Port] Both Missile Launchers and the Clusterbang Launcher do not have an ammo cache, and cannot be reloaded by the pilot. Once the initial loaded ammo has been spent, you can use the appropriate ammo box to load the weapon directly.
- [Port] Utility mechs that have a clamp equipped can load ammo from their own cargo hold into other mechs.
- [Port] Nuke Ops can purchase spare ammo duffel bags for their mecha weapons, should they run low.
- Literally unclickability with a cham projector
-
- nemvar updated:
-
- Slight changes the self-repair borg module. It no longer references the borg that owns it.
- Trash from food now gets generated at the location of the food item, instead of in the hands of the eater.
- Changed mob biotypes from lists to flags.
-
- r4d6 updated:
-
- Added a dwarf language
- Added more engines
- RPD subcategories and preview icons reorganized.
- RPD now starts with painting turned off, hitting pipes with build and no paint will target the turf underneath instead. Bye bye turf pixelhunting.
- Made dwarves into a roundstart races
- Meteor Timer back to 3-5 minutes
- Mining no longer lead to spess
- Added Plasteel Pickaxe
- Added Titanium Pickaxe
- fixed a missing tile
-
- tralezab, bandit, Skoglol updated:
-
- The mime's PDA messages are silent now!
- 30 new emoji have been added. Mime buff, mime now OP.
-
GoonStation 13 Development Team
diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi
index 7fe37547e9..6a538bc85e 100644
Binary files a/icons/mob/clothing/uniform_digi.dmi and b/icons/mob/clothing/uniform_digi.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi
index 528fd42d23..aa6d38ad07 100644
Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi
index 5bf347fabf..01f77ca8c9 100644
Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index a485deb9ad..cea11f8a49 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index c58fb5d940..58c1cd921c 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index c178cdba04..27caef76b2 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi
index b1d78fa078..5ee3db49e9 100644
Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index e54f55ed46..691d5c8362 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index e7d134c85f..a157d333b0 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm
index 89547c0feb..326bb81745 100644
--- a/modular_citadel/code/_onclick/hud/sprint.dm
+++ b/modular_citadel/code/_onclick/hud/sprint.dm
@@ -54,5 +54,5 @@
/obj/screen/sprint_buffer/proc/update_to_mob(mob/living/L)
var/amount = 0
if(L.sprint_buffer_max > 0)
- amount = round(CLAMP((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5)
+ amount = round(clamp((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5)
icon_state = "prog_bar_[amount]"
diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/modular_citadel/code/_onclick/hud/stamina.dm
index a7b9a79ecd..5484014f8f 100644
--- a/modular_citadel/code/_onclick/hud/stamina.dm
+++ b/modular_citadel/code/_onclick/hud/stamina.dm
@@ -22,7 +22,7 @@
else if(user.hal_screwyhud == 5)
icon_state = "stamina0"
else
- icon_state = "stamina[CLAMP(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]"
+ icon_state = "stamina[clamp(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]"
//stam buffer
/obj/screen/staminabuffer
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 369fb377a5..62fe30f2d7 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -76,7 +76,7 @@
to_chat(H, "Your enormous breasts are way too large to fit anything over them! ")
if(last_checked_size != B.cached_size)
- H.add_movespeed_modifier(BREAST_MOVEMENT_SPEED, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc)
+ H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy, multiplicative_slowdown = moveCalc)
sizeMoveMod(moveCalc)
if (B.size == "huge")
@@ -93,7 +93,7 @@
/datum/status_effect/chem/breast_enlarger/on_remove()
log_game("FERMICHEM: [owner]'s breasts has reduced to an acceptable size. ID: [owner.key]")
to_chat(owner, "Your expansive chest has become a more managable size, liberating your movements. ")
- owner.remove_movespeed_modifier(BREAST_MOVEMENT_SPEED)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy)
sizeMoveMod(1)
return ..()
@@ -152,18 +152,18 @@
playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1)
to_chat(H, "Your enormous package is way to large to fit anything over! ")
- if(P.length < 22 && H.has_movespeed_modifier(DICK_MOVEMENT_SPEED))
+ if(P.length < 22 && H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy))
to_chat(owner, "Your rascally willy has become a more managable size, liberating your movements. ")
- H.remove_movespeed_modifier(DICK_MOVEMENT_SPEED)
- else if(P.length >= 22 && !H.has_movespeed_modifier(DICK_MOVEMENT_SPEED))
+ H.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)
+ else if(P.length >= 22 && !H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy))
to_chat(H, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements! ")
- H.add_movespeed_modifier(DICK_MOVEMENT_SPEED, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc)
+ H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy, multiplicative_slowdown = moveCalc)
H.AdjustBloodVol(bloodCalc)
..()
/datum/status_effect/chem/penis_enlarger/on_remove()
log_game("FERMICHEM: [owner]'s dick has reduced to an acceptable size. ID: [owner.key]")
- owner.remove_movespeed_modifier(DICK_MOVEMENT_SPEED)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)
owner.ResetBloodVol()
return ..()
@@ -280,7 +280,7 @@
var/mob/living/carbon/M = owner
//chem calculations
- if(!owner.reagents.has_reagent(/datum/chemical_reaction/fermi/enthrall) && !owner.reagents.has_reagent(/datum/reagent/fermi/enthrall/test))
+ if(!owner.reagents.has_reagent(/datum/chemical_reaction/fermi/enthrall))
if (phase < 3 && phase != 0)
deltaResist += 3//If you've no chem, then you break out quickly
if(prob(5))
@@ -532,7 +532,7 @@
cooldown += 1 //Cooldown doesn't process till status is done
else if(status == "charge")
- owner.add_movespeed_modifier(MOVESPEED_ID_MKULTRA, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING))
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra)
status = "charged"
if(lewd)
to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed! ")
@@ -542,7 +542,7 @@
else if (status == "charged")
if (statusStrength < 0)
status = null
- owner.remove_movespeed_modifier(MOVESPEED_ID_MKULTRA)
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra)
owner.DefaultCombatKnockdown(50)
to_chat(owner, "Your body gives out as the adrenaline in your system runs out. ")
else
diff --git a/modular_citadel/code/game/machinery/wishgranter.dm b/modular_citadel/code/game/machinery/wishgranter.dm
index 7758c0d613..6cfe07b7a0 100644
--- a/modular_citadel/code/game/machinery/wishgranter.dm
+++ b/modular_citadel/code/game/machinery/wishgranter.dm
@@ -94,9 +94,8 @@
var/mob/living/simple_animal/hostile/venus_human_trap/killwish = new /mob/living/simple_animal/hostile/venus_human_trap(loc)
killwish.maxHealth = 1500
killwish.health = killwish.maxHealth
- killwish.grasp_range = 6
+ killwish.vine_grab_distance = 6
killwish.melee_damage_upper = 30
- killwish.grasp_chance = 50
killwish.loot = list(/obj/item/twohanded/dualsaber/hypereutactic)
charges--
insisting = FALSE
diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm
index e0e1b37a3d..69d2c791e7 100644
--- a/modular_citadel/code/modules/arousal/genitals.dm
+++ b/modular_citadel/code/modules/arousal/genitals.dm
@@ -150,7 +150,8 @@
aroused_state = FALSE
/obj/item/organ/genital/on_life()
- if(!reagents || !owner)
+ . = ..()
+ if(!reagents || !.)
return
reagents.maximum_volume = fluid_max_volume
if(fluid_id && CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION))
diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
index c936eb9dc4..213ebb049a 100644
--- a/modular_citadel/code/modules/arousal/organs/breasts.dm
+++ b/modular_citadel/code/modules/arousal/organs/breasts.dm
@@ -54,7 +54,7 @@
desc += " They're leaking [lowertext(R.name)]."
var/datum/sprite_accessory/S = GLOB.breasts_shapes_list[shape]
var/icon_shape = S ? S.icon_state : "pair"
- var/icon_size = CLAMP(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE)
+ var/icon_size = clamp(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE)
icon_state = "breasts_[icon_shape]_[icon_size]"
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
@@ -73,7 +73,7 @@
//this is far too lewd wah
/obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY)
- var/new_value = CLAMP(cached_size + modifier, min, max)
+ var/new_value = clamp(cached_size + modifier, min, max)
if(new_value == cached_size)
return
prev_size = cached_size
diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm
index c05549aaa0..e1b8dc0dba 100644
--- a/modular_citadel/code/modules/arousal/organs/penis.dm
+++ b/modular_citadel/code/modules/arousal/organs/penis.dm
@@ -21,11 +21,11 @@
var/diameter_ratio = COCK_DIAMETER_RATIO_DEF //0.25; check citadel_defines.dm
/obj/item/organ/genital/penis/modify_size(modifier, min = -INFINITY, max = INFINITY)
- var/new_value = CLAMP(length + modifier, min, max)
+ var/new_value = clamp(length + modifier, min, max)
if(new_value == length)
return
prev_length = length
- length = CLAMP(length + modifier, min, max)
+ length = clamp(length + modifier, min, max)
update()
..()
@@ -60,7 +60,7 @@
else if(!enlargement && status_effect)
owner.remove_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
if(linked_organ)
- linked_organ.size = CLAMP(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX)
+ linked_organ.size = clamp(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX)
linked_organ.update()
size = new_size
diff --git a/modular_citadel/code/modules/language/sylvan.dm b/modular_citadel/code/modules/language/sylvan.dm
new file mode 100644
index 0000000000..c9458bb4cf
--- /dev/null
+++ b/modular_citadel/code/modules/language/sylvan.dm
@@ -0,0 +1,23 @@
+// The language of the vinebings. Yes, it's a shameless ripoff of elvish.
+/datum/language/sylvan
+ name = "Sylvan"
+ desc = "A complicated, ancient language spoken by vine like beings."
+ speech_verb = "expresses"
+ ask_verb = "inquires"
+ exclaim_verb = "declares"
+ key = "h"
+ space_chance = 20
+ syllables = list(
+ "fii", "sii", "rii", "rel", "maa", "ala", "san", "tol", "tok", "dia", "eres",
+ "fal", "tis", "bis", "qel", "aras", "losk", "rasa", "eob", "hil", "tanl", "aere",
+ "fer", "bal", "pii", "dala", "ban", "foe", "doa", "cii", "uis", "mel", "wex",
+ "incas", "int", "elc", "ent", "aws", "qip", "nas", "vil", "jens", "dila", "fa",
+ "la", "re", "do", "ji", "ae", "so", "qe", "ce", "na", "mo", "ha", "yu"
+ )
+ icon = 'icons/obj/hydroponics/harvest.dmi'
+ icon_state = "lily"
+ default_priority = 90
+
+/datum/language_holder/venus
+ languages = list(/datum/language/common, /datum/language/sylvan, /datum/language/machine)
+ only_speaks_language = /datum/language/sylvan
diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
index 2e8feb793a..17c3f17ad8 100644
--- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
@@ -6,7 +6,7 @@
var/directstamloss = (bufferedstam + amount) - stambuffer
if(directstamloss > 0)
adjustStaminaLoss(directstamloss)
- bufferedstam = CLAMP(bufferedstam + amount, 0, stambuffer)
+ bufferedstam = clamp(bufferedstam + amount, 0, stambuffer)
stambufferregentime = world.time + 10
if(updating_health)
update_health_hud()
@@ -15,7 +15,7 @@
if(!forced && (status_flags & GODMODE))
return FALSE
var/obj/item/bodypart/BP = isbodypart(affected_zone)? affected_zone : (get_bodypart(check_zone(affected_zone)) || bodyparts[1])
- if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount)))
+ if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount), FALSE, FALSE))
update_damage_overlays()
if(updating_health)
updatehealth()
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
index 742ef6c9aa..f59d18686a 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
@@ -438,7 +438,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
DefaultCombatKnockdown(15, 1, 1)
else
L.visible_message("[src] pounces on [L]! ", "[src] pounces on you! ")
- L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
+ L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = clamp(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
index a4b6429bea..bcc156a22e 100644
--- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
+++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm
@@ -131,7 +131,7 @@
item_state = "particleblaster"
lefthand_file = 'modular_citadel/icons/mob/inhands/guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/guns_righthand.dmi'
- ammo_type = list(/obj/item/ammo_casing/energy/electrode/pump, /obj/item/ammo_casing/energy/laser/pump)
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler/pump, /obj/item/ammo_casing/energy/laser/pump)
ammo_x_offset = 2
modifystate = 1
@@ -152,19 +152,19 @@
fire_sound = 'sound/weapons/LaserSlugv3.ogg'
/obj/item/ammo_casing/energy/laser/pump
- projectile_type = /obj/item/projectile/beam/weak
- e_cost = 200
+ projectile_type = /obj/item/projectile/beam/pump
+ e_cost = 350
select_name = "kill"
- pellets = 3
+ pellets = 6
variance = 15
fire_sound = 'sound/weapons/ParticleBlaster.ogg'
-/obj/item/ammo_casing/energy/electrode/pump
- projectile_type = /obj/item/projectile/energy/electrode/pump
- select_name = "stun"
+/obj/item/ammo_casing/energy/disabler/pump
+ projectile_type = /obj/item/projectile/energy/disabler/pump
+ select_name = "disable"
fire_sound = 'sound/weapons/LaserSlugv3.ogg'
- e_cost = 300
- pellets = 3
+ e_cost = 150
+ pellets = 6
variance = 20
//PROJECTILES
@@ -181,19 +181,13 @@
speed = 0.6
icon_state = "disablerslug"
-/obj/item/projectile/energy/electrode/pump
- name = "electron blast"
- icon_state = "stunjectile"
+/obj/item/projectile/beam/pump
+ damage = 9
+ range = 6
+
+/obj/item/projectile/energy/disabler/pump
+ name = "disabling blast"
+ icon_state = "disablerslug"
color = null
- nodamage = TRUE
- knockdown = 100
- knockdown_stamoverride = 0
- knockdown_stam_max = 0
- stamina = 18
- stutter = 5
- jitter = 20
- strong_tase = FALSE
- tase_duration = 0
- hitsound = 'sound/weapons/taserhit.ogg'
- range = 3
- strong_tase = FALSE
+ stamina = 13
+ range = 6
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
index 2364c617f0..89a7f58cee 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
@@ -144,20 +144,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
pH = 10
chemical_flags = REAGENT_ONMOBMERGE | REAGENT_DONOTSPLIT //Procs on_mob_add when merging into a human
can_synth = FALSE
-
-
-/datum/reagent/fermi/enthrall/test
- name = "MKUltraTest"
- description = "A forbidden deep red mixture that makes you like Fermis a little too much. Unobtainable and due to be removed from the wiki."
- data = list("creatorID" = "honkatonkbramblesnatch", "creatorGender" = "Mistress", "creatorName" = "Fermis Yakumo")
- creatorID = "honkatonkbramblesnatch"//ckey
- creatorGender = "Mistress"
- creatorName = "Fermis Yakumo"
- purity = 1
-
-/datum/reagent/fermi/enthrall/test/on_new()
- ..()
- creator = get_mob_by_key(creatorID)
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/fermi/enthrall/on_new(list/data)
creatorID = data["creatorID"]
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index 5f9ea5924d..319cad1714 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -52,6 +52,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
inverse_chem_val = 0.5
inverse_chem = /datum/reagent/impure/SDZF
can_synth = TRUE
+ value = REAGENT_VALUE_RARE
//Main SDGF chemical
@@ -309,6 +310,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
can_synth = TRUE
taste_description = "a weird chemical fleshy flavour"
chemical_flags = REAGENT_SNEAKYNAME
+ value = REAGENT_VALUE_RARE
/datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
switch(current_cycle)//Pretends to be normal
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
index a8ac66ef20..8348569fbb 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm
@@ -30,6 +30,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
inverse_chem_val = 0.25
can_synth = FALSE
var/datum/action/chem/astral/AS = new/datum/action/chem/astral()
+ value = REAGENT_VALUE_AMAZING
/datum/action/chem/astral
name = "Return to body"
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
index e0b7a6fa14..28645cdc7b 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm
@@ -29,6 +29,7 @@
var/teleBool = FALSE
pH = 3.7
can_synth = TRUE
+ value = REAGENT_VALUE_EXCEPTIONAL
/datum/reagent/fermi/eigenstate/on_new(list/data)
location_created = data["location_created"]
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
index 97261e07f2..7403de6215 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
@@ -29,6 +29,7 @@
inverse_chem_val = 0.35
inverse_chem = /datum/reagent/fermi/BEsmaller //At really impure vols, it just becomes 100% inverse
can_synth = FALSE
+ value = REAGENT_VALUE_VERY_RARE
var/message_spam = FALSE
/datum/reagent/fermi/breast_enlarger/on_mob_metabolize(mob/living/M)
@@ -126,6 +127,7 @@
taste_description = "a milky ice cream like flavour."
metabolization_rate = 0.25
can_synth = FALSE
+ value = REAGENT_VALUE_RARE
/datum/reagent/fermi/BEsmaller/on_mob_life(mob/living/carbon/M)
var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
@@ -186,6 +188,7 @@
inverse_chem_val = 0.35
inverse_chem = /datum/reagent/fermi/PEsmaller //At really impure vols, it just becomes 100% inverse and shrinks instead.
can_synth = FALSE
+ value = REAGENT_VALUE_VERY_RARE
var/message_spam = FALSE
/datum/reagent/fermi/penis_enlarger/on_mob_metabolize(mob/living/M)
@@ -273,6 +276,7 @@
taste_description = "chinese dragon powder"
metabolization_rate = 0.5
can_synth = FALSE
+ value = REAGENT_VALUE_RARE
/datum/reagent/fermi/PEsmaller/on_mob_life(mob/living/carbon/M)
if(!ishuman(M))
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
index d98ec7059d..48c9ffb7e6 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
@@ -9,6 +9,7 @@
inverse_chem_val = 0.4
inverse_chem = /datum/reagent/impure/yamerol_tox
can_synth = TRUE
+ value = REAGENT_VALUE_VERY_RARE
/datum/reagent/fermi/yamerol/on_mob_life(mob/living/carbon/C)
var/obj/item/organ/tongue/T = C.getorganslot(ORGAN_SLOT_TONGUE)
@@ -100,6 +101,7 @@
data = list("grown_volume" = 0, "injected_vol" = 0)
var/borrowed_health
color = "#FFDADA"
+ value = REAGENT_VALUE_COMMON
/datum/reagent/synthtissue/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
if(iscarbon(M))
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm
deleted file mode 100644
index 87f9d71ce2..0000000000
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/datum/reagent/syndicateadrenals
- name = "Syndicate Adrenaline"
- description = "Regenerates your stamina and increases your reaction time."
- color = "#E62111"
- overdose_threshold = 6
-
-/datum/reagent/syndicateadrenals/on_mob_life(mob/living/M)
- M.adjustStaminaLoss(-5*REM)
- . = ..()
-
-/datum/reagent/syndicateadrenals/on_mob_metabolize(mob/living/M)
- . = ..()
- if(istype(M))
- M.next_move_modifier *= 0.5
- to_chat(M, "You feel an intense surge of energy rushing through your veins. ")
-
-/datum/reagent/syndicateadrenals/on_mob_end_metabolize(mob/living/M)
- . = ..()
- if(istype(M))
- M.next_move_modifier *= 2
- to_chat(M, "You feel as though the world around you is going faster. ")
-
-/datum/reagent/syndicateadrenals/overdose_start(mob/living/M)
- to_chat(M, "You feel an intense pain in your chest... ")
- return
-
-/datum/reagent/syndicateadrenals/overdose_process(mob/living/M)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(!C.undergoing_cardiac_arrest())
- C.set_heartattack(TRUE)
- return
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index eb93d273a7..837524d49f 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -95,7 +95,7 @@
if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less)
ImpureTot *= volume
- var/empVol = CLAMP (volume/10, 0, 15)
+ var/empVol = clamp(volume/10, 0, 15)
empulse(T, empVol, ImpureTot/10, 1)
my_atom.reagents.clear_reagents() //just in case
diff --git a/modular_citadel/icons/obj/guns/pumpactionblaster.dmi b/modular_citadel/icons/obj/guns/pumpactionblaster.dmi
index 363faf3c57..aed4d49956 100644
Binary files a/modular_citadel/icons/obj/guns/pumpactionblaster.dmi and b/modular_citadel/icons/obj/guns/pumpactionblaster.dmi differ
diff --git a/sound/voice/medbot/owo.ogg b/sound/voice/medbot/owo.ogg
new file mode 100644
index 0000000000..0fdaa9d483
Binary files /dev/null and b/sound/voice/medbot/owo.ogg differ
diff --git a/strings/tips.txt b/strings/tips.txt
index f396b3f542..c8f233bb1a 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -63,6 +63,7 @@ As a Roboticist, you can reset a cyborg's module by cutting and mending the rese
As a Roboticist, you can greatly help out Shaft Miners by building a Firefighter APLU equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava!
As a Roboticist, you can augment people with cyborg limbs. Augmented limbs can easily be repaired with cables and welders.
As a Roboticist, you can use your printer that is linked to the ore silo to teleport mats into your work place!
+As a Roboticist, you can upgrade cleanbots with adv mops and brooms to make them faster and better!
As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them.
As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt.
As the AI, you can take pictures with your camera and upload them to newscasters.
diff --git a/tgstation.dme b/tgstation.dme
index 41708bc0bd..b5714a1077 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -17,7 +17,6 @@
#include "_maps\_basemap.dm"
#include "code\_compile_options.dm"
#include "code\world.dm"
-#include "code\__DEFINES\__513_compatibility.dm"
#include "code\__DEFINES\_globals.dm"
#include "code\__DEFINES\_protect.dm"
#include "code\__DEFINES\_tick.dm"
@@ -97,6 +96,7 @@
#include "code\__DEFINES\rust_g.config.dm"
#include "code\__DEFINES\rust_g.dm"
#include "code\__DEFINES\say.dm"
+#include "code\__DEFINES\security_levels.dm"
#include "code\__DEFINES\shuttles.dm"
#include "code\__DEFINES\sight.dm"
#include "code\__DEFINES\sound.dm"
@@ -124,6 +124,8 @@
#include "code\__DEFINES\dcs\helpers.dm"
#include "code\__DEFINES\dcs\signals.dm"
#include "code\__DEFINES\flags\shields.dm"
+#include "code\__DEFINES\misc\return_values.dm"
+#include "code\__DEFINES\skills\skills.dm"
#include "code\__HELPERS\_cit_helpers.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_logging.dm"
@@ -176,6 +178,7 @@
#include "code\_globalvars\logging.dm"
#include "code\_globalvars\misc.dm"
#include "code\_globalvars\regexes.dm"
+#include "code\_globalvars\traits.dm"
#include "code\_globalvars\lists\flavor_misc.dm"
#include "code\_globalvars\lists\maintenance_loot.dm"
#include "code\_globalvars\lists\mapping.dm"
@@ -389,6 +392,7 @@
#include "code\datums\components\explodable.dm"
#include "code\datums\components\footstep.dm"
#include "code\datums\components\forced_gravity.dm"
+#include "code\datums\components\identification.dm"
#include "code\datums\components\igniter.dm"
#include "code\datums\components\infective.dm"
#include "code\datums\components\jousting.dm"
@@ -410,6 +414,7 @@
#include "code\datums\components\remote_materials.dm"
#include "code\datums\components\riding.dm"
#include "code\datums\components\rotation.dm"
+#include "code\datums\components\shielded.dm"
#include "code\datums\components\shrapnel.dm"
#include "code\datums\components\shrink.dm"
#include "code\datums\components\sizzle.dm"
@@ -518,6 +523,7 @@
#include "code\datums\elements\mob_holder.dm"
#include "code\datums\elements\polychromic.dm"
#include "code\datums\elements\spellcasting.dm"
+#include "code\datums\elements\squish.dm"
#include "code\datums\elements\swimming.dm"
#include "code\datums\elements\sword_point.dm"
#include "code\datums\elements\update_icon_blocker.dm"
@@ -566,6 +572,10 @@
#include "code\datums\ruins\lavaland.dm"
#include "code\datums\ruins\space.dm"
#include "code\datums\ruins\station.dm"
+#include "code\datums\skills\_check_skills.dm"
+#include "code\datums\skills\_skill.dm"
+#include "code\datums\skills\_skill_holder.dm"
+#include "code\datums\skills\medical.dm"
#include "code\datums\status_effects\buffs.dm"
#include "code\datums\status_effects\debuffs.dm"
#include "code\datums\status_effects\gas.dm"
@@ -2198,7 +2208,6 @@
#include "code\modules\mob\mob_defines.dm"
#include "code\modules\mob\mob_helpers.dm"
#include "code\modules\mob\mob_movement.dm"
-#include "code\modules\mob\mob_movespeed.dm"
#include "code\modules\mob\mob_transformation_simple.dm"
#include "code\modules\mob\say.dm"
#include "code\modules\mob\say_vr.dm"
@@ -2224,9 +2233,9 @@
#include "code\modules\mob\dead\new_player\sprite_accessories\horns.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\ipc_synths.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\legs_and_taurs.dm"
-#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm"
+#include "code\modules\mob\dead\new_player\sprite_accessories\spines.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\synthliz.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm"
@@ -2594,6 +2603,14 @@
#include "code\modules\modular_computers\hardware\printer.dm"
#include "code\modules\modular_computers\hardware\recharger.dm"
#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
+#include "code\modules\movespeed\_movespeed_modifier.dm"
+#include "code\modules\movespeed\modifiers\components.dm"
+#include "code\modules\movespeed\modifiers\innate.dm"
+#include "code\modules\movespeed\modifiers\items.dm"
+#include "code\modules\movespeed\modifiers\misc.dm"
+#include "code\modules\movespeed\modifiers\mobs.dm"
+#include "code\modules\movespeed\modifiers\reagents.dm"
+#include "code\modules\movespeed\modifiers\status_effects.dm"
#include "code\modules\newscaster\_news.dm"
#include "code\modules\newscaster\feed_channel.dm"
#include "code\modules\newscaster\feed_comment.dm"
@@ -2965,6 +2982,7 @@
#include "code\modules\research\nanites\extra_settings\type.dm"
#include "code\modules\research\nanites\nanite_programs\buffing.dm"
#include "code\modules\research\nanites\nanite_programs\healing.dm"
+#include "code\modules\research\nanites\nanite_programs\protocols.dm"
#include "code\modules\research\nanites\nanite_programs\rogue.dm"
#include "code\modules\research\nanites\nanite_programs\sensor.dm"
#include "code\modules\research\nanites\nanite_programs\suppression.dm"
@@ -3211,7 +3229,7 @@
#include "code\modules\vending\clothesmate.dm"
#include "code\modules\vending\coffee.dm"
#include "code\modules\vending\cola.dm"
-#include "code\modules\vending\drinnerware.dm"
+#include "code\modules\vending\dinnerware.dm"
#include "code\modules\vending\engineering.dm"
#include "code\modules\vending\engivend.dm"
#include "code\modules\vending\games.dm"
@@ -3303,6 +3321,7 @@
#include "modular_citadel\code\modules\custom_loadout\custom_items.dm"
#include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm"
#include "modular_citadel\code\modules\custom_loadout\read_from_file.dm"
+#include "modular_citadel\code\modules\language\sylvan.dm"
#include "modular_citadel\code\modules\mentor\dementor.dm"
#include "modular_citadel\code\modules\mentor\follow.dm"
#include "modular_citadel\code\modules\mentor\mentor.dm"
@@ -3341,7 +3360,6 @@
#include "modular_citadel\code\modules\reagents\chemistry\reagents\fermi_reagents.dm"
#include "modular_citadel\code\modules\reagents\chemistry\reagents\healing.dm"
#include "modular_citadel\code\modules\reagents\chemistry\reagents\MKUltra.dm"
-#include "modular_citadel\code\modules\reagents\chemistry\reagents\other_reagents.dm"
#include "modular_citadel\code\modules\reagents\chemistry\reagents\SDGF.dm"
#include "modular_citadel\code\modules\reagents\chemistry\recipes\fermi.dm"
#include "modular_citadel\code\modules\reagents\objects\clothes.dm"