diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm
index 8ae3ff1f62..d028ac106f 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm
@@ -5,10 +5,6 @@
"ab" = (
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
-"ac" = (
-/obj/effect/mob_spawn/human/engineer/rig,
-/turf/open/floor/plating/snowed/smoothed/icemoon,
-/area/icemoon/surface/outdoors)
"ad" = (
/obj/machinery/power/floodlight,
/obj/structure/cable{
@@ -176,10 +172,9 @@
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"aI" = (
-/obj/item/pda/engineering{
- note = "To-do: Check on singularity status. Get a pint at eat. Nag the research manager for RCDs."
- },
-/turf/open/floor/plating/asteroid/snow/icemoon,
+/obj/effect/turf_decal/stripes/line,
+/obj/item/clothing/suit/space/hardsuit/engine,
+/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
"aJ" = (
/obj/effect/decal/cleanable/dirt,
@@ -346,20 +341,10 @@
/obj/effect/decal/cleanable/blood/splatter,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
-"be" = (
-/obj/item/card/id{
- access = list(200,204,11,12,10);
- assignment = "Senior Station Engineer";
- desc = "A card used to provide ID and determine access across the station. There's blood dripping from the corner. Ew.";
- name = "George 'Plastic' Miller's ID Card (Senior Station Engineer)";
- registered_name = "George 'Plastic' Miller"
- },
-/turf/open/floor/plating/asteroid/snow/icemoon,
-/area/icemoon/surface/outdoors)
"bf" = (
-/obj/effect/gibspawner/generic,
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/gibs/core,
+/obj/item/clothing/suit/space/hardsuit/engine,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors)
"bg" = (
@@ -544,10 +529,6 @@
/obj/item/shard/plasma,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
-"bz" = (
-/obj/item/clothing/suit/space/hardsuit/engine,
-/turf/open/floor/plating/asteroid/snow/icemoon,
-/area/icemoon/surface/outdoors)
"bA" = (
/obj/item/flashlight/flare,
/turf/open/floor/plating/asteroid/snow/icemoon,
@@ -1013,13 +994,6 @@
},
/turf/open/floor/plating/icemoon,
/area/icemoon/surface/outdoors)
-"cU" = (
-/obj/effect/mob_spawn/human/engineer/rig,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating/icemoon,
-/area/icemoon/surface/outdoors)
"cV" = (
/obj/effect/turf_decal/trimline/neutral/filled/line,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -1032,12 +1006,7 @@
},
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
-"cX" = (
-/obj/machinery/rnd/production/circuit_imprinter,
-/turf/open/floor/plating/snowed/smoothed/icemoon,
-/area/icemoon/surface/outdoors)
"cY" = (
-/obj/machinery/rnd/production/protolathe/department/engineering,
/obj/machinery/light/small/broken,
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/surface/outdoors)
@@ -1437,9 +1406,9 @@ aa
aa
aa
aa
-aI
aa
-be
+aa
+aa
aa
aa
aa
@@ -1452,7 +1421,7 @@ ak
aa
"}
(9,1,1) = {"
-ac
+ab
ab
al
ap
@@ -1461,7 +1430,7 @@ aa
aa
aa
bf
-bz
+aa
aa
aa
af
@@ -1507,7 +1476,7 @@ bA
aa
aa
af
-cA
+aI
DM
dc
al
@@ -1529,7 +1498,7 @@ aa
ab
ab
cF
-cU
+gA
al
al
aO
@@ -1698,7 +1667,7 @@ cf
cr
cB
cI
-cX
+ab
aB
aa
aa
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm
index d920cc03c5..93b221c446 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_hotsprings.dmm
@@ -1,6 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
-/turf/open/floor/plating/asteroid/snow/icemoon,
+/turf/closed/indestructible/riveted/uranium,
/area/icemoon/surface/outdoors)
"b" = (
/turf/closed/mineral/random/snow/no_caves,
@@ -12,7 +12,17 @@
/obj/item/paper/crumpled{
info = "When one falls into this hot spring, they shall forever be turned into..."
},
-/turf/open/floor/plating/asteroid/snow/icemoon,
+/turf/open/floor/plating/beach/sand,
+/area/icemoon/surface/outdoors)
+"I" = (
+/turf/closed/indestructible/fakeglass,
+/area/icemoon/surface/outdoors)
+"L" = (
+/obj/structure/fluff/beach_umbrella,
+/turf/open/floor/plating/beach/sand,
+/area/icemoon/surface/outdoors)
+"U" = (
+/turf/open/floor/plating/beach/sand,
/area/icemoon/surface/outdoors)
(1,1,1) = {"
@@ -34,7 +44,7 @@ b
b
a
a
-a
+I
a
a
b
@@ -45,11 +55,11 @@ b
b
b
a
-a
-a
-a
-a
-a
+U
+U
+U
+U
+U
a
b
b
@@ -57,65 +67,65 @@ b
(4,1,1) = {"
b
a
-a
-a
+U
+L
c
c
c
-a
-a
+U
+U
a
b
"}
(5,1,1) = {"
b
a
-a
+U
c
c
c
c
c
-a
+U
a
b
"}
(6,1,1) = {"
b
-a
-a
+I
+U
c
c
c
c
c
-a
-a
+U
+I
b
"}
(7,1,1) = {"
b
a
-a
+U
c
c
c
c
c
-a
+U
a
b
"}
(8,1,1) = {"
b
a
-a
-a
+U
+L
c
c
c
-a
-a
+U
+U
a
b
"}
@@ -123,11 +133,11 @@ b
b
b
a
-a
-a
+U
+U
d
-a
-a
+U
+U
a
b
b
@@ -138,7 +148,7 @@ b
b
a
a
-a
+I
a
a
b
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm
index 5e68de864f..704ac63a7d 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm
@@ -20,12 +20,6 @@
},
/turf/open/floor/mineral/diamond,
/area/icemoon/surface/outdoors)
-"f" = (
-/obj/structure/sign/poster/contraband/lusty_xenomorph,
-/obj/structure/falsewall/abductor,
-/obj/structure/fans/tiny,
-/turf/open/floor/mineral/diamond,
-/area/icemoon/surface/outdoors)
(1,1,1) = {"
a
@@ -101,7 +95,7 @@ d
e
d
c
-f
+b
a
a
"}
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 4a14660e57..5232c94686 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -38016,6 +38016,7 @@
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/pipedispenser,
/turf/open/floor/engine,
/area/science/storage)
"bII" = (
@@ -38028,12 +38029,14 @@
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
+/obj/machinery/pipedispenser/disposal,
/turf/open/floor/engine,
/area/science/storage)
"bIJ" = (
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/machinery/pipedispenser/disposal/transit_tube,
/turf/open/floor/engine,
/area/science/storage)
"bIK" = (
@@ -38987,6 +38990,8 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKT" = (
@@ -39005,6 +39010,10 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKU" = (
@@ -39052,9 +39061,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKW" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-8"
},
@@ -39067,11 +39073,15 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKX" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 0;
+ name = "Mix to Engine"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -39090,10 +39100,10 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bKZ" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
"bLa" = (
@@ -39476,6 +39486,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bLZ" = (
@@ -39547,6 +39560,7 @@
/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
dir = 4
},
+/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMf" = (
@@ -39556,6 +39570,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMh" = (
@@ -39570,6 +39587,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bMi" = (
@@ -40010,53 +40030,49 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNd" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNe" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNf" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
+/obj/item/beacon,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNg" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 1;
- name = "Air to Distro"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 5
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to Ports"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNi" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 4
},
+/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNj" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 6
- },
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Mix to Ports"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNk" = (
@@ -40066,13 +40082,13 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNl" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bNm" = (
@@ -40463,81 +40479,75 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/vending/wardrobe/atmos_wardrobe,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOj" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/door/airlock/atmos/glass{
- name = "Atmospherics Monitoring";
- req_access_txt = "24"
- },
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bOk" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOl" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+ dir = 10
+ },
+/obj/machinery/space_heater,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOm" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOn" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOo" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to Port"
- },
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOp" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Pure to Mix"
- },
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOq" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump/on{
+/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
- name = "Unfiltered to Mix"
+ name = "Pure to Mix"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOr" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bOs" = (
/obj/structure/sign/warning/fire,
@@ -40740,133 +40750,65 @@
/area/engine/atmos)
"bOQ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+ dir = 10
},
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bOR" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
},
-/turf/closed/wall/r_wall,
+/turf/open/floor/plating,
/area/engine/atmos)
"bOS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics Monitoring";
- dir = 1
- },
-/obj/machinery/space_heater,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/effect/turf_decal/vg_decals/atmos/mix,
+/turf/open/floor/engine/vacuum,
/area/engine/atmos)
"bOT" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 5
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bOU" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+/obj/machinery/atmospherics/components/binary/pump/on{
+ name = "Waste to Filter"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOV" = (
-/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/item/multitool{
- layer = 4
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bOW" = (
-/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/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Air to External"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOX" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/sheet/metal/fifty{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/stack/sheet/glass,
-/obj/item/stack/rods/fifty,
-/obj/item/pipe_dispenser,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bOY" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bOZ" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPa" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bPb" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Pure to Port"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bPc" = (
-/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bPd" = (
-/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
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -40879,14 +40821,15 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPf" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
"bPg" = (
@@ -41104,60 +41047,76 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPO" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/sorting/mail{
+ sortType = 6
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPP" = (
-/obj/structure/tank_dispenser,
-/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/structure/closet/secure_closet/atmospherics,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPQ" = (
/turf/closed/wall,
/area/engine/atmos)
"bPR" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- name = "Waste In"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel,
+/turf/closed/wall,
/area/engine/atmos)
"bPS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Atmospherics Central";
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPT" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Air to Port"
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Air to Distro"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPU" = (
/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to Port"
+ name = "Air to Ports"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPV" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPW" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPX" = (
@@ -41172,6 +41131,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bPY" = (
@@ -41186,14 +41146,14 @@
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bQa" = (
-/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)
"bQb" = (
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bQc" = (
@@ -41496,10 +41456,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQF" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/obj/effect/landmark/start/atmospheric_technician,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
@@ -41509,54 +41465,48 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQG" = (
-/obj/machinery/computer/atmos_control{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQH" = (
-/obj/machinery/pipedispenser,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plasteel,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
/area/engine/atmos)
"bQJ" = (
-/obj/structure/closet/secure_closet/atmospherics,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Ports to Filter"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQK" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
},
-/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQL" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bQM" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bQN" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{
- dir = 1
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 1;
+ name = "Unfiltered to Mix"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -41830,105 +41780,88 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bRr" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/door/window/northleft{
- dir = 4;
- name = "Atmospherics Desk";
- req_access_txt = "24"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "atmos";
- name = "atmospherics security door"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/closed/wall/r_wall,
/area/engine/atmos)
"bRs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/obj/effect/landmark/start/atmospheric_technician,
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/structure/tank_dispenser,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRt" = (
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bRw" = (
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bRx" = (
+/obj/machinery/computer/atmos_control,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bRy" = (
+/obj/structure/closet/secure_closet/atmospherics,
/obj/machinery/requests_console{
department = "Atmospherics";
departmentType = 4;
name = "Atmos RC";
pixel_x = 30
},
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/computer/atmos_alert{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bRv" = (
-/obj/machinery/pipedispenser/disposal,
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics Central";
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bRw" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/effect/turf_decal/tile/yellow{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bRx" = (
-/obj/machinery/suit_storage_unit/atmos,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bRy" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
+/obj/effect/turf_decal/tile/yellow,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRz" = (
+/obj/structure/disposalpipe/segment,
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRA" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/structure/chair/office/dark{
+ dir = 1
},
-/obj/machinery/meter,
+/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRB" = (
@@ -41939,6 +41872,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bRC" = (
@@ -42177,6 +42111,11 @@
id = "atmos";
name = "atmospherics security door"
},
+/obj/machinery/door/window/northleft{
+ dir = 4;
+ name = "Atmospherics Desk";
+ req_access_txt = "24"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSb" = (
@@ -42189,76 +42128,70 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/conveyor_switch{
+ id = "atmosdeliver"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSc" = (
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 2;
- sortType = 6
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSd" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/suit_storage_unit/atmos,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bSe" = (
+/obj/machinery/suit_storage_unit/atmos,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSe" = (
-/obj/machinery/pipedispenser/disposal/transit_tube,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSf" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/item/wrench,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bSg" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/light{
dir = 8
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSh" = (
-/obj/machinery/camera{
- c_tag = "Atmospherics Starboard";
- dir = 8
- },
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
name = "Plasma Outlet Pump"
},
/obj/effect/turf_decal/tile/yellow,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bSi" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
"bSj" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
dir = 8;
@@ -42530,31 +42463,42 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSR" = (
-/obj/machinery/light{
- dir = 8
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Port to Filter"
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSS" = (
-/obj/item/beacon,
+/obj/structure/chair/office/dark,
+/obj/effect/landmark/start/atmospheric_technician,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bST" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
+/obj/machinery/computer/atmos_alert{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSU" = (
/obj/machinery/atmospherics/components/unary/thermomachine/heater{
- dir = 8
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -42570,6 +42514,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bSW" = (
@@ -42579,14 +42524,14 @@
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bSX" = (
-/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)
"bSY" = (
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bSZ" = (
@@ -42922,19 +42867,22 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTI" = (
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTJ" = (
@@ -42947,6 +42895,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTK" = (
@@ -42986,87 +42937,72 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTM" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = 30;
- pixel_y = 26
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/machinery/vending/wardrobe/atmos_wardrobe,
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTP" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/structure/reagent_dispensers/watertank/high,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/structure/fireaxecabinet{
- pixel_y = 32
+ pixel_x = -32
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/structure/reagent_dispensers/fueltank,
-/obj/machinery/camera{
- c_tag = "Atmospherics Mixing"
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTR" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Port to Filter"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTS" = (
-/obj/item/cigbutt,
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bTT" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bTU" = (
+"bTN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bTO" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"bTP" = (
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{
dir = 1
},
+/obj/machinery/camera{
+ c_tag = "Atmospherics Starboard";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bTQ" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "atmos";
+ name = "atmospherics security door"
+ },
+/obj/machinery/door/firedoor/heavy,
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet/firecloset,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bTR" = (
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bTS" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bTT" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bTV" = (
@@ -43213,9 +43149,6 @@
/obj/machinery/camera{
c_tag = "Engineering Access"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_y = 24
@@ -43239,89 +43172,86 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUq" = (
/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 9
},
+/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/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)
"bUt" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUu" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUv" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "incinerator mix pump"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bUw" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 4
+ dir = 5
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bUx" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
+"bUv" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"bUw" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUy" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUz" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
/area/engine/atmos)
"bUA" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 10
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"bUC" = (
/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/plating/asteroid,
@@ -43613,12 +43543,12 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/break_room)
"bVc" = (
@@ -43630,10 +43560,8 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVd" = (
@@ -43663,35 +43591,42 @@
/obj/structure/disposalpipe/segment{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVg" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
},
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 6
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bVi" = (
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
- dir = 1
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/atmos)
"bVj" = (
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/yellow/visible,
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "incinerator mix pump"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVk" = (
@@ -43703,24 +43638,25 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVl" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
"bVm" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/turf/open/space,
-/area/space/nearstation)
+/obj/machinery/atmospherics/pipe/layer_manifold,
+/turf/open/floor/plating,
+/area/engine/atmos)
"bVn" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output{
dir = 8
@@ -44008,44 +43944,21 @@
},
/turf/open/floor/plasteel,
/area/engine/break_room)
-"bVV" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Waste to Space"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bVW" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bVX" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
+/turf/closed/wall/r_wall,
+/area/maintenance/disposal/incinerator)
"bVY" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "O2 to Pure"
+/obj/machinery/atmospherics/pipe/manifold/yellow/visible{
+ dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bVZ" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWa" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "N2 to Pure"
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -44057,6 +43970,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWc" = (
@@ -44064,24 +43978,19 @@
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
-"bWd" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/turf/open/space,
-/area/space/nearstation)
"bWe" = (
/obj/machinery/air_sensor/atmos/carbon_tank,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bWf" = (
-/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)
"bWg" = (
/obj/machinery/light/small{
dir = 4
},
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bWh" = (
@@ -44398,43 +44307,34 @@
/area/engine/break_room)
"bWI" = (
/obj/machinery/portable_atmospherics/scrubber,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWJ" = (
/obj/machinery/portable_atmospherics/pump,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bWK" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWL" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bWM" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bWN" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 10
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWO" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWP" = (
@@ -44445,8 +44345,8 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWQ" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 10
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -44458,14 +44358,6 @@
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plating,
/area/engine/atmos)
-"bWS" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/turf/open/space,
-/area/space/nearstation)
"bWT" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input{
dir = 8
@@ -44644,11 +44536,13 @@
/area/engine/engineering)
"bXr" = (
/obj/machinery/portable_atmospherics/scrubber,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Waste to Space"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXs" = (
@@ -44657,14 +44551,22 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 5
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXt" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXu" = (
@@ -44675,6 +44577,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXv" = (
@@ -44683,6 +44588,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXw" = (
@@ -44691,7 +44599,10 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXx" = (
@@ -44702,6 +44613,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXy" = (
@@ -44712,17 +44626,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"bXz" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
+/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXA" = (
@@ -44753,6 +44657,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXD" = (
@@ -44769,7 +44674,6 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXE" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
@@ -44780,6 +44684,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXF" = (
@@ -44793,15 +44698,13 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"bXG" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 6
- },
/turf/closed/wall/r_wall,
/area/engine/atmos)
"bXI" = (
@@ -44998,17 +44901,11 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
-"bYq" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
"bYs" = (
/obj/machinery/atmospherics/pipe/simple/green/hidden{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"bYt" = (
@@ -45019,9 +44916,6 @@
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"bYu" = (
-/obj/machinery/atmospherics/pipe/simple/green/hidden{
- dir = 9
- },
/obj/structure/cable{
icon_state = "1-2"
},
@@ -45029,9 +44923,16 @@
name = "Incinerator";
req_access_txt = "24"
},
+/obj/machinery/atmospherics/pipe/simple/green/hidden{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal/incinerator)
"bYv" = (
+/obj/machinery/atmospherics/pipe/simple/green/hidden{
+ dir = 9
+ },
/turf/closed/wall,
/area/maintenance/disposal/incinerator)
"bYw" = (
@@ -45430,16 +45331,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"bZd" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/space,
-/area/space/nearstation)
-"bZe" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/space,
-/area/space/nearstation)
"bZf" = (
/obj/machinery/power/apc{
dir = 8;
@@ -45479,6 +45370,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal/incinerator)
"bZh" = (
@@ -45497,7 +45389,6 @@
/area/maintenance/disposal/incinerator)
"bZi" = (
/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -45646,10 +45537,12 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"bZK" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+/obj/structure/lattice,
+/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{
dir = 1
},
-/turf/open/floor/plating/airless,
+/obj/structure/lattice/catwalk,
+/turf/open/space,
/area/engine/atmos)
"bZL" = (
/obj/machinery/atmospherics/pipe/simple,
@@ -45690,6 +45583,9 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 5
+ },
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal/incinerator)
"bZQ" = (
@@ -45709,11 +45605,14 @@
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/purple/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/dark,
/area/maintenance/disposal/incinerator)
"bZR" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 5
+ dir = 4
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
@@ -46166,16 +46065,14 @@
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cbt" = (
-/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)
"cbu" = (
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cbv" = (
-/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)
"cbw" = (
@@ -46183,8 +46080,8 @@
/turf/open/floor/engine/air,
/area/engine/atmos)
"cbx" = (
-/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)
"cby" = (
@@ -46385,10 +46282,12 @@
/area/engine/engineering)
"ccm" = (
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"ccn" = (
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cco" = (
@@ -50093,15 +49992,15 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cqG" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"cqH" = (
@@ -53276,7 +53175,9 @@
/area/medical/chemistry)
"dJk" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
+ },
/turf/open/floor/plating,
/area/engine/atmos)
"dJm" = (
@@ -53979,12 +53880,6 @@
},
/turf/open/floor/wood,
/area/lawoffice)
-"fuR" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"fvb" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -54801,10 +54696,9 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"hjk" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
"hjD" = (
@@ -54818,6 +54712,17 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"hka" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/machinery/camera{
+ c_tag = "Atmospherics Console";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"hkQ" = (
/obj/machinery/light{
dir = 4
@@ -55907,10 +55812,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/crew_quarters/dorms)
-"jLW" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
-/turf/closed/wall/r_wall,
-/area/maintenance/disposal/incinerator)
"jOB" = (
/turf/open/floor/plating,
/area/storage/emergency/starboard)
@@ -56032,6 +55933,16 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/medical/chemistry)
+"kas" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"kaR" = (
/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
dir = 8
@@ -56559,12 +56470,6 @@
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"lhP" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"liR" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -56579,12 +56484,6 @@
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"ljG" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"lms" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -58403,10 +58302,13 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
"pmB" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "N2 to Pure"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"pnU" = (
@@ -59925,13 +59827,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"tbw" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/space,
-/area/space/nearstation)
"tbF" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
@@ -60223,13 +60118,6 @@
/obj/item/wrench,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"tDE" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Engine"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"tHk" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -61498,13 +61386,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"wJP" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/purple/visible{
- dir = 9
- },
-/turf/open/space,
-/area/space/nearstation)
"wKa" = (
/obj/machinery/light/small,
/turf/open/floor/plating,
@@ -61520,12 +61401,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/cmo)
-"wLK" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"wMF" = (
/obj/effect/spawner/lootdrop/three_course_meal,
/obj/effect/spawner/lootdrop/three_course_meal,
@@ -96271,7 +96146,7 @@ bRq
bCC
bSP
bTG
-bUo
+bTQ
bVc
bUo
bWH
@@ -96787,7 +96662,7 @@ bLW
bTH
bUp
bVe
-bVV
+bUp
bWI
bXr
bKQ
@@ -97037,14 +96912,14 @@ bMZ
bOh
bOP
bPO
-bPO
+bRz
bRt
bSc
bSQ
bTI
bUq
bVf
-bQI
+bMf
bWJ
bXs
bJN
@@ -97297,12 +97172,12 @@ bPP
bQG
bRu
bSd
-bLW
+bTO
bTJ
bMf
-bUs
bMf
-fuR
+bMf
+bMf
bXt
bYp
eAZ
@@ -97549,17 +97424,17 @@ bJN
bJN
bNb
bOj
-bOR
-bJN
-bJN
-bJN
-bJN
+bPQ
+bRx
+bRA
+bSS
+bST
bJN
bTK
-bUr
-bVg
-bVW
-bWL
+bMf
+bMf
+bMf
+bMf
bXu
bLW
cui
@@ -97806,19 +97681,19 @@ bJN
bLY
bNc
bOk
-bOS
bPQ
+bRy
+hka
bQH
-bRv
bSe
bPQ
bTL
-bUs
bMf
-bVX
+bMf
+bMf
bWM
bXv
-bWc
+bVh
poP
bZL
caB
@@ -98065,18 +97940,18 @@ bNd
bOl
bOT
bPR
+bPQ
+bPQ
bQI
-bQI
-bQI
-bQI
-bTM
-bUs
-ljG
+bPQ
+bNc
+bMf
+bMf
hjk
pmB
bXw
dJk
-tbw
+cui
bJP
bJP
bJP
@@ -98322,18 +98197,18 @@ bNe
bOm
bOU
bPS
-bPS
-bRw
-bMf
-bMf
+bSf
+bUp
+bTM
+bUp
bTN
-bUt
-wLK
-bOk
-bWK
-bXt
+bMf
+bMf
+bVZ
+bOX
+bUA
bYp
-bZd
+eAZ
bZL
caC
cbu
@@ -98576,21 +98451,21 @@ bJL
bKR
bMb
bNf
-bOk
+bQJ
bOV
-bPQ
-bQJ
-bRx
-bQJ
-bPQ
-bTO
-ljG
-lhP
-bOk
-bWL
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bVZ
+bOX
bXx
-bLW
-abI
+bVi
+cui
bMi
caD
cbv
@@ -98834,20 +98709,20 @@ bJN
bMc
bNg
bOn
-bOW
-bPQ
-bPQ
-bPQ
-bPQ
-bPQ
-bTP
-wLK
-bVh
+bOX
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
bVY
-bWM
-bXy
-bWc
-bZe
+bUs
+bVg
+bVm
+poP
bZL
caE
cbu
@@ -99089,22 +98964,22 @@ bIE
bJN
bJN
bMd
-bNf
-bOk
+bPT
+bOn
bOX
-bPQ
-bQK
-bQK
-bQK
-bPQ
-bTQ
-wLK
-bKX
-bOk
-bWN
-bXz
-bYq
-abI
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bVZ
+bOX
+kas
+bNm
+cui
bJP
bJP
bJP
@@ -99348,20 +99223,20 @@ bKS
bMe
bNh
bOo
-bOY
-bPT
-bQL
-bRy
-bSf
-bSR
-bTM
-wLK
-bKX
+bOX
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
bVZ
bWO
bXA
bQO
-bZe
+poP
bZM
caF
cbw
@@ -99602,23 +99477,23 @@ aht
aaa
bJN
bKT
-bMf
+bWM
bNi
-bOk
+bQK
bOZ
bMf
bMf
-bRz
bMf
-bSS
-bTR
-tDE
-bKX
-bWa
+bMf
+bMf
+bMf
+bMf
+bMf
+bVZ
bMf
bXB
bNm
-abI
+cui
bMi
caG
cbx
@@ -99859,23 +99734,23 @@ bCP
bAA
bHw
bKU
-bMf
-bMf
-bOk
-bPa
+bOr
bPU
-bOY
-bRA
-bOY
-bST
-bTS
-bUu
-bVi
-bMe
+bRw
+bPa
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bMf
+bVY
bWP
bXy
bQO
-bZe
+poP
bZN
caH
cby
@@ -100116,23 +99991,23 @@ bCR
bIF
bHw
bKV
+bOX
+bUv
+bQL
+bPa
+bMf
bMf
bMf
-bOk
-bPb
bMf
-bQM
-bQM
-bQM
bSU
bTT
bUv
bKX
-bMf
-bMf
+bTR
+bUt
bXC
bYs
-bYw
+bVW
bYw
bYw
cBT
@@ -100376,17 +100251,17 @@ bKW
bMg
bNj
bOp
-bPc
bPV
bPV
bPV
-bSg
bPV
bPV
bUw
+bUw
+bUw
bVj
-bMg
-bMg
+bTS
+bUu
bXD
bYt
bZf
@@ -100630,19 +100505,19 @@ bCR
bIH
bHw
cqG
-bMf
+bOX
bNk
bOq
bPd
bPW
-bQN
+bPW
bPW
bPd
bPW
-bTU
-bUx
-bPd
bPW
+bPW
+bPd
+bUr
bWQ
bXE
bYu
@@ -100889,18 +100764,18 @@ bHw
bKY
bMh
bNl
-bOi
+bQM
bPe
bPX
-bNl
+bSR
bRB
bSh
bSV
-bNl
+bTP
bUy
bVk
bWb
-bNl
+bUz
bXF
bYv
bZh
@@ -101144,22 +101019,22 @@ bHv
bIJ
bHw
bKZ
-bLW
-bNm
-bOr
+bOR
+bWR
+bWc
bPf
bPY
bQO
bPY
-bSi
+bPf
bPY
bQO
-bUz
+bWc
bVl
bWc
bWR
bXG
-jLW
+bYw
bZi
bZR
caL
@@ -101411,11 +101286,11 @@ abI
bLa
abI
bNn
-bUA
-bVm
-bWd
-bWS
-wJP
+abI
+bLa
+abI
+bNn
+abI
aht
bZj
bZS
@@ -102172,7 +102047,7 @@ buz
abI
bJP
bLd
-bLe
+bOS
bLe
bJP
bPh
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index f9c3b0d427..2b19b557b2 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -298,6 +298,8 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
#define ARCHIVE_TEMPERATURE(gas) gas.temperature_archived = gas.temperature
+#define ARCHIVE(gas) gas.temperature_archived = gas.temperature; gas.gas_archive = gas.gases.Copy();
+
GLOBAL_LIST_INIT(pipe_paint_colors, list(
"amethyst" = rgb(130,43,255), //supplymain
"blue" = rgb(0,0,255),
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 74ce8519a2..6ef8b07ddd 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -35,9 +35,9 @@
/// Default combat flags for those affected by ((stamina combat))
#define COMBAT_FLAGS_DEFAULT NONE
/// Default combat flags for everyone else (so literally everyone but humans)
-#define COMBAT_FLAGS_STAMSYSTEM_EXEMPT (COMBAT_FLAG_SPRINT_ACTIVE | COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_SPRINT_TOGGLED | COMBAT_FLAG_COMBAT_TOGGLED)
+#define COMBAT_FLAGS_STAMSYSTEM_EXEMPT (COMBAT_FLAG_SPRINT_ACTIVE | COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_SPRINT_TOGGLED | COMBAT_FLAG_COMBAT_TOGGLED | COMBAT_FLAG_SPRINT_FORCED | COMBAT_FLAG_COMBAT_FORCED)
/// Default combat flags for those only affected by sprint (so just silicons)
-#define COMBAT_FLAGS_STAMEXEMPT_YESSPRINT (COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_COMBAT_TOGGLED)
+#define COMBAT_FLAGS_STAMEXEMPT_YESSPRINT (COMBAT_FLAG_COMBAT_ACTIVE | COMBAT_FLAG_COMBAT_TOGGLED | COMBAT_FLAG_COMBAT_FORCED)
/// The user wants combat mode on
#define COMBAT_FLAG_COMBAT_TOGGLED (1<<0)
@@ -57,6 +57,10 @@
#define COMBAT_FLAG_INTENTIONALLY_RESTING (1<<7)
/// Currently stamcritted but not as violently
#define COMBAT_FLAG_SOFT_STAMCRIT (1<<8)
+/// Force combat mode on at all times, overrides everything including combat disable traits.
+#define COMBAT_FLAG_COMBAT_FORCED (1<<9)
+/// Force sprint mode on at all times, overrides everything including sprint disable traits.
+#define COMBAT_FLAG_SPRINT_FORCED (1<<10)
// Helpers for getting someone's stamcrit state. Cast to living.
#define NOT_STAMCRIT 0
@@ -263,7 +267,17 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default.
#define BULLET_ACT_TURF "TURF" //It hit us but it should hit something on the same turf too. Usually used for turfs.
-/// Bitflags for check_block() and handle_block(). Meant to be combined. You can be hit and still reflect, for example, if you do not use BLOCK_SUCCESS.
+/// Check whether or not we can block, without "triggering" a block. Basically run checks without effects like depleting shields.
+/// Wrapper for do_run_block(). The arguments on that means the same as for this.
+#define mob_check_block(object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list)\
+ do_run_block(FALSE, object, damage, attack_text, attack_type, armour_penetration, attacker, check_zone(def_zone), return_list)
+
+/// Runs a block "sequence", effectively checking and then doing effects if necessary.
+/// Wrapper for do_run_block(). The arguments on that means the same as for this.
+#define mob_run_block(object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list)\
+ do_run_block(TRUE, object, damage, attack_text, attack_type, armour_penetration, attacker, check_zone(def_zone), return_list)
+
+/// Bitflags for check_block() and run_block(). Meant to be combined. You can be hit and still reflect, for example, if you do not use BLOCK_SUCCESS.
/// Attack was not blocked
#define BLOCK_NONE NONE
/// Attack was blocked, do not do damage. THIS FLAG MUST BE THERE FOR DAMAGE/EFFECT PREVENTION!
diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm
index dc2ac19e65..add4a8e277 100644
--- a/code/__DEFINES/language.dm
+++ b/code/__DEFINES/language.dm
@@ -3,5 +3,24 @@
#define LANGUAGE_HIDE_ICON_IF_UNDERSTOOD 4
#define LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD 8
-#define LANGUAGE_KNOWN "language_known"
-#define LANGUAGE_SHADOWED "language_shadowed"
+// LANGUAGE SOURCE DEFINES
+#define LANGUAGE_ALL "all" // For use in full removal only.
+#define LANGUAGE_ATOM "atom"
+#define LANGUAGE_MIND "mind"
+
+#define LANGUAGE_ABSORB "absorb"
+#define LANGUAGE_APHASIA "aphasia"
+#define LANGUAGE_BLOODSUCKER "bloodsucker"
+#define LANGUAGE_CLOCKIE "clockie"
+#define LANGUAGE_CULTIST "cultist"
+#define LANGUAGE_CURATOR "curator"
+#define LANGUAGE_DEVIL "devil"
+#define LANGUAGE_GLAND "gland"
+#define LANGUAGE_HAT "hat"
+#define LANGUAGE_HIGH "high"
+#define LANGUAGE_MALF "malf"
+#define LANGUAGE_MASTER "master"
+#define LANGUAGE_SOFTWARE "software"
+#define LANGUAGE_STONER "stoner"
+#define LANGUAGE_VASSAL "vassal"
+#define LANGUAGE_VOICECHANGE "voicechange"
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index df91223ed1..1dce4ecc42 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -255,6 +255,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
current_user = M.client
//Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
+ menu_holder.plane = ABOVE_HUD_PLANE
menu_holder.appearance_flags |= KEEP_APART
menu_holder.vis_contents += elements + close_button
current_user.images += menu_holder
@@ -285,13 +286,16 @@ GLOBAL_LIST_EMPTY(radial_menus)
Choices should be a list where list keys are movables or text used for element names and return value
and list values are movables/icons/images used for element icons
*/
-/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE)
+/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE)
if(!user || !anchor || !length(choices))
return
if(!uniqueid)
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
if(GLOB.radial_menus[uniqueid])
+ if(!no_repeat_close)
+ var/datum/radial_menu/menu = GLOB.radial_menus[uniqueid]
+ menu.finished = TRUE
return
var/datum/radial_menu/menu = new
@@ -308,4 +312,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/answer = menu.selected_choice
qdel(menu)
GLOB.radial_menus -= uniqueid
+ if(require_near && !in_range(anchor, user))
+ return
+ if(istype(custom_check))
+ if(!custom_check.Invoke())
+ return
return answer
\ No newline at end of file
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 5e69c46a81..33cfef03c7 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -131,7 +131,7 @@
/mob/living/attacked_by(obj/item/I, mob/living/user)
var/totitemdamage = pre_attacked_by(I, user)
- if((user != src) && run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user) & BLOCK_SUCCESS)
+ if((user != src) && mob_run_block(I, totitemdamage, "the [I.name]", ATTACK_TYPE_MELEE, I.armour_penetration, user, null, null) & BLOCK_SUCCESS)
return FALSE
send_item_attack_message(I, user)
I.do_stagger_action(src, user, totitemdamage)
@@ -163,7 +163,7 @@
if(!user.mind || !I.used_skills)
return
if(.)
- . = user.mind.skill_holder.item_action_skills_mod(., I.skill_difficulty, SKILL_ATTACK_MOB, bad_flag)
+ . = user.mind.skill_holder.item_action_skills_mod(I, ., I.skill_difficulty, SKILL_ATTACK_MOB, bad_flag)
for(var/skill in I.used_skills)
if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_MOB))
continue
@@ -216,7 +216,7 @@
. *= STAM_COST_NO_COMBAT_MULT
bad_flag |= SKILL_COMBAT_MODE
if(used_skills && user.mind)
- . = user.mind.skill_holder.item_action_skills_mod(., skill_difficulty, flags, bad_flag, FALSE)
+ . = user.mind.skill_holder.item_action_skills_mod(src, ., skill_difficulty, flags, bad_flag, FALSE)
/// How long this staggers for. 0 and negatives supported.
/obj/item/proc/melee_stagger_duration(force_override)
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 2c317ade2a..2eefb82f97 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -35,6 +35,13 @@
/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
return key_name in config.modes
+/datum/config_entry/keyed_list/force_antag_count
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+
+/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
+ return key_name in config.modes
+
/datum/config_entry/keyed_list/policy
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_TEXT
diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm
index 3f71d192e3..e5e1434ab8 100644
--- a/code/datums/brain_damage/imaginary_friend.dm
+++ b/code/datums/brain_damage/imaginary_friend.dm
@@ -91,7 +91,6 @@
trauma = _trauma
owner = trauma.owner
- copy_known_languages_from(owner, TRUE)
setup_friend()
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index 0e08c4cd15..e076c30ae1 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -26,21 +26,15 @@
scan_desc = "extensive damage to the brain's language center"
gain_text = "You have trouble forming words in your head..."
lose_text = "You suddenly remember how languages work."
- var/datum/language_holder/prev_language
- var/datum/language_holder/mob_language
/datum/brain_trauma/severe/aphasia/on_gain()
- mob_language = owner.get_language_holder()
- prev_language = mob_language.copy()
- mob_language.remove_all_languages()
- mob_language.grant_language(/datum/language/aphasia)
+ owner.add_blocked_language(subtypesof(/datum/language/) - /datum/language/aphasia, LANGUAGE_APHASIA)
+ owner.grant_language(/datum/language/aphasia, TRUE, TRUE, LANGUAGE_APHASIA)
..()
/datum/brain_trauma/severe/aphasia/on_lose()
- mob_language.remove_language(/datum/language/aphasia)
- mob_language.copy_known_languages_from(prev_language) //this will also preserve languages learned during the trauma
- QDEL_NULL(prev_language)
- mob_language = null
+ owner.remove_blocked_language(subtypesof(/datum/language/), LANGUAGE_APHASIA)
+ owner.remove_language(/datum/language/aphasia, TRUE, TRUE, LANGUAGE_APHASIA)
..()
/datum/brain_trauma/severe/blindness
diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm
index d32d0d4f2e..23a81716b8 100644
--- a/code/datums/components/mood.dm
+++ b/code/datums/components/mood.dm
@@ -1,3 +1,4 @@
+#define SLIGHT_INSANITY_PEN 1
#define MINOR_INSANITY_PEN 5
#define MAJOR_INSANITY_PEN 10
#define MOOD_INSANITY_MALUS 0.0054 // per point of sanity below SANITY_DISTURBED, a 40% debuff to skills at rock bottom depression.
@@ -183,7 +184,7 @@
master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/crazy)
sanity_level = 5
if(SANITY_UNSTABLE to SANITY_DISTURBED)
- setInsanityEffect(0)
+ setInsanityEffect(SLIGHT_INSANITY_PEN)
master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/disturbed)
sanity_level = 4
if(SANITY_DISTURBED to SANITY_NEUTRAL)
@@ -211,12 +212,12 @@
return
//var/mob/living/master = parent
//master.crit_threshold = (master.crit_threshold - insanity_effect) + newval
- insanity_effect = newval
- if(insanity_effect)
+ if(!insanity_effect && newval)
RegisterSignal(parent, COMSIG_MOB_ACTION_SKILL_MOD, .proc/on_mob_action_skill_mod)
RegisterSignal(parent, COMSIG_MOB_ITEM_ACTION_SKILLS_MOD, .proc/on_item_action_skills_mod)
- else
+ else if(insanity_effect && !newval)
UnregisterSignal(parent, list(COMSIG_MOB_ACTION_SKILL_MOD, COMSIG_MOB_ITEM_ACTION_SKILLS_MOD))
+ insanity_effect = newval
/datum/component/mood/proc/modify_sanity(datum/source, amount, minimum = SANITY_INSANE, maximum = SANITY_AMAZING)
setSanity(sanity + amount, minimum, maximum)
@@ -333,6 +334,7 @@
return
return_value[1] *= SKILL_AFFINITY_MOOD_BONUS
+#undef SLIGHT_INSANITY_PEN
#undef MINOR_INSANITY_PEN
#undef MAJOR_INSANITY_PEN
#undef MOOD_INSANITY_MALUS
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index 651acda6e1..747dd8ca61 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -208,13 +208,13 @@
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(/datum/movespeed_modifier/human_carry)
if(!fireman_carrying)
M.Daze(25)
REMOVE_TRAIT(M, TRAIT_MOBILITY_NOUSE, src)
+ return ..()
/datum/component/riding/human/vehicle_mob_buckle(datum/source, mob/living/M, force = FALSE)
. = ..()
diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm
index bbacdd885d..79966b8f54 100644
--- a/code/datums/diseases/advance/symptoms/sensory.dm
+++ b/code/datums/diseases/advance/symptoms/sensory.dm
@@ -58,7 +58,7 @@
var/mob/living/carbon/C = M
if(prob(10))
if(trauma_heal_severe)
- C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_LOBOTOMY)
+ C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_SURGERY)
else
C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm
index 9be484d99a..9fa6ed5cc8 100644
--- a/code/datums/diseases/advance/symptoms/voice_change.dm
+++ b/code/datums/diseases/advance/symptoms/voice_change.dm
@@ -30,7 +30,6 @@ Bonus
symptom_delay_max = 120
var/scramble_language = FALSE
var/datum/language/current_language
- var/datum/language_holder/original_language
threshold_desc = list(
"Transmission 14" = "The host's language center of the brain is damaged, leading to complete inability to speak or understand any language.",
"Stage Speed 7" = "Changes voice more often.",
@@ -48,9 +47,6 @@ Bonus
symptom_delay_max = 85
if(A.properties["transmittable"] >= 14) //random language
scramble_language = TRUE
- var/mob/living/M = A.affected_mob
- var/datum/language_holder/mob_language = M.get_language_holder()
- original_language = mob_language.copy()
/datum/symptom/voice_change/Activate(datum/disease/advance/A)
if(!..())
@@ -64,12 +60,10 @@ Bonus
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.SetSpecialVoice(H.dna.species.random_name(H.gender))
- if(scramble_language)
- H.remove_language(current_language)
+ if(scramble_language && !current_language) // Last part prevents rerolling language with small amounts of cure.
current_language = pick(subtypesof(/datum/language) - /datum/language/common)
- H.grant_language(current_language)
- var/datum/language_holder/mob_language = H.get_language_holder()
- mob_language.only_speaks_language = current_language
+ H.add_blocked_language(subtypesof(/datum/language) - current_language, LANGUAGE_VOICECHANGE)
+ H.grant_language(current_language, TRUE, TRUE, LANGUAGE_VOICECHANGE)
/datum/symptom/voice_change/End(datum/disease/advance/A)
..()
@@ -77,7 +71,5 @@ Bonus
var/mob/living/carbon/human/H = A.affected_mob
H.UnsetSpecialVoice()
if(scramble_language)
- var/mob/living/M = A.affected_mob
- M.copy_known_languages_from(original_language, TRUE)
- current_language = null
- QDEL_NULL(original_language)
+ A.affected_mob.remove_blocked_language(subtypesof(/datum/language), LANGUAGE_VOICECHANGE)
+ A.affected_mob.remove_all_languages(LANGUAGE_VOICECHANGE) // In case someone managed to get more than one anyway.
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index e0df2a8f1b..8f7a8ca72f 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -355,6 +355,11 @@
var/datum/species/old_species = dna.species
dna.species = new_race
dna.species.on_species_gain(src, old_species, pref_load)
+ if(ishuman(src))
+ qdel(language_holder)
+ var/species_holder = initial(mrace.species_language_holder)
+ language_holder = new species_holder(src)
+ update_atom_languages()
/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE)
..()
diff --git a/code/datums/elements/flavor_text.dm b/code/datums/elements/flavor_text.dm
index e9d8f278f4..f44215d9ac 100644
--- a/code/datums/elements/flavor_text.dm
+++ b/code/datums/elements/flavor_text.dm
@@ -5,12 +5,16 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
id_arg_index = 3
var/flavor_name = "Flavor Text"
var/list/texts_by_atom = list()
- var/addendum = "This can also be used for OOC notes and preferences!"
+ var/addendum = ""
var/always_show = FALSE
var/max_len = MAX_FLAVOR_LEN
var/can_edit = TRUE
+ /// For preference/DNA saving/loading. Null to prevent. Prefs are only loaded from obviously if it exists in preferences.features.
+ var/save_key
+ /// Do not attempt to render a preview on examine. If this is on, it will display as \[flavor_name\]
+ var/examine_no_preview = FALSE
-/datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE)
+/datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE, _save_key, _examine_no_preview = FALSE)
. = ..()
if(. == ELEMENT_INCOMPATIBLE || !isatom(target)) //no reason why this shouldn't work on atoms too.
@@ -25,6 +29,8 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
addendum = _addendum
always_show = _always_show
can_edit = _edit
+ save_key = _save_key
+ examine_no_preview = _examine_no_preview
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/show_flavor)
@@ -33,9 +39,12 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
LAZYOR(GLOB.mobs_with_editable_flavor_text[M], src)
M.verbs |= /mob/proc/manage_flavor_tests
+ if(save_key && ishuman(target))
+ RegisterSignal(target, COMSIG_HUMAN_PREFS_COPIED_TO, .proc/update_prefs_flavor_text)
+
/datum/element/flavor_text/Detach(atom/A)
. = ..()
- UnregisterSignal(A, COMSIG_PARENT_EXAMINE)
+ UnregisterSignal(A, list(COMSIG_PARENT_EXAMINE, COMSIG_HUMAN_PREFS_COPIED_TO))
texts_by_atom -= A
if(can_edit && ismob(A))
var/mob/M = A
@@ -58,6 +67,9 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
var/text = texts_by_atom[target]
if(!text)
return
+ if(examine_no_preview)
+ examine_list += "\[[flavor_name]\]"
+ return
var/msg = replacetext(text, "\n", " ")
if(length_char(msg) <= 40)
examine_list += "[msg]"
@@ -112,13 +124,17 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
return TRUE
return FALSE
+/datum/element/flavor_text/proc/update_prefs_flavor_text(mob/living/carbon/human/H, datum/preferences/P, icon_updates = TRUE, roundstart_checks = TRUE)
+ if(P.features.Find(save_key))
+ texts_by_atom[H] = P.features[save_key]
+
//subtypes with additional hooks for DNA and preferences.
/datum/element/flavor_text/carbon
//list of antagonists etcetera that should have nothing to do with people's snowflakes.
var/static/list/i_dont_even_know_who_you_are = typecacheof(list(/datum/antagonist/abductor, /datum/antagonist/ert,
/datum/antagonist/nukeop, /datum/antagonist/wizard))
-/datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE)
+/datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE, _save_key = "flavor_text", _examine_no_preview = FALSE)
if(!iscarbon(target))
return ELEMENT_INCOMPATIBLE
. = ..()
@@ -127,7 +143,6 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
RegisterSignal(target, COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, .proc/update_dna_flavor_text)
RegisterSignal(target, COMSIG_MOB_ANTAG_ON_GAIN, .proc/on_antag_gain)
if(ishuman(target))
- RegisterSignal(target, COMSIG_HUMAN_PREFS_COPIED_TO, .proc/update_prefs_flavor_text)
RegisterSignal(target, COMSIG_HUMAN_HARDSET_DNA, .proc/update_dna_flavor_text)
RegisterSignal(target, COMSIG_HUMAN_ON_RANDOMIZE, .proc/unset_flavor)
@@ -136,15 +151,12 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
UnregisterSignal(C, list(COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, COMSIG_MOB_ANTAG_ON_GAIN, COMSIG_HUMAN_PREFS_COPIED_TO, COMSIG_HUMAN_HARDSET_DNA, COMSIG_HUMAN_ON_RANDOMIZE))
/datum/element/flavor_text/carbon/proc/update_dna_flavor_text(mob/living/carbon/C)
- texts_by_atom[C] = C.dna.features["flavor_text"]
-
-/datum/element/flavor_text/carbon/proc/update_prefs_flavor_text(mob/living/carbon/human/H, datum/preferences/P, icon_updates = TRUE, roundstart_checks = TRUE)
- texts_by_atom[H] = P.features["flavor_text"]
+ texts_by_atom[C] = C.dna.features[save_key]
/datum/element/flavor_text/carbon/set_flavor(mob/living/carbon/user)
. = ..()
if(. && user.dna)
- user.dna.features["flavor_text"] = texts_by_atom[user]
+ user.dna.features[save_key] = texts_by_atom[user]
/datum/element/flavor_text/carbon/proc/unset_flavor(mob/living/carbon/user)
texts_by_atom[user] = ""
@@ -153,4 +165,4 @@ GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
if(is_type_in_typecache(antag, i_dont_even_know_who_you_are))
texts_by_atom[user] = ""
if(user.dna)
- user.dna.features["flavor_text"] = ""
\ No newline at end of file
+ user.dna.features[save_key] = ""
diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm
index f763affcd1..dc32902e5e 100644
--- a/code/datums/explosion.dm
+++ b/code/datums/explosion.dm
@@ -76,7 +76,9 @@ GLOBAL_LIST_EMPTY(explosions)
//I would make this not ex_act the thing that triggered the explosion,
//but everything that explodes gives us their loc or a get_turf()
//and somethings expect us to ex_act them so they can qdel()
- stoplag() //tldr, let the calling proc call qdel(src) before we explode
+ //stoplag() //tldr, let the calling proc call qdel(src) before we explode
+ // no - use sleep. stoplag() results in quirky things like explosions taking too long to process and hanging mid-air for no reason.
+ sleep(0)
EX_PREPROCESS_EXIT_CHECK
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index f07b1d8792..f189a91353 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -72,7 +72,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
/datum/material/uranium/on_applied(atom/source, amount, material_flags)
. = ..()
- source.AddComponent(/datum/component/radioactive, amount / 20, source, 0) //half-life of 0 because we keep on going.
+ source.AddComponent(/datum/component/radioactive, amount / 60, source, 0) //half-life of 0 because we keep on going.
/datum/material/uranium/on_removed(atom/source, material_flags)
. = ..()
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 54fcbbc6aa..a9438fa80b 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -85,8 +85,7 @@
/datum/mind/proc/get_language_holder()
if(!language_holder)
- var/datum/language_holder/L = current.get_language_holder(shadow=FALSE)
- language_holder = L.copy(src)
+ language_holder = new (src)
return language_holder
@@ -101,9 +100,6 @@
if(iscarbon(current))
var/mob/living/carbon/C = current
C.disable_intentional_combat_mode(TRUE)
- if(!language_holder)
- var/datum/language_holder/mob_holder = new_character.get_language_holder(shadow = FALSE)
- language_holder = mob_holder.copy(src)
if(key)
if(new_character.key != key) //if we're transferring into a body with a key associated which is not ours
@@ -131,6 +127,7 @@
transfer_martial_arts(new_character)
if(active || force_key_move)
new_character.key = key //now transfer the key to link the client to our new body
+ current.update_atom_languages()
//CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm
index e474272326..d4db7e34c2 100644
--- a/code/datums/mutations/speech.dm
+++ b/code/datums/mutations/speech.dm
@@ -277,10 +277,10 @@
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
- owner.grant_language(/datum/language/beachbum)
- owner.remove_language(/datum/language/common)
+ owner.grant_language(/datum/language/beachbum, TRUE, TRUE, LANGUAGE_STONER)
+ owner.add_blocked_language(subtypesof(/datum/language) - /datum/language/beachbum, LANGUAGE_STONER)
/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner)
..()
- owner.grant_language(/datum/language/common)
- owner.remove_language(/datum/language/beachbum)
+ owner.remove_language(/datum/language/beachbum, TRUE, TRUE, LANGUAGE_STONER)
+ owner.remove_blocked_language(subtypesof(/datum/language) - /datum/language/beachbum, LANGUAGE_STONER)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 32dde45195..fe617ddb0f 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -11,7 +11,7 @@
var/throw_range = 7
var/mob/pulledby = null
var/initial_language_holder = /datum/language_holder
- var/datum/language_holder/language_holder
+ var/datum/language_holder/language_holder // Mindless mobs and objects need language too, some times. Mind holder takes prescedence.
var/verb_say = "says"
var/verb_ask = "asks"
var/verb_exclaim = "exclaims"
@@ -502,88 +502,94 @@
animate(src, pixel_y = initial(pixel_y), time = 10)
setMovetype(movement_type & ~FLOATING)
-/* Language procs */
-/atom/movable/proc/get_language_holder(shadow=TRUE)
- if(language_holder)
- return language_holder
- else
+
+/* Language procs
+* Unless you are doing something very specific, these are the ones you want to use.
+*/
+
+/// Gets or creates the relevant language holder. For mindless atoms, gets the local one. For atom with mind, gets the mind one.
+/atom/movable/proc/get_language_holder(get_minds = TRUE)
+ if(!language_holder)
language_holder = new initial_language_holder(src)
- return language_holder
+ return language_holder
-/atom/movable/proc/grant_language(datum/language/dt, body = FALSE)
- var/datum/language_holder/H = get_language_holder(!body)
- H.grant_language(dt, body)
+/// Grants the supplied language and sets omnitongue true.
+/atom/movable/proc/grant_language(language, understood = TRUE, spoken = TRUE, source = LANGUAGE_ATOM)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.grant_language(language, understood, spoken, source)
-/atom/movable/proc/grant_all_languages(omnitongue=FALSE)
- var/datum/language_holder/H = get_language_holder()
- H.grant_all_languages(omnitongue)
+/// Grants every language.
+/atom/movable/proc/grant_all_languages(understood = TRUE, spoken = TRUE, grant_omnitongue = TRUE, source = LANGUAGE_MIND)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.grant_all_languages(understood, spoken, grant_omnitongue, source)
+/// Removes a single language.
+/atom/movable/proc/remove_language(language, understood = TRUE, spoken = TRUE, source = LANGUAGE_ALL)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.remove_language(language, understood, spoken, source)
+
+/// Removes every language and sets omnitongue false.
+/atom/movable/proc/remove_all_languages(source = LANGUAGE_ALL, remove_omnitongue = FALSE)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.remove_all_languages(source, remove_omnitongue)
+
+/// Adds a language to the blocked language list. Use this over remove_language in cases where you will give languages back later.
+/atom/movable/proc/add_blocked_language(language, source = LANGUAGE_ATOM)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.add_blocked_language(language, source)
+
+/// Removes a language from the blocked language list.
+/atom/movable/proc/remove_blocked_language(language, source = LANGUAGE_ATOM)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.remove_blocked_language(language, source)
+
+/// Checks if atom has the language. If spoken is true, only checks if atom can speak the language.
+/atom/movable/proc/has_language(language, spoken = FALSE)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.has_language(language, spoken)
+
+/// Checks if atom can speak the language.
+/atom/movable/proc/can_speak_language(language)
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.can_speak_language(language)
+
+/// Returns the result of tongue specific limitations on spoken languages.
+/atom/movable/proc/could_speak_language(language)
+ return TRUE
+
+/// Returns selected language, if it can be spoken, or finds, sets and returns a new selected language if possible.
+/atom/movable/proc/get_selected_language()
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.get_selected_language()
+
+/// Gets a random understood language, useful for hallucinations and such.
/atom/movable/proc/get_random_understood_language()
- var/datum/language_holder/H = get_language_holder()
- . = H.get_random_understood_language()
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.get_random_understood_language()
-/atom/movable/proc/remove_language(datum/language/dt, body = FALSE)
- var/datum/language_holder/H = get_language_holder(!body)
- H.remove_language(dt, body)
+/// Gets a random spoken language, useful for forced speech and such.
+/atom/movable/proc/get_random_spoken_language()
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.get_random_spoken_language()
-/atom/movable/proc/remove_all_languages()
- var/datum/language_holder/H = get_language_holder()
- H.remove_all_languages()
+/// Copies all languages into the supplied atom/language holder. Source should be overridden when you
+/// do not want the language overwritten by later atom updates or want to avoid blocked languages.
+/atom/movable/proc/copy_languages(from_holder, source_override)
+ if(isatom(from_holder))
+ var/atom/movable/thing = from_holder
+ from_holder = thing.get_language_holder()
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.copy_languages(from_holder, source_override)
-/atom/movable/proc/has_language(datum/language/dt)
- var/datum/language_holder/H = get_language_holder()
- . = H.has_language(dt)
-
-/atom/movable/proc/copy_known_languages_from(thing, replace=FALSE)
- var/datum/language_holder/H = get_language_holder()
- . = H.copy_known_languages_from(thing, replace)
-
-// Whether an AM can speak in a language or not, independent of whether
-// it KNOWS the language
-/atom/movable/proc/could_speak_in_language(datum/language/dt)
- . = TRUE
-
-/atom/movable/proc/can_speak_in_language(datum/language/dt)
- var/datum/language_holder/H = get_language_holder()
-
- if(!H.has_language(dt))
- return FALSE
- else if(H.omnitongue)
- return TRUE
- else if(could_speak_in_language(dt) && (!H.only_speaks_language || H.only_speaks_language == dt))
- return TRUE
- else
- return FALSE
-
-/atom/movable/proc/get_default_language()
- // if no language is specified, and we want to say() something, which
- // language do we use?
- var/datum/language_holder/H = get_language_holder()
-
- if(H.selected_default_language)
- if(can_speak_in_language(H.selected_default_language))
- return H.selected_default_language
- else
- H.selected_default_language = null
-
-
- var/datum/language/chosen_langtype
- var/highest_priority
-
- for(var/lt in H.languages)
- var/datum/language/langtype = lt
- if(!can_speak_in_language(langtype))
- continue
-
- var/pri = initial(langtype.default_priority)
- if(!highest_priority || (pri > highest_priority))
- chosen_langtype = langtype
- highest_priority = pri
-
- H.selected_default_language = .
- . = chosen_langtype
+/// Empties out the atom specific languages and updates them according to the current atoms language holder.
+/// As a side effect, it also creates missing language holders in the process.
+/atom/movable/proc/update_atom_languages()
+ var/datum/language_holder/LH = get_language_holder()
+ return LH.update_atom_languages(src)
/* End language procs */
+
+
/atom/movable/proc/ConveyorMove(movedir)
set waitfor = FALSE
if(!anchored && has_gravity())
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index e2c549d911..a7ccada9f2 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -417,7 +417,7 @@
if(player.assigned_role == job)
candidates -= player
- if(candidates.len < recommended_enemies)
+ if(candidates.len < recommended_enemies && CONFIG_GET(keyed_list/force_antag_count)[config_tag])
for(var/mob/dead/new_player/player in players)
if(player.client && player.ready == PLAYER_READY_TO_PLAY)
if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 067f10fa0f..3a79ff3c82 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -396,7 +396,6 @@ GLOBAL_LIST_EMPTY(network_holopads)
Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY)
Hologram.Impersonation = user
- Hologram.copy_known_languages_from(user,replace = TRUE)
Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it.
Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
Hologram.setAnchored(TRUE)//So space wind cannot drag it.
@@ -555,9 +554,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
Hologram.alpha = 170
Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY)
Hologram.dir = SOUTH //for now
- Hologram.grant_all_languages(omnitongue=TRUE)
var/datum/language_holder/holder = Hologram.get_language_holder()
- holder.selected_default_language = record.language
+ holder.selected_language = record.language
Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it.
Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
Hologram.setAnchored(TRUE)//So space wind cannot drag it.
@@ -649,7 +647,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
return
if(HOLORECORD_LANGUAGE)
var/datum/language_holder/holder = replay_holo.get_language_holder()
- holder.selected_default_language = entry[2]
+ holder.selected_language = entry[2]
if(HOLORECORD_PRESET)
var/preset_type = entry[2]
var/datum/preset_holoimage/H = new preset_type
@@ -672,6 +670,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
updateDialog()
/obj/effect/overlay/holo_pad_hologram
+ initial_language_holder = /datum/language_holder/universal
var/mob/living/Impersonation
var/datum/holocall/HC
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index c26c66a55f..8545e6f35c 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -114,7 +114,6 @@
add_fingerprint(user)
if(charging)
charging.update_icon()
- charging.forceMove(drop_location())
user.put_in_hands(charging)
/obj/machinery/recharger/attack_tk(mob/user)
diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm
index 4e3e11d1e2..a9b6736f05 100644
--- a/code/game/machinery/telecomms/broadcasting.dm
+++ b/code/game/machinery/telecomms/broadcasting.dm
@@ -100,7 +100,7 @@
obj/source, // the originating radio
frequency, // the frequency the signal is taking place on
atom/movable/virtualspeaker/speaker, // representation of the method's speaker
- datum/language/language, // the langauge of the message
+ datum/language/language, // the language of the message
message, // the text content of the message
spans // the list of spans applied to the message
)
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index de1c035000..19b6d0a9bd 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -3,6 +3,46 @@
////////////////////////////////
/datum/component/construction/mecha
var/base_icon
+ var/looky_helpy = TRUE
+
+/datum/component/construction/mecha/examine(mob/user)
+ . = ..()
+ if(looky_helpy)
+ switch(steps[index]["key"])
+ if(TOOL_WRENCH)
+ . += "The mech could be wrenched into place."
+ if(TOOL_SCREWDRIVER)
+ . += "The mech could be screwed into place."
+ if(TOOL_WIRECUTTER)
+ . += "The mech wires could be trimmed into place."
+ if(/obj/item/stack/cable_coil)
+ . += "The mech could use some wiring."
+ if(/obj/item/circuitboard)
+ . += "The mech could use a type ofcircuitboard."
+ if(/obj/item/stock_parts/scanning_module)
+ . += "The mech could use a scanning stock part."
+ if(/obj/item/stock_parts/capacitor)
+ . += "The mech could use a power based stock part."
+ if(/obj/item/stock_parts/cell)
+ . += "The mech could use a power source."
+ if(/obj/item/stack/sheet/metal)
+ . += "The mech could use some sheets of metal."
+ if(/obj/item/stack/sheet/plasteel)
+ . += "The mech could use some sheets of strong steel."
+ if(/obj/item/bikehorn)
+ . += "HONK IT!."
+ if(/obj/item/clothing/mask/gas/clown_hat)
+ . += "GIVE IT CLOWN MAKEUP HONK!."
+ if(/obj/item/clothing/shoes/clown_shoes)
+ . += "GIVE IT GOOFY SHOES HONK HONK!."
+ if(/obj/item/mecha_parts/part)
+ . += "The mech could use a mech part."
+ if(/obj/item/stack/ore/bluespace_crystal)
+ . += "The mech could use a crystal of sorts."
+ if(/obj/item/assembly/signaler/anomaly)
+ . += "The mech could use a anomaly of sorts."
+ else
+ return
/datum/component/construction/mecha/spawn_result()
if(!result)
diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm
index d9f231b318..b63a126c5d 100644
--- a/code/game/objects/empulse.dm
+++ b/code/game/objects/empulse.dm
@@ -7,7 +7,7 @@
if(log)
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
- log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
+ log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
if(heavy_range >= 1)
new /obj/effect/temp_visual/emp/pulse(epicenter)
@@ -29,4 +29,4 @@
T.emp_act(EMP_LIGHT)
else if(distance <= light_range)
T.emp_act(EMP_LIGHT)
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm
index 2daf6f0c0b..6648db46c4 100644
--- a/code/game/objects/items/cardboard_cutouts.dm
+++ b/code/game/objects/items/cardboard_cutouts.dm
@@ -6,17 +6,42 @@
icon_state = "cutout_basic"
w_class = WEIGHT_CLASS_BULKY
resistance_flags = FLAMMABLE
- // Possible restyles for the cutout;
- // add an entry in change_appearance() if you add to here
- var/list/possible_appearances = list("Assistant", "Clown", "Mime",
- "Traitor", "Nuke Op", "Cultist", "Brass Cultist", "Clockwork Cultist",
- "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer",
- "Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon",
- "Laughter Demon", "Private Security Officer", "Securitron", "Gondola", "Monkey")
- var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
- var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
+ /// Possible restyles for the cutout, add an entry in change_appearance() if you add to here
+ var/static/list/possible_appearances
+ /// If the cutout is pushed over and has to be righted
+ var/pushed_over = FALSE
+ /// If the cutout actually appears as what it portray and not a discolored version
+ var/deceptive = FALSE
- var/lastattacker = null
+/obj/item/cardboard_cutout/Initialize()
+ . = ..()
+ if(possible_appearances)
+ return
+ possible_appearances = sortList(list(
+ "Assistant" = image(icon = src.icon, icon_state = "cutout_greytide"),
+ "Clown" = image(icon = src.icon, icon_state = "cutout_clown"),
+ "Mime" = image(icon = src.icon, icon_state = "cutout_mime"),
+ "Traitor" = image(icon = src.icon, icon_state = "cutout_traitor"),
+ "Nuke Op" = image(icon = src.icon, icon_state = "cutout_fluke"),
+ "Cultist" = image(icon = src.icon, icon_state = "cutout_cultist"),
+ "Brass Cultist" = image(icon = src.icon, icon_state = "cutout_servant"),
+ "Clockwork Cultist" = image(icon = src.icon, icon_state = "cutout_new_servant"),
+ "Revolutionary" = image(icon = src.icon, icon_state = "cutout_viva"),
+ "Wizard" = image(icon = src.icon, icon_state = "cutout_wizard"),
+ "Shadowling" = image(icon = src.icon, icon_state = "cutout_shadowling"),
+ "Xenomorph" = image(icon = src.icon, icon_state = "cutout_fukken_xeno"),
+ "Xenomorph Maid" = image(icon = src.icon, icon_state = "cutout_lusty"),
+ "Swarmer" = image(icon = src.icon, icon_state = "cutout_swarmer"),
+ "Ash Walker" = image(icon = src.icon, icon_state = "cutout_free_antag"),
+ "Deathsquad Officer" = image(icon = src.icon, icon_state = "cutout_deathsquad"),
+ "Ian" = image(icon = src.icon, icon_state = "cutout_ian"),
+ "Slaughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "daemon"),
+ "Laughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "bowmon"),
+ "Private Security Officer" = image(icon = src.icon, icon_state = "cutout_ntsec"),
+ "Securitron" = image(icon = src.icon, icon_state = "cutout_law"),
+ "Gondola" = image(icon = src.icon, icon_state = "cutout_gondola"),
+ "Monkey" = image(icon = src.icon, icon_state = "cutout_monky"),
+ ))
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/cardboard_cutout/attack_hand(mob/living/user)
@@ -76,22 +101,21 @@
push_over()
return BULLET_ACT_HIT
+/**
+ * change_appearance: Changes a skin of the cardboard cutout based on a user's choice
+ *
+ * Arguments:
+ * * crayon The crayon used to change and recolor the cardboard cutout
+ * * user The mob choosing a skin of the cardboard cutout
+ */
/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user)
- if(!crayon || !user)
- return
- if(pushed_over)
- to_chat(user, "Right [src] first!")
- return
- if(crayon.check_empty(user))
- return
- if(crayon.is_capped)
- to_chat(user, "Take the cap off first!")
- return
- var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances
- if(!new_appearance || !crayon || !user.canUseTopic(src))
+ var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, .proc/check_menu, user, crayon), radius = 36, require_near = TRUE)
+ if(!new_appearance)
return
if(!do_after(user, 10, FALSE, src, TRUE))
- return
+ return FALSE
+ if(!check_menu(user, crayon))
+ return FALSE
user.visible_message("[user] gives [src] a new look.", "Voila! You give [src] a new look.")
crayon.use_charges(1)
crayon.check_empty(user)
@@ -196,7 +220,33 @@
name = "monkey ([rand(1, 999)])"
desc = "A cardboard cutout of a monkey."
icon_state = "cutout_monky"
- return 1
+ else
+ return FALSE
+ return TRUE
+
+/**
+ * check_menu: Checks if we are allowed to interact with a radial menu
+ *
+ * Arguments:
+ * * user The mob interacting with a menu
+ * * crayon The crayon used to interact with a menu
+ */
+/obj/item/cardboard_cutout/proc/check_menu(mob/living/user, obj/item/toy/crayon/crayon)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ if(pushed_over)
+ to_chat(user, "Right [src] first!")
+ return FALSE
+ if(!crayon || !user.is_holding(crayon))
+ return FALSE
+ if(crayon.check_empty(user))
+ return FALSE
+ if(crayon.is_capped)
+ to_chat(user, "Take the cap off first!")
+ return FALSE
+ return TRUE
/obj/item/cardboard_cutout/setDir(newdir)
dir = SOUTH
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 60b93d9461..897f452091 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -199,7 +199,7 @@
if(!spans)
spans = list(M.speech_span)
if(!language)
- language = M.get_default_language()
+ language = M.get_selected_language()
INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans.Copy(), language)
return ITALICS | REDUCE_RANGE
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 1e0a6ce6dc..c7c9fa37a9 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -118,7 +118,7 @@
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
custom_materials = list(/datum/material/iron=150, /datum/material/glass=75)
breakouttime = 300 //Deciseconds = 30s
- cuffsound = 'sound/weapons/cablecuff.ogg'
+ cuffsound = 'sound/weapons/cablecuff.ogg'
/obj/item/restraints/handcuffs/cable/attack_self(mob/user)
to_chat(user, "You start unwinding the cable restraints back into coil")
@@ -130,7 +130,7 @@
user.put_in_hands(coil)
coil.color = color
to_chat(user, "You unwind the cable restraints back into coil")
-
+
/obj/item/restraints/handcuffs/cable/red
color = "#ff0000"
@@ -225,7 +225,6 @@
/obj/item/restraints/handcuffs/fake/kinky
name = "kinky handcuffs"
desc = "Fake handcuffs meant for erotic roleplay."
- icon = 'modular_citadel/icons/obj/items_and_weapons.dmi'
icon_state = "handcuffgag"
item_state = "kinkycuff"
@@ -252,7 +251,7 @@
throw_range = 1
icon_state = "beartrap"
desc = "A trap used to catch bears and other legged creatures."
- var/armed = 0
+ var/armed = FALSE
var/trap_damage = 20
/obj/item/restraints/legcuffs/beartrap/Initialize()
@@ -275,14 +274,14 @@
if(armed && isturf(src.loc))
if(isliving(AM))
var/mob/living/L = AM
- var/snap = 0
+ var/snap = FALSE
var/def_zone = BODY_ZONE_CHEST
if(iscarbon(L))
var/mob/living/carbon/C = L
- snap = 1
if(!C.lying)
def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
if(!C.legcuffed && C.get_num_legs(FALSE) >= 2) //beartrap can't cuff your leg if there's already a beartrap or legcuffs, or you don't have two legs.
+ snap = TRUE
C.legcuffed = src
forceMove(C)
C.update_equipment_speed_mods()
@@ -291,21 +290,21 @@
else if(isanimal(L))
var/mob/living/simple_animal/SA = L
if(SA.mob_size > MOB_SIZE_TINY)
- snap = 1
- if(L.movement_type & FLYING)
- snap = 0
+ snap = TRUE
+ if(L.movement_type & (FLYING | FLOATING))
+ snap = FALSE
if(snap)
- armed = 0
+ armed = FALSE
icon_state = "[initial(icon_state)][armed]"
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
L.visible_message("[L] triggers \the [src].", \
"You trigger \the [src]!")
- L.apply_damage(trap_damage,BRUTE, def_zone)
+ L.apply_damage(trap_damage, BRUTE, def_zone)
..()
/obj/item/restraints/legcuffs/beartrap/energy
name = "energy snare"
- armed = 1
+ armed = TRUE
icon_state = "e_snare"
trap_damage = 0
item_flags = DROPDEL
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 171b5a465a..381257721e 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -519,7 +519,9 @@
S.name = name
S.ckey = C.ckey
S.status_flags |= GODMODE
- S.language_holder = user.language_holder.copy(S)
+ S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user.
+ S.update_atom_languages()
+ grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
S.AddElement(/datum/element/ghost_role_eligibility,penalize_on_ghost = TRUE)
START_PROCESSING(SSprocessing,src)
var/input = stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 3504ed2f50..71437d4706 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -304,7 +304,7 @@
return
else
if(cooldown_check < world.time)
- if(target.run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user) & BLOCK_SUCCESS)
+ if(target.mob_run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user, null, null) & BLOCK_SUCCESS)
playsound(target, 'sound/weapons/genhit.ogg', 50, 1)
return
if(ishuman(target))
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index abb2d12a1f..a5ed113e4c 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -11,7 +11,7 @@
var/charge_cost = 30
/obj/item/borg/stun/attack(mob/living/M, mob/living/user)
- if(M.run_block(src, 0, "[M]'s [name]", ATTACK_TYPE_MELEE, 0, user, ran_zone(user.zone_selected)) & BLOCK_SUCCESS)
+ if(M.mob_run_block(src, 0, "[M]'s [name]", ATTACK_TYPE_MELEE, 0, user, ran_zone(user.zone_selected), null) & BLOCK_SUCCESS)
playsound(M, 'sound/weapons/genhit.ogg', 50, 1)
return FALSE
if(iscyborg(user))
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index ec443d4e48..9dbbb35862 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -850,12 +850,6 @@
-#define NODESIGN "None"
-#define NANOTRASEN "NanotrasenStandard"
-#define SYNDI "SyndiSnacks"
-#define HEART "Heart"
-#define SMILEY "SmileyFace"
-
/obj/item/storage/box/papersack
name = "paper sack"
desc = "A sack neatly crafted out of paper."
@@ -863,7 +857,18 @@
item_state = "paperbag_None"
resistance_flags = FLAMMABLE
foldable = null
- var/design = NODESIGN
+ /// A list of all available papersack reskins
+ var/list/papersack_designs = list()
+
+/obj/item/storage/box/papersack/Initialize(mapload)
+ . = ..()
+ papersack_designs = sortList(list(
+ "None" = image(icon = src.icon, icon_state = "paperbag_None"),
+ "NanotrasenStandard" = image(icon = src.icon, icon_state = "paperbag_NanotrasenStandard"),
+ "SyndiSnacks" = image(icon = src.icon, icon_state = "paperbag_SyndiSnacks"),
+ "Heart" = image(icon = src.icon, icon_state = "paperbag_Heart"),
+ "SmileyFace" = image(icon = src.icon, icon_state = "paperbag_SmileyFace")
+ ))
/obj/item/storage/box/papersack/update_icon_state()
if(contents.len == 0)
@@ -871,55 +876,64 @@
else
icon_state = "[item_state]_closed"
+
/obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen))
- //if a pen is used on the sack, dialogue to change its design appears
- if(contents.len)
- to_chat(user, "You can't modify [src] with items still inside!")
- return
- var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILEY, "Cancel")
- var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in designs
- if(get_dist(usr, src) > 1)
- to_chat(usr, "You have moved too far away!")
- return
- var/choice = designs.Find(switchDesign)
- if(design == designs[choice] || designs[choice] == "Cancel")
- return 0
- to_chat(usr, "You make some modifications to [src] using your pen.")
- design = designs[choice]
- icon_state = "paperbag_[design]"
- item_state = "paperbag_[design]"
- switch(designs[choice])
- if(NODESIGN)
+ var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, .proc/check_menu, user, W), radius = 36, require_near = TRUE)
+ if(!choice)
+ return FALSE
+ if(icon_state == "paperbag_[choice]")
+ return FALSE
+ switch(choice)
+ if("None")
desc = "A sack neatly crafted out of paper."
- if(NANOTRASEN)
+ if("NanotrasenStandard")
desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go."
- if(SYNDI)
+ if("SyndiSnacks")
desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program."
- if(HEART)
+ if("Heart")
desc = "A paper sack with a heart etched onto the side."
- if(SMILEY)
+ if("SmileyFace")
desc = "A paper sack with a crude smile etched onto the side."
- return 0
+ else
+ return FALSE
+ to_chat(user, "You make some modifications to [src] using your pen.")
+ icon_state = "paperbag_[choice]"
+ item_state = "paperbag_[choice]"
+ return FALSE
else if(W.get_sharpness())
if(!contents.len)
if(item_state == "paperbag_None")
user.show_message("You cut eyeholes into [src].", MSG_VISUAL)
new /obj/item/clothing/head/papersack(user.loc)
qdel(src)
- return 0
+ return FALSE
else if(item_state == "paperbag_SmileyFace")
user.show_message("You cut eyeholes into [src] and modify the design.", MSG_VISUAL)
new /obj/item/clothing/head/papersack/smiley(user.loc)
qdel(src)
- return 0
+ return FALSE
return ..()
-#undef NODESIGN
-#undef NANOTRASEN
-#undef SYNDI
-#undef HEART
-#undef SMILEY
+/**
+ * check_menu: Checks if we are allowed to interact with a radial menu
+ *
+ * Arguments:
+ * * user The mob interacting with a menu
+ * * P The pen used to interact with a menu
+ */
+/obj/item/storage/box/papersack/proc/check_menu(mob/user, obj/item/pen/P)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ if(contents.len)
+ to_chat(user, "You can't modify [src] with items still inside!")
+ return FALSE
+ if(!P || !user.is_holding(P))
+ to_chat(user, "You need a pen to modify [src]!")
+ return FALSE
+ return TRUE
/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist.
name = "ingredients box"
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index 8a817f6d62..634537e5a2 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -170,7 +170,7 @@
return disarming || (user.a_intent != INTENT_HARM)
/obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user, disarming = FALSE)
- if(L.run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user) & BLOCK_SUCCESS) //No message; check_shields() handles that
+ if(L.mob_run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user, null, null) & BLOCK_SUCCESS) //No message; check_shields() handles that
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
return FALSE
var/stunpwr = stamforce
@@ -232,11 +232,8 @@
/obj/item/melee/baton/stunsword
name = "stunsword"
desc = "not actually sharp, this sword is functionally identical to a stunbaton"
- icon = 'modular_citadel/icons/obj/stunsword.dmi'
icon_state = "stunsword"
item_state = "sword"
- lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
- righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
/obj/item/melee/baton/stunsword/get_belt_overlay()
if(istype(loc, /obj/item/storage/belt/sabre))
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 722f6178bc..ff59b85332 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -902,79 +902,57 @@
name = "hand of cards"
desc = "A number of cards not in a deck, customarily held in ones hand."
icon = 'icons/obj/toy.dmi'
- icon_state = "nanotrasen_hand2"
+ icon_state = "none"
w_class = WEIGHT_CLASS_TINY
var/list/currenthand = list()
var/choice = null
-
/obj/item/toy/cards/cardhand/attack_self(mob/user)
- user.set_machine(src)
+ var/list/handradial = list()
interact(user)
-/obj/item/toy/cards/cardhand/ui_interact(mob/user)
- . = ..()
- var/dat = "You have:
"
for(var/t in currenthand)
- dat += "A [t].
"
- dat += "Which card will you remove next?"
- var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.set_content(dat)
- popup.open()
+ handradial[t] = image(icon = src.icon, icon_state = "sc_[t]_[deckstyle]")
-
-/obj/item/toy/cards/cardhand/Topic(href, href_list)
- if(..())
- return
if(usr.stat || !ishuman(usr))
return
var/mob/living/carbon/human/cardUser = usr
- var/O = src
- if(href_list["pick"])
- if (cardUser.is_holding(src))
- var/choice = href_list["pick"]
- var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
- src.currenthand -= choice
- C.parentdeck = src.parentdeck
- C.cardname = choice
- C.apply_card_vars(C,O)
- C.pickup(cardUser)
- cardUser.put_in_hands(C)
- cardUser.visible_message("[cardUser] draws a card from [cardUser.p_their()] hand.", "You take the [C.cardname] from your hand.")
-
- interact(cardUser)
- if(src.currenthand.len < 3)
- src.icon_state = "[deckstyle]_hand2"
- else if(src.currenthand.len < 4)
- src.icon_state = "[deckstyle]_hand3"
- else if(src.currenthand.len < 5)
- src.icon_state = "[deckstyle]_hand4"
- if(src.currenthand.len == 1)
- var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc)
- N.parentdeck = src.parentdeck
- N.cardname = src.currenthand[1]
- N.apply_card_vars(N,O)
- qdel(src)
- N.pickup(cardUser)
- cardUser.put_in_hands(N)
- to_chat(cardUser, "You also take [currenthand[1]] and hold it.")
- cardUser << browse(null, "window=cardhand")
+ if(!(cardUser.mobility_flags & MOBILITY_USE))
return
+ var/O = src
+ var/choice = show_radial_menu(usr,src, handradial, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 36, require_near = TRUE)
+ if(!choice)
+ return FALSE
+ var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
+ currenthand -= choice
+ handradial -= choice
+ C.parentdeck = parentdeck
+ C.cardname = choice
+ C.apply_card_vars(C,O)
+ C.pickup(cardUser)
+ cardUser.put_in_hands(C)
+ cardUser.visible_message("[cardUser] draws a card from [cardUser.p_their()] hand.", "You take the [C.cardname] from your hand.")
+
+ interact(cardUser)
+ update_sprite()
+ if(length(currenthand) == 1)
+ var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(loc)
+ N.parentdeck = parentdeck
+ N.cardname = currenthand[1]
+ N.apply_card_vars(N,O)
+ qdel(src)
+ N.pickup(cardUser)
+ cardUser.put_in_hands(N)
+ to_chat(cardUser, "You also take [currenthand[1]] and hold it.")
/obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
if(istype(C))
if(C.parentdeck == src.parentdeck)
src.currenthand += C.cardname
- user.visible_message("[user] adds a card to [user.p_their()] hand.", "You add the [C.cardname] to your hand.")
+ user.visible_message("[user] adds a card to [user.p_their()] hand.", "You add the [C.cardname] to your hand.")
qdel(C)
interact(user)
- if(currenthand.len > 4)
- src.icon_state = "[deckstyle]_hand5"
- else if(currenthand.len > 3)
- src.icon_state = "[deckstyle]_hand4"
- else if(currenthand.len > 2)
- src.icon_state = "[deckstyle]_hand3"
+ update_sprite(src)
else
to_chat(user, "You can't mix cards from other decks!")
else
@@ -983,7 +961,7 @@
/obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
..()
newobj.deckstyle = sourceobj.deckstyle
- newobj.icon_state = "[deckstyle]_hand2" // Another dumb hack, without this the hand is invisible (or has the default deckstyle) until another card is added.
+ update_sprite()
newobj.card_hitsound = sourceobj.card_hitsound
newobj.card_force = sourceobj.card_force
newobj.card_throwforce = sourceobj.card_throwforce
@@ -992,6 +970,31 @@
newobj.card_attack_verb = sourceobj.card_attack_verb
newobj.resistance_flags = sourceobj.resistance_flags
+/**
+ * check_menu: Checks if we are allowed to interact with a radial menu
+ *
+ * Arguments:
+ * * user The mob interacting with a menu
+ */
+/obj/item/toy/cards/cardhand/proc/check_menu(mob/living/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ return TRUE
+
+/**
+ * This proc updates the sprite for when you create a hand of cards
+ */
+/obj/item/toy/cards/cardhand/proc/update_sprite()
+ cut_overlays()
+ var/overlay_cards = currenthand.len
+
+ var/k = overlay_cards == 2 ? 1 : overlay_cards - 2
+ for(var/i = k; i <= overlay_cards; i++)
+ var/card_overlay = image(icon=src.icon,icon_state="sc_[currenthand[i]]_[deckstyle]",pixel_x=(1-i+k)*3,pixel_y=(1-i+k)*3)
+ add_overlay(card_overlay)
+
/obj/item/toy/cards/singlecard
name = "card"
desc = "a card"
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index 2b6a91eb51..acfc9a6e85 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -1182,7 +1182,7 @@
if(iscyborg(target))
..()
return
- if(target.run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user) & BLOCK_SUCCESS) //No message; run_block() handles that
+ if(target.mob_run_block(src, 0, "[user]'s [name]", ATTACK_TYPE_MELEE, 0, user, null, null) & BLOCK_SUCCESS) //No message; run_block() handles that
playsound(target, 'sound/weapons/genhit.ogg', 50, 1)
return FALSE
if(user.a_intent != INTENT_HARM)
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index e794e12ad7..082c4bd723 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -32,6 +32,7 @@
new_spawn.undershirt = "Nude" //changing underwear/shirt/socks doesn't seem to function correctly right now because of some bug elsewhere?
new_spawn.socks = "Nude"
new_spawn.update_body(TRUE)
+ new_spawn.language_holder.selected_language = /datum/language/sylvan
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
@@ -63,10 +64,6 @@
else
to_chat(new_spawn, "You have been born outside of your natural home! Whether you decide to return home, or make due with your new home is your own decision.")
- new_spawn.grant_language(/datum/language/draconic)
- var/datum/language_holder/holder = new_spawn.get_language_holder()
- holder.selected_default_language = /datum/language/draconic
-
//Ash walkers on birth understand how to make bone bows, bone arrows and ashen arrows
new_spawn.mind.teach_crafting_recipe(/datum/crafting_recipe/bone_arrow)
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index 2f3bb23261..e68918c764 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -176,3 +176,4 @@ GLOBAL_LIST_INIT(ore_probability, list(/obj/item/stack/ore/uranium = 50,
new /obj/item/book/granter/spell/sacredflame(loc)
if(28)
new /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom(loc)
+ qdel(src)
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index b10ca8002c..38133d9089 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -32,7 +32,6 @@
/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
if(!user.transferItemToLoc(I, src))
return
- updateUsrDialog()
to_chat(user, "You put [I] into [src].")
return
@@ -96,70 +95,82 @@
. = ..()
if(.)
return
- user.set_machine(src)
- var/dat
+
+ var/list/items = list()
if(mybag)
- dat += "[mybag.name]
"
+ items += list("Trash bag" = image(icon = mybag.icon, icon_state = mybag.icon_state))
if(mymop)
- dat += "[mymop.name]
"
+ items += list("Mop" = image(icon = mymop.icon, icon_state = mymop.icon_state))
if(mybroom)
- dat += "[mybroom.name]
"
+ items += list("Broom" = image(icon = mybroom.icon, icon_state = mybroom.icon_state))
if(myspray)
- dat += "[myspray.name]
"
+ items += list("Spray bottle" = image(icon = myspray.icon, icon_state = myspray.icon_state))
if(myreplacer)
- dat += "[myreplacer.name]
"
- if(signs)
- dat += "[signs] sign\s
"
- var/datum/browser/popup = new(user, "janicart", name, 240, 160)
- popup.set_content(dat)
- popup.open()
+ items += list("Light replacer" = image(icon = myreplacer.icon, icon_state = myreplacer.icon_state))
+ var/obj/item/caution/sign = locate() in src
+ if(sign)
+ items += list("Sign" = image(icon = sign.icon, icon_state = sign.icon_state))
-
-/obj/structure/janitorialcart/Topic(href, href_list)
- if(!in_range(src, usr))
+ if(!length(items))
return
- if(!isliving(usr))
+ items = sortList(items)
+ var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 38, require_near = TRUE)
+ if(!pick)
return
- var/mob/living/user = usr
- if(href_list["garbage"])
- if(mybag)
+ switch(pick)
+ if("Trash bag")
+ if(!mybag)
+ return
user.put_in_hands(mybag)
to_chat(user, "You take [mybag] from [src].")
mybag = null
- if(href_list["mop"])
- if(mymop)
+ if("Mop")
+ if(!mymop)
+ return
user.put_in_hands(mymop)
to_chat(user, "You take [mymop] from [src].")
mymop = null
- if(href_list["broom"])
- if(mybroom)
+ if("Broom")
+ if(!mybroom)
+ return
user.put_in_hands(mybroom)
to_chat(user, "You take [mybroom] from [src].")
mybroom = null
- if(href_list["spray"])
- if(myspray)
+ if("Spray bottle")
+ if(!myspray)
+ return
user.put_in_hands(myspray)
to_chat(user, "You take [myspray] from [src].")
myspray = null
- if(href_list["replacer"])
- if(myreplacer)
+ if("Light replacer")
+ if(!myreplacer)
+ return
user.put_in_hands(myreplacer)
to_chat(user, "You take [myreplacer] from [src].")
myreplacer = null
- if(href_list["sign"])
- if(signs)
- var/obj/item/caution/Sign = locate() in src
- if(Sign)
- user.put_in_hands(Sign)
- to_chat(user, "You take \a [Sign] from [src].")
- signs--
- else
- WARNING("Signs ([signs]) didn't match contents")
- signs = 0
+ if("Sign")
+ if(signs <= 0)
+ return
+ user.put_in_hands(sign)
+ to_chat(user, "You take \a [sign] from [src].")
+ signs--
+ else
+ return
update_icon()
- updateUsrDialog()
+/**
+ * check_menu: Checks if we are allowed to interact with a radial menu
+ *
+ * Arguments:
+ * * user The mob interacting with a menu
+ */
+/obj/structure/janitorialcart/proc/check_menu(mob/living/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ return TRUE
/obj/structure/janitorialcart/update_overlays()
. = ..()
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index 53a1f609d1..f321498bfd 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -91,8 +91,13 @@
if (!is_ghost && !in_range(src, user))
return
+ var/list/tool_list = list(
+ "Up" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH),
+ "Down" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = SOUTH)
+ )
+
if (up && down)
- var/result = alert("Go up or down [src]?", "Ladder", "Up", "Down", "Cancel")
+ var/result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
if (!is_ghost && !in_range(src, user))
return // nice try
switch(result)
@@ -112,6 +117,11 @@
if(!is_ghost)
add_fingerprint(user)
+/obj/structure/ladder/proc/check_menu(mob/user)
+ if(user.incapacitated() || !user.Adjacent(src))
+ return FALSE
+ return TRUE
+
/obj/structure/ladder/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index 17ca178cd9..c3b388fc29 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -152,8 +152,8 @@
pod_moving = 0
if(!QDELETED(pod))
var/datum/gas_mixture/floor_mixture = loc.return_air()
- ARCHIVE_TEMPERATURE(floor_mixture)
- ARCHIVE_TEMPERATURE(pod.air_contents)
+ ARCHIVE(floor_mixture)
+ ARCHIVE(pod.air_contents)
pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on
air_update_turf()
diff --git a/code/game/say.dm b/code/game/say.dm
index 5fa5a2b35d..187994f432 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -25,7 +25,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
return
spans |= speech_span
if(!language)
- language = get_default_language()
+ language = get_selected_language()
send_speech(message, 7, src, , spans, message_language=language)
/atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index e4a3c5810c..1fbeee7523 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -203,8 +203,7 @@
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/wolf = 50, /obj/structure/spawner/ice_moon = 3, \
/mob/living/simple_animal/hostile/asteroid/polarbear = 30, /obj/structure/spawner/ice_moon/polarbear = 3, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/snow = 50, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
-
- flora_spawn_list = list(/obj/structure/flora/tree/pine = 2, /obj/structure/flora/grass/both = 12)
+ flora_spawn_list = list(/obj/structure/flora/tree/pine = 2, /obj/structure/flora/grass/both = 12, /obj/structure/flora/rock/icy = 6, /obj/structure/flora/rock/pile/icy = 6)
data_having_type = /turf/open/floor/plating/asteroid/airless/cave/snow/has_data
turf_type = /turf/open/floor/plating/asteroid/snow/icemoon
choose_turf_type = list(/turf/open/floor/plating/asteroid/snow/icemoon = 19, /turf/open/floor/plating/ice/icemoon = 1)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 42e3f71037..b90389094f 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -492,7 +492,7 @@
user.do_attack_animation(L)
- if(L.run_block(src, 0, "[user]'s [src]", ATTACK_TYPE_MELEE, 0, user, check_zone(user.zone_selected)) & BLOCK_SUCCESS)
+ if(L.mob_run_block(src, 0, "[user]'s [src]", ATTACK_TYPE_MELEE, 0, user, check_zone(user.zone_selected), null) & BLOCK_SUCCESS)
playsound(L, 'sound/weapons/genhit.ogg', 50, TRUE)
return FALSE
diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm
index 53b8133528..2df4a1fab9 100644
--- a/code/modules/antagonists/abductor/equipment/glands/slime.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm
@@ -10,7 +10,12 @@
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
..()
owner.faction |= "slime"
- owner.grant_language(/datum/language/slime)
+ owner.grant_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
+
+/obj/item/organ/heart/gland/slime/Remove(mob/living/carbon/M, special = 0)
+ ..()
+ owner.faction -= "slime"
+ owner.remove_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
/obj/item/organ/heart/gland/slime/activate()
to_chat(owner, "You feel nauseated!")
diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
index b6280ec017..103d09d444 100644
--- a/code/modules/antagonists/abductor/equipment/glands/trauma.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
@@ -10,9 +10,9 @@
/obj/item/organ/heart/gland/trauma/activate()
to_chat(owner, "You feel a spike of pain in your head.")
if(prob(33))
- owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_SURGERY))
else
if(prob(20))
- owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_SURGERY))
else
- owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
\ No newline at end of file
+ owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_SURGERY))
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
index 2e9d3c1788..0feb6dfa7e 100644
--- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -20,7 +20,7 @@
var/poweron_feed = FALSE // Am I feeding?
var/poweron_masquerade = FALSE
// STATS
- var/bloodsucker_level
+ var/bloodsucker_level
var/bloodsucker_level_unspent = 1
var/regen_rate = 0.3 // How fast do I regenerate?
var/additional_regen // How much additional blood regen we gain from bonuses such as high blood.
@@ -209,7 +209,7 @@
// Physiology
CheckVampOrgans() // Heart, Eyes
// Language
- owner.current.grant_language(/datum/language/vampiric)
+ owner.current.grant_language(/datum/language/vampiric, TRUE, TRUE, LANGUAGE_BLOODSUCKER)
owner.hasSoul = FALSE // If false, renders the character unable to sell their soul.
owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
// Disabilities
@@ -246,7 +246,7 @@
// Update Health
owner.current.setMaxHealth(100)
// Language
- owner.current.remove_language(/datum/language/vampiric)
+ owner.current.remove_language(/datum/language/vampiric, TRUE, TRUE, LANGUAGE_BLOODSUCKER)
// Soul
if (owner.soulOwner == owner) // Return soul, if *I* own it.
owner.hasSoul = TRUE
@@ -649,10 +649,10 @@
return TRUE
// Check 3) If I am a BLOODSUCKER, then are they my Vassal?
if (mob_B && atom_V && (atom_V in mob_B.vassals))
- return TRUE
+ return TRUE
// Check 4) If we are both VASSAL, then do we have the same master?
if (atom_V && mob_V && atom_V.master == mob_V.master)
- return TRUE
+ return TRUE
return FALSE
@@ -710,7 +710,7 @@
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/bloodsucker/proc/update_counter(value, valuecolor)
- invisibility = 0
+ invisibility = 0
/obj/screen/bloodsucker/blood_counter
icon = 'icons/mob/actions/bloodsucker.dmi'
@@ -758,7 +758,7 @@
/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
..()
- maptext = "