diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index 051aaad259a..61311b3f036 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -197,9 +197,6 @@ }, /turf/open/floor/wood, /area/ruin/powered/golem_ship) -"mE" = ( -/turf/open/water/jungle, -/area/ruin/powered/golem_ship) "mU" = ( /obj/machinery/power/shuttle_engine/propulsion{ dir = 4 @@ -503,6 +500,10 @@ }, /turf/open/floor/mineral/titanium, /area/ruin/powered/golem_ship) +"Cx" = ( +/obj/machinery/fishing_portal_generator, +/turf/open/floor/mineral/titanium, +/area/ruin/powered/golem_ship) "CI" = ( /obj/effect/mob_spawn/ghost_role/human/golem/adamantine, /obj/structure/sink/directional/west, @@ -980,8 +981,8 @@ wN (10,1,1) = {" wN wN -mE -mE +wN +wN Df Df Df @@ -997,13 +998,13 @@ wN "} (11,1,1) = {" wN -mE -mE +wN +wN Df Df vr QX -sS +Cx sS sS At @@ -1015,8 +1016,8 @@ Df "} (12,1,1) = {" wN -mE -mE +wN +wN Df bO XR @@ -1034,7 +1035,7 @@ Df (13,1,1) = {" wN wN -mE +wN lF bO ir diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm index 8c31d589343..5c9336c5c5c 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm @@ -812,7 +812,7 @@ /turf/open/floor/engine/vacuum, /area/ruin/planetengi) "yF" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /turf/open/floor/iron, /area/ruin/planetengi) "Ai" = ( @@ -823,7 +823,7 @@ /turf/open/floor/iron/icemoon, /area/ruin/planetengi) "Iy" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/icemoon, /area/ruin/planetengi) diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm index 218900ffdee..79126e4fdd2 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm @@ -180,9 +180,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"Bv" = ( -/turf/open/misc/snow, -/area/icemoon/surface/outdoors/nospawn) "Dd" = ( /turf/closed/mineral/random/snow, /area/icemoon/surface/outdoors/nospawn) @@ -265,9 +262,6 @@ /obj/structure/railing/corner, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"PT" = ( -/turf/template_noop, -/area/icemoon/surface/outdoors/nospawn) "Qi" = ( /obj/effect/turf_decal/stripes/corner, /obj/item/flashlight/glowstick/red{ @@ -414,7 +408,7 @@ fl fl "} (4,1,1) = {" -Bv +lH eu jQ vJ @@ -532,7 +526,7 @@ fl (8,1,1) = {" Dd Dd -PT +Dd nT kd yA diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm index 56f6f487380..054ca30b339 100644 --- a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm +++ b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm @@ -2401,10 +2401,6 @@ pixel_x = -5; pixel_y = 5 }, -/obj/item/clothing/mask/breath/anesthetic{ - pixel_x = 8; - pixel_y = 5 - }, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/medbay) "uB" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index d63d261b813..919d141fda7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -213,7 +213,7 @@ dir = 1 }, /obj/structure/stone_tile, -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "aR" = ( @@ -287,7 +287,7 @@ /obj/structure/stone_tile{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bd" = ( @@ -1114,6 +1114,8 @@ /obj/item/seeds/lavaland/porcini, /obj/item/seeds/tower, /obj/item/seeds/tower, +/obj/item/seeds/bamboo, +/obj/item/seeds/bamboo, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "GW" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm index 9b9157f92fa..70ebd3ce428 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm @@ -68,7 +68,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "p" = ( -/obj/structure/material_stand, +/obj/structure/ore_container/material_stand, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "q" = ( diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm index c07f19269bc..f870375de62 100644 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm +++ b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm @@ -248,7 +248,7 @@ /turf/open/indestructible/boss, /area/ruin/unpowered/ash_walkers) "ky" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "lB" = ( @@ -261,7 +261,7 @@ /turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "lH" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, +/mob/living/basic/mining/gutlunch/grub, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "mc" = ( @@ -495,7 +495,7 @@ /obj/structure/stone_tile/block{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "rQ" = ( diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm index fedd3cb5207..55da68d118d 100644 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm +++ b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm @@ -443,12 +443,6 @@ }, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/medbay) -"eh" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/turf/open/floor/engine, -/area/ruin/syndicate_lava_base/testlab) "ej" = ( /obj/effect/turf_decal/tile/bar{ dir = 4 @@ -1397,10 +1391,6 @@ pixel_x = -5; pixel_y = 5 }, -/obj/item/clothing/mask/breath/anesthetic{ - pixel_x = 8; - pixel_y = 5 - }, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/medbay) "ow" = ( @@ -5951,7 +5941,7 @@ Zd Ku Fx ji -eh +ch Jt Ow OW diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm index b21e7f4f770..bc383941257 100644 --- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm +++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm @@ -1,4 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/teal, +/turf/template_noop, +/area/ruin/space) "aA" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 4 @@ -263,6 +268,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/allamericandiner) +"nv" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/ruin/space) "ny" = ( /obj/machinery/oven, /obj/effect/decal/cleanable/dirt, @@ -307,14 +316,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/allamericandiner) -"ow" = ( -/obj/machinery/light/dim/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/structure/chair/sofa/left/maroon{ - dir = 8 - }, -/turf/open/floor/iron/kitchen, -/area/ruin/space/has_grav/allamericandiner) "oN" = ( /turf/closed/mineral/random/low_chance, /area/ruin/space) @@ -330,14 +331,6 @@ /obj/structure/urinal/directional/north, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) -"qp" = ( -/obj/machinery/chem_dispenser/drinks{ - dir = 8; - pixel_x = 17; - pixel_y = 0 - }, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "qB" = ( /obj/structure/closet/crate/trashcart/filled, /turf/open/misc/asteroid/airless, @@ -374,6 +367,13 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/ruin/space/has_grav/allamericandiner) +"rm" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/cups, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/allamericandiner) "rG" = ( /obj/structure/chair/stool/bar/directional/north, /obj/effect/decal/cleanable/dirt, @@ -466,12 +466,6 @@ }, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"vE" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "wC" = ( /obj/structure/closet{ desc = "Why leave the chairs in a locker?"; @@ -585,6 +579,15 @@ /obj/structure/window/reinforced/tinted/spawner/directional/east, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/allamericandiner) +"AS" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/dim/directional/east, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/allamericandiner) "Bg" = ( /obj/machinery/light/dim/directional/west, /obj/structure/chair/sofa/left/maroon{ @@ -823,21 +826,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) -"IK" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/teal, -/turf/template_noop, -/area/ruin/space) "IY" = ( /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"Jn" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/ruin/space) "Jw" = ( /obj/machinery/griddle, /turf/open/floor/iron/kitchen/small, @@ -912,9 +906,6 @@ /obj/structure/sink/kitchen/directional/west, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) -"Mc" = ( -/turf/template_noop, -/area/template_noop) "Mq" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -973,6 +964,14 @@ /obj/machinery/grill, /turf/open/floor/iron/kitchen/small, /area/ruin/space/has_grav/allamericandiner) +"Ot" = ( +/obj/machinery/light/dim/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/chair/sofa/left/maroon{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/allamericandiner) "OE" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line, /obj/effect/decal/cleanable/dirt, @@ -1055,6 +1054,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) +"SU" = ( +/turf/template_noop, +/area/template_noop) "SZ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/under/misc/patriotsuit, @@ -1128,11 +1130,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/allamericandiner) -"Um" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/fuchsia, -/turf/template_noop, -/area/ruin/space) "Uv" = ( /obj/structure/toilet{ dir = 8 @@ -1162,12 +1159,6 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) -"Vq" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/cups, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/kitchen/small, -/area/ruin/space/has_grav/allamericandiner) "Vy" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 5 @@ -1226,6 +1217,11 @@ /obj/structure/window/reinforced/tinted/spawner/directional/east, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) +"Yd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/fuchsia, +/turf/template_noop, +/area/ruin/space) "Yo" = ( /obj/structure/table/wood, /obj/item/folder{ @@ -1299,89 +1295,89 @@ /area/ruin/space/has_grav/allamericandiner) (1,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (2,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (3,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1396,28 +1392,28 @@ ob EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (4,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1433,27 +1429,27 @@ vp Ph Pn EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (5,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1470,27 +1466,27 @@ vp fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (6,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -1507,26 +1503,26 @@ PW Zk ET EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (7,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1544,26 +1540,26 @@ PW JD iS EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (8,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1581,26 +1577,26 @@ PW fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (9,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1616,28 +1612,28 @@ Xw FB PW Ap -ow +Ot EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (10,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU oN oN oN @@ -1659,21 +1655,21 @@ MQ EK EK EK -Jn -Jn -Jn -Jn -Jn -IK -Mc -Mc +nv +nv +nv +nv +nv +aa +SU +SU "} (11,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN oN oN @@ -1696,21 +1692,21 @@ Ud Tv Mt vu -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (12,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN oN EK @@ -1733,20 +1729,20 @@ DU Tv Mt vu -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (13,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1770,20 +1766,20 @@ eR EK EK EK -Jn -Jn -Jn -Jn -Jn -Um -Mc -Mc +nv +nv +nv +nv +nv +Yd +SU +SU "} (14,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1805,22 +1801,22 @@ hU EK EK EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (15,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1840,24 +1836,24 @@ PW yl yl ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (16,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1877,24 +1873,24 @@ PW Zk ET EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (17,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1914,24 +1910,24 @@ rd gl GU EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (18,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1945,30 +1941,30 @@ Fr Fr lF Fr -vE +rm Ka PW fL fL ob -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (19,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN oN @@ -1981,30 +1977,30 @@ EK ej jZ LR -qp -Vq -FB +jZ +AS +rd rd lI yQ EK -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} (20,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2030,18 +2026,18 @@ EK oN Bn Bn -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU "} (21,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2069,16 +2065,16 @@ Bn Bn Bn Bn -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU "} (22,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2107,15 +2103,15 @@ gU Ie Bn Bn -Mc -Mc -Mc -Mc +SU +SU +SU +SU "} (23,1,1) = {" -Mc -Mc -Mc +SU +SU +SU oN oN oN @@ -2145,15 +2141,15 @@ gU Bn Bn Bn -Mc -Mc -Mc +SU +SU +SU "} (24,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN EK @@ -2182,15 +2178,15 @@ Bn Bn Bn Bn -Mc -Mc -Mc +SU +SU +SU "} (25,1,1) = {" -Mc -Mc -Mc -Mc +SU +SU +SU +SU oN oN EK @@ -2220,15 +2216,15 @@ Bn Bn Bn Bn -Mc -Mc +SU +SU "} (26,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU oN Bn Bn @@ -2257,15 +2253,15 @@ Bn Bn Bn Bn -Mc -Mc +SU +SU "} (27,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn Bn @@ -2294,15 +2290,15 @@ oN Bn Bn Bn -Mc -Mc +SU +SU "} (28,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn WT @@ -2331,15 +2327,15 @@ oN oN Bn Bn -Mc -Mc +SU +SU "} (29,1,1) = {" -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU Bn Bn Ty @@ -2368,16 +2364,16 @@ oN oN oN oN -Mc -Mc +SU +SU "} (30,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU Bn Bn Bn @@ -2404,18 +2400,18 @@ oN oN oN oN -Mc -Mc -Mc +SU +SU +SU "} (31,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU Bn Bn Bn @@ -2440,20 +2436,20 @@ oN oN oN oN -Mc -Mc -Mc -Mc +SU +SU +SU +SU "} (32,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU Bn oN oN @@ -2476,26 +2472,26 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU "} (33,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -2512,30 +2508,30 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU "} (34,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN @@ -2547,49 +2543,49 @@ oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU "} (35,1,1) = {" -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU oN oN oN oN -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU +SU "} diff --git a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm index e3015469bce..831e0247541 100644 --- a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm @@ -66,7 +66,6 @@ /area/misc/anomaly_research) "dj" = ( /obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/east, /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, @@ -1516,7 +1515,6 @@ /area/misc/anomaly_research) "Ox" = ( /obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/north, /obj/structure/flora/bush/flowers_br/style_random, /obj/machinery/light/broken/directional/south, /turf/open/floor/grass, diff --git a/_maps/RandomRuins/SpaceRuins/clericden.dmm b/_maps/RandomRuins/SpaceRuins/clericden.dmm index ed9b63c7947..c6e6bebddb0 100644 --- a/_maps/RandomRuins/SpaceRuins/clericden.dmm +++ b/_maps/RandomRuins/SpaceRuins/clericden.dmm @@ -131,7 +131,7 @@ /area/ruin/space) "E" = ( /obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/carpet/airless, /area/ruin/space) "F" = ( @@ -171,7 +171,7 @@ /turf/open/floor/plating/airless, /area/ruin/space) "N" = ( -/mob/living/simple_animal/hostile/construct/proteon, +/mob/living/basic/construct/proteon, /turf/open/misc/asteroid/airless, /area/ruin/space) "O" = ( diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm new file mode 100644 index 00000000000..e3a80fb657a --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -0,0 +1,1494 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aF" = ( +/obj/item/trash/can/food/envirochow{ + pixel_x = 2 + }, +/obj/item/trash/can/food/envirochow{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/item/trash/can/food/envirochow{ + pixel_y = -12 + }, +/obj/effect/decal/cleanable/insectguts, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"aP" = ( +/obj/item/kitchen/fork{ + pixel_x = -10; + pixel_y = 0 + }, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bj" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse, +/obj/item/sticker/syndicate/larva, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bs" = ( +/obj/structure/kitchenspike_frame, +/obj/item/paper/crumpled, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bx" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"bF" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ew" = ( +/obj/item/trash/can/food/peaches/maint, +/obj/item/food/breadslice/moldy/bacteria, +/obj/effect/decal/cleanable/food/egg_smudge, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fb" = ( +/obj/item/trash/boritos/green, +/obj/effect/decal/cleanable/plastic, +/obj/item/storage/bag/trash, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fk" = ( +/obj/item/kirbyplants/fern, +/obj/item/food/deadmouse, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fx" = ( +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_y = -10 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fI" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fP" = ( +/obj/item/match, +/obj/item/trash/popcorn, +/obj/item/trash/spacers_sidekick, +/obj/item/food/pizzaslice/moldy/bacteria, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fR" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/kitchen/spoon/soup_ladle{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = 3; + pixel_y = 0 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/badrecipe/moldy{ + pixel_y = 3 + }, +/obj/item/food/badrecipe/moldy, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_y = 3 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"fV" = ( +/obj/item/food/butter{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/food/butter{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/structure/closet/crate/freezer, +/obj/item/food/butter{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = 6; + pixel_y = -6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"gb" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/plate_shard, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick, +/obj/item/food/egg/rotten, +/obj/effect/decal/cleanable/plastic, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/knife/butcher{ + desc = "A huge thing used for chopping and chopping up meat. Years of service has scarred its metal and worn groves into the handle, but its blade is well-maintained and sharp."; + name = "antique cleaver" + }, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"gI" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hq" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hH" = ( +/obj/item/clothing/mask/surgical, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/structure/closet/crate/trashcart/filled, +/obj/item/seeds/onion/red{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/seeds/onion{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"hN" = ( +/obj/item/shard, +/obj/item/food/pizzaslice/moldy/bacteria, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"iu" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"iH" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/food/hard_taco_shell/empty{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets_single, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"jo" = ( +/obj/item/trash/can, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"js" = ( +/obj/item/food/egg/rotten{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/food/egg/rotten{ + pixel_x = -10; + pixel_y = -8 + }, +/obj/item/food/egg/rotten{ + pixel_x = -14; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 3; + pixel_y = -6 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/food/meat/slab/rawcrab{ + pixel_x = 2 + }, +/obj/item/storage/fancy/pickles_jar{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/structure/closet/secure_closet/freezer/empty, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ki" = ( +/obj/effect/spawner/random/trash/food_packaging, +/obj/item/shard, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ku" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kJ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kS" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"kV" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nN" = ( +/obj/item/trash/candy, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nQ" = ( +/obj/item/trash/shrimp_chips, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"nS" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/vending_refill/dinnerware, +/obj/item/vending_refill/snack, +/obj/item/circuitboard/machine/coffeemaker, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"og" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"oq" = ( +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/food/cheese/firm_cheese, +/obj/item/thermometer, +/obj/structure/closet/secure_closet/freezer/empty, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"oL" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pp" = ( +/obj/effect/spawner/random/trash/garbage, +/obj/item/broken_bottle, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ps" = ( +/obj/item/trash/can/food/larvae, +/obj/item/food/bait/worm, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pF" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse/moldy, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"pP" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qd" = ( +/obj/item/food/breadslice/moldy/bacteria{ + pixel_y = -10 + }, +/obj/structure/reagent_dispensers/servingdish{ + anchored = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qm" = ( +/obj/effect/decal/cleanable/food/egg_smudge, +/obj/item/food/pizzaslice/moldy, +/mob/living/basic/mouse/brown, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"qM" = ( +/turf/open/space/basic, +/area/space) +"re" = ( +/obj/item/trash/shrimp_chips, +/obj/item/trash/sosjerky, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"rx" = ( +/obj/item/surprise_egg, +/obj/structure/closet/crate/trashcart, +/obj/item/trash/raisins, +/obj/effect/decal/cleanable/food/egg_smudge, +/obj/item/book/manual/chef_recipes, +/obj/item/trash/semki/healthy, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"rL" = ( +/obj/item/food/badrecipe, +/obj/item/pen/charcoal{ + desc = "It's just a wooden stick with some compressed ash on the end. At least it can write."; + name = "charcoal stick" + }, +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/closet/crate/trashcart, +/obj/item/food/grown/ash_flora/shavings, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"tr" = ( +/obj/structure/broken_flooring/singular, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ty" = ( +/obj/item/trash/can/food/peaches, +/obj/item/trash/boritos/red, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"tU" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"uJ" = ( +/obj/item/trash/cnds, +/obj/item/food/breadslice/moldy/bacteria, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"vA" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"vI" = ( +/obj/item/poster/random_contraband, +/obj/item/tank/internals/emergency_oxygen/empty, +/obj/effect/decal/cleanable/garbage{ + pixel_x = -8; + pixel_y = -8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wb" = ( +/obj/effect/spawner/random/trash/bacteria, +/obj/item/trash/can, +/obj/item/trash/can{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/trash/can{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = 12; + pixel_y = -8 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wv" = ( +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/mask/cigarette/cigar/havana, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"wR" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = 2; + pixel_y = -8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xf" = ( +/obj/item/trash/tray, +/obj/item/trash/waffles, +/obj/item/trash/waffles, +/obj/item/trash/waffles, +/obj/item/food/grown/mushroom/plumphelmet, +/obj/structure/closet/crate/trashcart, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xg" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/knife/kitchen, +/obj/item/storage/box/mousetraps, +/obj/structure/broken_flooring/pile, +/obj/item/food/grown/parsnip, +/obj/item/food/grown/parsnip, +/obj/item/food/cheese/wedge, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xk" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"xZ" = ( +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/effect/spawner/random/decoration/flower, +/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"ye" = ( +/obj/item/trash/semki/healthy, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yh" = ( +/obj/effect/spawner/random/trash, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yi" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yv" = ( +/obj/item/trash/can{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/trash/can{ + pixel_y = -8 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"yC" = ( +/obj/item/trash/popcorn/caramel{ + pixel_y = -6 + }, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"zK" = ( +/obj/item/trash/chips{ + pixel_x = -8 + }, +/obj/item/broken_bottle{ + pixel_x = 8; + pixel_y = 2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Aj" = ( +/obj/effect/decal/cleanable/ants, +/mob/living/basic/mouse/white, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"An" = ( +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"AM" = ( +/obj/item/trash/can{ + pixel_x = -8; + pixel_y = -2; + pixel_z = 0 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/structure/closet/crate/cardboard, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/boozeomat, +/obj/item/trash/can{ + pixel_x = 8; + pixel_y = 0 + }, +/obj/item/trash/can{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"AR" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"BS" = ( +/obj/item/storage/bag/trash/filled{ + pixel_x = -8 + }, +/obj/effect/decal/cleanable/garbage{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/food/egg_smudge{ + pixel_x = -2; + pixel_y = -8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Cc" = ( +/obj/item/trash/tray, +/obj/item/food/breadslice/moldy/bacteria{ + pixel_x = -8; + pixel_y = -8 + }, +/obj/item/food/tofu/prison{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/food/tofu/prison{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/ants, +/obj/structure/closet/crate/preopen, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/mail/junkmail, +/obj/item/trash/raisins, +/obj/item/trash/candy{ + pixel_x = 10; + pixel_y = -6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ci" = ( +/obj/item/kitchen/fork/plastic{ + pixel_x = -8 + }, +/obj/item/kitchen/spoon/plastic{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/paper/crumpled{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/food_or_drink/condiment, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ct" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"CF" = ( +/obj/machinery/reagentgrinder{ + anchored = 0 + }, +/obj/item/food/badrecipe{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/fuel_pool{ + desc = "A sticky patch of dried cola. It smells very sweet."; + name = "puddle of cola" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Do" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/bait/worm, +/obj/effect/decal/cleanable/food/tomato_smudge, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ec" = ( +/obj/effect/spawner/random/trash/bucket, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fp" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/storage/bag/trash/filled, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fs" = ( +/obj/structure/closet/cardboard, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/food/cornchips/blue, +/obj/item/food/cornchips/blue, +/obj/item/food/cornchips/green, +/obj/item/food/cornchips/green, +/obj/item/food/cornchips/purple, +/obj/item/food/cornchips/purple, +/obj/item/food/cornchips/red, +/obj/item/food/cornchips/red, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/blue{ + desc = "Limited edition flavour. Only for sale within the space commonwealth."; + name = "\improper Space Salt and Vinegar Boritos corn chips"; + tastes = list("salt" = 1, "vinegar" = 3) + }, +/obj/item/food/cornchips/blue{ + desc = "Limited edition flavour. Only for sale within the space commonwealth."; + name = "\improper Space Salt and Vinegar Boritos corn chips"; + tastes = list("salt" = 1, "vinegar" = 3) + }, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Fz" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"FL" = ( +/obj/structure/closet/cardboard, +/obj/item/pen/blue, +/obj/item/ph_paper, +/obj/item/petri_dish, +/obj/item/healthanalyzer/simple/disease, +/obj/item/biopsy_tool, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Gh" = ( +/obj/item/trash/semki/healthy, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GB" = ( +/obj/item/trash/can, +/obj/item/storage/bag/trash, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GP" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/crowbar/hammer{ + desc = "It's a heavy iron hammer with a plastic grip. A triangle has been chiselled into the handle."; + name = "heirloom hammer" + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"GU" = ( +/obj/item/reagent_containers/cup/glass/waterbottle/empty, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Hh" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice{ + desc = "Best before '32"; + pixel_x = -6 + }, +/obj/effect/decal/cleanable/insectguts, +/obj/item/food/grown/mushroom/odious_puffball{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Hu" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/knife/plastic{ + pixel_x = 12 + }, +/obj/item/food/badrecipe/moldy/bacteria{ + pixel_x = -6 + }, +/obj/item/food/meat/slab/pig, +/obj/item/food/deadmouse, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/food/salami{ + pixel_x = 1; + pixel_y = 6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"HC" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/kitchen/fork/plastic{ + pixel_x = -8 + }, +/obj/item/kitchen/fork/plastic{ + pixel_x = 8; + pixel_y = 0 + }, +/obj/item/kitchen/fork/plastic, +/obj/item/storage/box/papersack/meat, +/obj/effect/spawner/random/food_or_drink/condiment, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick{ + pixel_x = -4; + pixel_y = 1 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ie" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"II" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/food/cracker, +/obj/item/food/canned/beans{ + desc = "Probably still good."; + name = "rust-covered tin of beans" + }, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"IR" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"JH" = ( +/obj/item/petri_dish/random, +/obj/item/petri_dish/random, +/obj/item/petri_dish, +/obj/item/petri_dish, +/obj/item/petri_dish, +/obj/item/organ/internal/tongue/rat, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/item/organ/internal/stomach/rat, +/obj/item/fish/ratfish, +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"KD" = ( +/obj/structure/closet/crate/critter, +/obj/item/dog_bone{ + pixel_y = -6 + }, +/mob/living/basic/cockroach, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"KT" = ( +/obj/structure/broken_flooring/singular, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Le" = ( +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Mq" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/stack/tile/bamboo/tatami{ + amount = 40 + }, +/obj/item/stack/sticky_tape{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/item/crowbar/hammer{ + desc = "It's a heavy claw hammer. The handle is covered in fangmarks of varying sizes."; + name = "old hammer" + }, +/obj/item/food/deadmouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"MA" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/item/food/deadmouse, +/obj/item/grown/bananapeel, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Nm" = ( +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/trash/energybar, +/obj/item/food/candy/bronx, +/obj/item/food/candy/bronx, +/obj/effect/spawner/random/structure/crate_empty, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Od" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Oh" = ( +/obj/effect/spawner/random/trash/bacteria, +/mob/living/basic/mouse/brown, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ok" = ( +/obj/item/plate/large, +/obj/item/plate/large, +/obj/item/storage/box/drinkingglasses{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/structure/closet/crate/preopen, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_x = 4; + pixel_y = -3 + }, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse/brown, +/mob/living/basic/mouse, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Or" = ( +/obj/item/food/sustenance_bar/cheese{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/structure/closet/crate/large, +/obj/item/food/sustenance_bar/cheese{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/food/sustenance_bar/neapolitan{ + maptext_x = 0; + maptext_y = 0; + pixel_x = -6 + }, +/obj/item/food/sustenance_bar/neapolitan{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/food/sustenance_bar/mint{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/food/sustenance_bar/mint{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -10 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/item/food/sustenance_bar{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Ox" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/trash/candy{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/trash/can/food/desert_snails{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/trash/can/food/envirochow{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/food/flour, +/obj/item/thermometer/pen{ + pixel_x = 8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"OD" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"OZ" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/plate/small{ + pixel_x = -6 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 5 + }, +/obj/item/food/meat/slab/human/mutant/zombie{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/food/meat/slab/human{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/ants, +/obj/effect/decal/cleanable/food/tomato_smudge, +/obj/item/organ/internal/heart/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"PU" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Qi" = ( +/obj/item/book/bible, +/obj/structure/closet/crate/cardboard, +/obj/item/mail/junkmail{ + pixel_x = -10; + pixel_y = 2 + }, +/obj/item/mail/junkmail{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/mail/junkmail, +/obj/effect/decal/cleanable/insectguts, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"QH" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/insectguts, +/obj/item/pinata, +/obj/item/food/cornchips/green, +/obj/effect/spawner/random/food_or_drink/condiment, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"QL" = ( +/obj/item/broken_bottle, +/obj/item/grown/bananapeel, +/obj/effect/spawner/random/trash/garbage, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Rq" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Sa" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Sb" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 6; + pixel_y = 8 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TB" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TG" = ( +/obj/item/mop, +/obj/item/food/deadmouse/moldy, +/obj/item/pushbroom, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"TX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"UX" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Vb" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/trash/can/food/pine_nuts, +/obj/item/broken_bottle, +/obj/item/broken_bottle, +/obj/effect/decal/cleanable/wrapping, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"VB" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"Xi" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/decal/cleanable/food/egg_smudge, +/mob/living/basic/mouse, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"XF" = ( +/obj/item/shard, +/obj/item/trash/boritos, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"XY" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yu" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yx" = ( +/obj/structure/reagent_dispensers/cooking_oil{ + anchored = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Yz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"YB" = ( +/obj/item/trash/peanuts{ + pixel_x = -4; + pixel_y = -8 + }, +/obj/structure/closet/crate/freezer, +/obj/item/trash/pistachios{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/trash/pistachios, +/obj/item/c_tube, +/obj/item/food/uncooked_rice{ + pixel_y = -4 + }, +/obj/item/trash/peanuts{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) +"Zb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/grown/bananapeel, +/obj/item/food/deadmouse, +/mob/living/basic/mouse/rat, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/foodwaste) + +(1,1,1) = {" +qM +qM +pP +pP +pP +OD +VL +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +"} +(2,1,1) = {" +qM +OD +TB +TB +OD +OD +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +Sa +"} +(3,1,1) = {" +XY +Od +kJ +Fz +gI +OD +Sa +Hu +rL +HC +YB +iH +wv +KD +wR +nS +fV +Vb +bs +yi +"} +(4,1,1) = {" +og +TB +kV +hq +kS +OD +Sa +xf +ku +OZ +Fp +Ok +MA +aF +vI +xg +ps +ye +GP +Sa +"} +(5,1,1) = {" +AR +TB +xk +IR +bF +OD +Sa +Ci +qm +qd +zK +aP +GU +KT +An +TX +ki +Fp +xZ +Sa +"} +(6,1,1) = {" +XY +TB +Od +OD +Ie +Ct +tU +TX +yh +bx +Yz +Do +Le +fx +wb +gb +hH +QH +bj +Sa +"} +(7,1,1) = {" +XY +Od +Yu +oL +bF +Ct +tU +fb +pF +Gh +hN +QL +TX +Mq +AM +CF +rx +II +Hh +Sa +"} +(8,1,1) = {" +og +Od +fI +fI +bF +OD +Sa +js +BS +Oh +oq +XF +jo +Aj +yv +GB +pp +re +Yx +Sa +"} +(9,1,1) = {" +XY +Od +fI +bF +PU +OD +Sa +Qi +yC +nN +Fs +fk +TG +nQ +ku +ty +ew +tr +Zb +Sa +"} +(10,1,1) = {" +AR +Od +fI +vA +VB +OD +Sa +Cc +Ox +fR +fP +Or +Ec +Sb +Xi +uJ +FL +Nm +JH +yi +"} +(11,1,1) = {" +qM +OD +Rq +Od +OD +OD +Sa +Sa +Sa +Sa +Sa +Sa +Sa +iu +iu +iu +Sa +Sa +Sa +Sa +"} +(12,1,1) = {" +qM +qM +pP +pP +UX +OD +VL +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +qM +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm new file mode 100644 index 00000000000..a2ed3ff8dba --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm @@ -0,0 +1,955 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bb" = ( +/obj/item/organ/external/wings/moth, +/obj/structure/closet/crate/trashcart, +/obj/item/bodypart/arm/left/skeleton, +/obj/item/bodypart/arm/right/skeleton, +/obj/item/evidencebag, +/obj/item/organ/internal/heart/cybernetic/tier2, +/obj/structure/broken_flooring/pile, +/obj/item/stack/sheet/animalhide/human/five, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"bv" = ( +/obj/structure/showcase/horrific_experiment, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"eO" = ( +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"gh" = ( +/turf/open/space/basic, +/area/space) +"gr" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"gy" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hf" = ( +/obj/item/circuitboard/machine/medical_kiosk, +/obj/structure/frame/machine, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hp" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hu" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/stack/spacecash/c20, +/obj/item/pen/fountain, +/obj/structure/broken_flooring/singular, +/obj/item/swab, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"hv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/pill/maintenance{ + pixel_x = 3; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"io" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 35; + mob_type = /mob/living/carbon/human/species/fly; + oxy_damage = 65 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"iw" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"iU" = ( +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/medical/medkit, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kf" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kl" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kp" = ( +/obj/structure/safe, +/obj/item/stamp/syndicate, +/obj/item/traitor_bug, +/obj/item/eyesnatcher, +/obj/item/stack/spacecash/c1000, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"kx" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"lT" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"mB" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"mZ" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"nW" = ( +/obj/item/storage/box/disks{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pu" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"py" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/item/surgical_drapes, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 50; + burn_damage = 50 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pD" = ( +/obj/machinery/iv_drip/saline, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"pR" = ( +/obj/machinery/iv_drip, +/obj/item/storage/box/syringes{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qh" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/rack_parts, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/retractor/advanced, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qC" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"qX" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/broken_flooring/corner, +/obj/item/trash/syndi_cakes, +/obj/item/trash/syndi_cakes, +/obj/item/trash/syndi_cakes, +/obj/item/poster/random_contraband, +/obj/item/organ/internal/tongue/zombie, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"rB" = ( +/obj/structure/closet/crate/freezer, +/obj/item/stack/medical/bone_gel, +/obj/item/stack/medical/ointment, +/obj/item/thermometer, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/neck/stethoscope, +/obj/item/clothing/neck/stethoscope, +/obj/item/biopsy_tool, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"sa" = ( +/obj/structure/frame/computer, +/obj/item/circuitboard/computer/operating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"sU" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"tI" = ( +/obj/structure/tank_holder/anesthetic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uo" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uG" = ( +/obj/structure/chair/plastic, +/obj/item/reagent_containers/syringe/lethal/choral, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"uR" = ( +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"vf" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"vM" = ( +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/bodypart/arm/left/robot/surplus, +/obj/item/clothing/glasses/eyepatch, +/obj/item/toy/nuke, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"wh" = ( +/mob/living/basic/trooper/syndicate/ranged, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"wk" = ( +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/cobweb, +/obj/item/circuitboard/computer/operating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xj" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xw" = ( +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/structure/closet/crate/trashcart/filled, +/obj/item/reagent_containers/condiment/soysauce, +/obj/item/reagent_containers/pill/mannitol, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"xH" = ( +/obj/item/food/badrecipe/moldy, +/obj/item/food/badrecipe/moldy, +/obj/structure/closet/mini_fridge/grimy, +/obj/effect/decal/cleanable/oil, +/obj/item/reagent_containers/cup/bottle/morphine, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zb" = ( +/obj/item/wheelchair, +/obj/item/cane/white, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zj" = ( +/obj/structure/table/rolling{ + desc = "An Interdyne Pharmaceutics brand 'Crash Cart Classic' rolling table for surgical tools. It can and will move."; + name = "rolling surgical tray" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zn" = ( +/obj/structure/closet/cardboard, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/gauze, +/obj/item/stack/sticky_tape/surgical, +/obj/structure/broken_flooring/corner, +/obj/item/organ/internal/cyberimp/arm/surgery, +/obj/item/organ/internal/cyberimp/eyes/hud/medical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zu" = ( +/obj/structure/toilet{ + anchored = 0 + }, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"zZ" = ( +/obj/item/pillow, +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/clothing/under/rank/medical/scrubs/blue, +/obj/item/clothing/under/rank/medical/scrubs/blue, +/obj/item/clothing/under/rank/medical/scrubs/coroner, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/under/rank/medical/scrubs/green, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/clothing/suit/toggle/labcoat, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Al" = ( +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Am" = ( +/obj/structure/mannequin/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AB" = ( +/obj/structure/shipping_container/interdyne{ + armor_type = /datum/armor/immune + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AG" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"AU" = ( +/obj/item/paper/crumpled, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side, +/obj/item/suppressor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"BE" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Cv" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CJ" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CM" = ( +/obj/item/toy/braintoy, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart, +/obj/item/shard, +/obj/item/stack/cable_coil, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"CU" = ( +/obj/structure/mannequin/skeleton, +/obj/structure/broken_flooring/plating, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Dj" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/statuebust/hippocratic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Dv" = ( +/obj/item/popsicle_stick{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/rack_parts, +/obj/item/shard, +/obj/item/wrench/medical, +/obj/effect/decal/cleanable/plastic, +/obj/effect/spawner/random/contraband/permabrig_gear, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"EJ" = ( +/obj/item/stack/sticky_tape/surgical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Go" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/cyanide{ + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Gp" = ( +/obj/item/organ/internal/eyes/robotic/basic, +/obj/item/kitchen/spoon, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Hx" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/closet/crate/freezer, +/obj/item/skillchip/entrails_reader, +/obj/item/mod/module/health_analyzer, +/obj/item/shovel, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"HE" = ( +/obj/structure/bed/maint, +/obj/structure/bedsheetbin, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"IM" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/closet/crate/freezer, +/obj/item/organ/internal/liver/roach, +/obj/item/organ/internal/stomach, +/obj/item/organ/internal/tongue/robot, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"IS" = ( +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"JW" = ( +/obj/item/plate, +/obj/effect/decal/cleanable/plastic, +/obj/structure/closet/crate/trashcart, +/obj/item/food/deadmouse, +/obj/effect/spawner/random/medical/medkit, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Kk" = ( +/obj/item/wheelchair, +/obj/item/screwdriver, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ky" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Lh" = ( +/obj/item/food/deadmouse/moldy, +/obj/item/pushbroom, +/obj/item/storage/bag/trash/filled, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ll" = ( +/obj/item/trash/boritos/red, +/obj/item/storage/box/gloves, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LA" = ( +/obj/item/mail/junkmail, +/obj/effect/decal/cleanable/plastic, +/obj/item/clothing/mask/surgical, +/obj/item/extinguisher/empty, +/obj/item/sticker/assistant, +/obj/item/reagent_containers/cup/coffeepot, +/obj/item/coffee_cartridge/decaf, +/obj/structure/closet/crate/trashcart, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LG" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LI" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"LR" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"MC" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"NJ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Od" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ok" = ( +/obj/item/reagent_containers/pill/cyanide, +/obj/effect/spawner/random/medical/minor_healing, +/obj/effect/spawner/random/medical/surgery_tool, +/obj/item/reagent_containers/blood/o_minus, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"OA" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Pd" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Pe" = ( +/obj/effect/decal/cleanable/robot_debris/up, +/obj/structure/frame/computer, +/obj/item/stack/sheet/glass{ + amount = 2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"PM" = ( +/obj/structure/closet/mini_fridge/grimy, +/obj/item/storage/organbox, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/storage/pill_bottle/epinephrine, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Qq" = ( +/obj/structure/microscope, +/obj/structure/broken_flooring/singular, +/obj/effect/spawner/random/trash/food_packaging, +/obj/item/instrument/bilehorn, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"QK" = ( +/obj/effect/decal/cleanable/robot_debris/down, +/obj/item/circular_saw, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Rn" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/book/manual/wiki/surgery, +/obj/item/book/manual/wiki/surgery, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/book/manual/wiki/medicine{ + name = "Medical Space Compendium, Volume 637" + }, +/obj/item/stamp/denied, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"RT" = ( +/obj/structure/frame/machine, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Tp" = ( +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/obj/structure/curtain/cloth, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"TM" = ( +/obj/structure/closet/body_bag, +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 200; + mob_type = /mob/living/carbon/human/species/lizard + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Ua" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Um" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/lipstick, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"UJ" = ( +/obj/item/storage/box/masks, +/obj/item/storage/box/masks, +/obj/item/storage/box/masks, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"WX" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XC" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XD" = ( +/obj/structure/sinkframe, +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/reagent_containers/cup/rag{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"XR" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Yj" = ( +/obj/structure/reflector/single/mapping{ + rotation_angle = 360 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) +"Zi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/medicalwaste) + +(1,1,1) = {" +gh +gh +sU +sU +sU +qC +VL +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +"} +(2,1,1) = {" +gh +qC +xj +xj +qC +qC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +MC +"} +(3,1,1) = {" +Pd +Zi +NJ +vf +Cv +qC +MC +wk +nW +sa +HE +PM +zZ +hu +vM +AB +py +io +TM +XC +"} +(4,1,1) = {" +iw +xj +uo +AG +WX +qC +MC +Dj +XR +Al +QK +CJ +Um +zb +tI +CJ +uG +CJ +Ok +MC +"} +(5,1,1) = {" +kx +xj +hp +LI +kl +qC +MC +Pe +CJ +CJ +CJ +eO +CJ +CJ +Kk +CJ +zj +Go +bv +MC +"} +(6,1,1) = {" +Pd +xj +Zi +qC +mZ +OA +gr +CJ +Ky +iU +Rn +CM +qh +CJ +wh +CJ +CJ +Ky +Yj +MC +"} +(7,1,1) = {" +Pd +Zi +BE +Ua +kl +OA +gr +CJ +CJ +mB +Dv +rB +JW +CJ +EJ +AB +xw +CJ +kp +MC +"} +(8,1,1) = {" +iw +Zi +lT +lT +kl +qC +MC +uR +CJ +CJ +hv +CJ +CJ +CJ +Gp +CJ +pD +CJ +IM +MC +"} +(9,1,1) = {" +Pd +Zi +lT +kl +Od +qC +MC +pR +eO +XD +UJ +RT +Lh +CJ +Hx +CJ +zu +IS +bb +MC +"} +(10,1,1) = {" +kx +Zi +lT +LR +kf +qC +MC +CU +Ll +xH +Qq +hf +LA +CJ +Am +Tp +zn +AU +qX +XC +"} +(11,1,1) = {" +gh +qC +gy +Zi +qC +qC +MC +MC +MC +MC +MC +MC +MC +pu +pu +pu +MC +MC +MC +MC +"} +(12,1,1) = {" +gh +gh +sU +sU +LG +qC +VL +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +gh +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm new file mode 100644 index 00000000000..45947bb4112 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -0,0 +1,1185 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/item/trash/semki/healthy, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ap" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"aG" = ( +/obj/item/storage/toolbox/electrical{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -9; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/stack/rods/ten, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"aI" = ( +/obj/structure/bed/maint, +/obj/item/knife/shiv, +/obj/item/storage/backpack/satchel/leather/withwallet, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bb" = ( +/obj/item/food/badrecipe/moldy, +/obj/item/tank/internals/plasma/empty{ + pixel_x = -10; + pixel_y = 4 + }, +/obj/item/tank/internals/plasma/empty{ + pixel_y = 4 + }, +/obj/item/popsicle_stick, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bP" = ( +/obj/item/cigbutt/cigarbutt, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/syringe/contraband/krokodil, +/obj/item/screwdriver, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"bR" = ( +/obj/item/bedsheet/rainbow, +/obj/item/cigbutt, +/obj/item/clothing/ears/earmuffs, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/contraband/permabrig_gear, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"dh" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"do" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"dC" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"dF" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"dL" = ( +/obj/item/toy/mecha/marauder, +/obj/structure/closet/cardboard, +/obj/item/toy/plush/snakeplushie, +/obj/item/storage/fancy/cigarettes/cigpack_robust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"fF" = ( +/obj/item/clothing/suit/caution, +/obj/item/trash/syndi_cakes, +/obj/effect/decal/cleanable/plastic, +/obj/item/t_scanner, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"gq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"gy" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"hk" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"hm" = ( +/obj/item/mecha_parts/chassis/ripley, +/obj/item/mecha_parts/part/ripley_right_leg{ + pixel_x = 4; + pixel_y = -8 + }, +/obj/item/mecha_parts/part/ripley_left_leg{ + pixel_x = -4; + pixel_y = -7 + }, +/obj/item/mecha_parts/part/ripley_torso, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/large{ + desc = "A hefty wooden crate with the word \"REJECT\" stamped on it. You'll need a crowbar to get it open." + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ih" = ( +/obj/item/bedsheet/purple, +/obj/item/clothing/mask/cigarette/space_cigarette, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"iU" = ( +/obj/structure/chair/stool, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jl" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"jJ" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jN" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/stock_parts/scanning_module, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"jZ" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"kb" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/stock_parts/cell/crap/empty, +/obj/effect/decal/cleanable/plastic, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"kR" = ( +/obj/item/tank/internals/oxygen/yellow, +/obj/structure/closet/crate/preopen, +/obj/effect/decal/cleanable/shreds, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"la" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"le" = ( +/obj/structure/door_assembly/door_assembly_mhatch, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/shard, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lv" = ( +/obj/item/storage/box/zipties{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/storage/box/stockparts/basic{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/storage/box/disks{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/structure/closet/crate/large, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lA" = ( +/obj/item/sticker/toolbox, +/obj/structure/closet/crate/cardboard, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction, +/obj/item/book/manual/ripley_build_and_repair, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"lE" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"lY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"mV" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/squat) +"nX" = ( +/obj/structure/closet/crate/engineering/electrical, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/electronics/firelock, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"oD" = ( +/obj/effect/spawner/random/trash/cigbutt, +/obj/item/trash/boritos/purple, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pd" = ( +/obj/item/stack/rods/ten, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pk" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"pC" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/storage/bag/construction, +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + desc = "A heavy pair of boots with grips applied to the bottom to keep the wearer vertical while walking in freezing conditions. It's clearly been well used."; + name = "ice climbing boots" + }, +/obj/structure/closet/crate/engineering/electrical, +/obj/item/stock_parts/capacitor/adv, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"pM" = ( +/obj/item/lead_pipe, +/obj/structure/door_assembly/door_assembly_mhatch, +/obj/effect/decal/cleanable/glass, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/shard, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"qF" = ( +/obj/structure/closet/cardboard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/pushbroom, +/obj/item/restraints/handcuffs/cable/zipties/used, +/obj/item/toy/brokenradio, +/obj/effect/spawner/random/engineering/tool, +/mob/living/basic/cockroach, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"rq" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/dogbed, +/turf/open/floor/plating/dumpsterair, +/area/space) +"sb" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/boxcutter, +/obj/item/boxcutter, +/obj/item/folder/yellow, +/obj/item/geiger_counter, +/obj/item/stack/sticky_tape, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"sf" = ( +/obj/item/burner/fuel{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, +/obj/item/reagent_containers/cup/beaker/plastic{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/structure/table, +/obj/item/reagent_containers/dropper{ + pixel_x = 7; + pixel_y = 0 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"sF" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"tu" = ( +/obj/item/clothing/mask/cigarette/robust, +/obj/structure/closet/emcloset, +/obj/item/clothing/suit/utility/fire/heavy, +/obj/item/clothing/head/utility/hardhat/welding/atmos, +/obj/item/survivalcapsule/bathroom, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"tL" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ui" = ( +/obj/item/rollingpaper, +/obj/item/book/random{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/clothing/gloves/fingerless{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/structure/table, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"un" = ( +/obj/item/food/branrequests, +/obj/item/kitchen/spoon/plastic, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"ut" = ( +/obj/item/clothing/suit/apron/overalls{ + pixel_y = -3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"uW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/bonfire{ + desc = "Begging to be lit." + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vq" = ( +/obj/item/shard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vI" = ( +/obj/item/clothing/head/beanie/red{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/glasses/regular, +/obj/structure/table, +/obj/item/food/grown/kronkus{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vJ" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/molten_object/large, +/obj/structure/broken_flooring/pile, +/obj/item/food/deadmouse/moldy, +/obj/item/stock_parts/water_recycler, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"vW" = ( +/obj/effect/spawner/random/engineering/material_cheap, +/obj/structure/girder/displaced, +/obj/item/stock_parts/scanning_module, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"xg" = ( +/obj/structure/chair/office, +/obj/item/reagent_containers/cup/mortar, +/obj/item/pestle, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"yo" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"yF" = ( +/obj/item/trash/spacers_sidekick, +/obj/item/trash/flare, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"za" = ( +/obj/item/cigbutt/cigarbutt{ + desc = "A manky old cigar butt. A little cobweb is on the end."; + pixel_x = -8; + pixel_y = -2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zh" = ( +/obj/item/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zo" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/girder/displaced, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zz" = ( +/obj/item/cigbutt/cigarbutt, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/bag/trash, +/obj/item/clothing/shoes/sneakers/black, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"zC" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"zN" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"zY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/minimeteor, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"BN" = ( +/obj/item/tank/internals/plasma/full, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Cm" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/mod/module/jetpack, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/subspace/filter, +/obj/structure/fluff/oldturret, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Dq" = ( +/obj/item/match, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"DR" = ( +/obj/item/shard/plasma{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/trash/semki{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/badrecipe/moldy{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Er" = ( +/obj/item/clothing/suit/space, +/obj/item/clothing/head/helmet/space, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Fe" = ( +/obj/structure/fermenting_barrel, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"FD" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"FN" = ( +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = -9; + pixel_y = 4 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/structure/closet/crate/cardboard, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = -9 + }, +/obj/item/storage/fancy/cigarettes/cigpack_shadyjims{ + pixel_x = 1 + }, +/obj/item/gas_filter/damaged{ + pixel_x = -5; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas{ + pixel_x = 1; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + desc = "This gas mask feels different. It's not quite like the others."; + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Gn" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hk" = ( +/obj/item/food/pizzaslice/moldy/bacteria, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/pen, +/obj/item/stock_parts/subspace/analyzer, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Hw" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"HD" = ( +/obj/structure/mecha_wreckage/ripley, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/molten_object, +/obj/item/organ/internal/tongue/robot, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"HN" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"HZ" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/squat) +"Jx" = ( +/obj/structure/chem_separator, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JL" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JO" = ( +/obj/item/storage/pill_bottle/stimulant{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/storage/pill_bottle/maintenance_pill/full{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/structure/closet/crate/preopen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/syringe/contraband/methamphetamine{ + pixel_x = -5; + pixel_y = -7 + }, +/obj/item/reagent_containers/syringe/contraband/krokodil{ + pixel_x = -1; + pixel_y = -2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JR" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/oil/streak, +/mob/living/basic/trooper/russian, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JW" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"JX" = ( +/turf/open/space/basic, +/area/space) +"Ko" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"Kq" = ( +/obj/structure/closet/crate, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/airlock_painter, +/obj/item/pen/screwdriver, +/obj/item/rcd_ammo, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"LV" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ml" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"MJ" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"MQ" = ( +/obj/item/stock_parts/cell/crap/empty{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/clothing/mask/cigarette/space_cigarette{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/crowbar/hammer{ + desc = "A large claw hammer. It's been heavily used, as evidenced by the dents and scratches covering its head."; + name = "claw hammer" + }, +/obj/item/storage/fancy/cigarettes/cigpack_cannabis{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Nd" = ( +/obj/item/binoculars, +/obj/item/crowbar/large/old, +/obj/item/tank/jetpack/improvised, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ol" = ( +/obj/item/plate_shard, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Pz" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/squat) +"PE" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/squat) +"PH" = ( +/obj/item/bikehorn/rubberducky, +/obj/structure/closet/mini_fridge/grimy, +/obj/item/reagent_containers/cup/soda_cans/grey_bull, +/obj/item/reagent_containers/cup/soda_cans/monkey_energy, +/obj/item/reagent_containers/cup/soda_cans/monkey_energy, +/obj/item/reagent_containers/cup/soda_cans/pwr_game, +/obj/item/reagent_containers/cup/blastoff_ampoule, +/obj/structure/table, +/obj/item/food/drug/moon_rock, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Rw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"RD" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"RP" = ( +/obj/structure/table, +/obj/item/food/drug/moon_rock{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/lighter/skull{ + light_color = "#F57247"; + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/weldingtool/largetank{ + light_color = "#F57247"; + max_fuel = 50; + pixel_x = -7; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ss" = ( +/obj/item/cigbutt/roach, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"To" = ( +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Tv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/can/food/beans{ + pixel_x = 8; + pixel_y = -4 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"TD" = ( +/obj/item/food/deadmouse, +/obj/item/trash/candy, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Vw" = ( +/obj/item/rollingpaper{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/rollingpaper{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/wooden, +/obj/item/clothing/glasses/night{ + pixel_x = -1; + pixel_y = -2 + }, +/obj/item/melee/roastingstick{ + pixel_x = 11 + }, +/obj/item/flamethrower/full/tank{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"WK" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/item/clothing/shoes/workboots{ + pixel_x = 7; + pixel_y = 5 + }, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"WV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Xt" = ( +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Xv" = ( +/obj/item/food/deadmouse, +/obj/item/clothing/shoes/sneakers/red, +/obj/item/clothing/mask/cigarette/carp, +/obj/item/extinguisher/mini, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"XS" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/firelock_frame, +/obj/structure/broken_flooring/pile, +/obj/item/reagent_containers/syringe/contraband/methamphetamine, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) +"Ye" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/squat) +"Zu" = ( +/obj/item/food/candy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/bag/trash/filled, +/obj/item/trash/champagne_cork, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating/dumpsterair, +/area/ruin/space/has_grav/garbagetruck/squat) + +(1,1,1) = {" +JX +JX +pk +pk +pk +HZ +VL +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +"} +(2,1,1) = {" +JX +HZ +gy +gy +HZ +HZ +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +mV +"} +(3,1,1) = {" +la +gq +sF +HN +dC +HZ +mV +bR +ih +un +aI +rq +Fe +lv +pM +tu +hm +pC +fF +Pz +"} +(4,1,1) = {" +Ye +gy +Ko +do +dh +HZ +mV +ut +WK +zh +WV +Tv +za +aG +zo +HD +MQ +qF +Cm +mV +"} +(5,1,1) = {" +zC +gy +jl +zN +dF +HZ +mV +zz +Xt +jJ +Xt +Xt +DR +uW +XS +nX +BN +vJ +vW +mV +"} +(6,1,1) = {" +la +gy +gq +HZ +lE +PE +JW +WV +WV +WV +Xt +To +Hw +Hk +vq +zY +Hn +kb +le +mV +"} +(7,1,1) = {" +la +gq +hk +FD +dF +PE +JW +oD +Xt +JO +RD +To +Xt +TD +pd +JR +Kq +sb +dL +mV +"} +(8,1,1) = {" +Ye +gq +Gn +Gn +dF +HZ +mV +vI +Ss +sf +iU +Xt +Xt +ac +Xt +bb +jN +lA +kR +mV +"} +(9,1,1) = {" +la +gq +Gn +dF +yo +HZ +mV +ui +xg +RP +Jx +lY +JL +tL +Xt +Rw +To +Ol +To +mV +"} +(10,1,1) = {" +zC +gq +Gn +ap +LV +HZ +mV +PH +Xt +FN +Vw +bP +Zu +To +Dq +yF +Nd +Er +Xv +Pz +"} +(11,1,1) = {" +JX +HZ +jZ +gq +HZ +HZ +mV +mV +mV +mV +mV +mV +mV +Ml +Ml +Ml +mV +mV +mV +mV +"} +(12,1,1) = {" +JX +JX +pk +pk +MJ +HZ +VL +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +JX +"} diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm new file mode 100644 index 00000000000..761990a97d5 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm @@ -0,0 +1,1147 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"bL" = ( +/obj/structure/table/reinforced, +/obj/item/storage/bag/trash{ + pixel_x = -12; + pixel_y = 0 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash{ + pixel_x = -6; + pixel_y = 0 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"bU" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cf" = ( +/obj/item/paint_palette, +/obj/item/storage/crayons, +/obj/structure/spider/stickyweb, +/obj/structure/table_frame/wood, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cg" = ( +/obj/structure/spider/stickyweb, +/obj/item/clothing/under/costume/mummy, +/obj/item/clothing/mask/mummy, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cq" = ( +/obj/machinery/light/warm, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"cT" = ( +/obj/item/c_tube, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"dn" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"dq" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/item/trash/candy{ + pixel_x = 7 + }, +/obj/item/lead_pipe{ + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/plate_shard{ + pixel_x = 6; + pixel_y = 0 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"eL" = ( +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hD" = ( +/obj/structure/mannequin/wood{ + desc = "Oh, so this is a dress-up game now. It makes eye contact." + }, +/obj/item/clothing/shoes/kindle_kicks{ + pixel_y = -10 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hH" = ( +/obj/structure/spider/solid, +/obj/item/book/manual/wiki/cytology, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"hS" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/toy/xmas_cracker, +/obj/item/toy/xmas_cracker, +/obj/item/toy/toy_xeno, +/obj/item/clothing/head/costume/party/festive, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"it" = ( +/obj/item/trash/candle, +/obj/item/food/canned/pine_nuts, +/obj/item/kitchen/fork, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"jD" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"kj" = ( +/obj/structure/mannequin/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"kz" = ( +/obj/item/storage/wallet/random, +/obj/item/coin/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ld" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"lg" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"lm" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/sticky, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"mf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"mM" = ( +/obj/structure/spider/stickyweb, +/obj/item/food/badrecipe/moldy, +/obj/item/storage/box/pdas, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ng" = ( +/obj/item/vending_refill/snack, +/obj/item/food/candy, +/obj/structure/broken_flooring/side, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"nM" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/has_grav/garbagetruck/toystore) +"nP" = ( +/obj/structure/bed/maint, +/obj/item/pen/survival, +/obj/item/bedsheet/grey, +/obj/effect/decal/cleanable/shreds, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pi" = ( +/obj/item/chair/wood, +/obj/item/c_tube, +/obj/effect/decal/cleanable/generic, +/obj/structure/broken_flooring/corner, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ps" = ( +/obj/effect/spawner/random/trash, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pA" = ( +/obj/structure/spider/effigy, +/obj/structure/spider/stickyweb, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"pN" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/clothing/head/mothcap, +/obj/item/clothing/mask/gas/explorer, +/obj/item/clothing/under/misc/overalls, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"qX" = ( +/obj/structure/spider/sticky, +/obj/item/food/badrecipe/moldy, +/obj/structure/spider/stickyweb, +/obj/item/food/spidereggs{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/structure/closet/crate/trashcart, +/obj/item/food/spidereggs{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/effect/spawner/random/trash/food_packaging, +/obj/item/food/spidereggs, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rb" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rc" = ( +/obj/effect/decal/cleanable/oil, +/obj/item/flashlight/flare/torch, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ri" = ( +/obj/structure/lattice/catwalk, +/obj/item/crowbar/large/emergency, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rr" = ( +/obj/structure/floodlight_frame, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"rI" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sh" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/decal/cleanable/ants, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sw" = ( +/obj/effect/decal/cleanable/glass/plastitanium/screws, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout, +/obj/item/clothing/neck/tie/horrible, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sA" = ( +/obj/item/clothing/head/costume/rabbitears, +/obj/item/grown/bananapeel, +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"sO" = ( +/obj/item/clothing/suit/syndicatefake, +/obj/item/weldingtool/largetank{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ts" = ( +/obj/structure/spider/solid, +/obj/structure/spider/stickyweb, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"tQ" = ( +/obj/item/rack_parts, +/obj/structure/spider/stickyweb, +/obj/item/folder/blue{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/folder/blue, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ub" = ( +/obj/structure/filingcabinet, +/obj/structure/spider/stickyweb, +/obj/item/storage/wallet/random, +/obj/item/pen/blue, +/obj/item/paper/fluff/junkmail_redpill, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"uT" = ( +/obj/structure/table/reinforced, +/obj/item/gas_filter, +/obj/item/gas_filter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/orange{ + pixel_y = 8 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"uX" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/storage/backpack/industrial{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -8; + pixel_y = -6 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"vz" = ( +/obj/structure/frame/computer, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wo" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wu" = ( +/obj/machinery/airalarm{ + pixel_y = 25 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ww" = ( +/obj/machinery/door/airlock/external/glass, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wy" = ( +/obj/item/barcodescanner, +/obj/effect/decal/cleanable/dirt, +/obj/item/cardpack/series_one{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/cardpack/series_one{ + pixel_y = 4 + }, +/obj/item/cardpack/series_one{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/cardpack/series_one, +/obj/structure/closet/crate/cardboard, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wE" = ( +/obj/structure/closet/crate/wooden, +/obj/item/toy/figure/wizard{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/toy/figure/clown{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/toy/figure/secofficer{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = -8; + pixel_y = -1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wK" = ( +/obj/effect/decal/cleanable/robot_debris/down, +/obj/item/clothing/under/costume/skeleton, +/obj/item/clothing/mask/gas/prop, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"wW" = ( +/obj/structure/spider/stickyweb, +/obj/item/food/badrecipe/moldy, +/obj/item/grown/bananapeel, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xd" = ( +/obj/effect/decal/cleanable/robot_debris/up, +/obj/effect/decal/cleanable/oil, +/obj/item/melee/skateboard, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xf" = ( +/obj/structure/door_assembly/door_assembly_wood, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xC" = ( +/obj/item/stack/sheet/plastic/five, +/obj/item/stack/sheet/plastic/five, +/obj/structure/mannequin/plastic, +/obj/item/clothing/neck/tie/black, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/plastic, +/obj/item/spear, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xQ" = ( +/obj/item/storage/box/mousetraps, +/obj/structure/table/reinforced, +/obj/item/melee/flyswatter, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"xW" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yb" = ( +/obj/item/food/canned/tomatoes{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/food/canned/tomatoes{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/food/uncooked_rice{ + pixel_x = 0; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 2; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 4; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/food/uncooked_rice{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker, +/obj/item/food/cracker{ + pixel_x = -2; + pixel_y = -4 + }, +/obj/item/food/cracker{ + pixel_x = -7; + pixel_y = -2 + }, +/obj/item/food/cracker{ + pixel_y = 1 + }, +/obj/item/food/cracker{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/food/cracker{ + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yP" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"yS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"zs" = ( +/obj/machinery/computer/terminal{ + content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only."); + desc = "A garbage truck's dusty old control console."; + name = "dashboard"; + upperinfo = "Controls locked." + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"AG" = ( +/obj/item/clothing/glasses/blindfold, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"AQ" = ( +/obj/item/food/spidereggs, +/obj/effect/mob_spawn/corpse/human{ + brute_damage = 200; + mob_type = /mob/living/carbon/human/species/moth; + outfit = /datum/outfit/abductorcorpse; + oxy_damage = 200 + }, +/obj/structure/spider/cocoon{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/mod/control/pre_equipped/standard{ + pixel_x = -6; + pixel_y = 4 + }, +/mob/living/basic/spider/giant/viper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"BK" = ( +/obj/structure/closet/mini_fridge, +/obj/item/storage/cans/sixsoda, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"BO" = ( +/obj/structure/spider/stickyweb, +/obj/item/stock_parts/water_recycler, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Dm" = ( +/obj/item/trash/cheesie, +/obj/item/shovel, +/obj/item/seeds/nettle, +/obj/item/popsicle_stick, +/obj/item/hatchet/wooden, +/obj/item/cigbutt, +/obj/item/secateurs, +/obj/item/pickaxe/rusted, +/obj/item/boxcutter, +/obj/structure/closet/crate/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Dv" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ER" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"FM" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/suit/costume/whitedress, +/obj/structure/broken_flooring/singular, +/obj/item/clothing/head/costume/nursehat, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Gt" = ( +/obj/structure/sign/flag/mothic, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"He" = ( +/obj/structure/spider/passage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hj" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hv" = ( +/obj/effect/decal/cleanable/glass/plastitanium/screws, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Hy" = ( +/obj/item/toy/xmas_cracker, +/obj/item/kirbyplants/synthetic/plant26, +/obj/item/storage/pill_bottle/probital, +/obj/item/clothing/head/costume/festive, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"HK" = ( +/obj/structure/closet/crate/large, +/obj/item/rwd/loaded, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ix" = ( +/obj/structure/closet/cardboard, +/obj/item/bodypart/chest/robot, +/obj/item/toy/katana, +/obj/item/toy/plush/snakeplushie, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"IQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"IS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ja" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/card/cardboard, +/obj/item/broken_bottle, +/obj/item/cardpack/resin, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"JB" = ( +/obj/structure/spider/stickyweb, +/obj/structure/closet/crate/cardboard, +/obj/item/bikehorn/rubberducky, +/obj/item/clothing/glasses/monocle, +/obj/item/clothing/head/hats/tophat{ + desc = "It's a fancy looking hat. Inside is a label with a triangle drawn on it." + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"JI" = ( +/obj/item/dice/d10, +/obj/structure/filingcabinet/chestdrawer, +/obj/item/computer_disk/maintenance/modsuit_control, +/obj/item/computer_disk/maintenance/modsuit_control, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"KR" = ( +/obj/item/clothing/head/cone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/light/warm, +/obj/machinery/power/apc{ + cell_type = /obj/item/stock_parts/cell/lead; + locked = 0; + pixel_y = -25; + start_charge = 0 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Lm" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Lu" = ( +/obj/item/kirbyplants/synthetic/plant27, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Mp" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"MK" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/mail/junkmail, +/obj/item/healthanalyzer/simple/disease, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"OZ" = ( +/obj/item/trash/candy, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Pn" = ( +/obj/structure/closet/crate/mail, +/obj/item/trash/can, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Pv" = ( +/obj/structure/spider/stickyweb, +/obj/item/kirbyplants/synthetic/plant29, +/obj/item/crowbar/hammer, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"PJ" = ( +/obj/structure/spider/passage, +/obj/effect/spawner/random/mod/maint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"PU" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/gloves{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/machinery/recharger{ + pixel_y = -10 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Qe" = ( +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/structure/spider/stickyweb, +/mob/living/basic/spider/giant/hunter/scrawny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"QD" = ( +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/entertainment/plushie_delux, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/c_tube{ + pixel_y = -6 + }, +/obj/structure/spider/stickyweb, +/obj/item/toy/sword{ + pixel_y = 4 + }, +/obj/item/toy/sword{ + pixel_y = 8 + }, +/obj/item/kitchen/spoon/plastic, +/obj/effect/spawner/random/entertainment/toy, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Rb" = ( +/obj/item/stack/spacecash/c500, +/obj/item/coin/plastic, +/obj/structure/safe, +/obj/structure/spider/stickyweb, +/obj/item/tank/jetpack/oxygen, +/obj/item/switchblade, +/obj/item/survivalcapsule/bathroom, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Rl" = ( +/obj/item/paper/crumpled, +/obj/item/stock_parts/cell/hyper, +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/barcodescanner, +/obj/item/pen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sb" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/spider/stickyweb, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sj" = ( +/obj/item/trash/pistachios, +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/storage/fancy/pickles_jar, +/obj/item/food/spaghetti/raw, +/obj/item/food/spaghetti/raw, +/obj/item/food/sustenance_bar/wonka, +/obj/item/food/fueljacks_lunch, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Sk" = ( +/obj/effect/spawner/random/decoration/paint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"ST" = ( +/obj/machinery/power/terminal, +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"TO" = ( +/obj/item/mop, +/obj/item/multitool{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/structure/mop_bucket, +/obj/item/broken_bottle, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"UD" = ( +/obj/structure/closet/preopen, +/obj/item/stack/spacecash/c200, +/obj/item/storage/backpack/satchel, +/obj/item/toy/plush/shark, +/obj/item/instrument/banjo, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"VL" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/space/basic, +/area/space) +"Wl" = ( +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"WZ" = ( +/obj/item/paper/fluff/junkmail_generic, +/obj/item/pen/red, +/obj/structure/table_frame/wood, +/obj/item/mod/paint, +/obj/effect/spawner/random/decoration/paint, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Xg" = ( +/obj/structure/spider/stickyweb, +/obj/item/clothing/ears/earmuffs, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Xs" = ( +/obj/structure/spider/passage, +/mob/living/basic/spider/giant/hunter/scrawny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"XI" = ( +/obj/structure/spider/solid, +/obj/item/food/badrecipe/moldy/bacteria, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"XL" = ( +/obj/item/scooter_frame, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Ym" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer{ + pixel_y = 6 + }, +/obj/item/geiger_counter{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 4 + }, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Yr" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Yz" = ( +/obj/structure/spider/stickyweb, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"YR" = ( +/obj/item/food/badrecipe/moldy/bacteria, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) +"Zi" = ( +/turf/open/space/basic, +/area/space) +"ZM" = ( +/obj/item/papercutter, +/obj/item/paper_bin, +/obj/structure/spider/stickyweb, +/obj/structure/spider/spikes, +/obj/structure/table_frame/wood, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/plating, +/area/ruin/space/has_grav/garbagetruck/toystore) + +(1,1,1) = {" +Zi +Zi +lg +lg +lg +nM +VL +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +"} +(2,1,1) = {" +Zi +nM +dn +dn +nM +nM +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +"} +(3,1,1) = {" +Hj +jD +PU +Mp +xQ +nM +Yr +sw +wy +FM +YR +Qe +cf +ZM +WZ +xC +Ix +dq +TO +rb +"} +(4,1,1) = {" +yP +dn +zs +ER +cq +nM +Yr +ng +pi +OZ +xI +IS +xf +ub +AG +lm +cg +sO +Dm +Yr +"} +(5,1,1) = {" +rI +dn +uX +uT +bU +nM +Yr +mf +xW +rc +Hv +ps +HK +ts +Pv +cT +xd +wK +QD +Yr +"} +(6,1,1) = {" +Hj +dn +jD +nM +wu +wo +Dv +IS +ld +ld +ld +Lu +XL +He +Xs +wW +JB +sA +wE +Yr +"} +(7,1,1) = {" +Hj +jD +bL +Ym +bU +wo +Dv +ld +ld +ld +IS +ld +Sb +Rb +IQ +Yz +PJ +pA +mM +Yr +"} +(8,1,1) = {" +yP +jD +eL +eL +bU +nM +Yr +rr +ld +Sk +ld +ld +Ja +hS +Lm +BO +XI +hH +qX +Yr +"} +(9,1,1) = {" +Hj +jD +eL +bU +KR +nM +Gt +UD +nP +pN +Pn +ld +kj +JI +sh +ld +Xg +AQ +tQ +Yr +"} +(10,1,1) = {" +rI +jD +eL +ST +aj +nM +Yr +BK +it +Sj +yb +yS +vz +MK +kz +ld +Hy +Rl +hD +rb +"} +(11,1,1) = {" +Zi +nM +ww +jD +nM +nM +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Wl +Wl +Wl +Yr +Yr +Yr +Yr +"} +(12,1,1) = {" +Zi +Zi +lg +lg +ri +nM +VL +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +"} diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index c4310730a39..4b9e83ff451 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -2840,13 +2840,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"mm" = ( -/obj/machinery/power/supermatter_crystal/shard, -/obj/structure/closet/crate/engineering{ - name = "supermatter shard crate" - }, -/turf/open/floor/iron/white/textured, -/area/ruin/space/ancientstation/delta/proto) "mo" = ( /turf/open/floor/iron/white/corner{ dir = 1 @@ -5152,6 +5145,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"By" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/monitor, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "Bz" = ( /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) @@ -5963,6 +5964,11 @@ /obj/machinery/duct, /turf/template_noop, /area/space/nearstation) +"HS" = ( +/obj/machinery/power/supermatter_crystal/shard, +/obj/structure/closet/crate/radiation, +/turf/open/floor/iron/white/textured, +/area/ruin/space/ancientstation/delta/proto) "HT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6504,14 +6510,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine/o2, /area/ruin/space/ancientstation/beta/atmos) -"Ll" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/monitor, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "Lm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11606,7 +11604,7 @@ mS jE aa Ma -Ll +By eK fc Wn @@ -14789,7 +14787,7 @@ bD Yr cD uj -mm +HS Oh uj Mx diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm index 65c1413bec8..45eee5cbe8b 100644 --- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm @@ -519,6 +519,10 @@ "fU" = ( /turf/open/floor/iron, /area/ruin/space/ks13/ai/corridor) +"gd" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/singulo) "ge" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -741,11 +745,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ks13/engineering/singulo) -"jD" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/closet/emcloset, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/dorms) "jV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating/airless, @@ -3625,15 +3624,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/ruin/space/ks13/security/cell) -"Cd" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/table_frame, -/obj/item/wallframe/apc{ - pixel_x = -5; - pixel_y = 9 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/tech_storage) "Ce" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/airalarm/directional/north, @@ -4075,10 +4065,6 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ks13/science/rnd) -"EC" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/singulo) "ED" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Access" @@ -4248,11 +4234,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/airless, /area/ruin/space/ks13/hallway/aft) -"Fy" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/singulo) "FB" = ( /obj/machinery/light/small/directional/west, /obj/structure/closet, @@ -4549,6 +4530,13 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ks13/command/bridge) +"GW" = ( +/obj/item/circuitboard/machine/smes, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/secure_storage) "GY" = ( /obj/structure/cable, /turf/open/floor/iron/chapel{ @@ -4930,11 +4918,6 @@ /obj/item/wallframe/firealarm, /turf/open/floor/iron/airless, /area/ruin/space/ks13/engineering/atmos) -"Jm" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/ks13/engineering/singulo) "Jp" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -6061,14 +6044,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ks13/security/court) -"Ps" = ( -/obj/machinery/light/small/directional/east, -/obj/item/circuitboard/machine/smes, -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/airless, -/area/ruin/space/ks13/engineering/secure_storage) "Pt" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -6731,6 +6706,10 @@ /obj/structure/chair, /turf/open/floor/iron/airless, /area/ruin/space/ks13/security/court_hall) +"SI" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/dorms) "SJ" = ( /obj/structure/frame/computer{ anchored = 1; @@ -7596,6 +7575,15 @@ "Xa" = ( /turf/open/floor/plating/airless, /area/ruin/space/ks13/ai/corridor) +"Xb" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table_frame, +/obj/item/wallframe/apc{ + pixel_x = -5; + pixel_y = 9 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/ks13/engineering/tech_storage) "Xd" = ( /obj/structure/closet/crate/bin, /obj/effect/decal/cleanable/dirt, @@ -9601,7 +9589,7 @@ Fq yq rm uf -jD +SI oU sm wc @@ -10939,7 +10927,7 @@ rk QG QG Xt -Cd +Xb DT QG QG @@ -11381,7 +11369,7 @@ rk rk sU sU -EC +gd CX PI PI @@ -11726,7 +11714,7 @@ PI Ex pi FI -Fy +FI FI FI zv @@ -12856,7 +12844,7 @@ fg Jc gB PI -Jm +zv zv zv HX @@ -13651,7 +13639,7 @@ rk rr rr ab -Ps +GW DL rr rr diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm index 7cdaa54020b..fa4f71418e1 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm @@ -2159,11 +2159,6 @@ }, /turf/open/floor/iron/white, /area/ruin/space/has_grav/cargodise_freighter/trauma) -"IA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen, -/area/ruin/space/has_grav/cargodise_freighter/kitchen) "IP" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/iron/kitchen, @@ -3039,12 +3034,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) -"WE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/cargodise_freighter/kitchen) "WJ" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 4 @@ -4066,7 +4055,7 @@ Ey WQ Gg Zq -WE +wd YY Gg UL @@ -4635,7 +4624,7 @@ vH vH Gg gc -IA +FT FT FT JC diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm index 801e86950e4..2c13cd12d70 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm @@ -2284,7 +2284,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/skyrat/interdynefob/bridge) "jD" = ( -/obj/item/storage/secure/briefcase/white{ +/obj/item/storage/briefcase/secure/white{ pixel_y = 13 }, /turf/open/floor/wood/large, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm index e6c3a96f8e0..808950d1caf 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm @@ -107,7 +107,7 @@ /turf/open/misc/asteroid/airless, /area/solars/tarkon) "aA" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/cult, /area/ruin/space/has_grav/port_tarkon/observ) @@ -657,7 +657,7 @@ /obj/structure/chair/sofa/corp{ dir = 8 }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/observ) @@ -4445,7 +4445,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/trauma) "yT" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/porthall) @@ -4646,7 +4646,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/porthall) @@ -7234,7 +7234,7 @@ "NZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/observ) @@ -7615,7 +7615,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, @@ -8681,7 +8680,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/forehall) "WK" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/cult, /area/ruin/space/has_grav/port_tarkon/afthall) diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm index 0589f45fba1..8232aa56a5d 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm @@ -7213,7 +7213,6 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm index 5514e997812..a7294b23f63 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm @@ -6335,7 +6335,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm index 5ebeb664840..1a0adf42c2a 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm @@ -6955,7 +6955,6 @@ "Qy" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/suit_storage_unit/industrial/hauler, -/obj/machinery/suit_storage_unit/industrial/hauler, /obj/effect/turf_decal/tile/brown/half{ dir = 8 }, diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm index 43334c57b9b..0a7a0f511d3 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm @@ -6107,7 +6107,7 @@ "JG" = ( /obj/structure/table/wood, /obj/item/modular_computer/laptop, -/obj/item/storage/secure/briefcase/white, +/obj/item/storage/briefcase/secure/white, /obj/item/key_card/hotel_room/seven, /obj/item/key_card/hotel_room/six, /obj/item/key_card/hotel_room/five, diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index 89f41588081..e10d5abc111 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -75,7 +75,7 @@ /turf/open/floor/eighties, /area/ruin/space/has_grav/the_outlet/storefront) "cK" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/blood{ icon_state = "floor2-old" @@ -1056,7 +1056,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-4" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune6" }, @@ -1222,7 +1222,7 @@ /area/ruin/space/has_grav/the_outlet/storefront) "Db" = ( /obj/effect/decal/cleanable/crayon, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) "Do" = ( @@ -1481,7 +1481,7 @@ /obj/effect/decal/cleanable/crayon{ icon_state = "rune2" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) "IF" = ( @@ -1573,7 +1573,7 @@ /turf/template_noop, /area/template_noop) "LL" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune2" }, @@ -1667,7 +1667,7 @@ /obj/effect/decal/cleanable/crayon{ icon_state = "rune4" }, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) "NE" = ( @@ -1976,7 +1976,7 @@ dir = 8 }, /obj/effect/decal/cleanable/crayon, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-127" }, @@ -2101,7 +2101,7 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) "Yr" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) diff --git a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm index 8e773ee9926..7ad7cfc5a1d 100644 --- a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm +++ b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm @@ -405,7 +405,7 @@ /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 1 }, -/obj/item/storage/secure/safe/directional/north{ +/obj/structure/secure_safe/directional/north{ pixel_y = 45 }, /obj/structure/sink/kitchen/directional/south{ diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index 9651aa17f5a..9685c667d2c 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -1639,7 +1639,7 @@ }, /area/awaymission/cabin/caves/sovietcave) "is" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/structure/closet/secure_closet/freezer/fridge/open, /obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/iron/freezer, /area/awaymission/cabin) diff --git a/_maps/RandomZLevels/blackmesa.dmm b/_maps/RandomZLevels/blackmesa.dmm index a4484e7711d..187a8793e96 100644 --- a/_maps/RandomZLevels/blackmesa.dmm +++ b/_maps/RandomZLevels/blackmesa.dmm @@ -5090,9 +5090,6 @@ /turf/open/floor/iron/smooth, /area/awaymission/black_mesa/entrance_internal_hall) "cTO" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 8 - }, /obj/machinery/power/emitter/energycannon{ dir = 8 }, @@ -6329,9 +6326,6 @@ /turf/open/floor/iron/smooth_large, /area/awaymission/black_mesa/lambda_teleporter) "fjj" = ( -/obj/machinery/power/emitter/energycannon{ - dir = 4 - }, /obj/machinery/power/emitter/energycannon{ dir = 4 }, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index fa636a49184..47abe5bb4af 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -394,7 +394,7 @@ /turf/open/floor/iron, /area/awaymission/moonoutpost19/research) "cS" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/structure/flora/lunar_plant, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -434,7 +434,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "dr" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /turf/open/misc/asteroid/moon{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, @@ -2775,6 +2775,16 @@ dir = 1 }, /area/awaymission/moonoutpost19/research) +"rF" = ( +/obj/structure/secure_safe/directional/east, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/pen, +/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/research) "rH" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/siding/purple{ @@ -2956,6 +2966,16 @@ }, /turf/open/floor/iron, /area/awaymission/moonoutpost19/arrivals) +"sM" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/flashlight/flare{ + start_on = 1 + }, +/turf/open/floor/iron{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) "sO" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/lunar_sand, @@ -3346,17 +3366,6 @@ /obj/item/stack/cable_coil/cut, /turf/open/floor/plating, /area/awaymission/moonoutpost19/research) -"vu" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase, -/obj/item/taperecorder{ - pixel_x = -3 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/research) "vx" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -3500,14 +3509,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) -"wA" = ( -/obj/item/flashlight/flare{ - start_on = 1 - }, -/turf/open/misc/asteroid/moon{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/mines) "wD" = ( /obj/machinery/light/small/broken/directional/east, /obj/effect/decal/cleanable/dirt, @@ -5046,6 +5047,17 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/plating, /area/awaymission/moonoutpost19/syndicate) +"Hr" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure, +/obj/item/taperecorder{ + pixel_x = -3 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/research) "Hs" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -5450,16 +5462,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"JU" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/item/flashlight/flare{ - start_on = 1 - }, -/turf/open/floor/iron{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) "JV" = ( /obj/structure/sink{ dir = 4; @@ -6176,6 +6178,14 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) +"Pf" = ( +/obj/item/flashlight/flare{ + start_on = 1 + }, +/turf/open/misc/asteroid/moon{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/mines) "Ph" = ( /obj/effect/decal/cleanable/blood/tracks{ desc = "Your instincts say you shouldn't be following these."; @@ -6843,16 +6853,6 @@ dir = 5 }, /area/awaymission/moonoutpost19/research) -"Tx" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/pen, -/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/research) "Tz" = ( /obj/machinery/power/shuttle_engine/propulsion/burst/left{ dir = 4 @@ -35484,8 +35484,8 @@ ik OC aJ Um -Tx -vu +rF +Hr ea of TS @@ -40252,7 +40252,7 @@ WZ JQ WZ lj -JU +sM WZ WZ Nr @@ -56533,7 +56533,7 @@ tb mo mo mo -wA +Pf pS tb tb diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 6aa99013c81..f398b90a9a8 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -4042,7 +4042,7 @@ }, /area/awaymission/undergroundoutpost45/research) "pg" = ( -/obj/item/storage/secure/safe{ +/obj/structure/secure_safe{ pixel_x = 5; pixel_y = -27 }, diff --git a/_maps/map_files/Basketball/ash_gladiators.dmm b/_maps/map_files/Basketball/ash_gladiators.dmm index 3a8c74b4201..75315e028a8 100644 --- a/_maps/map_files/Basketball/ash_gladiators.dmm +++ b/_maps/map_files/Basketball/ash_gladiators.dmm @@ -132,7 +132,7 @@ /turf/open/floor/fakebasalt, /area/centcom/basketball) "ie" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/floor/fakebasalt, /area/centcom/basketball) "ix" = ( @@ -609,7 +609,7 @@ /turf/open/lava/smooth/basketball, /area/centcom/basketball) "Fy" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/floor/fakebasalt, /area/centcom/basketball) "FS" = ( diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 4b51b7d4a84..d2e8f5c89f7 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -487,6 +487,9 @@ }, /obj/effect/turf_decal/trimline/yellow/line, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "ajG" = ( @@ -2017,7 +2020,7 @@ /area/station/science/ordnance/bomb) "aPG" = ( /obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ dir = 5 }, /turf/open/floor/plating, @@ -2058,7 +2061,7 @@ /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs) "aQn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible, /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/engineering/supermatter) "aQr" = ( @@ -2077,7 +2080,7 @@ /area/station/engineering/engine_smes) "aQB" = ( /obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ dir = 9 }, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -2305,6 +2308,9 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "aTG" = ( @@ -2323,10 +2329,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 1 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "aTW" = ( /obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "aUA" = ( @@ -2341,6 +2353,9 @@ }, /obj/effect/turf_decal/trimline/yellow/arrow_cw, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "aVj" = ( @@ -2349,9 +2364,11 @@ }, /obj/effect/turf_decal/trimline/yellow/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 4 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "aVq" = ( @@ -2545,7 +2562,7 @@ "aZP" = ( /obj/structure/cable, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = -10 }, /obj/item/paper_bin{ @@ -2668,9 +2685,6 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 8 - }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "bcv" = ( @@ -2682,10 +2696,10 @@ /area/station/medical/medbay/lobby) "bcK" = ( /obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "bcR" = ( @@ -3275,8 +3289,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) @@ -4473,8 +4487,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "bJZ" = ( @@ -5905,8 +5921,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/smooth, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "coJ" = ( /obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, @@ -7850,8 +7870,8 @@ /obj/structure/sink/kitchen/directional/east, /obj/machinery/airalarm/directional/south, /obj/machinery/button/door/directional/west{ - pixel_y = 8; - id = "custodialshutters" + id = "custodialshutters"; + pixel_y = 8 }, /turf/open/floor/iron/white/small, /area/station/service/janitor) @@ -8475,7 +8495,7 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 + dir = 4 }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) @@ -9165,10 +9185,11 @@ /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) "dyH" = ( -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, /obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8; + filter_type = list(/datum/gas/nitrogen) + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "dyO" = ( @@ -9863,6 +9884,13 @@ /obj/item/clothing/glasses/meson, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"dLE" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "dLQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -10724,8 +10752,8 @@ /area/station/security/prison/shower) "dZT" = ( /obj/machinery/button/transport/tram/directional/south{ - specific_transport_id = "bird_2"; - id = 2 + id = 2; + specific_transport_id = "bird_2" }, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -14856,10 +14884,6 @@ /obj/machinery/coffeemaker{ pixel_y = 12 }, -/obj/item/reagent_containers/cup/coffeepot{ - pixel_x = 3; - pixel_y = -5 - }, /turf/open/floor/iron/kitchen/small, /area/station/security/breakroom) "fyr" = ( @@ -16212,7 +16236,7 @@ /obj/machinery/power/apc/auto_name/directional/east, /obj/item/bedsheet/ce, /obj/effect/landmark/start/chief_engineer, -/obj/item/storage/secure/safe/directional/south, +/obj/structure/secure_safe/directional/south, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/ce) "fTD" = ( @@ -16775,8 +16799,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "gfE" = ( /obj/effect/turf_decal/siding/red{ dir = 8 @@ -17339,7 +17367,7 @@ /area/station/command/heads_quarters/ce) "gpK" = ( /obj/structure/closet/secure_closet/engineering_chief, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/lighter, /obj/machinery/computer/security/telescreen/entertainment/directional/south, /turf/open/floor/iron/grimy, @@ -18341,7 +18369,7 @@ /area/station/medical/chemistry) "gIG" = ( /obj/structure/table/glass, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/carpet/executive, /area/station/command/meeting_room) "gIH" = ( @@ -18762,6 +18790,9 @@ }, /obj/effect/turf_decal/trimline/yellow/corner, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "gPN" = ( @@ -19566,7 +19597,7 @@ name = "Evidence Closet 2" }, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/secure/safe/directional/north{ +/obj/structure/secure_safe/directional/north{ name = "evidence safe" }, /turf/open/floor/iron/smooth, @@ -20014,8 +20045,8 @@ pixel_y = 11 }, /obj/item/mod/module/signlang_radio{ - pixel_y = 2; - pixel_x = -2 + pixel_x = -2; + pixel_y = 2 }, /turf/open/floor/iron/small, /area/station/security/office) @@ -29109,7 +29140,9 @@ /area/station/maintenance/hallway/abandoned_recreation) "kvh" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "kvl" = ( @@ -30576,6 +30609,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "kYQ" = ( @@ -33139,9 +33175,6 @@ /area/station/maintenance/hallway/abandoned_command) "lOh" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 8 - }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "lOi" = ( @@ -36004,8 +36037,8 @@ "mNG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/transport/tram/directional/south{ - specific_transport_id = "bird_2"; - id = 1 + id = 1; + specific_transport_id = "bird_2" }, /turf/open/floor/iron, /area/station/maintenance/port/aft) @@ -38608,7 +38641,7 @@ /obj/effect/turf_decal/siding/dark_red/corner{ dir = 8 }, -/obj/item/storage/secure/safe/directional/north{ +/obj/structure/secure_safe/directional/north{ name = "armory safe A" }, /obj/effect/decal/cleanable/dirt, @@ -40931,6 +40964,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "oFf" = ( @@ -42871,10 +42905,10 @@ /turf/open/floor/iron/textured_large, /area/station/security/checkpoint/escape) "poI" = ( -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "poM" = ( @@ -43161,7 +43195,7 @@ /area/station/command/corporate_suite) "ptB" = ( /obj/item/kirbyplants/organic/applebush, -/obj/item/storage/secure/safe/caps_spare/directional/west, +/obj/structure/secure_safe/caps_spare/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) "ptN" = ( @@ -43859,10 +43893,12 @@ /area/station/medical/paramedic) "pEu" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, /obj/effect/decal/cleanable/dirt, /obj/machinery/meter, /obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "pEy" = ( @@ -46376,7 +46412,7 @@ /turf/open/floor/iron/grimy, /area/station/service/theater) "qrP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{ dir = 6 }, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -46817,8 +46853,8 @@ "qzp" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/transport/tram/directional/north{ - specific_transport_id = "bird_1"; - id = 1 + id = 1; + specific_transport_id = "bird_1" }, /obj/machinery/transport/destination_sign/indicator/directional/north, /turf/open/floor/noslip, @@ -49880,8 +49916,8 @@ /obj/structure/table, /obj/machinery/airalarm/directional/south, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/clipboard{ pixel_x = 4; @@ -55374,7 +55410,7 @@ /obj/effect/turf_decal/siding/dark_red{ dir = 1 }, -/obj/item/storage/secure/safe/hos{ +/obj/structure/secure_safe/hos{ pixel_x = 15; pixel_y = 28 }, @@ -56712,8 +56748,8 @@ "tGv" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/transport/tram/directional/north{ - specific_transport_id = "bird_1"; - id = 2 + id = 2; + specific_transport_id = "bird_1" }, /obj/machinery/transport/destination_sign/indicator/directional/north, /turf/open/floor/noslip, @@ -59931,11 +59967,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"uJZ" = ( -/obj/structure/window/reinforced/shuttle, -/obj/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) "uKl" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -61231,11 +61262,11 @@ /area/station/maintenance/department/science/xenobiology) "vgC" = ( /obj/structure/closet/secure_closet/chief_medical, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 3; pixel_y = 5 }, -/obj/item/storage/secure/safe/directional/south{ +/obj/structure/secure_safe/directional/south{ pixel_y = -23 }, /obj/item/gun/syringe, @@ -61670,6 +61701,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/camera/autoname/directional/north, /obj/machinery/light/small/directional/north, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, /turf/open/floor/iron, /area/station/security/tram) "vmX" = ( @@ -63663,6 +63695,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 }, +/obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) "vTm" = ( @@ -66718,18 +66751,9 @@ /turf/open/floor/iron/dark, /area/station/security/interrogation) "wPf" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" - }, -/obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/hop) +/obj/item/clothing/glasses/blindfold, +/turf/open/space/basic, +/area/space) "wPh" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -66933,8 +66957,8 @@ /obj/item/radio/intercom/directional/south, /obj/structure/extinguisher_cabinet/directional/west, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 + pixel_x = 4; + pixel_y = 6 }, /obj/item/stack/medical/gauze{ pixel_x = -2; @@ -68547,8 +68571,12 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "xoa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -71970,11 +71998,11 @@ "yhk" = ( /obj/structure/table, /obj/machinery/light_switch/directional/north, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 3; pixel_y = 12 }, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = -1; pixel_y = 8 }, @@ -82400,8 +82428,8 @@ geQ aRR pbt aPG -aTW bAq +dLE aTW bhc bng @@ -95300,7 +95328,7 @@ njA lqt cpT xQv -wPf +xQw mvT vrn ncL @@ -109937,7 +109965,7 @@ tIE aJN aJN aJN -uJZ +aJN aJN doX doX @@ -132056,7 +132084,7 @@ dDB dDB dDB dDB -dDB +wPf dDB dDB dDB diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ad05d3cb906..0c73cb0f482 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -23,13 +23,6 @@ }, /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) -"aaj" = ( -/obj/structure/bed/dogbed/renault, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/pet/fox/renault, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/captain) "aaz" = ( /obj/effect/landmark/start/hangover, /obj/structure/chair/stool/directional/east, @@ -285,6 +278,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/bridge) +"adE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "adF" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -376,6 +374,18 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"aeD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay - Delivery Office"; + name = "cargo camera" + }, +/obj/effect/turf_decal/tile/brown, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "aeE" = ( /obj/structure/table/reinforced, /obj/item/stack/package_wrap, @@ -807,7 +817,7 @@ /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) "ajG" = ( -/obj/item/storage/secure/safe/directional/west, +/obj/structure/secure_safe/directional/west, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 }, @@ -1149,7 +1159,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -1280,6 +1290,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"apf" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "apu" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -2187,6 +2205,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"azD" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "azE" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -2527,17 +2555,20 @@ /obj/item/clothing/under/rank/civilian/lawyer/black/skirt, /turf/open/floor/wood, /area/station/commons/dorms) +"aFb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "aFo" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/open/space, /area/space/nearstation) -"aFs" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/lobby) "aFv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2745,11 +2776,6 @@ /obj/item/toy/figure/chef, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"aHw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "aHC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/status_display/evac/directional/east, @@ -3270,6 +3296,11 @@ /obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"aOd" = ( +/obj/structure/table/wood, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "aOf" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -3418,15 +3449,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/lab) -"aPD" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "aPO" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/effect/turf_decal/tile/yellow{ @@ -3558,6 +3580,12 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) +"aRX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "aRZ" = ( /obj/structure/dresser, /obj/item/radio/intercom/directional/east, @@ -4053,6 +4081,21 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/main) +"aZj" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/welding, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/weldingtool/empty{ + pixel_y = 8; + pixel_x = 9 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "aZo" = ( /obj/structure/table/reinforced, /obj/item/electronics/airalarm, @@ -4984,13 +5027,6 @@ }, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) -"bkr" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ - id = "cargodisposals" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "bkD" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -5127,6 +5163,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"bmo" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "bmp" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -6658,6 +6704,13 @@ }, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"bFA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "bFS" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, @@ -6870,6 +6923,13 @@ }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"bHd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/wood, +/obj/item/radio/intercom/command, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/carpet, +/area/station/command/meeting_room/council) "bHg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, @@ -7294,28 +7354,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science) -"bLN" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/emergency{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/toolbox/emergency, -/obj/item/shovel, -/obj/item/shovel, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/south, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch/directional/west{ - pixel_x = -38 - }, -/obj/machinery/airalarm/directional/south, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "bLP" = ( /obj/machinery/camera/directional/east{ c_tag = "Permabrig - Kitchen Entrance"; @@ -7389,12 +7427,6 @@ /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/iron/white, /area/station/science/lab) -"bMw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space, -/area/space/nearstation) "bMB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7676,6 +7708,14 @@ dir = 8 }, /area/station/science/lobby) +"bRs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port) "bRw" = ( /obj/structure/sign/warning/deathsposal/directional/east, /obj/machinery/disposal/bin, @@ -8175,7 +8215,7 @@ "bWn" = ( /obj/structure/sign/poster/party_game/directional/west, /obj/structure/table, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 3; pixel_y = 3 }, @@ -8187,17 +8227,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"bWw" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/status_display/door_timer{ - id = "Isolation_Cell"; - name = "Isolation Cell"; - pixel_x = -32 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "bWD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8428,6 +8457,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"bZe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron, +/area/station/medical/abandoned) "bZz" = ( /obj/structure/table/wood, /obj/item/folder, @@ -9143,6 +9182,24 @@ "cjN" = ( /turf/closed/wall/r_wall, /area/station/security/office) +"cjO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "ckb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -10099,17 +10156,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/security/prison/safe) -"cvc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/department/science) "cvo" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -10150,12 +10196,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) -"cwd" = ( -/obj/machinery/light/directional/south, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) "cwe" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -10207,22 +10247,6 @@ /obj/structure/sign/warning/radiation/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"cwK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "cwV" = ( /obj/effect/landmark/start/hangover, /obj/structure/disposalpipe/segment{ @@ -10291,14 +10315,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"cxv" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/fore) "cxM" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -10333,11 +10349,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/treatment_center) -"cyc" = ( -/obj/machinery/netpod, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "cyq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11092,9 +11103,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"cGV" = ( -/turf/closed/wall, -/area/station/bitrunning/den) "cHb" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11544,7 +11552,7 @@ /area/station/service/theater) "cNy" = ( /obj/item/kirbyplants/random, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain/private) "cNH" = ( @@ -11653,13 +11661,6 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/fore) -"cOS" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "cOU" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ @@ -11890,6 +11891,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/eva/abandoned) +"cRR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cRT" = ( /turf/open/floor/iron, /area/station/medical/abandoned) @@ -12016,6 +12024,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"cTv" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cTy" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 1 @@ -12733,6 +12748,18 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/service/library/abandoned) +"ddp" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/south, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron, +/area/station/medical/storage) "dds" = ( /obj/machinery/camera/directional/east{ c_tag = "Virology - Break Room"; @@ -13270,6 +13297,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"dkr" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dkz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/directional/west, @@ -13798,6 +13838,12 @@ dir = 4 }, /area/station/science/lobby) +"dsb" = ( +/obj/machinery/netpod, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/bitrunning/den) "dse" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14020,18 +14066,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"dux" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/item/clipboard, -/obj/item/toy/figure/miner, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "duA" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_showroom) @@ -14311,6 +14345,11 @@ "dxe" = ( /turf/closed/wall, /area/station/medical/abandoned) +"dxh" = ( +/obj/structure/table/wood, +/obj/item/aquarium_kit, +/turf/open/floor/carpet/red, +/area/station/hallway/secondary/service) "dxi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/window{ @@ -15250,6 +15289,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"dKR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/department/science) "dLd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15681,18 +15731,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) +"dPv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "dPB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"dPC" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/turf_decal/delivery, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "dPD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15858,15 +15909,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/lobby) -"dRQ" = ( -/obj/structure/table/glass, -/obj/item/surgery_tray/full, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/suit/apron/surgical, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "dSj" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/landmark/event_spawn, @@ -16095,6 +16137,16 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"dVA" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "dVC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16233,14 +16285,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port) -"dXs" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "dXw" = ( /obj/structure/sign/painting/large/library_private{ dir = 1; @@ -16287,6 +16331,13 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/medbay) +"dXX" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "dYj" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) @@ -16511,7 +16562,7 @@ "eaL" = ( /obj/structure/table, /obj/item/stack/package_wrap, -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/item/stack/package_wrap, /obj/item/hand_labeler, /obj/machinery/airalarm/directional/east, @@ -16672,6 +16723,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) +"ecX" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/conveyor{ + id = "cargodisposals" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "eda" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -17062,6 +17120,11 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) +"eit" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "eiw" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17153,19 +17216,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"eke" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "ekM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -17240,12 +17290,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) -"elO" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "elP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -17323,18 +17367,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"emZ" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/recycler{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "enc" = ( /obj/machinery/status_display/evac/directional/east, /obj/item/kirbyplants/photosynthetic{ @@ -17647,6 +17679,12 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/textured, /area/station/maintenance/port/aft) +"ero" = ( +/obj/structure/bed/dogbed/mcgriff, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/mob/living/basic/pet/dog/pug/mcgriff, +/turf/open/floor/iron, +/area/station/security/warden) "ers" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -17969,7 +18007,7 @@ "euf" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/east, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/book/manual/wiki/security_space_law, /obj/item/taperecorder{ pixel_x = 3; @@ -18543,6 +18581,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"eCQ" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/emergency{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/emergency, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/south, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch/directional/west{ + pixel_x = -38 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "eCR" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -18668,6 +18728,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"eEI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/mob/living/basic/goat/pete, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "eFj" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -18728,18 +18796,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"eFU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "eGb" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/wood, @@ -19070,6 +19126,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) +"eJx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "eJy" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -19708,6 +19774,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"eQG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "eQK" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 @@ -20039,6 +20113,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) +"eVc" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) "eVk" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4; @@ -20070,6 +20149,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"eVz" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "eVE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -20292,29 +20378,6 @@ }, /turf/open/floor/glass, /area/station/maintenance/space_hut/observatory) -"eYo" = ( -/obj/structure/table/reinforced, -/obj/item/gun/energy/laser/carbine/practice{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/gun/energy/laser/practice, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/ears/earmuffs, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/range) -"eYt" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/order_console/mining, -/obj/item/radio/intercom/directional/west, -/obj/machinery/firealarm/directional/west{ - pixel_y = -9 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "eYy" = ( /obj/structure/cable, /obj/structure/closet/secure_closet/atmospherics, @@ -20398,13 +20461,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"eYZ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eZe" = ( /obj/machinery/vending/wardrobe/viro_wardrobe, /obj/structure/sign/poster/official/cleanliness/directional/west, @@ -20506,10 +20562,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science/xenobiology) -"fbu" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/bitrunning/den) "fbA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -20946,6 +20998,18 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/service/theater/abandoned) +"fgk" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall12"; + location = "hall11" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fgq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21100,11 +21164,6 @@ }, /turf/open/floor/wood, /area/station/service/library/abandoned) -"fiu" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "fix" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21120,13 +21179,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"fiJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "fiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21447,6 +21499,21 @@ }, /turf/open/floor/wood, /area/station/service/library/abandoned) +"fmH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "fmI" = ( /obj/machinery/bluespace_vendor/directional/south, /obj/effect/turf_decal/tile/neutral, @@ -21641,7 +21708,7 @@ /area/station/security/warden) "fpe" = ( /obj/structure/closet/secure_closet/contraband/heads, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/storage/box/ids, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/bot, @@ -21990,13 +22057,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/library) -"ftS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "ftU" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/yellow, @@ -22074,6 +22134,13 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"fvD" = ( +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fvE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -22247,6 +22314,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"fxx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "fxP" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/west, /obj/structure/table/wood, @@ -22433,16 +22504,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/storage) -"fAj" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "fAn" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -23017,6 +23078,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/evidence) +"fIe" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) "fIg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23088,6 +23155,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) +"fIU" = ( +/obj/structure/rack, +/obj/item/gun/energy/laser/carbine/practice{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/laser/practice, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/auxlab/firing_range) "fIW" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -23620,17 +23699,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"fQC" = ( -/obj/structure/table, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/item/radio/intercom/directional/south, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron/dark, -/area/station/security/office) "fQF" = ( /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/structure/cable, @@ -23798,16 +23866,6 @@ "fSW" = ( /turf/closed/indestructible/opshuttle, /area/station/science/ordnance/bomb) -"fTh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "fTw" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, @@ -23848,6 +23906,12 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/library) +"fTE" = ( +/obj/machinery/cryo_cell{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/cryo) "fTF" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/structure/window/reinforced/spawner/directional/west, @@ -23916,12 +23980,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fUr" = ( -/obj/machinery/cryo_cell{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/cryo) "fUF" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/east, @@ -24403,27 +24461,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/security/courtroom) -"gan" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/structure/table_fancy, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - desc = "Whatever it is, it reeks of foul, putrid froth."; - list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15); - name = "Delta-Down"; - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/floor/wood, -/area/station/commons/dorms) "gat" = ( /obj/machinery/door/poddoor/preopen{ id = "brigprison"; @@ -24608,16 +24645,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"gco" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gcr" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, @@ -25039,6 +25066,11 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"ggW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/lockers) "gho" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25256,7 +25288,7 @@ /area/station/medical/paramedic) "gjG" = ( /obj/structure/table/wood, -/obj/item/storage/secure/safe/hos{ +/obj/structure/secure_safe/hos{ pixel_x = 32 }, /obj/machinery/light_switch/directional/north, @@ -25284,6 +25316,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"gkt" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "gku" = ( /obj/machinery/meter, /obj/machinery/door/window/right/directional/west, @@ -25607,6 +25649,18 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"goa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "goc" = ( /obj/machinery/keycard_auth/directional/south{ pixel_y = -38 @@ -25731,6 +25785,18 @@ /obj/structure/reflector/single, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"gpD" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "gpI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26105,6 +26171,13 @@ /obj/item/toy/cards/deck, /turf/open/floor/iron/grimy, /area/station/service/abandoned_gambling_den) +"gty" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/gps/mining, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "gtG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -26158,14 +26231,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) -"guj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gum" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26562,11 +26627,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/law_office, /turf/open/floor/plating, /area/station/maintenance/department/security) -"gzc" = ( -/obj/structure/table/wood, -/obj/item/aquarium_kit, -/turf/open/floor/carpet/red, -/area/station/hallway/secondary/service) "gzj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/prisoner, @@ -26801,6 +26861,19 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/dorms) +"gCa" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "gCn" = ( /obj/structure/sign/warning/electric_shock/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -27160,7 +27233,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/wood, /area/station/command/meeting_room/council) "gGv" = ( @@ -27231,6 +27304,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/research) +"gHq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/bitrunning/den) "gHt" = ( /obj/item/kirbyplants/random, /obj/machinery/button/door/directional/north{ @@ -27258,7 +27335,7 @@ "gHH" = ( /obj/structure/cable, /obj/structure/closet/secure_closet/contraband/heads, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 @@ -27784,11 +27861,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"gOH" = ( -/obj/effect/landmark/blobstart, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "gOR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28163,16 +28235,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/cryo) -"gTH" = ( -/obj/machinery/flasher/directional/south{ - id = "Isolation_Cell" - }, -/obj/machinery/light/small/broken/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/security/prison/safe) "gTO" = ( /obj/structure/table/wood, /obj/item/crowbar/red, @@ -28342,6 +28404,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/storage/primary) +"gVv" = ( +/obj/machinery/netpod, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/bitrunning/den) "gVx" = ( /obj/structure/cable, /obj/machinery/door/window/brigdoor/right/directional/south{ @@ -29375,13 +29442,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay) -"hkn" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hkt" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -29847,6 +29907,28 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"hrz" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "hrG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -30090,14 +30172,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"huS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/department/electrical) "huX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -30336,6 +30410,13 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"hxP" = ( +/obj/structure/bed/dogbed/renault, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/pet/fox/renault, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/captain) "hxS" = ( /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) @@ -30379,6 +30460,20 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"hyR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/lockers) "hza" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -30399,10 +30494,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/maintenance/department/science/xenobiology) -"hzs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hzx" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -31277,6 +31368,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"hMp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port) "hMx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31395,6 +31493,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"hOk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/lockers) "hOw" = ( /obj/structure/chair/office{ dir = 4 @@ -31610,7 +31713,7 @@ /area/station/hallway/secondary/exit/departure_lounge) "hQJ" = ( /obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/machinery/computer/security/wooden_tv, /obj/machinery/light_switch/directional/south{ pixel_x = 8 @@ -32095,6 +32198,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) +"hXg" = ( +/turf/closed/wall, +/area/station/bitrunning/den) "hXi" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -32764,6 +32870,13 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/space, /area/space/nearstation) +"idX" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "iee" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33024,16 +33137,6 @@ }, /turf/open/floor/plating, /area/station/medical/virology) -"iio" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "iiy" = ( /obj/structure/easel, /turf/open/floor/iron, @@ -33715,6 +33818,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"irx" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/department/chapel) "irD" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -33854,13 +33969,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"itC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "itF" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -34283,14 +34391,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"izj" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "izo" = ( /obj/structure/table/wood, /obj/item/gavelblock, @@ -34332,6 +34432,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) +"izK" = ( +/obj/machinery/door/airlock/mining{ + name = "Mining Dock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "izM" = ( /obj/structure/closet/crate/trashcart/laundry, /obj/effect/spawner/random/contraband/prison, @@ -34481,11 +34589,6 @@ }, /turf/open/floor/wood, /area/station/medical/psychology) -"iBH" = ( -/obj/structure/table/wood, -/obj/item/paper/fluff/jobs/engineering/frequencies, -/turf/open/floor/iron/grimy, -/area/station/tcommsat/computer) "iBO" = ( /obj/machinery/power/turbine/inlet_compressor, /turf/open/floor/engine, @@ -34609,6 +34712,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) +"iDm" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/newscaster/directional/north, +/mob/living/simple_animal/parrot/poly, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "iDq" = ( /turf/closed/wall/r_wall, /area/station/security/range) @@ -34876,6 +34987,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/command/bridge) +"iGF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4, +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "iGI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_hatch{ @@ -34927,6 +35044,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/holding_cell) +"iHn" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "iHq" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 10 @@ -35744,6 +35869,25 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/medical/coldroom) +"iTM" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stock_parts/cell/emproof{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/east, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/item/mod/module/magboot, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron, +/area/station/engineering/storage) "iTW" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -36022,15 +36166,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"iXd" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/shaft_miner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "iXj" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/bot, @@ -36100,14 +36235,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"iXE" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/aisat/exterior) "iXM" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -36287,6 +36414,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"jag" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/simple_animal/hostile/retaliate/goose/vomit, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "jap" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36441,7 +36579,7 @@ pixel_x = -3; pixel_y = 1 }, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = -3 }, @@ -36853,13 +36991,6 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating, /area/station/engineering/atmos/mix) -"jfO" = ( -/obj/structure/closet/wardrobe/miner, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/satchel/explorer, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jfP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37025,6 +37156,7 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "jhs" = ( @@ -37483,13 +37615,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/courtroom) -"jnd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "jni" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, @@ -37637,21 +37762,6 @@ /obj/item/clothing/suit/toggle/labcoat, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"joP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Cargo Maintenance" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/fore) "joU" = ( /obj/structure/table, /obj/item/paper_bin, @@ -38046,6 +38156,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) +"juz" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "juF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38098,6 +38215,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"jvp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "jvq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38314,6 +38441,19 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, /turf/open/floor/iron/white, /area/station/medical/medbay) +"jyL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/fore) "jyP" = ( /obj/effect/turf_decal/siding/dark_blue{ dir = 8 @@ -38352,6 +38492,11 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/evidence) +"jyZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jzb" = ( /obj/machinery/door/poddoor/shutters{ dir = 4; @@ -38567,11 +38712,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lobby) -"jBM" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jCb" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -38655,13 +38795,6 @@ /obj/item/pen, /turf/open/floor/wood, /area/station/service/library/abandoned) -"jCu" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jCv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/hydroponics/constructable, @@ -39309,18 +39442,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"jKY" = ( -/obj/effect/decal/cleanable/oil/streak, -/obj/machinery/camera/directional/south, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 5 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/bitrunning/den) "jLa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing{ @@ -39903,19 +40024,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay) -"jRc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "jRg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -40100,6 +40208,19 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"jTH" = ( +/obj/structure/table/glass, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/siding/dark_red, +/obj/item/storage/box/bandages{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/morphine, +/obj/item/reagent_containers/syringe, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "jTI" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/north, @@ -41658,6 +41779,17 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"knp" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/cigbutt/cigarbutt, +/obj/item/stack/cable_coil{ + pixel_x = -10; + pixel_y = 7 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "knu" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/green{ @@ -41852,7 +41984,7 @@ /area/station/hallway/primary/central/fore) "kqk" = ( /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = 5 }, @@ -41864,6 +41996,18 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"kqJ" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "kqM" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -42069,6 +42213,17 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"kuj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/mining/glass{ + name = "Bitrunning Den" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "kun" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -42616,13 +42771,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"kBE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/wood, -/obj/item/radio/intercom/command, -/obj/item/paper/fluff/jobs/engineering/frequencies, -/turf/open/floor/carpet, -/area/station/command/meeting_room/council) "kBH" = ( /obj/machinery/status_display/evac/directional/west, /obj/machinery/chem_master, @@ -42766,15 +42914,6 @@ /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"kDv" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "kDB" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ @@ -43218,15 +43357,6 @@ /obj/structure/sign/warning/pods, /turf/closed/wall, /area/station/hallway/secondary/entry) -"kKx" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "kKy" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/rnd/production/techfab/department/medical, @@ -43325,6 +43455,22 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"kLA" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "kLI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/north{ @@ -43853,18 +43999,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/engineering/main) -"kTs" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/landmark/start/shaft_miner, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "kTy" = ( /obj/structure/chair/office{ dir = 8 @@ -43914,6 +44048,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/port) +"kUj" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/machinery/camera/directional/south, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) "kUn" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/brown{ @@ -44000,15 +44146,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"kVw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "kVx" = ( /obj/machinery/door/airlock/highsecurity{ name = "Emergency Access" @@ -44778,22 +44915,6 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/engine, /area/station/science/genetics) -"lfC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/belt/utility, -/turf/open/floor/iron, -/area/station/cargo/storage) "lfD" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/dark_red{ @@ -45169,15 +45290,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) -"ljQ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "ljS" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -45317,16 +45429,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"llj" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "llm" = ( /obj/structure/chair/office/tactical{ dir = 8 @@ -45431,7 +45533,7 @@ "lmI" = ( /obj/structure/table/glass, /obj/machinery/computer/records/medical/laptop, -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -45479,6 +45581,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/storage/gas) +"lni" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "lnm" = ( /obj/structure/closet/secure_closet/captains, /obj/effect/turf_decal/stripes/line{ @@ -45854,16 +45966,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) -"ltg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "ltr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46316,8 +46418,19 @@ dir = 1 }, /obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) +"lyx" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "lyE" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -46723,6 +46836,17 @@ }, /turf/open/floor/iron/dark, /area/station/command/corporate_showroom) +"lDu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/machinery/microwave{ + desc = "Cooks and boils stuff, somehow."; + pixel_x = -3; + pixel_y = 5 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "lDI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47289,6 +47413,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"lJw" = ( +/obj/machinery/computer/quantum_console, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/bitrunning/den) "lJB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -47504,7 +47633,7 @@ "lLW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/storage/briefcase{ pixel_x = -3; pixel_y = 3 @@ -47666,12 +47795,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) -"lNN" = ( -/obj/structure/bed/dogbed/mcgriff, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/mob/living/basic/pet/dog/pug/mcgriff, -/turf/open/floor/iron, -/area/station/security/warden) "lNZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47800,6 +47923,8 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "lPM" = ( @@ -48125,12 +48250,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/medical/paramedic) -"lUW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "lVi" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/bot, @@ -48581,11 +48700,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"mcF" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space, -/area/space/nearstation) "mcG" = ( /obj/machinery/button/door/directional/east{ id = "Dorm6"; @@ -48665,6 +48779,8 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "mdB" = ( @@ -49090,6 +49206,27 @@ "mjz" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) +"mjH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Office Desk"; + req_access = list("shipping") + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "mjK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/corner{ @@ -49167,6 +49304,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater) +"mlv" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "mlw" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -49197,11 +49341,6 @@ "mlE" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) -"mlF" = ( -/obj/machinery/computer/quantum_console, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/dark/smooth_corner, -/area/station/bitrunning/den) "mlM" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -49275,16 +49414,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/space/basic, /area/space/nearstation) -"mmA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron, -/area/station/medical/abandoned) "mmM" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -49748,11 +49877,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) -"mtL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "mtO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow{ @@ -49996,6 +50120,19 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"mwM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mwR" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -50506,13 +50643,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"mDm" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/station/bitrunning/den) "mDo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50657,6 +50787,19 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, /area/station/maintenance/department/security) +"mEv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mEx" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/hazardvest, @@ -51458,17 +51601,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"mOh" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/trimline/white/warning{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/hostile/retaliate/goose/vomit, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "mOo" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -51849,11 +51981,6 @@ "mTA" = ( /turf/closed/wall/r_wall, /area/station/security/holding_cell) -"mTB" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/space, -/area/space/nearstation) "mTT" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -52026,6 +52153,12 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) +"mWs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "mWy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -52596,17 +52729,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"neT" = ( -/obj/effect/turf_decal/trimline/neutral/mid_joiner{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/surgery_tray/full/morgue, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "nfd" = ( /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/engine/plasma, @@ -52745,17 +52867,6 @@ /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"nhj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "nhm" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -52888,7 +52999,7 @@ /area/station/service/chapel/funeral) "niL" = ( /obj/structure/rack, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/bot, /obj/item/reagent_containers/pill/patch/aiuri, @@ -53024,6 +53135,22 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"nkO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "nkU" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, @@ -53525,7 +53652,12 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4, -/obj/structure/sign/warning/secure_area/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron, /area/station/engineering/supermatter/room) "nsd" = ( @@ -53643,12 +53775,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"ntU" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave/engineering/cell_included, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/wood, -/area/station/engineering/break_room) "ntX" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -54357,6 +54483,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"nCY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nDk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -54476,12 +54609,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port) -"nEE" = ( -/obj/machinery/netpod, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "nEJ" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/line, @@ -54496,6 +54623,9 @@ /obj/structure/sign/warning/electric_shock/directional/east, /turf/open/space/basic, /area/space) +"nEZ" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "nFb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -54872,18 +55002,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nJF" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall12"; - location = "hall11" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/simple_animal/bot/secbot/beepsky/officer, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "nJK" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ dir = 1 @@ -55038,6 +55156,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"nMi" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "nMp" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /obj/machinery/meter, @@ -56154,6 +56281,15 @@ }, /turf/open/floor/plating, /area/station/science/robotics/mechbay) +"occ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/order_console/mining, +/obj/item/radio/intercom/directional/west, +/obj/machinery/firealarm/directional/west{ + pixel_y = -9 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ocd" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/flora/bush/flowers_yw/style_random, @@ -56638,7 +56774,7 @@ "oit" = ( /obj/structure/table/wood, /obj/machinery/light/directional/north, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/item/storage/lockbox/loyalty, /obj/item/storage/backpack/satchel/leather/withwallet{ pixel_y = 6 @@ -56848,24 +56984,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/garden) -"okN" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "okV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/plumbed{ @@ -57130,12 +57248,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"onA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "onK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57575,6 +57687,15 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/service/chapel/funeral) +"ove" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "ovf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -57676,6 +57797,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/command/teleporter) +"own" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) "owu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57716,8 +57845,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "owY" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron{ @@ -57731,13 +57864,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/port) -"owZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "oxb" = ( /obj/machinery/duct, /obj/effect/turf_decal/siding/white, @@ -57981,28 +58107,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain/private) -"oAV" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "oAW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58188,6 +58292,12 @@ "oDE" = ( /turf/closed/wall, /area/station/medical/cryo) +"oDJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/science/research/abandoned) "oDR" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -58308,14 +58418,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) -"oFk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/steam_vent, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "oFr" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -58612,6 +58714,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) +"oKn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/cockroach, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "oKr" = ( /turf/closed/wall, /area/station/security/checkpoint/supply) @@ -58892,6 +59002,11 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"oNE" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "oNF" = ( /obj/effect/turf_decal/siding/blue, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -59627,6 +59742,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) +"oYr" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "oYs" = ( /turf/closed/wall, /area/station/maintenance/port/fore) @@ -59715,7 +59839,7 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/airalarm/directional/east, /turf/open/floor/wood, /area/station/service/lawoffice) @@ -60189,6 +60313,13 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"pfs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pfA" = ( /obj/structure/table/reinforced, /obj/item/assembly/timer, @@ -60331,6 +60462,23 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"pgZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "phn" = ( /obj/structure/cable, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -60424,6 +60572,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "phX" = ( @@ -61216,16 +61365,6 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"ptA" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/delivery, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/item/mod/module/tether, -/obj/item/mod/module/tether, -/obj/item/stack/sheet/plasteel/fifty, -/turf/open/floor/iron, -/area/station/engineering/storage) "ptC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61286,6 +61425,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"put" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "puJ" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/effect/turf_decal/delivery, @@ -61568,21 +61714,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"pxS" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "pxT" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -61776,6 +61907,15 @@ }, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) +"pAa" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pAd" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -61950,10 +62090,29 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"pBN" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pBY" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"pCr" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "chemisttop"; + name = "Pharmacy Shutters" + }, +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "pCy" = ( /obj/structure/table, /obj/item/clipboard, @@ -62048,13 +62207,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"pDy" = ( -/obj/machinery/cryo_cell{ - dir = 8 +"pDz" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 }, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/cryo) +/area/station/bitrunning/den) "pDE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62408,6 +62567,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"pGR" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "pHa" = ( /obj/structure/lattice, /obj/structure/sign/warning/directional/west, @@ -63247,7 +63410,7 @@ "pQR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/grenade/smokebomb, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) @@ -63284,13 +63447,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"pRp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pRy" = ( /obj/effect/turf_decal/siding/green, /obj/structure/window/reinforced/spawner/directional/south, @@ -63498,39 +63654,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) -"pTz" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/folder/yellow{ - pixel_x = -3; - pixel_y = -6 - }, -/obj/item/pen{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "chemisttop"; - name = "Pharmacy Shutters" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/window/left/directional/west{ - name = "Pharmacy Desk"; - req_access = list("pharmacy"); - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "pTB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -63651,17 +63774,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) -"pUs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/mining/glass{ - name = "Bitrunning Den" - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "pUw" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -64094,6 +64206,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port) +"pZf" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/status_display/door_timer{ + id = "Isolation_Cell"; + name = "Isolation Cell"; + pixel_x = -32 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "pZi" = ( /obj/structure/training_machine, /obj/item/target/alien, @@ -64250,6 +64373,21 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/commons/toilet/locker) +"qbd" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "qbg" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment{ @@ -64881,18 +65019,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) -"qko" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "qkv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65049,21 +65175,6 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"qmT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "qnc" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/blue{ @@ -65235,6 +65346,14 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"qpd" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qpg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -65491,22 +65610,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) -"qsF" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "qsN" = ( /obj/structure/chair{ dir = 4 @@ -65586,6 +65689,21 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/detectives_office) +"quh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "qul" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, @@ -66328,6 +66446,17 @@ /obj/item/circuitboard/machine/chem_master, /turf/open/floor/iron/grimy, /area/station/maintenance/port/fore) +"qDw" = ( +/obj/structure/table, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/south, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron/dark, +/area/station/security/office) "qDI" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -67415,6 +67544,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore) +"qQy" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qQE" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -67678,6 +67815,27 @@ /obj/item/shovel/spade, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden/abandoned) +"qVa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/east, +/obj/effect/spawner/random/structure/table_fancy, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Whatever it is, it reeks of foul, putrid froth."; + list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15); + name = "Delta-Down"; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "qVf" = ( /obj/structure/chair, /obj/effect/decal/cleanable/blood/splatter, @@ -68421,13 +68579,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"rgC" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/gps/mining, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rgG" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/decal/cleanable/dirt, @@ -68570,6 +68721,19 @@ }, /turf/open/floor/iron, /area/station/medical/virology) +"rid" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "riq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, @@ -68637,16 +68801,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay) -"riZ" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "chemisttop"; - name = "Pharmacy Shutters" - }, -/obj/machinery/smartfridge/chemistry/preloaded, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "rjd" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -69061,19 +69215,6 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"rmH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rmI" = ( /obj/structure/table/reinforced, /obj/item/electronics/apc, @@ -69353,14 +69494,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"rqN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port) "rqV" = ( /obj/machinery/dna_infuser, /obj/item/infuser_book, @@ -70053,16 +70186,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/storage) -"rAl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/conveyor{ - id = "cargodisposals" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "rAm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -70376,6 +70499,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"rFg" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/steam_vent, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "rFm" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/bed/medical/emergency, @@ -70871,6 +71002,22 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/hallway/secondary/exit/departure_lounge) +"rLB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/item/storage/box/bandages{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/belt/utility, +/turf/open/floor/iron, +/area/station/cargo/storage) "rLL" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/newscaster/directional/north, @@ -70912,6 +71059,21 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"rMj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Cargo Maintenance" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore) "rMn" = ( /obj/structure/table/wood, /obj/effect/spawner/random/techstorage/arcade_boards, @@ -71176,6 +71338,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/research) +"rPb" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "rPc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -71218,6 +71388,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"rPi" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "rPj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, @@ -71361,11 +71538,6 @@ /obj/structure/mirror/directional/west, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"rQF" = ( -/obj/machinery/netpod, -/obj/effect/decal/cleanable/robot_debris, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/bitrunning/den) "rQI" = ( /obj/machinery/airlock_sensor/incinerator_atmos{ pixel_x = 24 @@ -71600,6 +71772,9 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/cargo/lobby) +"rTB" = ( +/turf/open/floor/iron, +/area/station/cargo/storage) "rTG" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail{ @@ -71667,14 +71842,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"rUi" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "rUj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -71724,16 +71891,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"rUV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "rUW" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/stripes/line{ @@ -71823,8 +71980,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "rVM" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/engine_access, /turf/open/floor/engine, /area/station/engineering/supermatter) "rVX" = ( @@ -72020,6 +72175,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"rYp" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/delivery, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "rYA" = ( /turf/closed/wall, /area/station/maintenance/department/security) @@ -72356,18 +72517,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"scv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Bay - Delivery Office"; - name = "cargo camera" - }, -/obj/effect/turf_decal/tile/brown, -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "scy" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 4 @@ -72525,6 +72674,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"seX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "sfc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -72675,15 +72839,6 @@ }, /turf/open/space/basic, /area/space) -"sgK" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "sgZ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -73380,13 +73535,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"sqW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sqX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -73562,10 +73710,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/pharmacy) -"stf" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "stp" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -74047,6 +74191,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"syW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/conveyor{ + id = "cargodisposals" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sze" = ( /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) @@ -74208,6 +74362,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) +"sAL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sAU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -74374,23 +74536,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/half, /area/station/service/hydroponics) -"sCW" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sCY" = ( /obj/structure/cable, /obj/machinery/power/tracker, @@ -75074,9 +75219,6 @@ /obj/structure/sign/poster/official/build/directional/north, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"sLg" = ( -/turf/open/floor/iron, -/area/station/cargo/storage) "sLx" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/iron/grimy, @@ -75163,6 +75305,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"sMG" = ( +/obj/machinery/flasher/directional/south{ + id = "Isolation_Cell" + }, +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/prison/safe) "sMN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75244,18 +75396,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/main) -"sNP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/department/chapel) "sOi" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/bot, @@ -75270,6 +75410,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) +"sOp" = ( +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/apron/surgical, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "sOs" = ( /obj/structure/chair/pew/left, /turf/open/floor/iron/chapel{ @@ -75592,12 +75741,6 @@ /obj/effect/spawner/random/trash/graffiti, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"sSx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/science/research/abandoned) "sSH" = ( /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 8 @@ -76071,6 +76214,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"sYn" = ( +/obj/machinery/netpod, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/bitrunning/den) "sYw" = ( /obj/effect/landmark/start/hangover, /obj/effect/landmark/event_spawn, @@ -76308,6 +76456,7 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "tch" = ( @@ -76348,14 +76497,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"tcB" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Dock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tcG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76573,6 +76714,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"tfJ" = ( +/obj/machinery/cryo_cell{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/cryo) "tfK" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/evac/directional/east, @@ -76585,12 +76733,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"tfO" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space, -/area/space/nearstation) "tgl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76742,18 +76884,10 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) -"thZ" = ( -/obj/machinery/status_display/evac/directional/west, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/newscaster/directional/north, -/mob/living/simple_animal/parrot/poly, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "tip" = ( /obj/structure/rack, /obj/item/aicard, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -76798,6 +76932,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/cargo/storage) +"tjo" = ( +/obj/machinery/light/directional/south, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/bitrunning/den) "tjp" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -77056,13 +77196,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"toy" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/herringbone, -/area/station/cargo/miningoffice) "toB" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -77400,14 +77533,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"tsx" = ( -/obj/structure/table/glass, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/suit/apron/surgical, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "tsz" = ( /turf/open/floor/plating, /area/station/service/abandoned_gambling_den/gaming) @@ -77635,6 +77760,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"tum" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/delivery, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/mod/module/tether, +/obj/item/mod/module/tether, +/obj/item/stack/sheet/plasteel/fifty, +/turf/open/floor/iron, +/area/station/engineering/storage) "tup" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Theater Maintenance" @@ -78572,25 +78707,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"tGm" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/rglass{ - amount = 50; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/east, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/item/mod/module/magboot, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron, -/area/station/engineering/storage) "tGq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -78843,6 +78959,18 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"tJp" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/item/clipboard, +/obj/item/toy/figure/miner, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "tJt" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -79117,16 +79245,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) -"tNn" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tNq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -79185,6 +79303,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"tNU" = ( +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/surgery_tray/full/morgue, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tNV" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -80090,6 +80219,22 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) +"tYI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "tYL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80170,14 +80315,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uao" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/mob/living/basic/goat/pete, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "uaE" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 @@ -80425,9 +80562,11 @@ }, /area/station/service/chapel) "udb" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, /obj/structure/cable, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/security/lockers) "udd" = ( /obj/structure/cable, @@ -81267,6 +81406,18 @@ /obj/structure/sign/plaques/kiddie/library, /turf/open/floor/plating, /area/station/service/library) +"uoz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uoI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -81361,18 +81512,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"upq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron, -/area/station/maintenance/starboard/aft) "upv" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; @@ -81627,13 +81766,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"usJ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "usZ" = ( /obj/item/flashlight/lamp, /obj/machinery/airalarm/directional/east, @@ -81655,6 +81787,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"utz" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/mob/living/simple_animal/pet/cat/runtime, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "utK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -82118,27 +82259,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/wood, /area/station/engineering/break_room) -"uzn" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Office Desk"; - req_access = list("shipping") - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "uzo" = ( /obj/structure/chair/office/light, /obj/structure/disposalpipe/segment{ @@ -82311,21 +82431,6 @@ dir = 1 }, /area/station/medical/morgue) -"uBd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/nanotrasen{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "uBf" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -82865,6 +82970,17 @@ /obj/structure/cable, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"uHu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "uHE" = ( /obj/structure/table/wood/poker, /obj/effect/decal/cleanable/dirt, @@ -83131,7 +83247,7 @@ /area/station/science/lobby) "uLn" = ( /obj/structure/table, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/firealarm/directional/north, /obj/item/clothing/neck/stethoscope, /obj/item/flashlight/pen, @@ -83266,6 +83382,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uMS" = ( +/obj/structure/closet/wardrobe/miner, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/backpack/satchel/explorer, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "uMV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -83315,19 +83438,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) -"uND" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/computer/order_console/bitrunning, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "uNE" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 4 @@ -83374,15 +83484,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"uOk" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/shaft_miner, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "uOn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -84154,8 +84255,12 @@ }, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "uXU" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -84507,18 +84612,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"vbT" = ( -/obj/structure/rack, -/obj/item/gun/energy/laser/carbine/practice{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/gun/energy/laser/practice, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/auxlab/firing_range) "vbV" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -84900,7 +84993,7 @@ /turf/open/floor/iron/diagonal, /area/station/science/breakroom) "vhx" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) @@ -84920,11 +85013,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/service/bar/backroom) -"vhK" = ( -/obj/effect/landmark/blobstart, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) "vhW" = ( /obj/item/kirbyplants/random, /obj/structure/sign/warning/pods/directional/south{ @@ -85204,19 +85292,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) -"vmo" = ( -/obj/structure/table/glass, -/obj/machinery/status_display/ai/directional/west, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/siding/dark_red, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 - }, -/obj/item/reagent_containers/cup/bottle/morphine, -/obj/item/reagent_containers/syringe, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "vmr" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/disposal/bin, @@ -85458,6 +85533,13 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/cmo) +"vpI" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vpJ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -85605,7 +85687,7 @@ "vrz" = ( /obj/structure/table/reinforced, /obj/item/folder/red, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/book/manual/wiki/security_space_law, /obj/item/taperecorder, /obj/effect/turf_decal/tile/red/fourcorners, @@ -85683,6 +85765,16 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) +"vsR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "vsV" = ( /obj/machinery/duct, /turf/open/floor/plating, @@ -86077,19 +86169,6 @@ "vxs" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) -"vxt" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/obj/machinery/status_display/supply{ - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "vxu" = ( /obj/effect/turf_decal/siding/green{ dir = 1 @@ -86592,10 +86671,7 @@ /area/station/construction/mining/aux_base) "vCQ" = ( /obj/machinery/newscaster/directional/south, -/obj/machinery/vending/wardrobe/sec_wardrobe, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, +/obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/lockers) "vCU" = ( @@ -86609,21 +86685,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) -"vDj" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "vDm" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -86802,6 +86863,13 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"vFg" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "vFh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -87008,23 +87076,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/security) -"vId" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/bitrunning/den) "vIq" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -87159,16 +87210,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"vKx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/fore) "vKI" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -87278,6 +87319,11 @@ "vMp" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) +"vMq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "vMx" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/north, @@ -87364,22 +87410,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"vNV" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/cargo/miningoffice) "vOh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -87489,7 +87519,7 @@ "vPv" = ( /obj/structure/table/reinforced, /obj/machinery/status_display/ai/directional/east, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/aicard, /obj/item/circuitboard/aicore, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -87663,6 +87693,23 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"vSm" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron, +/area/station/cargo/sorting) "vSo" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -87793,6 +87840,39 @@ }, /turf/open/floor/iron, /area/station/science/research) +"vUf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/item/pen{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "chemisttop"; + name = "Pharmacy Shutters" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + dir = 4; + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "vUk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/pump{ @@ -88015,6 +88095,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/corner, /area/station/hallway/secondary/entry) +"vXy" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/herringbone, +/area/station/cargo/miningoffice) "vXH" = ( /obj/structure/chair/office{ dir = 8 @@ -88106,8 +88196,10 @@ /area/station/solars/port/fore) "vYw" = ( /obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 + dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "vYG" = ( @@ -88158,7 +88250,7 @@ "vZw" = ( /obj/structure/table/reinforced, /obj/item/storage/medkit/regular, -/obj/item/storage/secure/safe/caps_spare/directional/west, +/obj/structure/secure_safe/caps_spare/directional/west, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -88720,24 +88812,6 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/large, /area/station/security/checkpoint/medical/medsci) -"whb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron, -/area/station/cargo/sorting) "whc" = ( /obj/structure/sign/poster/official/fruit_bowl/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -89023,6 +89097,20 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"wlc" = ( +/obj/structure/table/reinforced, +/obj/item/gun/energy/laser/carbine/practice{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/laser/practice, +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/ears/earmuffs, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/range) "wld" = ( /obj/machinery/door/window/right/directional/south, /turf/open/floor/plating, @@ -89778,6 +89866,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) +"wsT" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave/engineering/cell_included, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/wood, +/area/station/engineering/break_room) "wsU" = ( /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, @@ -89931,19 +90025,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) -"wuU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "wuV" = ( /obj/structure/fireaxecabinet/directional/south, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -90172,6 +90253,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"wxX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wyh" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -91562,7 +91661,7 @@ /area/station/hallway/secondary/entry) "wRe" = ( /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 3; pixel_y = 3 }, @@ -91775,6 +91874,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"wTL" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/oil, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/bitrunning/den) "wTN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -92294,6 +92410,13 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/station/solars/starboard/fore) +"xce" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "xcm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/window/preopen{ @@ -92401,6 +92524,19 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"xdZ" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/computer/order_console/bitrunning, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/cargo/miningoffice) "xef" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -92731,6 +92867,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xhO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore) "xhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -93148,7 +93292,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/personal, /obj/effect/spawner/random/food_or_drink/cups, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/brown/opposingcorners{ @@ -93390,6 +93534,10 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) +"xqp" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "xqM" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -93439,6 +93587,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/main) +"xrl" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "xrr" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) @@ -93685,18 +93842,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/fore) -"xtS" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/digital_clock/directional/south, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron, -/area/station/medical/storage) "xtZ" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/delivery, @@ -94165,13 +94310,6 @@ "xzJ" = ( /turf/open/floor/iron, /area/station/security/execution/transfer) -"xzL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port) "xzO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -94584,6 +94722,14 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/station/cargo/storage) +"xES" = ( +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/suit/apron/surgical, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/medical/surgery/theatre) "xEV" = ( /obj/item/target, /obj/effect/decal/cleanable/dirt, @@ -95259,13 +95405,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"xMZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "xNe" = ( /obj/structure/lattice, /obj/structure/grille/broken, @@ -95335,7 +95474,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/security/courtroom) @@ -95418,17 +95557,6 @@ "xPc" = ( /turf/closed/wall, /area/station/medical/virology) -"xPf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/sloth/citrus, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "xPo" = ( /obj/machinery/camera/directional/north{ c_tag = "Security - Prison Port" @@ -95477,14 +95605,6 @@ /obj/machinery/incident_display/delam/directional/south, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"xQq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/mob/living/basic/cockroach, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "xQr" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 6 @@ -95685,6 +95805,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) +"xTD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/mob/living/basic/sloth/citrus, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "xTJ" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -95815,13 +95946,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"xVv" = ( -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "xVI" = ( /obj/structure/rack, /obj/item/analyzer, @@ -96043,6 +96167,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"xYM" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "xYN" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/siding/white/corner{ @@ -96123,6 +96253,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xZP" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/camera/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "yah" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -96696,6 +96832,18 @@ /obj/machinery/photocopier, /turf/open/floor/iron/white, /area/station/science/research) +"yhW" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/recycler{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "yhY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -103262,7 +103410,7 @@ nOy smV smV nOy -mcF +smV aaa bPC bRz @@ -103273,7 +103421,7 @@ caa bPC pYJ ePZ -tfO +nCB cVr bAU cVr @@ -107385,7 +107533,7 @@ pGJ bPC pYJ ePZ -bMw +qpQ smV aOl smV @@ -107628,7 +107776,7 @@ pSa chU chU chU -iXE +chU chU chU iIm @@ -108413,7 +108561,7 @@ chU chU chU aaQ -mTB +pzp qYo qYo qYo @@ -118444,7 +118592,7 @@ aVW lbl sHT msB -kXR +iGF owf fUY jjw @@ -118993,7 +119141,7 @@ gpd cXL bMd eJy -mOh +jag jtC ibp pxb @@ -119188,14 +119336,14 @@ uiP vkg wlS vQj -ntU +wsT cJX fhr kTd wwr rSZ bAR -thZ +iDm viB pOz hEL @@ -120272,7 +120420,7 @@ sfN rnS mAt mSP -xQq +oKn bfz bsY vOk @@ -120282,7 +120430,7 @@ tuq grz urh pxb -fiu +eit egk nCI nCI @@ -121797,7 +121945,7 @@ lAs trG fnq uKY -xzL +hMp mYM pTC eSu @@ -121819,7 +121967,7 @@ vSX nEc tFP oMV -sSx +oDJ cHU eKz qel @@ -124362,8 +124510,8 @@ iqz kgi hps hkJ -ptA -tGm +tum +iTM abO pTC sNd @@ -124906,7 +125054,7 @@ aJX fSw fTA jkC -cvc +dKR jUx wEI qYo @@ -126439,7 +126587,7 @@ ddn wMi sIX qCb -vbT +fIU ljC gmE omw @@ -126670,7 +126818,7 @@ ikf vcB vcB jPf -rqN +bRs sIe bTe jTw @@ -127744,7 +127892,7 @@ bvd wJJ wEI dnV -aHw +adE gFO qQM isR @@ -128140,7 +128288,7 @@ azA oYs bEs bEs -pRp +pfs tQY ltr qRN @@ -128174,7 +128322,7 @@ hXw btc hFP xAt -uao +eEI oTB sqM oYs @@ -132080,7 +132228,7 @@ whK rcW dJa oRz -aFs +fIe bgL mfI fvi @@ -133589,7 +133737,7 @@ mGE qGW nHu lgQ -kBE +bHd mxU xJh pRS @@ -134577,7 +134725,7 @@ ptC maV rgK gmh -gzc +dxh nUG kVP kVP @@ -134673,7 +134821,7 @@ rEO uLn pMF jDq -kDv +utz loe eoE jbc @@ -135133,7 +135281,7 @@ eVl cGR vBA aPW -iBH +aOd lkL jDi dZD @@ -136965,8 +137113,8 @@ uNY squ pEU cwh -riZ -pTz +pCr +vUf cwh cwh udd @@ -137445,7 +137593,7 @@ gOU gOU vDo eBw -aaj +hxP gOU fOw ilI @@ -137505,10 +137653,10 @@ pdl fOJ kuU tOS -tsx +xES jqJ jqJ -dRQ +sOp qYL jNY llm @@ -138025,7 +138173,7 @@ uue jdf qYL qpU -neT +tNU aNV hvf vid @@ -138270,7 +138418,7 @@ nFO tqw kKy xhT -xtS +ddp ako ako gMX @@ -138681,8 +138829,8 @@ pKn vsA fsl elS -eke -vKx +jyL +jvp cCb wQv oDR @@ -138939,7 +139087,7 @@ sPo vxL jdL jdL -fiJ +eVz jdL mDP szg @@ -138967,7 +139115,7 @@ hoC yfI bGf kGo -sCW +vSm xhW ygL xhW @@ -139196,7 +139344,7 @@ hEQ weX iLF jdL -rUV +dVA jdL gJI ttP @@ -139453,7 +139601,7 @@ vyG dRo tpI jdL -onA +mWs jdL lgc dfk @@ -139679,7 +139827,7 @@ aad aad csz jSE -gOH +oNE wFz xrr aaa @@ -139710,7 +139858,7 @@ uTB wak xor jdL -oFk +rFg jdL lDi lHC @@ -139720,7 +139868,7 @@ kRn kjl lDi lDi -sLg +rTB bqv hDZ bfT @@ -139808,9 +139956,9 @@ cwe ltS cwe oDE -fUr +fTE bcj -pDy +tfJ oDE ajY tJh @@ -139967,7 +140115,7 @@ nmb kYn djn jdL -cOS +juz jdL aix wHa @@ -139984,21 +140132,21 @@ oSv ueU cNf wqo -lfC +rLB oSv mOe yhh liD mZU -whb +wxX uBZ pso -sqW -sqW -scv -eYZ -vxt -uzn +nCY +nCY +aeD +mlv +dkr +mjH eUH dvy lSl @@ -140224,7 +140372,7 @@ xwO liM xGK jdL -cOS +juz jdL ncT hTl @@ -140481,9 +140629,9 @@ sma tyU kvK sKC -cxv -joP -jnd +xhO +rMj +dPv udk uyt iRP @@ -140507,8 +140655,8 @@ gLz xhW axz fOz -rAl -bkr +syW +ecX yfo qLp pcx @@ -140764,14 +140912,14 @@ ohH xhW xhW nPo -xMZ -cGV -cGV -cGV -cGV -cGV -uBd -wuU +xce +hXg +hXg +hXg +hXg +hXg +seX +mEv vPp tJT qzY @@ -141019,14 +141167,14 @@ uSp oSv cFz rWo -qko -vNV -pxS -fbu -mlF -qsF -jKY -cGV +gpD +kLA +qbd +gHq +lJw +tYI +kUj +hXg lDY tpZ kOj @@ -141238,11 +141386,11 @@ aeF vno nNs ffk -fTh +eJx egs vno rJN -lUW +aRX pGy vno kvs @@ -141275,16 +141423,16 @@ qaF tQW hQj uzM -aPD -stf -llj -ftS -fbu -mDm -vDj -cwd -cGV -qmT +oYr +pGR +bmo +bFA +gHq +pDz +quh +tjo +hXg +fmH tpZ aaa aad @@ -141532,16 +141680,16 @@ rbV qLg uTu tQP -rmH -toy -izj -fAj -pUs -okN -oAV -vId -cGV -eFU +rid +vFg +eQG +vXy +kuj +cjO +hrz +wTL +hXg +uoz tpZ aaa lhY @@ -141790,15 +141938,15 @@ fya cSK pok rWo -uND -kKx -dux -cGV -nEE -cyc -rQF -cGV -eFU +xdZ +nMi +tJp +hXg +dsb +sYn +gVv +hXg +uoz tpZ aad lhY @@ -141861,7 +142009,7 @@ bRZ qMf jfW gUF -ltg +lni xeX qkj qMf @@ -142047,15 +142195,15 @@ fKA krp krp aJE -mtL -tcB +vMq +izK rWo -cGV -cGV -cGV -cGV -cGV -jRc +hXg +hXg +hXg +hXg +hXg +mwM tpZ aaa lhY @@ -142305,14 +142453,14 @@ iWR gkP krp llJ -ljQ -guj -eYt -nhj -owZ -bLN +aFb +sAL +occ +lDu +cRR +eCQ tpZ -eFU +uoz tpZ aaa lhY @@ -142557,19 +142705,19 @@ aDg krp cAF qqx -xPf +xTD xZC aiF aJE -jCu -rUi -kTs -sgK -iio -gco -hkn +dXX +qpd +kqJ +pBN +vsR +lyx +rPi qyX -cwK +nkO tpZ aaa lhY @@ -142784,7 +142932,7 @@ aad aad vno iJj -kVw +ove acU vno aad @@ -142818,12 +142966,12 @@ osw qZD qrG aJE -dPC -usJ -iXd -elO -hzs -uOk +rYp +idX +xrl +xYM +fxx +pAa bhJ tpZ tpZ @@ -142889,7 +143037,7 @@ pPl vPf qMf rPf -sNP +irx ovf qkj ygf @@ -143075,12 +143223,12 @@ uQZ xhJ vMd tgX -jfO -jBM -tNn -xVv -dXs -rgC +uMS +jyZ +azD +cTv +qQy +gty tDD rWo aad @@ -143564,7 +143712,7 @@ gdM lbu jtm ikR -emZ +yhW akS oeX aaa @@ -144178,7 +144326,7 @@ xPK wZE eSU haQ -huS +own pdb hnH nvM @@ -146443,7 +146591,7 @@ lYY lYY lYY pdY -nJF +fgk fvn rNx uPH @@ -146923,7 +147071,7 @@ mSe mSe mSe mSe -vmo +jTH lQj xBD mXg @@ -147178,7 +147326,7 @@ qYo qYo mSe prB -gTH +sMG mSe iiR log @@ -147948,7 +148096,7 @@ hlr wDX biI iZG -bWw +pZf kxj wDX xNU @@ -148284,7 +148432,7 @@ wEM uen iYg klE -mmA +bZe tHd ujU ehy @@ -149305,7 +149453,7 @@ ouy geH nXH gWF -upq +goa jix nmD gQK @@ -149516,7 +149664,7 @@ anY dql eBE gIV -eYo +wlc vgK ryB jlV @@ -149529,7 +149677,7 @@ rIa rIa rIa aVz -lNN +ero lra cgZ qiM @@ -149801,7 +149949,7 @@ aaa aad vop qqe -gan +qVa yaI fNn uEo @@ -150082,7 +150230,7 @@ nXH aad nXH uFH -itC +put udQ cun kOR @@ -150350,7 +150498,7 @@ hrt wZV vNa cPU -vhK +eVc oBM pWe aad @@ -150540,7 +150688,7 @@ bzi sWa gDY tKw -fQC +qDw vgK eOv tLx @@ -151074,7 +151222,7 @@ dwU wtB qBw vYw -lPH +hOk vCQ hEF hEF @@ -151330,10 +151478,10 @@ teo pKD pbN bLs -hEF +hyR +lPH udb -udb -hEF +ggW aad aad efQ @@ -151587,11 +151735,11 @@ lIy uro bLs bLs -aaa -aad -aaa -aKU -aaa +nEZ +gCa +gkt +nEZ +nEZ aad aaa aaa @@ -151844,11 +151992,11 @@ bLs bLs bLs ptN -efQ -qYo -efQ -efQ -qYo +nEZ +pgZ +uHu +aZj +nEZ qYo efQ qYo @@ -152101,11 +152249,11 @@ mfO aaa aaa aaa -aaa -qYo -aaa -aaa -aaa +nEZ +rPb +fvD +knp +nEZ qYo aaa aaa @@ -152358,12 +152506,12 @@ efQ efQ efQ efQ +nEZ +xqp +vpI +xZP +nEZ qYo -efQ -efQ -efQ -qYo -efQ lvw qYo efQ @@ -152615,14 +152763,14 @@ qYo aaa aaa qYo +nEZ +apf +iHn +nEZ +nEZ qYo aaa aaa -aaa -aaa -aaa -aaa -aaa efQ aaa uKw @@ -152872,12 +153020,12 @@ efQ efQ efQ qYo +nEZ +nEZ +nEZ +nEZ aaa -aaa -aaa -aaa -aaa -aaa +qYo aaa aaa efQ @@ -153128,15 +153276,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qYo +qYo +lvw +qYo +qYo +uHd +qYo +uHd +qYo aad dTS uKw @@ -153386,13 +153534,13 @@ aaa aaa aaa aaa +lvw aaa +uHd aaa +lvw aaa -aaa -aaa -aaa -aaa +uHd aaa efQ aad @@ -153643,13 +153791,13 @@ aaa aaa aaa aaa +uHd aaa +lvw aaa +uHd aaa -aaa -aaa -aaa -aaa +lvw aaa efQ aaa diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index c81d40edfa1..4c286912a63 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1392,8 +1392,8 @@ /area/station/security/courtroom) "awR" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -1677,6 +1677,12 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) +"aAl" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "aAv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2815,8 +2821,8 @@ "aUi" = ( /obj/structure/table, /obj/item/storage/briefcase{ - pixel_y = 3; - pixel_x = 2 + pixel_x = 2; + pixel_y = 3 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/item/storage/wallet, @@ -3181,8 +3187,8 @@ pixel_x = 7 }, /obj/item/reagent_containers/cup/soda_cans/sol_dry{ - pixel_y = 4; - pixel_x = -7 + pixel_x = -7; + pixel_y = 4 }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) @@ -3533,7 +3539,6 @@ /turf/open/floor/plating, /area/mine/eva/lower) "bfB" = ( -/obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/office) @@ -4158,6 +4163,16 @@ /obj/structure/sign/poster/contraband/the_griffin/directional/south, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"boj" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/closet/secure_closet/personal, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "bol" = ( /turf/open/floor/iron/dark/textured, /area/station/security/prison) @@ -5312,8 +5327,8 @@ dir = 8; id = "garbage"; name = "disposal conveyor"; - pixel_y = 5; - pixel_x = -5 + pixel_x = -5; + pixel_y = 5 }, /obj/structure/railing/corner, /obj/effect/turf_decal/box/corners{ @@ -7149,8 +7164,8 @@ name = "Disposal Exit Vent" }, /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/turf_decal/stripes/red/box, /turf/open/floor/plating, @@ -7832,8 +7847,8 @@ /obj/structure/table, /obj/item/storage/wallet, /obj/item/storage/wallet{ - pixel_y = 3; - pixel_x = 4 + pixel_x = 4; + pixel_y = 3 }, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) @@ -10039,6 +10054,14 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"cXb" = ( +/obj/structure/table/reinforced, +/obj/structure/secure_safe/caps_spare/directional/east, +/obj/item/papercutter{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "cXc" = ( /obj/effect/turf_decal/arrows, /turf/open/floor/iron, @@ -10735,14 +10758,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"dho" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ - pixel_y = 5 - }, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron, -/area/station/command/bridge) "dhq" = ( /turf/closed/mineral/random/labormineral/ice, /area/icemoon/surface/outdoors/labor_camp) @@ -12080,6 +12095,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"dBK" = ( +/obj/machinery/disposal/bin, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) "dBQ" = ( /obj/machinery/camera/directional/north{ c_tag = "MiniSat AI Chamber South"; @@ -12837,17 +12862,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"dND" = ( -/obj/machinery/firealarm/directional/north, -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Bay Office - Access" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "dNG" = ( /obj/structure/disposalpipe/segment, /obj/structure/reagent_dispensers/watertank, @@ -15695,29 +15709,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"eJC" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ - pixel_x = 7; - pixel_y = 20 - }, -/obj/item/taperecorder{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 6 - }, -/obj/item/storage/secure/safe/hos{ - pixel_x = 35 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/hos) "eJI" = ( /obj/structure/closet/emcloset, /obj/effect/mapping_helpers/broken_floor, @@ -16890,8 +16881,8 @@ /area/icemoon/underground/explored) "fdX" = ( /obj/item/toy/cards/deck{ - pixel_y = 13; - pixel_x = -9 + pixel_x = -9; + pixel_y = 13 }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/generic, @@ -18189,6 +18180,13 @@ /obj/item/reagent_containers/cup/glass/waterbottle, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"fAH" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fAV" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -19480,9 +19478,9 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron, /area/station/medical/pharmacy) @@ -21082,8 +21080,8 @@ /area/station/security/prison/workout) "gvp" = ( /obj/item/chair/stool{ - pixel_y = -3; - pixel_x = -1 + pixel_x = -1; + pixel_y = -3 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/dim/directional/west, @@ -21996,14 +21994,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"gKk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/safe/caps_spare/directional/east, -/obj/item/papercutter{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "gKl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22475,6 +22465,7 @@ }, /obj/item/geiger_counter, /obj/item/clothing/glasses/meson, +/obj/machinery/firealarm/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "gSy" = ( @@ -22644,13 +22635,13 @@ /area/station/science/breakroom) "gVm" = ( /obj/item/coin/silver{ - pixel_y = -3; - pixel_x = -5 + pixel_x = -5; + pixel_y = -3 }, /obj/item/toy/plush/moth{ - pixel_y = 5; + name = "Marcellus"; pixel_x = 5; - name = "Marcellus" + pixel_y = 5 }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) @@ -23008,14 +22999,6 @@ "hap" = ( /turf/open/floor/vault, /area/station/security/prison/rec) -"haw" = ( -/obj/item/storage/secure/safe/directional/south, -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "hay" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24723,17 +24706,17 @@ "hCY" = ( /obj/structure/table/wood, /obj/item/folder/yellow{ - pixel_y = 8; - pixel_x = 3 + pixel_x = 3; + pixel_y = 8 }, /obj/item/folder/white{ - pixel_y = 12; - pixel_x = -3 + pixel_x = -3; + pixel_y = 12 }, /obj/structure/sign/poster/contraband/random/directional/south, /obj/item/folder/blue{ - pixel_y = 3; - pixel_x = -3 + pixel_x = -3; + pixel_y = 3 }, /obj/item/folder/red{ pixel_x = 5; @@ -26592,6 +26575,17 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"iiy" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay Office - Access" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "iiH" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig"; @@ -27505,8 +27499,8 @@ "ixb" = ( /obj/machinery/button/door/directional/south{ id = "vacantofficemaintshutter"; - pixel_x = 4; name = "Privacy Shutters"; + pixel_x = 4; pixel_y = -28 }, /turf/open/floor/iron/grimy, @@ -27853,6 +27847,15 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) +"iBi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/table, +/obj/structure/secure_safe/directional/south, +/obj/item/storage/briefcase/secure, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/rd) "iBj" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -28637,15 +28640,14 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"iOO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 +"iOQ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure{ + pixel_y = 5 }, -/obj/structure/table, -/obj/item/storage/secure/safe/directional/south, -/obj/item/storage/secure/briefcase, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/rd) +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron, +/area/station/command/bridge) "iOS" = ( /obj/machinery/airalarm/directional/east, /obj/structure/table, @@ -30630,6 +30632,12 @@ /obj/machinery/atmospherics/components/binary/pump{ dir = 8 }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, /area/station/science/ordnance) "jwl" = ( @@ -31272,8 +31280,8 @@ /area/station/engineering/atmos) "jHV" = ( /obj/machinery/mineral/stacking_machine{ - stack_amt = 10; - output_dir = 2 + output_dir = 2; + stack_amt = 10 }, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -32536,6 +32544,12 @@ /obj/item/clothing/shoes/workboots, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kbm" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "kbn" = ( /obj/effect/decal/cleanable/food/pie_smudge, /turf/open/floor/iron, @@ -32547,8 +32561,8 @@ /area/icemoon/surface/outdoors/nospawn) "kbq" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -32691,6 +32705,16 @@ /obj/structure/sign/warning/test_chamber/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"kdy" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kdD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33689,6 +33713,16 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) +"kqG" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/mechbay) "kqK" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -33847,7 +33881,7 @@ /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "ksu" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "ksC" = ( @@ -33924,13 +33958,18 @@ /area/station/security/prison/work) "ktw" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/firealarm/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Engineering Supermatter Fore"; network = list("ss13","engine"); pixel_x = 23 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "ktx" = ( @@ -34081,6 +34120,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/item/kirbyplants/random, /turf/open/floor/iron/dark/textured, /area/station/security/office) "kvR" = ( @@ -34568,8 +34608,8 @@ pixel_y = 2 }, /obj/item/clothing/suit/hooded/wintercoat/eva{ - pixel_y = 5; - pixel_x = 1 + pixel_x = 1; + pixel_y = 5 }, /obj/machinery/light/small/directional/east, /obj/machinery/mining_weather_monitor/directional/north, @@ -36440,6 +36480,10 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"lgg" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "lgk" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -36880,6 +36924,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) +"lmM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lmY" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/camera{ @@ -37013,8 +37066,14 @@ /turf/open/floor/iron, /area/station/construction) "loy" = ( -/obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/button/door/directional/east{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig/upper) "loG" = ( @@ -38237,6 +38296,19 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) +"lHL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lIk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -38430,8 +38502,8 @@ /obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/food/cheesiehonkers, /turf/open/floor/iron, @@ -38786,6 +38858,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/commons/fitness) +"lRc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/mechbay) "lRd" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -40591,9 +40668,9 @@ "mwF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -42261,6 +42338,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) +"mZO" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "mZS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/blue, @@ -43151,6 +43234,19 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"nmq" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = -11 + }, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "nmr" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -43814,8 +43910,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Arrivals Dock"; - dir = 4 + dir = 4; + name = "Arrivals Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -45992,8 +46088,12 @@ /obj/effect/turf_decal/box/red, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "odi" = ( /obj/item/toy/snowball{ pixel_x = 5; @@ -46709,8 +46809,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Arrivals Dock"; - dir = 4 + dir = 4; + name = "Arrivals Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -47113,8 +47213,8 @@ /obj/structure/rack, /obj/machinery/light/cold/directional/north, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/healthanalyzer, /turf/open/floor/iron/white/textured, @@ -47416,6 +47516,13 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/security/prison/safe) +"oyL" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "oyV" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/cable, @@ -49319,12 +49426,12 @@ /area/station/medical/medbay/central) "pcc" = ( /obj/item/stack/spacecash/c10{ - pixel_y = 4; - pixel_x = 4 + pixel_x = 4; + pixel_y = 4 }, /obj/item/toy/plush/beeplushie{ - pixel_y = -6; - name = "Coolidge" + name = "Coolidge"; + pixel_y = -6 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -50384,6 +50491,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/office) +"psY" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "ptd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50632,16 +50750,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"pwc" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/turf_decal/tile/brown/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/vacant_room/commissary) "pwd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -52264,6 +52372,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"pVL" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "pVN" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -54269,8 +54380,6 @@ dir = 1; name = "Gas to Filter" }, -/obj/effect/mapping_helpers/airalarm/engine_access, -/obj/machinery/airalarm/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter) "qDD" = ( @@ -54713,6 +54822,29 @@ /obj/item/cigbutt, /turf/open/floor/wood/large, /area/mine/eva/lower) +"qJO" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ + pixel_x = 7; + pixel_y = 20 + }, +/obj/item/taperecorder{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 6 + }, +/obj/structure/secure_safe/hos{ + pixel_x = 35 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/hos) "qJT" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating/snowed/icemoon, @@ -55784,9 +55916,9 @@ /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -56872,8 +57004,8 @@ pixel_y = 3 }, /obj/item/assembly/flash/handheld{ - pixel_y = 3; - pixel_x = -19 + pixel_x = -19; + pixel_y = 3 }, /obj/structure/table, /obj/effect/turf_decal/tile/red/anticorner/contrasted, @@ -57908,9 +58040,9 @@ /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -59089,9 +59221,9 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/iron, /area/station/medical/pharmacy) @@ -60066,13 +60198,13 @@ pixel_y = -5 }, /obj/item/coin/plasma{ - pixel_y = -2; - pixel_x = 3 + pixel_x = 3; + pixel_y = -2 }, /obj/item/toy/plush/lizard_plushie{ + name = "Cassius"; pixel_x = 11; - pixel_y = -4; - name = "Cassius" + pixel_y = -4 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -61162,16 +61294,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"sFo" = ( -/obj/machinery/disposal/bin, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage/gas) "sFA" = ( /obj/machinery/sparker/directional/west{ id = "testigniter" @@ -61627,8 +61749,8 @@ /area/station/medical/chemistry) "sLR" = ( /obj/machinery/conveyor{ - id = "garbage"; - dir = 1 + dir = 1; + id = "garbage" }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -62412,6 +62534,14 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"taj" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tak" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62598,9 +62728,9 @@ "teE" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters{ + dir = 8; id = "vacantofficemaintshutter"; - name = "Privacy Shutters"; - dir = 8 + name = "Privacy Shutters" }, /turf/open/floor/plating, /area/station/commons/vacant_room/office) @@ -62922,8 +63052,8 @@ dir = 4 }, /obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Auxiliary Dock"; - dir = 4 + dir = 4; + name = "Auxiliary Dock" }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) @@ -63994,17 +64124,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) -"tCM" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/medical{ - dir = 4 - }, -/obj/item/storage/secure/safe/directional/south, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/virology) "tCO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -68037,10 +68156,8 @@ dir = 4 }, /obj/machinery/meter, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/mixingchamber_access, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "uSS" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/stripes/box, @@ -69391,6 +69508,11 @@ /obj/structure/sign/warning/gas_mask/directional/west, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"vpn" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/obj/structure/cable, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "vpR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -69544,6 +69666,16 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"vsL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Office - Port" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vsM" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -70607,6 +70739,17 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"vJX" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/medical{ + dir = 4 + }, +/obj/structure/secure_safe/directional/south, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/virology) "vJY" = ( /obj/structure/railing/corner{ dir = 8 @@ -73098,12 +73241,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"wwB" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "wwI" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -73344,6 +73481,8 @@ "wAT" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig/upper) "wAW" = ( @@ -73831,6 +73970,14 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/carpet, /area/station/commons/dorms) +"wIE" = ( +/obj/structure/secure_safe/directional/south, +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "wIF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75553,8 +75700,8 @@ "xgX" = ( /obj/structure/table/wood, /obj/effect/spawner/random/entertainment/deck{ - pixel_y = 15; - pixel_x = -2 + pixel_x = -2; + pixel_y = 15 }, /obj/effect/spawner/random/food_or_drink/snack{ pixel_x = 5; @@ -183988,7 +184135,7 @@ hzz gmf jUB gyY -tCM +vJX xDb thA thA @@ -233048,7 +233195,7 @@ gpZ vov cAo gst -pwc +boj plN rTO rTO @@ -233310,7 +233457,7 @@ fXu uOM vzw rTO -haw +wIE gst byl rgl @@ -234089,7 +234236,7 @@ gxO dKK xmN rCC -dND +iiy grN qmi kGx @@ -237670,7 +237817,7 @@ dnq kgD utR uEQ -dho +iOQ grA cEv nOH @@ -239026,7 +239173,7 @@ tfR iNa tLW seR -esE +lgg uey esE uLe @@ -239429,7 +239576,7 @@ jDt wtg diq ehy -eJC +qJO mgU fUj kcc @@ -240241,7 +240388,7 @@ nfk utR tmQ qnV -gKk +cXb kBr lhv iGH @@ -240536,7 +240683,7 @@ lyq xBN bfU aSu -sFo +dBK gwK jyR sok @@ -240726,7 +240873,7 @@ jNp jNp jNp jNp -sDl +pVL sDl sDl sDl @@ -240979,11 +241126,11 @@ law eqI ewM wAT -lbk -bln -bln -bln -sDl +kdy +taj +vsL +vpn +lRc sDl sDl sDl @@ -241236,11 +241383,11 @@ eyb hAQ ksC loy -lbk -bln -bln -bln -sDl +psY +lmM +oyL +kbm +lRc sDl sDl sDl @@ -241494,10 +241641,10 @@ mfH cIY mfH mfH -ntK -bln -sDl -sDl +lHL +fAH +aAl +lRc sDl sDl sDl @@ -241750,11 +241897,11 @@ ykw tSi kfc dcX -lbk -bln -bln -sDl -sDl +mfH +nmq +kqG +pVL +pVL sDl sDl sDl @@ -242008,9 +242155,9 @@ nOQ cqx sQB mfH -bln -sDl -sDl +pVL +pVL +pVL sDl sDl tOq @@ -242307,7 +242454,7 @@ eEC aTw iFL hpe -wwB +mZO mBX uEm viQ @@ -254666,7 +254813,7 @@ bHa oMT gaT bZc -iOO +iBi jbU ily hdH diff --git a/_maps/map_files/Mafia/mafia_ayylmao.dmm b/_maps/map_files/Mafia/mafia_ayylmao.dmm index b9d8582f3b0..6fdc04e3d09 100644 --- a/_maps/map_files/Mafia/mafia_ayylmao.dmm +++ b/_maps/map_files/Mafia/mafia_ayylmao.dmm @@ -9,6 +9,10 @@ /obj/effect/landmark/mafia, /turf/open/floor/plating/abductor, /area/centcom/mafia) +"f" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/closed/indestructible/alien, +/area/centcom/mafia) "g" = ( /obj/mafia_game_board, /obj/effect/mapping_helpers/broken_floor, @@ -48,15 +52,6 @@ /obj/item/abductor/gizmo, /turf/open/floor/plating/abductor2, /area/centcom/mafia) -"p" = ( -/obj/machinery/door/poddoor/preopen{ - desc = "When it's time to sleep, the lights will go out. Remember - no one in space can hear you scream."; - id = "mafia"; - max_integrity = 99999; - name = "Station Night Shutters" - }, -/turf/closed/indestructible/fakeglass, -/area/centcom/mafia) "q" = ( /turf/open/floor/plating/abductor, /area/centcom/mafia) @@ -83,8 +78,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/obj/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating/abductor2, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "z" = ( /obj/structure/grille/indestructible, @@ -350,7 +345,7 @@ i N o r -p +x m q x @@ -578,7 +573,7 @@ q b b r -b +f q b b diff --git a/_maps/map_files/Mafia/mafia_ball.dmm b/_maps/map_files/Mafia/mafia_ball.dmm index fb4dc490d36..e642cc78783 100644 --- a/_maps/map_files/Mafia/mafia_ball.dmm +++ b/_maps/map_files/Mafia/mafia_ball.dmm @@ -67,7 +67,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/iron/dark, @@ -91,8 +92,12 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/centcom/mafia) +"E" = ( +/turf/template_noop, +/area/template_noop) (1,1,1) = {" +E a a a @@ -114,10 +119,10 @@ a a a a -a -a +E "} (2,1,1) = {" +E a b b @@ -138,14 +143,13 @@ b b b b -b -b a +E "} (3,1,1) = {" +E a b -b c c c @@ -164,13 +168,13 @@ c c c b -b a +E "} (4,1,1) = {" +E a b -b c g h @@ -189,12 +193,12 @@ h k c b -b a +E "} (5,1,1) = {" a -b +a b c h @@ -214,7 +218,7 @@ i h c b -b +a a "} (6,1,1) = {" @@ -544,7 +548,7 @@ a "} (19,1,1) = {" a -b +a b c h @@ -564,13 +568,13 @@ d h c b -b +a a "} (20,1,1) = {" +E a b -b c k h @@ -589,13 +593,13 @@ h v c b -b a +E "} (21,1,1) = {" +E a b -b c c c @@ -614,10 +618,11 @@ c c c b -b a +E "} (22,1,1) = {" +E a b b @@ -638,11 +643,11 @@ b b b b -b -b a +E "} (23,1,1) = {" +E a a a @@ -664,6 +669,5 @@ a a a a -a -a +E "} diff --git a/_maps/map_files/Mafia/mafia_gothic.dmm b/_maps/map_files/Mafia/mafia_gothic.dmm index 817e145d111..5dadad3d2c1 100644 --- a/_maps/map_files/Mafia/mafia_gothic.dmm +++ b/_maps/map_files/Mafia/mafia_gothic.dmm @@ -62,7 +62,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/opsglass, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/carpet/red, @@ -85,6 +86,9 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/centcom/mafia) +"y" = ( +/turf/template_noop, +/area/template_noop) "D" = ( /obj/effect/landmark/mafia, /turf/open/floor/iron/chapel{ @@ -131,6 +135,9 @@ dir = 8 }, /area/centcom/mafia) +"U" = ( +/turf/closed/wall/r_wall, +/area/centcom/mafia) "X" = ( /turf/open/floor/iron/chapel{ dir = 1 @@ -138,6 +145,7 @@ /area/centcom/mafia) (1,1,1) = {" +y a a a @@ -159,38 +167,37 @@ a a a a -a -a +y "} (2,1,1) = {" +y a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U a +y "} (3,1,1) = {" +y a -b -b +U c c c @@ -208,14 +215,14 @@ c c c c -b -b +U a +y "} (4,1,1) = {" +y a -b -b +U c g h @@ -233,14 +240,14 @@ d h k c -b -b +U a +y "} (5,1,1) = {" a -b -b +a +U c h d @@ -258,14 +265,14 @@ d i h c -b -b +U +a a "} (6,1,1) = {" a -b -b +U +U c i b @@ -283,13 +290,13 @@ b b d c -b -b +U +U a "} (7,1,1) = {" a -b +U c c d @@ -309,12 +316,12 @@ b d c c -b +U a "} (8,1,1) = {" a -b +U c d d @@ -334,12 +341,12 @@ b d d c -b +U a "} (9,1,1) = {" a -b +U c d b @@ -359,12 +366,12 @@ b b d c -b +U a "} (10,1,1) = {" a -b +U c d b @@ -384,12 +391,12 @@ Q b d c -b +U a "} (11,1,1) = {" a -b +U c d j @@ -409,12 +416,12 @@ O j i c -b +U a "} (12,1,1) = {" a -b +U c i b @@ -434,12 +441,12 @@ b b d c -b +U a "} (13,1,1) = {" a -b +U c d j @@ -459,12 +466,12 @@ q j d c -b +U a "} (14,1,1) = {" a -b +U c d b @@ -484,12 +491,12 @@ l b i c -b +U a "} (15,1,1) = {" a -b +U c d b @@ -509,12 +516,12 @@ b b d c -b +U a "} (16,1,1) = {" a -b +U c f d @@ -534,12 +541,12 @@ b d d c -b +U a "} (17,1,1) = {" a -b +U c c d @@ -559,13 +566,13 @@ b d c c -b +U a "} (18,1,1) = {" a -b -b +U +U c d b @@ -583,14 +590,14 @@ b b d c -b -b +U +U a "} (19,1,1) = {" a -b -b +a +U c h i @@ -608,14 +615,14 @@ i d h c -b -b +U +a a "} (20,1,1) = {" +y a -b -b +U c k h @@ -633,14 +640,14 @@ d h v c -b -b +U a +y "} (21,1,1) = {" +y a -b -b +U c c c @@ -658,36 +665,37 @@ c c c c -b -b +U a +y "} (22,1,1) = {" +y a -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U +U a +y "} (23,1,1) = {" +y a a a @@ -709,6 +717,5 @@ a a a a -a -a +y "} diff --git a/_maps/map_files/Mafia/mafia_lavaland.dmm b/_maps/map_files/Mafia/mafia_lavaland.dmm index 96ddef90b5c..d086ab3f531 100644 --- a/_maps/map_files/Mafia/mafia_lavaland.dmm +++ b/_maps/map_files/Mafia/mafia_lavaland.dmm @@ -52,7 +52,7 @@ "al" = ( /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/fakebasalt, /area/centcom/mafia) "am" = ( @@ -72,7 +72,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "ap" = ( @@ -82,7 +82,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/space/basic, /area/centcom/mafia) "aq" = ( /turf/open/floor/fakebasalt, @@ -93,7 +94,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "as" = ( @@ -134,7 +135,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aB" = ( @@ -183,7 +184,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aI" = ( @@ -192,7 +193,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aJ" = ( @@ -210,7 +211,7 @@ }, /obj/item/shovel, /obj/item/pickaxe, -/obj/structure/closet/secure_closet/miner/unlocked, +/obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/centcom/mafia) "aM" = ( @@ -282,12 +283,16 @@ }, /turf/open/floor/iron/dark, /area/centcom/mafia) +"qp" = ( +/turf/template_noop, +/area/template_noop) "GL" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark, /area/centcom/mafia) (1,1,1) = {" +qp aa aa aa @@ -309,10 +314,10 @@ aa aa aa aa -aa -aa +qp "} (2,1,1) = {" +qp aa aY aY @@ -333,14 +338,13 @@ aY aY aY aY -aY -aY aa +qp "} (3,1,1) = {" +qp aa aY -aY ac ac ac @@ -359,13 +363,13 @@ ac ac ac aY -aY aa +qp "} (4,1,1) = {" +qp aa aY -aY ac ag ah @@ -384,12 +388,12 @@ ah ak ac aY -aY aa +qp "} (5,1,1) = {" aa -aY +aa aY ac ah @@ -409,7 +413,7 @@ ai ah ac aY -aY +aa aa "} (6,1,1) = {" @@ -739,7 +743,7 @@ aa "} (19,1,1) = {" aa -aY +aa aY ac ah @@ -759,13 +763,13 @@ ad ah ac aY -aY +aa aa "} (20,1,1) = {" +qp aa aY -aY ac ak ah @@ -784,13 +788,13 @@ ah av ac aY -aY aa +qp "} (21,1,1) = {" +qp aa aY -aY ac ac ac @@ -809,10 +813,11 @@ ac ac ac aY -aY aa +qp "} (22,1,1) = {" +qp aa aY aY @@ -833,11 +838,11 @@ aY aY aY aY -aY -aY aa +qp "} (23,1,1) = {" +qp aa aa aa @@ -859,6 +864,5 @@ aa aa aa aa -aa -aa +qp "} diff --git a/_maps/map_files/Mafia/mafia_snow.dmm b/_maps/map_files/Mafia/mafia_snow.dmm index b8fbc0650b4..bbc5f958d75 100644 --- a/_maps/map_files/Mafia/mafia_snow.dmm +++ b/_maps/map_files/Mafia/mafia_snow.dmm @@ -71,7 +71,8 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/fakeglass, +/obj/effect/spawner/structure/window/ice, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /turf/open/floor/iron/dark, @@ -176,6 +177,9 @@ "K" = ( /turf/closed/indestructible/rock/snow, /area/centcom/mafia) +"L" = ( +/turf/template_noop, +/area/template_noop) "R" = ( /obj/effect/landmark/mafia, /turf/open/floor/iron, @@ -187,7 +191,7 @@ /area/centcom/mafia) (1,1,1) = {" -a +L a a a @@ -212,6 +216,7 @@ a a "} (2,1,1) = {" +L a b b @@ -222,7 +227,6 @@ b b b b -b s K K @@ -237,9 +241,9 @@ K a "} (3,1,1) = {" +L a b -b s s s @@ -262,9 +266,9 @@ K a "} (4,1,1) = {" +L a b -b s g h @@ -288,7 +292,7 @@ a "} (5,1,1) = {" a -b +a b s h @@ -375,8 +379,8 @@ s q s t -p -p +s +s z z p @@ -427,7 +431,7 @@ p p p p -p +s p D p @@ -467,7 +471,7 @@ b s i s -b +s p s p @@ -477,10 +481,10 @@ v t p p +s p -p -p -p +s +s w w K @@ -527,7 +531,7 @@ p p p p -p +s p D p @@ -575,8 +579,8 @@ s r s t -p -p +s +s z z p @@ -638,7 +642,7 @@ a "} (19,1,1) = {" a -b +a b s h @@ -662,9 +666,9 @@ K a "} (20,1,1) = {" +L a b -b s k h @@ -687,9 +691,9 @@ K a "} (21,1,1) = {" +L a b -b s s s @@ -712,6 +716,7 @@ K a "} (22,1,1) = {" +L a b b @@ -722,7 +727,6 @@ b b b b -b s K K @@ -737,7 +741,7 @@ K a "} (23,1,1) = {" -a +L a a a diff --git a/_maps/map_files/Mafia/mafia_spiderclan.dmm b/_maps/map_files/Mafia/mafia_spiderclan.dmm index ff83f8de3ec..a00e373c1a4 100644 --- a/_maps/map_files/Mafia/mafia_spiderclan.dmm +++ b/_maps/map_files/Mafia/mafia_spiderclan.dmm @@ -94,11 +94,15 @@ /obj/structure/showcase/katana, /turf/open/misc/beach/sand, /area/centcom/mafia) +"Q" = ( +/turf/template_noop, +/area/template_noop) "S" = ( /turf/closed/wall/mineral/wood, /area/centcom/mafia) (1,1,1) = {" +Q a a a @@ -120,10 +124,10 @@ a a a a -a -a +Q "} (2,1,1) = {" +Q a S S @@ -144,14 +148,13 @@ S S S S -S -S a +Q "} (3,1,1) = {" +Q a S -S c c c @@ -170,13 +173,13 @@ c c c S -S a +Q "} (4,1,1) = {" +Q a S -S c g h @@ -195,12 +198,12 @@ h k c S -S a +Q "} (5,1,1) = {" a -S +a S c h @@ -220,7 +223,7 @@ i h c S -S +a a "} (6,1,1) = {" @@ -550,7 +553,7 @@ a "} (19,1,1) = {" a -S +a S c h @@ -570,13 +573,13 @@ d h c S -S +a a "} (20,1,1) = {" +Q a S -S c k h @@ -595,13 +598,13 @@ h v c S -S a +Q "} (21,1,1) = {" +Q a S -S c c c @@ -620,10 +623,11 @@ c c c S -S a +Q "} (22,1,1) = {" +Q a S S @@ -644,11 +648,11 @@ S S S S -S -S a +Q "} (23,1,1) = {" +Q a a a @@ -670,6 +674,5 @@ a a a a -a -a +Q "} diff --git a/_maps/map_files/Mafia/mafia_syndie.dmm b/_maps/map_files/Mafia/mafia_syndie.dmm index 12287245828..4c275e2ef32 100644 --- a/_maps/map_files/Mafia/mafia_syndie.dmm +++ b/_maps/map_files/Mafia/mafia_syndie.dmm @@ -46,7 +46,6 @@ /turf/open/floor/plating, /area/centcom/mafia) "o" = ( -/obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/centcom/mafia) "p" = ( @@ -56,14 +55,14 @@ max_integrity = 99999; name = "Station Night Shutters" }, -/turf/closed/indestructible/opsglass, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, /area/centcom/mafia) "q" = ( /obj/structure/chair/office{ dir = 1; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -82,14 +81,13 @@ /turf/open/floor/plating, /area/centcom/mafia) "w" = ( -/turf/closed/indestructible/syndicate, +/turf/closed/wall/r_wall, /area/centcom/mafia) "x" = ( /obj/structure/chair/office{ dir = 4; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -104,7 +102,6 @@ /obj/structure/chair/office{ name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -129,7 +126,6 @@ dir = 8; name = "tactical swivel chair" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/landmark/mafia, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -146,7 +142,6 @@ desc = "A storage closet for syndicate conflict resolution operatives."; name = "red closet" }, -/obj/effect/turf_decal/tile/red/fourcorners, /obj/effect/spawner/random/clothing/syndie, /turf/open/floor/iron/dark, /area/centcom/mafia) @@ -156,8 +151,15 @@ "S" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/mafia) +"W" = ( +/turf/closed/wall/mineral/plastitanium, +/area/centcom/mafia) +"Y" = ( +/turf/template_noop, +/area/template_noop) (1,1,1) = {" +Y a a a @@ -179,10 +181,10 @@ a a a a -a -a +Y "} (2,1,1) = {" +Y a w w @@ -203,14 +205,13 @@ w w w w -w -w a +Y "} (3,1,1) = {" +Y a w -w c c c @@ -229,13 +230,13 @@ c c c w -w a +Y "} (4,1,1) = {" +Y a w -w c g h @@ -254,32 +255,32 @@ h k c w -w a +Y "} (5,1,1) = {" a -w +a w c h d d i -w -w +W +W j -w +W j -w -w +W +W d d i h c w -w +a a "} (6,1,1) = {" @@ -288,19 +289,19 @@ w w c i -w -w +W +W j -w +W b r -w +W o G -w +W j -w -w +W +W d c w @@ -313,7 +314,7 @@ w c c d -w +W G o p @@ -325,7 +326,7 @@ o p r b -w +W d c c @@ -338,19 +339,19 @@ w c d d -w +W o o -w -w +W +W r -w +W o -w -w +W +W r r -w +W d d c @@ -362,8 +363,8 @@ a w c d -w -w +W +W p o x @@ -375,8 +376,8 @@ p B r p -w -w +W +W d c w @@ -387,10 +388,10 @@ a w c d -w +W b p -w +W p p p @@ -398,10 +399,10 @@ p p p p -w +W p G -w +W d c w @@ -437,10 +438,10 @@ a w c i -w -w +W +W p -w +W p p Q @@ -448,10 +449,10 @@ u Q p p -w +W p -w -w +W +W d c w @@ -487,10 +488,10 @@ a w c d -w +W G p -w +W p p p @@ -498,10 +499,10 @@ p p p p -w +W p b -w +W i c w @@ -512,8 +513,8 @@ a w c d -w -w +W +W p r A @@ -525,8 +526,8 @@ p C o p -w -w +W +W d c w @@ -538,19 +539,19 @@ w c f d -w +W r r -w -w +W +W o -w +W r -w -w +W +W o o -w +W d d c @@ -563,7 +564,7 @@ w c c d -w +W b r p @@ -575,7 +576,7 @@ r p o G -w +W d c c @@ -588,19 +589,19 @@ w w c d -w -w +W +W j -w +W G o -w +W r b -w +W j -w -w +W +W d c w @@ -609,33 +610,33 @@ a "} (19,1,1) = {" a -w +a w c h i d d -w -w +W +W j -w +W j -w -w +W +W d i d h c w -w +a a "} (20,1,1) = {" +Y a w -w c k h @@ -654,13 +655,13 @@ h v c w -w a +Y "} (21,1,1) = {" +Y a w -w c c c @@ -679,10 +680,11 @@ c c c w -w a +Y "} (22,1,1) = {" +Y a w w @@ -703,11 +705,11 @@ w w w w -w -w a +Y "} (23,1,1) = {" +Y a a a @@ -729,6 +731,5 @@ a a a a -a -a +Y "} diff --git a/_maps/map_files/Mafia/mafia_unit_test.dmm b/_maps/map_files/Mafia/mafia_unit_test.dmm new file mode 100644 index 00000000000..93fd1d176ee --- /dev/null +++ b/_maps/map_files/Mafia/mafia_unit_test.dmm @@ -0,0 +1,598 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"c" = ( +/turf/open/floor/iron, +/area/centcom/mafia) +"i" = ( +/obj/effect/landmark/mafia, +/turf/open/floor/iron, +/area/centcom/mafia) +"E" = ( +/obj/effect/landmark/mafia/town_center, +/turf/open/floor/iron, +/area/centcom/mafia) +"G" = ( +/turf/closed/indestructible, +/area/centcom/mafia) +"W" = ( +/obj/mafia_game_board, +/turf/open/floor/iron, +/area/centcom/mafia) +"Y" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +G +G +G +G +G +G +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(2,1,1) = {" +G +W +i +i +i +W +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(3,1,1) = {" +G +i +c +c +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(4,1,1) = {" +G +i +c +E +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(5,1,1) = {" +G +i +c +c +c +i +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(6,1,1) = {" +G +W +i +i +i +W +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(7,1,1) = {" +G +G +G +G +G +G +G +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(8,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(9,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(10,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(11,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(12,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(13,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(14,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(15,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(16,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(17,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(18,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(19,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(20,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(21,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(22,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} +(23,1,1) = {" +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +Y +"} diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 15ed7142c74..9ffb1e8172b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -589,6 +589,12 @@ "alE" = ( /turf/open/floor/iron, /area/station/security/courtroom) +"alF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "alI" = ( /obj/machinery/door/window/left/directional/west{ dir = 4; @@ -1608,12 +1614,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/construction/storage_wing) -"aEP" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/dresser, -/obj/item/storage/secure/safe/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "aEW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -2665,22 +2665,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"aWR" = ( -/obj/structure/table/glass, -/obj/machinery/light_switch/directional/north, -/obj/item/storage/secure/briefcase{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) @@ -2915,6 +2899,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bar" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 10 + }, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 18; + start_on = 0 + }, +/obj/item/kitchen/rollingpin{ + pixel_x = -4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "bas" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/chapel, @@ -4398,7 +4399,6 @@ /area/station/commons/dorms) "bAI" = ( /obj/machinery/disposal/bin, -/obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -7466,6 +7466,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port) +"cMc" = ( +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/structure/secure_safe/directional/east, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -12; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "cMd" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -7654,6 +7667,13 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cQn" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "cQx" = ( /obj/machinery/computer/atmos_control/nitrous_tank{ dir = 1 @@ -8377,6 +8397,20 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ddy" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/taperecorder, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/wood, +/area/station/service/lawoffice) "ddK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -9226,15 +9260,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"dth" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase{ - pixel_x = -7; - pixel_y = 12 - }, -/obj/effect/spawner/random/engineering/flashlight, -/turf/open/floor/iron/dark, -/area/station/security/office) "dtB" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 @@ -9882,8 +9907,12 @@ }, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, /obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "dJk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -10497,6 +10526,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) +"dTN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "dTQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -13146,6 +13179,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"eQr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "eQs" = ( /obj/machinery/air_sensor/air_tank, /turf/open/floor/engine/air, @@ -13687,6 +13727,16 @@ /obj/item/food/pizzaslice/moldy/bacteria, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"faW" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table, +/obj/structure/cable, +/obj/item/poster/random_official, +/obj/item/poster/random_official{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "fbf" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -14028,6 +14078,14 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"fhz" = ( +/obj/structure/secure_safe/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Chief Engineer's Office" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "fhA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14136,6 +14194,19 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) +"fiI" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "fiK" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -14636,14 +14707,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"fqC" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/machinery/airalarm/directional/east, -/obj/structure/cable, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "fqD" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/wood, @@ -14971,6 +15034,15 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"fze" = ( +/obj/structure/secure_safe/hos{ + pixel_x = 36; + pixel_y = 28 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "fzi" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -15754,14 +15826,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/range) -"fOn" = ( -/obj/item/storage/secure/safe/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Chief Engineer's Office" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "fOu" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -16209,6 +16273,10 @@ /obj/structure/table, /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/fax{ + fax_name = "Security Office"; + name = "Security Office Fax Machine" + }, /turf/open/floor/iron/dark, /area/station/security/office) "fYq" = ( @@ -16224,6 +16292,9 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "fYC" = ( @@ -16387,6 +16458,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) +"gcL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/office) "gcU" = ( /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, @@ -16498,6 +16581,17 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"gfc" = ( +/obj/structure/table/wood, +/obj/machinery/light_switch/directional/west, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/lockbox/medal, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "gfe" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table, @@ -17990,17 +18084,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"gHC" = ( -/obj/structure/table/wood, -/obj/machinery/light_switch/directional/west, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/lockbox/medal, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "gHE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18195,6 +18278,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"gKH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "gKK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -18452,6 +18544,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"gOT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/mechbay) "gOY" = ( /obj/structure/chair{ dir = 8 @@ -20266,7 +20363,6 @@ "hyn" = ( /obj/machinery/airalarm/directional/west, /obj/effect/spawner/random/vending/snackvend, -/obj/machinery/airalarm/directional/west, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 @@ -20316,6 +20412,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"hza" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "hzt" = ( /obj/structure/transit_tube/curved/flipped, /obj/effect/turf_decal/tile/blue{ @@ -23506,6 +23606,13 @@ /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"iEs" = ( +/obj/structure/secure_safe/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "iEv" = ( /obj/structure/closet, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -24597,6 +24704,13 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"iVJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "iVN" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -24780,8 +24894,12 @@ }, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "iYG" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral{ @@ -25953,6 +26071,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"jtw" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/clothing/mask/cigarette/cigar, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "jtA" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/white{ @@ -26423,7 +26552,6 @@ /area/station/service/kitchen) "jAd" = ( /obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -26599,8 +26727,8 @@ dir = 8 }, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/medkit/regular, /obj/item/reagent_containers/cup/bottle/multiver, @@ -27181,17 +27309,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jNm" = ( -/obj/effect/landmark/blobstart, -/obj/machinery/camera/directional/north{ - c_tag = "Security - Evidence Storage" - }, -/obj/item/storage/secure/safe/directional/north{ - name = "evidence safe" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "jNo" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -27268,19 +27385,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jOQ" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "jOR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -28154,6 +28258,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kdy" = ( +/obj/structure/frame/computer{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "kdA" = ( /obj/machinery/door/airlock/mining{ name = "Warehouse" @@ -28802,6 +28912,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"kqM" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kqZ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -28859,13 +28976,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"krP" = ( -/obj/item/storage/secure/safe/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "ksg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -28991,12 +29101,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"ktY" = ( -/obj/item/storage/secure/safe/directional/north{ - name = "armory safe A" - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "kud" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /obj/effect/turf_decal/stripes/line, @@ -29730,8 +29834,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "kKp" = ( /obj/structure/rack, /obj/item/gun/energy/laser/carbine/practice{ @@ -30972,12 +31080,10 @@ /obj/structure/bed/medical{ dir = 8 }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/mask/muzzle, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, +/obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "lgl" = ( @@ -31218,6 +31324,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/science/research) +"llU" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lma" = ( /obj/structure/chair/stool/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33321,6 +33433,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"mcu" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "mcF" = ( /obj/structure/table, /obj/machinery/button/door{ @@ -35023,8 +35150,8 @@ dir = 1 }, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 + pixel_x = 4; + pixel_y = 6 }, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -36721,6 +36848,25 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"nka" = ( +/obj/structure/safe, +/obj/item/storage/briefcase/secure/riches, +/obj/item/storage/backpack/duffelbag/syndie/hitman, +/obj/item/card/id/advanced/silver/reaper, +/obj/item/lazarus_injector, +/obj/item/gun/energy/disabler, +/obj/item/gun/ballistic/revolver/russian, +/obj/item/ammo_box/a357, +/obj/item/clothing/neck/stethoscope, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" + }, +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "nkj" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 10 @@ -36783,6 +36929,14 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) +"nlV" = ( +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/storage/briefcase/secure, +/obj/item/assembly/flash/handheld, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "nmf" = ( /obj/machinery/smartfridge, /obj/machinery/door/poddoor/shutters/preopen{ @@ -36914,7 +37068,6 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "nnt" = ( -/obj/vehicle/ridden/secway, /obj/effect/turf_decal/bot, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -37200,6 +37353,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/wood, /area/station/service/theater) +"nsx" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/dresser, +/obj/structure/secure_safe/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "nsA" = ( /turf/closed/wall, /area/station/science/ordnance/testlab) @@ -38137,6 +38296,14 @@ /obj/structure/easel, /turf/open/floor/plating, /area/station/maintenance/disposal) +"nIx" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "nIP" = ( /obj/structure/table/glass, /obj/item/paper_bin{ @@ -38205,7 +38372,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "nJG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39656,6 +39823,12 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"omA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "omF" = ( /obj/machinery/teleport/station, /obj/machinery/status_display/evac/directional/north, @@ -39774,6 +39947,9 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ope" = ( +/turf/closed/wall, +/area/station/security/mechbay) "oph" = ( /obj/structure/chair/wood/wings{ dir = 8 @@ -39894,15 +40070,6 @@ }, /turf/open/floor/iron, /area/station/security/warden) -"ory" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - desc = "A large briefcase with a digital locking system, and the Nanotrasen logo emblazoned on the sides."; - name = "\improper Nanotrasen-brand secure briefcase exhibit"; - pixel_y = 2 - }, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "orT" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron/dark, @@ -40055,11 +40222,15 @@ "ouj" = ( /obj/structure/bed/medical/emergency, /obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, -/obj/machinery/iv_drip, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/blindfold, +/obj/item/clothing/glasses/blindfold, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "ouk" = ( @@ -40168,20 +40339,6 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/storage/gas) -"ovz" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/computer/security/wooden_tv{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/machinery/button/door/directional/north{ - id = "detective_shutters"; - name = "detective's office shutters control"; - req_access = list("detective") - }, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "ovK" = ( /obj/structure/closet/secure_closet/hop, /turf/open/floor/wood, @@ -40292,6 +40449,10 @@ /obj/item/storage/photo_album/chapel, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"oxV" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "oxW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -41026,15 +41187,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"oLL" = ( -/obj/item/storage/secure/safe/hos{ - pixel_x = 36; - pixel_y = 28 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "oLS" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/testlab) @@ -41560,20 +41712,6 @@ /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"oXv" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/taperecorder, -/obj/item/clothing/glasses/sunglasses, -/turf/open/floor/wood, -/area/station/service/lawoffice) "oXJ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -41678,6 +41816,17 @@ }, /turf/open/floor/engine/cult, /area/station/service/library) +"oZn" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/camera/directional/north{ + c_tag = "Security - Evidence Storage" + }, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "oZs" = ( /obj/structure/bed/medical/emergency{ dir = 4 @@ -41903,6 +42052,7 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/coroner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/medical/morgue) "pdX" = ( @@ -42207,6 +42357,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"pjK" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/machinery/computer/security/wooden_tv{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/button/door/directional/north{ + id = "detective_shutters"; + name = "detective's office shutters control"; + req_access = list("detective") + }, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "pjS" = ( /obj/machinery/vending/cigarette, /obj/structure/extinguisher_cabinet/directional/east, @@ -43000,9 +43164,6 @@ /turf/open/floor/iron, /area/station/security/courtroom) "pyh" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43196,14 +43357,9 @@ /turf/open/floor/iron, /area/station/security/checkpoint/customs) "pBL" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/newscaster/directional/west, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Security Office"; - name = "Security Office Fax Machine" +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 }, /turf/open/floor/iron, /area/station/security/office) @@ -43780,17 +43936,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"pLv" = ( -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/item/clothing/mask/cigarette/cigar, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "pLz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44621,13 +44766,11 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/mask/muzzle, /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, +/obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/security/execution/transfer) "qby" = ( @@ -46939,6 +47082,15 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"qRs" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + desc = "A large briefcase with a digital locking system, and the Nanotrasen logo emblazoned on the sides."; + name = "\improper Nanotrasen-brand secure briefcase exhibit"; + pixel_y = 2 + }, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "qRz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/spawner/random/trash/janitor_supplies, @@ -48710,6 +48862,18 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) +"rxN" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/structure/secure_safe/caps_spare/directional/west, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "rxP" = ( /obj/machinery/computer/security, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49759,14 +49923,6 @@ "rQw" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) -"rQz" = ( -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/item/folder/blue, -/obj/item/storage/secure/briefcase, -/obj/item/assembly/flash/handheld, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "rQK" = ( /obj/machinery/netpod, /obj/effect/decal/cleanable/robot_debris, @@ -50287,6 +50443,26 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"saa" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Office - Port" + }, +/obj/machinery/button/door/directional/west{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/item/circuitboard/computer/mech_bay_power_console, +/obj/item/stack/sheet/glass{ + pixel_y = 14 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "sab" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -52540,6 +52716,18 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sQz" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "sQB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54624,19 +54812,6 @@ /obj/effect/landmark/start/depsec/supply, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"tBV" = ( -/obj/machinery/recharger{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/storage/secure/safe/directional/east, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -12; - pixel_y = 5 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "tCC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -55139,23 +55314,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"tLG" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 10 - }, -/obj/item/flashlight/lamp{ - pixel_x = -7; - pixel_y = 18; - start_on = 0 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = -4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "tLN" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -56713,6 +56871,22 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"uno" = ( +/obj/structure/table/glass, +/obj/machinery/light_switch/directional/north, +/obj/item/storage/briefcase/secure{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "unt" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, @@ -57171,6 +57345,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uuO" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "uvw" = ( /obj/machinery/status_display/supply{ pixel_y = 32 @@ -57687,6 +57867,15 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uEW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "uFf" = ( /obj/machinery/holopad, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -58737,6 +58926,12 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron, /area/station/security/brig) +"uWs" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/mechbay) "uWt" = ( /obj/structure/rack, /obj/item/stack/medical/mesh, @@ -61682,6 +61877,16 @@ "vTX" = ( /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"vUa" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/item/stack/rods/two, +/obj/item/stack/cable_coil/five, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vUx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -61877,6 +62082,13 @@ }, /turf/open/floor/circuit/green/off, /area/station/science/research) +"vXj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/security/office) "vXt" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -62675,6 +62887,9 @@ dir = 1 }, /area/station/engineering/storage_shared) +"wlz" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "wlL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -62702,6 +62917,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/science/robotics/lab) +"wmr" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/vehicle/ridden/secway, +/turf/open/floor/iron, +/area/station/security/office) "wmz" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron, @@ -63394,6 +63616,15 @@ /obj/item/flashlight/lamp, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"wzq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "wzy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64100,25 +64331,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"wOQ" = ( -/obj/structure/safe, -/obj/item/storage/secure/briefcase/riches, -/obj/item/storage/backpack/duffelbag/syndie/hitman, -/obj/item/card/id/advanced/silver/reaper, -/obj/item/lazarus_injector, -/obj/item/gun/energy/disabler, -/obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, -/obj/item/clothing/neck/stethoscope, -/obj/item/book{ - desc = "An undeniably handy book."; - icon_state = "bookknock"; - name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" - }, -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "wOR" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64574,9 +64786,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "wVt" = ( -/obj/item/storage/box/deputy, /obj/structure/table, /obj/item/radio/intercom/directional/west, +/obj/item/storage/box/deputy, /turf/open/floor/iron/dark, /area/station/security/office) "wVy" = ( @@ -64916,6 +65128,13 @@ /obj/structure/cable, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/cmo) +"xcv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "xcz" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/reagent_dispensers/watertank, @@ -65098,6 +65317,12 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"xgh" = ( +/obj/structure/secure_safe/directional/north{ + name = "armory safe A" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "xgi" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, @@ -65350,6 +65575,15 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) +"xkq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) "xkr" = ( /obj/effect/turf_decal/plaque{ icon_state = "L13" @@ -66755,18 +66989,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xJl" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/item/storage/secure/safe/caps_spare/directional/west, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) +"xJv" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "xJA" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -67199,6 +67425,15 @@ "xTw" = ( /turf/closed/wall/r_wall, /area/station/medical/medbay/central) +"xTH" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron/dark, +/area/station/security/office) "xTO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67574,6 +67809,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"xYZ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "xZb" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -84644,7 +84883,7 @@ pOa uOH jUb xIK -tLG +bar nBp dqN pqz @@ -89994,7 +90233,7 @@ rlU vis mCi ixT -wOQ +nka rlU aaa aEH @@ -91818,7 +92057,7 @@ wvo xCl nMz pJR -rQz +nlV kfA rWH oOE @@ -91853,7 +92092,7 @@ ePX svQ duu pKP -aWR +uno rQd cJm jGw @@ -92073,9 +92312,9 @@ oIa cpn koa srP -krP +iEs pJR -tBV +cMc qAA uFQ eIy @@ -94347,7 +94586,7 @@ aaa aaa aaa rJB -jNm +oZn dxe wTO xxZ @@ -94386,7 +94625,7 @@ tKN aaf dsQ mZL -xJl +rxN aGQ acf hmq @@ -94647,7 +94886,7 @@ nxO qXF qXF aMB -pLv +jtw duI jnt cdC @@ -94663,7 +94902,7 @@ jzN sYh qeZ nBs -ory +qRs vyi nNY htd @@ -95375,7 +95614,7 @@ aaa aaa cTk aeq -ktY +xgh tJE kVU tJE @@ -97164,11 +97403,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +gdb +gdb +gdb +gdb +gdb iTZ ahj ahj @@ -97419,11 +97658,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -97431,12 +97665,17 @@ rDE fOw nQC ikZ +vXj +iGj +iGj +iGj +iGj pBL iGj iGj iGj vdi -iGj +wmr ljf kYg nnt @@ -97676,11 +97915,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt aaa vaB @@ -97688,6 +97922,11 @@ kKp iDq mPT fCn +gKH +gcL +wzq +wzq +xkq pyh aja lyF @@ -97933,11 +98172,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -97945,6 +98179,11 @@ hhl fOf eZI dgD +ope +ope +mcu +sQz +ope kYg vGt fYb @@ -98192,16 +98431,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa gdb nMV luV rqs dgD +faW +saa +uEW +eQr +ope jGl kxA wxj @@ -98246,7 +98485,7 @@ ogL tyY aPs cUX -gHC +gfc nOq xDa vwP @@ -98449,22 +98688,22 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa gdb ksg aGM rpz dgD +vUa +cQn +kqM +omA +ope jGl kxA xXh ooG wxj -dth +xTH ipz nOv dgS @@ -98704,11 +98943,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -98716,6 +98950,11 @@ ksg aGM rpz dgD +xJv +alF +xcv +hza +ope rtI kxA kAT @@ -98961,11 +99200,6 @@ aaa aav aaa aaa -aaa -aaa -aaa -aaa -aaa rrt aaa ikZ @@ -98973,6 +99207,11 @@ ksg vuP rpz dgD +uuO +alF +xcv +uuO +ope jGl kxA qmu @@ -98987,7 +99226,7 @@ pBG sOZ uWo jMy -jOQ +fiI aHr mhA xNo @@ -99218,11 +99457,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa rrt lMJ gdb @@ -99230,6 +99464,11 @@ dhN nuI qJa dgD +kdy +iVJ +llU +uWs +ope kYg jAN wxj @@ -99476,17 +99715,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa tLb gdb ikZ gdb ikZ gdb +wlz +gOT +gOT +wlz +wlz hYd olD mLx @@ -99508,7 +99747,7 @@ bHN ilh ilh ilh -oXv +ddy fbs itp soX @@ -99590,7 +99829,7 @@ fhi fhi uEo fiS -hqj +gyQ eRn hqj hqj @@ -99780,7 +100019,7 @@ wEG htd qBC syo -aEP +nsx cRU oRn sjS @@ -99847,7 +100086,7 @@ huj fhi xEU iqx -deY +xYZ gil deY oet @@ -100015,7 +100254,7 @@ lAM dDe lAM sWV -ovz +pjK dbj jyQ lGj @@ -100361,7 +100600,7 @@ ujk jvo aHH iYE -pCa +dTN dEF pCa cOT @@ -101282,7 +101521,7 @@ aaa rrt lMJ mxn -oLL +fze gTt sdu fad @@ -108000,7 +108239,7 @@ vHs iBm uXd sqE -fOn +fhz dJP bfO pCt @@ -108518,7 +108757,7 @@ qtm fyJ qVD cuc -fqC +nIx tUw rHq peX @@ -111332,7 +111571,7 @@ wBE oNs eyD qZB -oNs +oxV hRl jWE auc diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/_maps/map_files/NSVBlueshift/Blueshift.dmm index 6bbfebbb62a..6a2d5d1ab47 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/_maps/map_files/NSVBlueshift/Blueshift.dmm @@ -46,16 +46,6 @@ /mob/living/basic/mothroach, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"aaO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "aaR" = ( /obj/machinery/camera/directional/north{ c_tag = " Prison - East"; @@ -88,16 +78,8 @@ /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) "abk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "abl" = ( @@ -108,9 +90,6 @@ /obj/item/bedsheet{ pixel_y = 8 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "abA" = ( @@ -138,12 +117,6 @@ /area/station/maintenance/port/upper) "abJ" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -185,12 +158,8 @@ "acE" = ( /obj/machinery/holopad, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "acJ" = ( @@ -202,12 +171,8 @@ /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) "acS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "acT" = ( @@ -231,19 +196,6 @@ /turf/closed/wall/rust, /area/station/maintenance/solars/starboard/fore) "adb" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/trash_pile, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -251,7 +203,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "adi" = ( /turf/closed/wall/rust, @@ -262,12 +214,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -320,12 +268,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "adF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/west, /obj/structure/sink/directional/east, /turf/open/floor/iron/cafeteria, @@ -354,10 +296,8 @@ /area/station/hallway/primary/central) "adQ" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "adR" = ( @@ -395,16 +335,12 @@ /turf/open/floor/carpet/purple, /area/station/science/breakroom) "aea" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Security - Brig Far Starboard"; dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, @@ -425,8 +361,8 @@ }, /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/mess) @@ -471,6 +407,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/eva) "aey" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/interrogation) "aeM" = ( @@ -483,9 +422,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "aeP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -545,8 +482,8 @@ "afm" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "afn" = ( @@ -616,8 +553,7 @@ "afL" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -642,10 +578,6 @@ /area/station/maintenance/aft/upper) "agb" = ( /obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "agc" = ( @@ -667,12 +599,8 @@ }, /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "agl" = ( @@ -684,18 +612,13 @@ pixel_x = -12 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "agv" = ( /obj/structure/transit_tube/curved{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "agy" = ( /obj/effect/turf_decal/siding/wood{ @@ -714,7 +637,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "agI" = ( @@ -729,12 +651,8 @@ /area/station/maintenance/port/upper) "agL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "agN" = ( @@ -759,12 +677,8 @@ id_tag = "HoPdoor"; name = "Head of Personel's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -821,12 +735,8 @@ /obj/machinery/door/airlock/rd{ name = "Research Director's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/machinery/duct, /turf/open/floor/carpet/purple, @@ -912,9 +822,6 @@ /turf/open/floor/iron/dark, /area/station/security/prison/garden) "aiC" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/suit_storage_unit/engine, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -978,8 +885,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron, @@ -1027,12 +934,8 @@ name = "Gravity Generator Area" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) "ajr" = ( @@ -1071,18 +974,14 @@ "ajB" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 + dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "ajD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "ajH" = ( @@ -1102,8 +1001,8 @@ /area/station/medical/exam_room) "ajK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -1151,12 +1050,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/plating, @@ -1177,8 +1072,8 @@ "akl" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -1237,16 +1132,6 @@ /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "akS" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/chair/office{ dir = 4 }, @@ -1291,8 +1176,8 @@ "alt" = ( /obj/structure/cable, /obj/effect/landmark/start/botanist, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -1302,10 +1187,6 @@ /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "alH" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/chem_dispenser/drinks{ dir = 8 @@ -1313,6 +1194,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "alQ" = ( @@ -1324,15 +1206,13 @@ }, /obj/effect/spawner/random/trash/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "alS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -1420,25 +1300,11 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) -"amU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/barber) "ana" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -1465,9 +1331,7 @@ /obj/structure/railing{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "anz" = ( /obj/structure/table, @@ -1595,13 +1459,6 @@ dir = 8 }, /area/station/security/prison/workout) -"aoF" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/turf/open/floor/iron, -/area/station/security/prison/mess) "aoI" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -1616,37 +1473,19 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"aoM" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/blueshield) "aoO" = ( /obj/machinery/button/door{ id = "MainSurgeryTheatre"; name = "Privacy Shutter Controll"; pixel_x = 26 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "aoR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -1668,22 +1507,15 @@ /area/station/security/prison/upper) "apa" = ( /obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/machinery/camera{ c_tag = "Departures Customs"; dir = 9; name = "customs camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) @@ -1700,10 +1532,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -1739,19 +1567,15 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "apO" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "apR" = ( @@ -1767,10 +1591,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"apY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/genetics) "aqb" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, @@ -1926,12 +1746,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /obj/structure/cable, @@ -1941,7 +1757,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) @@ -1967,8 +1783,8 @@ listening = 0; name = "Station Intercom (Court)" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "arT" = ( @@ -1994,20 +1810,10 @@ /turf/open/floor/iron, /area/station/science) "asc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "asd" = ( /turf/closed/wall/r_wall, @@ -2021,9 +1827,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "ass" = ( @@ -2038,46 +1842,31 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/commons/vacant_room/commissary) "asA" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "asF" = ( /obj/effect/turf_decal/vg_decals/numbers/two, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "asH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "asK" = ( @@ -2085,12 +1874,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -2110,27 +1895,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/north, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"asW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "asX" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth_large, @@ -2153,12 +1924,8 @@ /area/station/commons/dorms) "atk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "atm" = ( @@ -2195,12 +1962,6 @@ }, /turf/open/floor/carpet, /area/station/security/prison/rec) -"atN" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "atW" = ( /obj/effect/turf_decal/trimline/blue/corner, /obj/effect/landmark/start/assistant, @@ -2243,25 +2004,10 @@ dir = 4 }, /area/station/security/range) -"auh" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "auv" = ( /obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 10 - }, /obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "auH" = ( @@ -2280,8 +2026,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "auR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -2290,14 +2036,10 @@ /obj/structure/table, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/green{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 8 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -2307,12 +2049,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "avb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "avc" = ( @@ -2351,9 +2089,6 @@ /turf/open/floor/iron/dark, /area/station/common/night_club) "avr" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/table/reinforced, /obj/item/inducer, /obj/item/construction/rld, @@ -2361,10 +2096,8 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "avw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/bar/backroom) "avy" = ( @@ -2378,9 +2111,7 @@ "avB" = ( /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "avF" = ( @@ -2424,12 +2155,6 @@ dir = 9 }, /area/station/commons/dorms) -"avO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "avP" = ( /obj/structure/reagent_dispensers/fueltank/large, /obj/effect/turf_decal/bot, @@ -2445,10 +2170,7 @@ /area/station/maintenance/department/medical) "avR" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "avX" = ( /obj/structure/window/reinforced/spawner/directional/south, @@ -2456,15 +2178,10 @@ dir = 8; pixel_x = 5 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -2474,8 +2191,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -2491,12 +2208,8 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "awq" = ( @@ -2506,12 +2219,8 @@ }, /area/station/commons/fitness) "awA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "awC" = ( @@ -2525,8 +2234,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/abandon_diner) @@ -2540,19 +2249,14 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "awV" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint) -"awW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/tcommsat/computer) "awX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -2569,12 +2273,8 @@ id_tag = "RDdoor"; name = "Research Director's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -2600,22 +2300,14 @@ /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "axi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/common/tailoring) "axj" = ( /obj/machinery/conveyor{ id = "cargounload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Cargo Bay - Starboard"; name = "cargo camera" @@ -2625,7 +2317,7 @@ /area/station/cargo/storage) "axk" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "axm" = ( @@ -2634,10 +2326,7 @@ /area/station/commons/dorms/room5) "axq" = ( /obj/structure/closet/lasertag/blue, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -2676,8 +2365,8 @@ "axy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/west, /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -2692,9 +2381,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage_shared) "axI" = ( @@ -2719,7 +2406,7 @@ /area/station/security/checkpoint/medical) "axS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/circuits) "axU" = ( @@ -2750,12 +2437,8 @@ dir = 4 }, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 8 }, @@ -2791,12 +2474,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ayM" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -2824,8 +2501,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/upper) "azj" = ( @@ -2855,12 +2532,8 @@ /area/station/maintenance/fore/upper) "azB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -2872,8 +2545,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/cargo/warehouse) "azU" = ( @@ -2888,15 +2561,11 @@ id_tag = "Toilet1"; name = "Stall 1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "aAb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/escapepodbay) @@ -2911,12 +2580,6 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/disposal) -"aAg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "aAj" = ( /obj/structure/window/spawner/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -2925,29 +2588,17 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "aAk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) "aAo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "aAw" = ( @@ -3032,7 +2683,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aBz" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "aBB" = ( @@ -3056,24 +2707,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/disposal) "aBG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "aBK" = ( @@ -3126,9 +2769,7 @@ name = "Confession Booth"; req_access = list("crematorium") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "aCf" = ( @@ -3157,7 +2798,6 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating, /area/station/escapepodbay) "aCu" = ( @@ -3194,12 +2834,6 @@ dir = 4 }, /obj/machinery/newscaster/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -3212,11 +2846,10 @@ /area/station/maintenance/port/upper) "aCT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -3228,12 +2861,8 @@ /turf/open/floor/carpet, /area/station/service/chapel) "aDa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/medium{ dir = 8 }, @@ -3252,12 +2881,8 @@ /area/station/security/courtroom) "aDi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -3265,14 +2890,9 @@ /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator Room" }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/radiation/directional/north, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "grav-gen" @@ -3306,12 +2926,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3368,24 +2984,9 @@ }, /area/station/hallway/secondary/exit) "aEy" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "aEz" = ( /obj/machinery/door/airlock/virology{ @@ -3410,35 +3011,20 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) "aEL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "aEQ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"aEU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "aEX" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/athletic_mixed, @@ -3486,10 +3072,6 @@ /area/station/ai_monitored/turret_protected/ai) "aFn" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "aFw" = ( @@ -3497,13 +3079,11 @@ /obj/structure/railing/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "aFx" = ( /obj/structure/sign/shuttleg250, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/herringbone, /area/station/cargo/storage) "aFD" = ( @@ -3562,7 +3142,6 @@ /area/station/service/kitchen) "aFW" = ( /obj/machinery/computer/atmos_control, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/north, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, @@ -3571,12 +3150,6 @@ /obj/structure/chair/sofa/bench/right{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -3641,8 +3214,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science) @@ -3656,46 +3229,31 @@ /area/station/command/heads_quarters/ce) "aGS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/secondary/command) "aGV" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/folder/blue{ pixel_x = 3; pixel_y = 3 }, /obj/item/folder/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/item/aicard, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/item/aicard, /turf/open/floor/iron/dark, /area/station/command/bridge) "aHd" = ( /turf/closed/wall/rust, /area/station/maintenance/department/security/greater) "aHh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -3745,12 +3303,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "aHy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "aHz" = ( @@ -3796,19 +3350,12 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "aHV" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/cryo_cell, /turf/open/floor/iron, /area/station/medical/cryo) @@ -3816,19 +3363,13 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "aHZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -3854,9 +3395,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/structure/cable, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/maintenance/department/science/xenobiology) "aIz" = ( /obj/machinery/door/firedoor, @@ -3890,19 +3429,9 @@ /turf/closed/wall/r_wall, /area/station/maintenance/eva_shed/starboard) "aIF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/item/wrench, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "aIH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -3916,15 +3445,10 @@ }, /area/station/hallway/primary/central/aft) "aIS" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/melee/flyswatter, /obj/item/clothing/suit/utility/beekeeper_suit, /obj/item/clothing/head/utility/beekeeper_head, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -3939,12 +3463,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "aJc" = ( @@ -4014,30 +3534,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/security/courtroom) -"aJI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "aJL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4084,12 +3584,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer1, /obj/structure/disposalpipe/segment{ dir = 4 @@ -4129,13 +3625,6 @@ pixel_x = 24; req_access = list("aux_base") }, -/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/iron, /area/station/construction/mining/aux_base) "aKt" = ( @@ -4166,12 +3655,8 @@ /area/station/service/library) "aKI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -4184,27 +3669,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "East RnD Wing" }, /turf/open/floor/iron, /area/station/science/research) -"aKY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "aLa" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/bot, @@ -4255,7 +3726,7 @@ /obj/item/stock_parts/cell/high, /obj/item/inducer, /obj/item/inducer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "aLP" = ( @@ -4263,8 +3734,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron, @@ -4312,7 +3783,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) "aMl" = ( @@ -4346,22 +3817,11 @@ }, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"aME" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/lockers) "aMJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/engineering/main) @@ -4388,9 +3848,7 @@ "aMU" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4402,10 +3860,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_office) -"aNj" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/central) "aNm" = ( /turf/closed/wall, /area/station/maintenance/port/upper) @@ -4431,22 +3885,12 @@ /turf/open/floor/plating, /area/station/cargo/storage) "aNv" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "aNy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -4467,12 +3911,6 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "aNO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, @@ -4490,20 +3928,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, /obj/item/folder/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "aNU" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/effect/turf_decal/stripes{ dir = 6 }, @@ -4519,6 +3951,9 @@ /obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/machinery/light/directional/east, /obj/structure/reagent_dispensers/wall/virusfood/directional/east, +/obj/effect/turf_decal/trimline/green/filled/end{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "aOe" = ( @@ -4537,15 +3972,6 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"aOm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "aOv" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -4596,12 +4022,6 @@ /area/station/medical/cryo) "aOT" = ( /obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "aOU" = ( @@ -4634,20 +4054,17 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "aPq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/washing_machine, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "aPt" = ( @@ -4672,12 +4089,8 @@ /obj/effect/turf_decal/tile/purple/half{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -4685,24 +4098,10 @@ "aPz" = ( /obj/effect/turf_decal/vg_decals/numbers/six, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"aPA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "aPB" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/neutral, @@ -4750,7 +4149,6 @@ /area/station/maintenance/fore/upper) "aQb" = ( /obj/structure/railing/corner, -/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "aQc" = ( @@ -4800,12 +4198,8 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner, /area/station/maintenance/department/engineering/engine_aft_starboard) "aQq" = ( @@ -4818,12 +4212,8 @@ /area/station/engineering/atmos/hfr_room) "aQr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "aQu" = ( @@ -4833,16 +4223,6 @@ /area/station/engineering/transit_tube) "aQw" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/field/generator, /turf/open/floor/iron, /area/station/engineering/storage) @@ -4867,13 +4247,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) -"aQU" = ( -/obj/machinery/cryo_cell, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/medical/cryo) "aQY" = ( /turf/closed/wall, /area/station/medical/psychology) @@ -4913,12 +4286,8 @@ /obj/effect/turf_decal/tile/bar{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4926,7 +4295,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "aRD" = ( -/obj/effect/turf_decal/stripes, /obj/structure/liquid_pump, /obj/structure/railing, /turf/open/floor/plating, @@ -4946,12 +4314,8 @@ /area/station/maintenance/starboard/fore) "aSf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) "aSh" = ( @@ -4959,23 +4323,6 @@ /obj/structure/railing, /turf/open/openspace, /area/station/hallway/secondary/command) -"aSi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "aSk" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, @@ -5033,9 +4380,7 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "aSG" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -5119,9 +4464,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "aTP" = ( @@ -5183,6 +4527,15 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"aUg" = ( +/obj/structure/chair/stool/bar/directional{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/mess) "aUj" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -5195,7 +4548,7 @@ "aUF" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "aUI" = ( @@ -5208,7 +4561,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "aUO" = ( -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/service{ name = "Bar" @@ -5232,12 +4584,12 @@ /area/station/security/checkpoint/customs) "aUX" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "aUY" = ( @@ -5249,7 +4601,7 @@ /area/station/service/bar/atrium) "aVm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/service/power_station) @@ -5267,12 +4619,6 @@ /turf/closed/wall/mineral/titanium, /area/station/science/ordnance/bomb) "aVv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/sink/directional/east, /turf/open/floor/iron/kitchen{ dir = 1 @@ -5296,7 +4642,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5327,12 +4673,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "aVT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup5"; location = "hallup4" @@ -5366,64 +4708,28 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/wood, /area/station/security/prison/rec) -"aWl" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "aWp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) -"aWq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "aWr" = ( /obj/machinery/door/airlock/medical/glass{ name = "Cryogenics" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "aWA" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "aWD" = ( @@ -5439,10 +4745,7 @@ "aWL" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "aWM" = ( /obj/effect/turf_decal/delivery, @@ -5505,12 +4808,8 @@ "aXn" = ( /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "aXo" = ( @@ -5524,12 +4823,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "aXs" = ( @@ -5546,8 +4841,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -5584,7 +4879,7 @@ /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "aXS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "aXW" = ( @@ -5597,8 +4892,8 @@ dir = 4; name = "Judge" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/clothing/suit/costume/judgerobe, /obj/item/clothing/head/costume/powdered_wig{ pixel_y = 11 @@ -5614,12 +4909,8 @@ /area/station/cargo/storage) "aYj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -5641,19 +4932,6 @@ /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/service/bar/atrium) -"aYH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "aYM" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes{ @@ -5673,12 +4951,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "aYS" = ( @@ -5689,7 +4963,6 @@ /turf/open/floor/wood, /area/station/command/captain_dining) "aYU" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, @@ -5720,8 +4993,8 @@ /area/station/service/theater) "aZh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -5744,8 +5017,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "aZx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -5773,12 +5046,6 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "aZM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/airalarm/directional/south, /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/camera/directional/south{ @@ -5786,6 +5053,9 @@ name = "command camera" }, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/bridge) "aZP" = ( @@ -5839,35 +5109,18 @@ name = "Courtroom Lobby" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/security/courtroom) "bap" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/office) "baw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -5879,12 +5132,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) -"baB" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "baD" = ( /obj/structure/closet/crate/freezer, /obj/item/food/meat/slab, @@ -5904,12 +5151,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -5927,12 +5170,8 @@ /area/station/commons/dorms) "baI" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5967,10 +5206,7 @@ /area/station/security/power_station) "bbn" = ( /obj/structure/filingcabinet/security, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -5986,22 +5222,10 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/bar/atrium) -"bby" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/circuit/red, -/area/station/science/robotics/mechbay) "bbz" = ( /obj/machinery/computer/slot_machine, /obj/effect/decal/cleanable/dirt{ @@ -6011,8 +5235,8 @@ /area/station/maintenance/rus_gambling) "bbE" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6035,16 +5259,7 @@ "bbG" = ( /obj/structure/table/reinforced, /obj/item/binoculars, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "bbH" = ( @@ -6052,12 +5267,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/upper) "bbX" = ( @@ -6119,12 +5330,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/supply/vault, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) @@ -6142,18 +5349,14 @@ "bcy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage_shared) "bcA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -6168,8 +5371,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -6177,9 +5380,6 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -6197,8 +5397,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -6208,35 +5408,14 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) "bcQ" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) -"bcR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "bcV" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, @@ -6278,8 +5457,8 @@ /area/station/science/research) "bdf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -6328,8 +5507,8 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "bdx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "bdF" = ( @@ -6449,10 +5628,8 @@ "beQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6474,14 +5651,6 @@ name = "Ultra Reinforced Glass Floor" }, /area/station/ai_monitored/turret_protected/aisat_interior) -"bfa" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "bfo" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -6490,39 +5659,26 @@ /obj/structure/table, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"bft" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/research) "bfA" = ( /obj/machinery/computer/records/security{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "bfD" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "bfG" = ( @@ -6565,22 +5721,6 @@ "bgi" = ( /turf/closed/wall, /area/station/engineering/engine_smes) -"bgo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "bgp" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -6595,9 +5735,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -6621,17 +5759,15 @@ dir = 8 }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "bgA" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) "bgI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "bgP" = ( @@ -6660,12 +5796,8 @@ /area/station/service/library/printer) "bhf" = ( /obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -6673,13 +5805,10 @@ /obj/structure/table, /obj/item/folder/red, /obj/item/pen, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "bho" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/structure/sign/departments/chemistry/pharmacy/directional/east, /turf/open/floor/iron, @@ -6693,13 +5822,11 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "bhN" = ( -/obj/effect/turf_decal/tile/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -6712,13 +5839,6 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"bia" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "bie" = ( /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, @@ -6745,11 +5865,8 @@ "bio" = ( /obj/structure/table/reinforced, /obj/machinery/computer/records/medical/laptop, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "bit" = ( @@ -6778,8 +5895,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -6808,12 +5925,8 @@ "biH" = ( /obj/machinery/recharge_station, /obj/effect/landmark/start/cyborg, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6859,23 +5972,20 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "bjc" = ( /obj/machinery/chem_master, /obj/machinery/light/directional/east, /obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "bjl" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/machinery/status_display/ai/directional/south, /obj/item/storage/belt/utility, @@ -6914,25 +6024,19 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "bjL" = ( /obj/structure/chair/sofa/bench/right, -/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/siding/thinplating_new, /obj/structure/sign/poster/random/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/primary/upper) "bjM" = ( /obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/co2, /area/station/engineering/atmos) "bjO" = ( @@ -6943,12 +6047,11 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "bjS" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "bjW" = ( @@ -6986,12 +6089,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -7018,29 +6117,12 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "bkA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "bkC" = ( @@ -7052,12 +6134,6 @@ "bkG" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/airalarm/directional/north, /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/trunk{ @@ -7069,16 +6145,11 @@ /turf/closed/wall, /area/station/medical/exam_room) "bkN" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "bkP" = ( @@ -7109,12 +6180,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Lasertag Prep Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/laser_tag) @@ -7125,19 +6192,6 @@ dir = 1 }, /area/station/cargo/miningdock) -"bln" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "blr" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -7148,33 +6202,22 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) "blx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "blB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -7219,10 +6262,6 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"bmd" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central) "bml" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/access/all/engineering, @@ -7263,16 +6302,9 @@ }, /area/station/medical/medbay/lobby) "bmD" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/storage/bag/plants/portaseeder, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -7294,12 +6326,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7320,9 +6348,6 @@ /area/station/security/power_station) "bmP" = ( /obj/machinery/door/airlock/maintenance/glass, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) @@ -7345,16 +6370,12 @@ /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "bmV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "HoS Junction"; sortType = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "bng" = ( /obj/effect/turf_decal/stripes/line, @@ -7383,10 +6404,8 @@ /area/station/maintenance/console_room) "bnq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/command) @@ -7396,8 +6415,8 @@ /area/station/maintenance/port/central) "bns" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/prison/rec) "bnx" = ( @@ -7460,27 +6479,15 @@ /obj/machinery/door/airlock/security{ name = "Evidence Storage" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/interrogation) "bnZ" = ( /obj/machinery/smartfridge/organ, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/white, /area/station/medical/surgery) "boc" = ( @@ -7502,12 +6509,8 @@ }, /area/station/science/tele_sci) "bog" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "boj" = ( @@ -7516,12 +6519,8 @@ name = "Containment Breach Shutters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 8 }, @@ -7548,10 +6547,6 @@ }, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/requests_console/directional/west{ - department = "Toxins Lab"; - name = "Toxins Requests Console" - }, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/assistance, /obj/effect/turf_decal/bot, @@ -7572,12 +6567,17 @@ /turf/open/floor/iron, /area/station/science/ordnance) "bop" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 }, -/obj/effect/spawner/random/trash/graffiti, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/structure/table, +/obj/item/poster/random_official{ + pixel_y = 10 + }, +/obj/item/poster/random_official, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "bos" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt{ @@ -7597,8 +6597,8 @@ /obj/machinery/door/airlock/asylum{ name = "Asylum" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /obj/machinery/duct, /turf/open/floor/iron, @@ -7655,12 +6655,8 @@ /area/station/maintenance/port/central) "boS" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /obj/structure/cable, /turf/open/floor/iron/dark/side, @@ -7673,19 +6669,12 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet/red, /area/station/commons/dorms/room6) -"bpa" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "bpg" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "bpj" = ( @@ -7694,7 +6683,6 @@ dir = 1 }, /obj/machinery/defibrillator_mount/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "bpo" = ( @@ -7705,14 +6693,12 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "bpp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "bpv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/security/office) @@ -7726,20 +6712,14 @@ /turf/open/misc/asteroid/airless, /area/space/nearstation) "bpA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) "bpC" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7813,10 +6793,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7929,7 +6907,7 @@ /area/station/maintenance/department/security/upper) "bri" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) @@ -7947,9 +6925,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "brr" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters{ id = "evashutters3"; name = "E.V.A. Storage Shutters" @@ -7962,12 +6937,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -7976,7 +6945,7 @@ dir = 9 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "bry" = ( @@ -7998,14 +6967,6 @@ /obj/structure/flora/bush/grassy, /turf/open/floor/grass, /area/station/service/cafeteria) -"brE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "brK" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes{ @@ -8022,12 +6983,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "brO" = ( @@ -8086,12 +7043,8 @@ /area/station/science/research/abandoned) "bsk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall13"; location = "hall12" @@ -8099,12 +7052,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bsq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "bst" = ( @@ -8152,9 +7101,7 @@ department = "EVA"; name = "EVA Requests Console" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) @@ -8163,12 +7110,8 @@ /area/space/nearstation) "bsN" = ( /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/camera/directional/south{ c_tag = "Security - Shuttle Bay East" }, @@ -8213,9 +7156,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "bti" = ( @@ -8224,16 +7165,6 @@ /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"btk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "btt" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8241,12 +7172,8 @@ /obj/machinery/door/airlock{ name = "Theater Backstage" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/service/theatre, /turf/open/floor/wood, /area/station/service/theater) @@ -8257,12 +7184,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) "btQ" = ( @@ -8295,12 +7218,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/engine, /area/station/command/secure_bunker) @@ -8309,12 +7228,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "buD" = ( @@ -8336,16 +7251,6 @@ /obj/machinery/meter, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/pumproom) -"buL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "buP" = ( /obj/machinery/light/directional/west, /turf/open/openspace, @@ -8355,9 +7260,6 @@ /turf/open/floor/grass, /area/station/service/lawoffice) "buV" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 4 }, @@ -8440,8 +7342,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -8458,16 +7360,11 @@ /area/station/medical/medbay/central) "bvL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "bvM" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 @@ -8492,10 +7389,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "bvZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8542,7 +7437,7 @@ "bwO" = ( /obj/effect/turf_decal/bot, /obj/structure/punching_bag, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -8560,27 +7455,10 @@ /area/station/hallway/primary/upper) "bwY" = ( /obj/machinery/bluespace_vendor/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) -"bxc" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "bxf" = ( /obj/structure/flora/bush/fullgrass, /obj/structure/flora/bush/pale, @@ -8620,10 +7498,7 @@ "bxt" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bxx" = ( /obj/effect/turf_decal/stripes{ @@ -8636,12 +7511,8 @@ /area/station/service/power_station) "bxy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8659,12 +7530,8 @@ /obj/item/shard, /obj/item/wrench, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "bxS" = ( @@ -8677,12 +7544,8 @@ /area/station/science/xenobiology) "bxW" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security/glass{ id_tag = "permainner"; name = "Permabrig Transfer" @@ -8700,7 +7563,7 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "byi" = ( @@ -8889,7 +7752,7 @@ /turf/open/floor/iron, /area/station/engineering/storage/tech) "bzk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "bzv" = ( @@ -8931,12 +7794,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/captain, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, @@ -8985,46 +7844,33 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/exam_room) "bAo" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "bAt" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "bAw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "bAL" = ( /obj/machinery/door/poddoor/shutters{ @@ -9032,8 +7878,8 @@ name = "Gateway Chamber Shutters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "bAO" = ( @@ -9067,9 +7913,7 @@ "bAZ" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/chemistry, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "bBa" = ( @@ -9100,12 +7944,8 @@ /obj/machinery/door/airlock/medical{ name = "Psychology" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /turf/open/floor/wood, /area/station/medical/psychology) @@ -9133,16 +7973,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "bBI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -9160,12 +7992,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) @@ -9214,20 +8042,16 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/janitor) "bCi" = ( -/obj/effect/turf_decal/tile/red{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "bCk" = ( @@ -9246,9 +8070,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "bCL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/lockers) "bCQ" = ( @@ -9265,8 +8087,8 @@ "bDe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "bDm" = ( @@ -9276,19 +8098,10 @@ /area/station/maintenance/port/upper) "bDn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) -"bDq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bDr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron, @@ -9297,12 +8110,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/north, /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -9374,8 +8183,8 @@ /area/station/cargo/miningdock) "bDV" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "bDW" = ( @@ -9395,9 +8204,7 @@ }, /obj/machinery/status_display/evac/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) "bEl" = ( @@ -9437,7 +8244,7 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "bEF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/ordnance/storage) @@ -9457,11 +8264,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"bEH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/dorms) "bEK" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -9525,9 +8327,7 @@ /turf/open/floor/carpet/purple, /area/station/common/night_club) "bFc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room6) @@ -9535,7 +8335,7 @@ /obj/effect/spawner/random/trash/mess, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "bFi" = ( @@ -9579,25 +8379,13 @@ /area/station/maintenance/port/upper) "bFJ" = ( /obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "bFO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -9676,12 +8464,8 @@ /turf/open/floor/wood, /area/station/service/lawoffice) "bHc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "bHe" = ( @@ -9714,10 +8498,7 @@ /obj/structure/transit_tube/curved/flipped{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bHU" = ( /obj/effect/turf_decal/siding/thinplating/dark, @@ -9726,36 +8507,18 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) "bHY" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, /turf/open/floor/iron, /area/station/security/prison/mess) "bIk" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/status_display/ai/directional/north, /obj/effect/spawner/random/vending/snackvend, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "bIr" = ( /obj/structure/rack, @@ -9778,12 +8541,8 @@ /area/station/commons/fitness) "bIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction, /turf/open/floor/iron, /area/station/commons/dorms) @@ -9801,8 +8560,8 @@ name = "Abandoned Diner" }, /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) @@ -9819,7 +8578,6 @@ /area/space) "bIW" = ( /obj/machinery/dish_drive/bullet, -/obj/effect/turf_decal/stripes, /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/stripes/blue/line, /turf/open/floor/iron/dark, @@ -9835,10 +8593,8 @@ /obj/effect/turf_decal/bot, /obj/machinery/holopad, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "bJd" = ( @@ -9871,15 +8627,11 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "bJC" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Cargo Bay - Starboard Upper"; name = "cargo camera" @@ -9890,12 +8642,6 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"bJE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "bJF" = ( /obj/effect/turf_decal/stripes, /obj/structure/table/reinforced, @@ -9932,7 +8678,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "bJT" = ( -/obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) @@ -9950,12 +8695,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "bKa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, @@ -10018,12 +8759,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "bKr" = ( @@ -10034,7 +8771,7 @@ /obj/effect/turf_decal/box/white{ color = "#EFB341" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "bKt" = ( /obj/structure/rack/shelf, @@ -10043,16 +8780,6 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "bKw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, @@ -10064,23 +8791,15 @@ req_access = list("ai_upload") }, /obj/effect/spawner/random/aimodule/harmless, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "bKy" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/common/laser_tag) "bKE" = ( @@ -10105,7 +8824,6 @@ /turf/open/floor/iron/dark, /area/station/science/auxlab/firing_range) "bKM" = ( -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/vg_decals/numbers/two, /obj/structure/closet/emcloset/wall{ pixel_y = -32 @@ -10222,8 +8940,8 @@ name = "Research Division Server Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/science/server) @@ -10270,7 +8988,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/central) "bLW" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/table, /obj/machinery/microwave/engineering/cell_included{ pixel_y = 8 @@ -10278,7 +8995,7 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "bLY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 }, @@ -10306,16 +9023,6 @@ dir = 4 }, /area/station/command/gateway) -"bMk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bMn" = ( /obj/structure/rack, /obj/item/circuitboard/mecha/ripley/main, @@ -10350,8 +9057,8 @@ /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "bMr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "bMt" = ( @@ -10362,24 +9069,9 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"bMw" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "bMx" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "bMB" = ( @@ -10391,12 +9083,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/supply/vault, /turf/open/floor/iron/dark, @@ -10439,8 +9127,8 @@ /area/station/command/heads_quarters/nt_rep) "bNm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "bNr" = ( @@ -10461,9 +9149,6 @@ /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) "bNL" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/aicard, /obj/machinery/firealarm/directional/west, @@ -10475,19 +9160,14 @@ dir = 8; name = "Bailiff" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) "bNO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/stripes/end, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) @@ -10530,12 +9210,6 @@ dir = 4 }, /area/station/common/locker_room_shower) -"bOm" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/station/cargo/storage) "bOu" = ( /obj/structure/railing{ dir = 4 @@ -10573,14 +9247,12 @@ /obj/structure/railing/corner{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "bOK" = ( /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "bOO" = ( @@ -10588,9 +9260,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/power_station) "bOR" = ( @@ -10615,14 +9285,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) -"bOV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "bOX" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -10637,8 +9299,8 @@ name = "Locker Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) "bOZ" = ( @@ -10676,12 +9338,8 @@ /area/station/engineering/supermatter/room) "bPi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; name = "Library Junction"; @@ -10706,9 +9364,7 @@ /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "bPt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/gateway) "bPz" = ( @@ -10726,8 +9382,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -10746,12 +9402,8 @@ /area/station/service/chapel/office) "bPN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/old{ dir = 4 }, @@ -10777,7 +9429,7 @@ "bPS" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "bPZ" = ( @@ -10828,12 +9480,8 @@ pixel_x = -16; pixel_y = 28 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -10876,12 +9524,8 @@ /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, /obj/item/folder, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel/office) "bQU" = ( @@ -10896,45 +9540,13 @@ /obj/item/disk/tech_disk{ pixel_y = 6 }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /turf/open/floor/iron/white, /area/station/science/lab) -"bQW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "bQX" = ( /obj/machinery/conveyor/inverted{ dir = 9; id = "cargoload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "bRe" = ( @@ -10965,9 +9577,7 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/locker_room_shower) "bRu" = ( @@ -11010,8 +9620,8 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11038,27 +9648,14 @@ /turf/open/floor/iron/white, /area/station/science/cytology) "bSa" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/spawner/random/aimodule/harmful, /obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "bSd" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "bSf" = ( @@ -11087,20 +9684,9 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "bSz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"bSA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) "bSB" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -11115,12 +9701,8 @@ name = "Representative's Quarters" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11171,12 +9753,8 @@ /turf/open/floor/iron/dark, /area/station/engineering/break_room) "bTk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel{ dir = 1 }, @@ -11216,35 +9794,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "bTy" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/warden) "bTz" = ( /obj/effect/turf_decal/trimline/purple/filled/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) -"bTA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "bTE" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -11304,8 +9863,8 @@ /area/station/command/heads_quarters/captain) "bTP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -11322,12 +9881,8 @@ req_access = list("command") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "bUc" = ( @@ -11368,12 +9923,8 @@ /area/station/maintenance/department/chapel) "bUn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -11384,12 +9935,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "bUp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/machinery/recharger{ pixel_x = -5; @@ -11416,9 +9961,6 @@ /area/station/maintenance/fore/upper) "bUB" = ( /obj/machinery/power/turbine/inlet_compressor, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "bUD" = ( @@ -11426,12 +9968,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "bUG" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/item/radio/intercom/directional/north, /obj/machinery/door/window/brigdoor/right{ @@ -11444,9 +9980,6 @@ /obj/structure/window/spawner/directional/south, /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -11478,7 +10011,7 @@ /obj/machinery/door/airlock{ name = "Drinks Shop" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "bVj" = ( @@ -11501,16 +10034,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/bar/atrium) -"bVw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "bVy" = ( /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, @@ -11541,12 +10064,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "bVK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -11561,7 +10080,7 @@ "bVN" = ( /obj/structure/table/glass, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/hairbrush, /obj/item/radio/intercom/directional/west, /turf/open/floor/carpet/black, @@ -11584,12 +10103,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction, /turf/open/floor/wood, /area/station/command/captain_dining) @@ -11621,15 +10136,12 @@ /area/station/service/lawoffice) "bWu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "bWy" = ( /obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -11687,19 +10199,12 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "bWZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/electric_shock/directional/north, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, @@ -11728,23 +10233,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "bXA" = ( /obj/effect/turf_decal/vg_decals/numbers/three, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "bXG" = ( @@ -11799,8 +10297,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "bYc" = ( @@ -11810,7 +10308,6 @@ }, /area/station/science/xenobiology) "bYj" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/door/firedoor/border_only, /obj/structure/chair/stool/directional/north{ pixel_y = 11 @@ -11845,19 +10342,15 @@ "bYp" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "bYs" = ( /obj/structure/cable, /obj/item/electronics/airlock, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "bYx" = ( @@ -11876,10 +10369,7 @@ /area/station/maintenance/port/aft) "bYD" = ( /obj/structure/transit_tube/crossing/horizontal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "bYG" = ( /turf/closed/wall, @@ -11936,9 +10426,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "bZp" = ( @@ -11956,14 +10444,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"bZv" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "bZC" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -11980,9 +10460,7 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/sink/directional/west, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) "bZG" = ( @@ -12010,12 +10488,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "bZN" = ( @@ -12042,8 +10516,8 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/wood/parquet, @@ -12053,9 +10527,7 @@ /area/station/command/secure_bunker) "caw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron/dark, /area/station/science/server) @@ -12071,8 +10543,8 @@ "caB" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -12105,9 +10577,6 @@ /area/station/maintenance/department/security/greater) "cbc" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/disposal/delivery_chute{ dir = 4 }, @@ -12120,6 +10589,9 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "cbl" = ( @@ -12136,24 +10608,10 @@ dir = 6; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"cbq" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "cbs" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/bot, @@ -12181,12 +10639,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "cby" = ( @@ -12196,8 +10650,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Upper Science Department" }, @@ -12207,8 +10661,8 @@ "cbB" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -12231,14 +10685,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "cbG" = ( -/obj/effect/turf_decal/tile/green{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ dir = 8 }, @@ -12249,12 +10699,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) -"cbU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/service/chapel) "cbZ" = ( /turf/open/floor/iron, /area/station/commons/locker) @@ -12262,19 +10706,10 @@ /obj/effect/turf_decal/delivery, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) -"ccc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "ccj" = ( /obj/effect/decal/cleanable/blood/gibs/down, /turf/open/floor/material/meat, @@ -12327,17 +10762,16 @@ /obj/effect/turf_decal/trimline/white/line{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "ccK" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "ccL" = ( @@ -12349,19 +10783,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) -"ccM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "ccV" = ( /obj/effect/turf_decal/siding/wood, /obj/item/radio/intercom/directional/north{ @@ -12415,12 +10836,6 @@ "cdu" = ( /obj/structure/drain, /obj/machinery/shower/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 8 - }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/test_chambers) "cdz" = ( @@ -12457,12 +10872,8 @@ "cdM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -12474,18 +10885,14 @@ /turf/open/floor/iron/dark, /area/station/science/auxlab/firing_range) "cdU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 9 }, /area/station/security/prison) "cdY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) @@ -12511,7 +10918,6 @@ /turf/open/floor/plating, /area/station/engineering/main) "cef" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ id = "evashutters2"; name = "E.V.A. Storage Shutters" @@ -12537,22 +10943,12 @@ /turf/open/floor/wood, /area/station/security/courtroom) "cek" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, /area/station/engineering/gravity_generator) -"ces" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "cev" = ( /obj/structure/chair/sofa/bench/left{ dir = 4; @@ -12589,10 +10985,9 @@ /turf/open/floor/engine, /area/station/science/ordnance) "ceT" = ( -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/office) "ceU" = ( @@ -12665,12 +11060,8 @@ name = "Diner" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12703,9 +11094,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) @@ -12728,17 +11117,13 @@ }, /obj/effect/turf_decal/bot_white, /obj/machinery/status_display/evac/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "cgE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -12781,8 +11166,8 @@ name = "Chapel Morgue" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/crematorium, /turf/open/floor/iron, /area/station/service/chapel) @@ -12797,8 +11182,8 @@ /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -12847,12 +11232,8 @@ /obj/item/stack/rods/fifty, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "chB" = ( @@ -12864,21 +11245,11 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "chC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing{ dir = 1 }, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "chF" = ( /obj/effect/decal/cleanable/dirt{ @@ -12900,10 +11271,8 @@ /turf/open/floor/plating, /area/station/service/bar/atrium) "chO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) "chR" = ( @@ -12929,8 +11298,8 @@ name = "Cell 5"; pixel_x = 32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) "chU" = ( @@ -12942,20 +11311,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"chZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "cib" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction, /obj/machinery/duct, @@ -12964,20 +11322,19 @@ "cie" = ( /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/light/directional/east, /obj/machinery/vending/barbervend, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "cig" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -13004,17 +11361,9 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"ciu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "ciB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "ciE" = ( @@ -13042,9 +11391,7 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "ciQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "ciR" = ( @@ -13055,7 +11402,7 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "ciS" = ( @@ -13079,17 +11426,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/station/common/night_club/changing_room) +/area/station/hallway/primary/central/aft) "cjk" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -13131,12 +11474,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/medical/morgue, /turf/open/floor/iron/dark/side{ dir = 8 @@ -13147,9 +11486,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "ckd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -13161,15 +11498,6 @@ dir = 4 }, /area/station/common/wrestling/arena) -"ckr" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "ckt" = ( /obj/machinery/camera/directional/west{ c_tag = "Crew Area - Pool Port"; @@ -13186,22 +11514,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "ckv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel) "cky" = ( @@ -13209,23 +11529,20 @@ /obj/machinery/door/airlock{ name = "Wrestling Ring Entrance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/common/wrestling/lobby) "ckz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/bridge) "ckC" = ( @@ -13235,17 +11552,13 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "ckH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -13267,9 +11580,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ckT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "ckV" = ( @@ -13299,16 +11610,13 @@ }, /area/station/hallway/secondary/entry) "ckZ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/structure/sign/departments/medbay/alt/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "clb" = ( @@ -13318,22 +11626,7 @@ initial_gas_mix = "TEMP=2.7" }, /area/space/nearstation) -"clg" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "clj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, @@ -13347,7 +11640,7 @@ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "clo" = ( /obj/structure/table, @@ -13362,9 +11655,7 @@ /area/station/maintenance/department/security/prison_upper) "clx" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "cly" = ( @@ -13403,7 +11694,7 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office/private_investigators_office) "clO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "clP" = ( @@ -13454,18 +11745,6 @@ "cmo" = ( /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"cmu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "cmv" = ( /obj/machinery/light/small/directional/south, /obj/machinery/duct, @@ -13501,9 +11780,7 @@ /area/station/engineering/supermatter/room) "cmG" = ( /obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "cmI" = ( /obj/effect/turf_decal/siding/wood{ @@ -13553,16 +11830,16 @@ name = "Security Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/security/hos, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/security/power_station) "cnk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -13608,15 +11885,10 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/machinery/digital_clock/directional/south, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/machinery/digital_clock/directional/south, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "cnR" = ( @@ -13646,8 +11918,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/central) "cnV" = ( @@ -13670,13 +11942,6 @@ name = "Padded tile" }, /area/station/medical/aslyum) -"coa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs/auxiliary) "cob" = ( /obj/structure/ore_box, /obj/effect/decal/cleanable/dirt{ @@ -13689,12 +11954,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "col" = ( @@ -13702,12 +11963,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -13716,19 +11973,15 @@ /area/station/maintenance/clown_chamber) "coo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "cop" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -13766,23 +12019,16 @@ "coz" = ( /obj/structure/window/spawner/directional/south, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "coD" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "coP" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/machinery/light/directional/west, /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13795,10 +12041,6 @@ }, /area/station/cargo/miningdock) "coR" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -13830,15 +12072,12 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/central) "cpf" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/gloves/color/yellow, /obj/item/storage/toolbox/electrical, @@ -13872,8 +12111,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/structure/cable, /turf/open/floor/iron, @@ -13896,9 +12135,7 @@ /area/station/security/prison) "cpE" = ( /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cpM" = ( /obj/machinery/door/airlock/medical/glass{ @@ -13909,12 +12146,8 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -13927,7 +12160,6 @@ /turf/open/floor/wood, /area/station/service/theater) "cpY" = ( -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/weldingtool, /obj/item/clothing/head/utility/welding, @@ -13960,12 +12192,6 @@ /obj/structure/aquarium/prefilled, /turf/open/floor/iron/dark, /area/station/command/meeting_room/council) -"cqj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/service/library) "cqk" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, /turf/closed/wall/r_wall, @@ -13988,12 +12214,8 @@ /area/station/hallway/primary/port) "cqy" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14008,16 +12230,11 @@ /area/space/nearstation) "cqG" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "cqK" = ( @@ -14027,24 +12244,13 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"cqO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/work) "cqP" = ( /obj/effect/turf_decal/siding/purple, /obj/effect/turf_decal/siding/purple{ @@ -14071,23 +12277,10 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "cry" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "crI" = ( /obj/structure/flora/rock, @@ -14114,7 +12307,6 @@ /area/station/maintenance/department/crew_quarters/dorms) "crR" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/techstorage/ai_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) @@ -14133,14 +12325,12 @@ }, /area/station/commons/fitness/recreation) "crY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "cse" = ( /obj/item/kirbyplants/random, @@ -14215,12 +12405,8 @@ /turf/open/floor/plating, /area/station/security/range) "csC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 4 }, @@ -14252,21 +12438,14 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) "csS" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -14280,18 +12459,14 @@ /area/space/nearstation) "csY" = ( /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "ctc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "ctd" = ( @@ -14305,8 +12480,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -14314,8 +12489,8 @@ /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14323,10 +12498,8 @@ /area/station/medical/medbay/lobby) "ctk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/medical/aslyum) @@ -14341,17 +12514,7 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "ctz" = ( @@ -14359,10 +12522,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "ctA" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14429,16 +12588,6 @@ /area/station/security/prison/mess) "ctK" = ( /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/newscaster/directional/north, /obj/machinery/status_display/ai/directional/west, /obj/structure/extinguisher_cabinet/directional/north, @@ -14534,19 +12683,14 @@ /area/station/engineering/atmos/office) "cug" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/chair/wood{ dir = 8 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/cafeteria) "cuh" = ( @@ -14571,22 +12715,12 @@ dir = 1 }, /area/station/command/heads_quarters/ce) -"cup" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/starboard/fore) "cuq" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "cuz" = ( @@ -14606,21 +12740,20 @@ /area/station/engineering/supermatter/room) "cuE" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/trinary/filter{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "cuH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "cuL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance_hatch{ name = "Medbay Maintenance" }, @@ -14681,8 +12814,8 @@ /area/station/medical/medbay/central) "cvh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -14719,9 +12852,6 @@ name = "hallway camera" }, /obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -14803,12 +12933,8 @@ name = "Workshop" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 @@ -14897,12 +13023,8 @@ name = "Permabrig Visitation" }, /obj/effect/turf_decal/delivery/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/side{ @@ -14911,28 +13033,14 @@ /area/station/security/prison/visit) "cwQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "cwS" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -14954,19 +13062,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cxe" = ( -/obj/machinery/door/airlock/security{ - name = "Court Cell" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "cxr" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgedoors"; @@ -15028,12 +13123,8 @@ /area/station/security/range) "cyc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /turf/open/floor/iron/stairs/right{ dir = 8 @@ -15133,7 +13224,6 @@ pixel_x = -32; req_access = list("atmospherics") }, -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/storage/toolbox/mechanical, /obj/item/flashlight, @@ -15156,7 +13246,6 @@ name = "Free Acces Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery/white, /obj/machinery/door/airlock/multi_tile/glass{ dir = 1; name = "Arrivals" @@ -15167,8 +13256,8 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "cyX" = ( @@ -15207,12 +13296,8 @@ /area/space/nearstation) "czk" = ( /obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner{ dir = 1 }, @@ -15231,12 +13316,8 @@ /area/station/maintenance/department/medical/central) "czq" = ( /obj/effect/landmark/start/mime, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater) "czt" = ( @@ -15259,20 +13340,14 @@ id_tag = "Toilet2"; name = "Stall 2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "czF" = ( /obj/structure/trash_pile, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "czG" = ( @@ -15284,27 +13359,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"czJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "czQ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -15316,7 +13370,6 @@ dir = 1; name = "atmospherics camera" }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "czZ" = ( @@ -15337,12 +13390,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "cAc" = ( @@ -15375,12 +13424,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "cAp" = ( @@ -15421,9 +13466,7 @@ /area/station/command/heads_quarters/captain/private) "cAL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -15440,10 +13483,7 @@ /area/station/engineering/atmos/office) "cAY" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "cBb" = ( @@ -15456,9 +13496,7 @@ "cBh" = ( /obj/machinery/light/floor, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "cBn" = ( @@ -15491,8 +13529,8 @@ pixel_y = -3 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/fourcorners, /obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/white, /area/station/medical/virology) "cBq" = ( @@ -15532,24 +13570,6 @@ /obj/effect/spawner/random/armory/rubbershot, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"cBF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"cBH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "cBY" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -15574,18 +13594,6 @@ /obj/structure/flora/ocean/coral, /turf/open/water/overlay, /area/station/hallway/primary/central) -"cCr" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/security/detectives_office/private_investigators_office) "cCx" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/bot, @@ -15594,7 +13602,6 @@ /area/station/maintenance/gag_room) "cCE" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /obj/machinery/light/directional/west, /obj/structure/disposalpipe/segment, @@ -15624,16 +13631,6 @@ dir = 1 }, /area/station/security/prison/shower) -"cCP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cCT" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -15642,8 +13639,8 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "cCY" = ( @@ -15664,13 +13661,6 @@ /obj/structure/drain, /turf/open/floor/iron/checker, /area/station/science/xenobiology/hallway) -"cDb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "cDe" = ( /obj/effect/spawner/random/structure/crate, /obj/structure/railing{ @@ -15732,17 +13722,10 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/bridge) "cDu" = ( @@ -15787,12 +13770,8 @@ dir = 9; id = "Luggagebelt" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "cDN" = ( @@ -15819,14 +13798,10 @@ /obj/effect/turf_decal/bot, /obj/item/weldingtool, /obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "cDZ" = ( /obj/structure/railing, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "cEe" = ( @@ -15841,12 +13816,8 @@ /turf/open/space/basic, /area/space) "cEl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -15857,16 +13828,11 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "cEo" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -15880,8 +13846,8 @@ }, /area/station/security/office) "cEr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/stairs{ dir = 1 @@ -15905,17 +13871,9 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "cEu" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -15931,9 +13889,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "cEz" = ( @@ -15979,10 +13935,6 @@ /area/station/maintenance/department/eva) "cEW" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/directional/west, /turf/open/floor/plating, /area/station/cargo/storage) @@ -16046,27 +13998,18 @@ /turf/open/floor/iron/dark, /area/station/common/laser_tag) "cFp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "cFq" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "cFu" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/table, /obj/item/storage/fancy/donut_box, /turf/open/floor/iron/dark, @@ -16085,9 +14028,7 @@ /turf/open/floor/wood, /area/station/medical/psychology) "cFI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -16140,16 +14081,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"cGi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "cGl" = ( /obj/structure/railing/corner{ dir = 4 @@ -16218,8 +14149,8 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "cGH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "cGK" = ( @@ -16299,9 +14230,7 @@ dir = 1 }, /obj/effect/landmark/start/station_engineer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -16332,12 +14261,6 @@ /turf/open/floor/carpet, /area/station/service/electronic_marketing_den) "cHn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Leisure Hallway - Upper aft"; name = "hallway camera" @@ -16438,8 +14361,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "cIc" = ( @@ -16453,14 +14376,9 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "cIf" = ( -/obj/effect/turf_decal/tile/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -16493,9 +14411,7 @@ /area/station/engineering/atmos/hfr_room) "cIn" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/medical/psychology) "cIq" = ( @@ -16513,22 +14429,6 @@ }, /turf/open/floor/plating, /area/station/science/genetics) -"cIu" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cIB" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/effect/turf_decal/bot, @@ -16573,7 +14473,7 @@ /obj/item/storage/box/ids{ pixel_y = 6 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/siding/thinplating_new{ dir = 5 }, @@ -16602,8 +14502,8 @@ /area/station/medical/exam_room) "cJg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) @@ -16639,8 +14539,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -16663,19 +14563,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "cJH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron, @@ -16683,18 +14577,14 @@ "cJI" = ( /obj/structure/cable, /obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/office) "cJU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "cKb" = ( @@ -16706,8 +14596,8 @@ }, /obj/machinery/newscaster/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -16766,9 +14656,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "cKI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/airlock/external{ name = "Solar Maintenance" }, @@ -16781,8 +14668,8 @@ /area/station/maintenance/solars/starboard/fore) "cKJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "cKR" = ( @@ -16795,9 +14682,7 @@ /area/station/medical/break_room) "cKU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/science/explab) @@ -16829,27 +14714,14 @@ /obj/effect/turf_decal/vg_decals/atmos/nitrogen{ dir = 1 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/n2, /area/station/engineering/atmos) "cLp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) -"cLq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "cLt" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -16889,19 +14761,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cLO" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/port) "cLP" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) "cLR" = ( @@ -16916,9 +14780,7 @@ /area/station/security/prison/safe) "cMb" = ( /obj/docking_port/stationary/escape_pod, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cMd" = ( /obj/effect/turf_decal/tile/red/half, @@ -16939,7 +14801,6 @@ /obj/item/stack/medical/gauze{ pixel_x = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "cMm" = ( @@ -16976,27 +14837,19 @@ /obj/structure/chair/sofa/corp/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "cMt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "cMC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "cMF" = ( @@ -17008,12 +14861,8 @@ /obj/structure/lattice/catwalk, /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "cMK" = ( @@ -17025,12 +14874,8 @@ /area/station/medical/medbay/central) "cMM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "cMP" = ( @@ -17043,7 +14888,6 @@ /obj/item/crowbar/red, /obj/item/wrench, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -17051,9 +14895,7 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "cNj" = ( /obj/machinery/power/shuttle_engine/heater{ @@ -17074,16 +14916,9 @@ /turf/open/floor/wood, /area/station/service/chapel/office) "cNB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/junction{ dir = 2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -17097,16 +14932,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "cNO" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/modular_computer/preset/civilian{ dir = 1 }, @@ -17118,13 +14943,7 @@ /area/station/science/research) "cNU" = ( /obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -17135,12 +14954,8 @@ /area/station/hallway/primary/central) "cNZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 4 @@ -17183,12 +14998,8 @@ "cOm" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "cOq" = ( @@ -17249,12 +15060,9 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/interrogation) "cOS" = ( @@ -17273,19 +15081,6 @@ /obj/structure/chair/wood{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -17306,21 +15101,15 @@ /area/station/maintenance/eva_shed/starboard) "cPf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) "cPg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/test_chambers) "cPk" = ( @@ -17330,15 +15119,6 @@ /turf/closed/wall/rust, /area/station/maintenance/abandon_art_studio) "cPw" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -17377,45 +15157,23 @@ "cPH" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/research/abandoned) "cPK" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"cPV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "cPW" = ( /obj/machinery/computer/operating{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/surgery/theatre) "cPX" = ( @@ -17427,12 +15185,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -17457,9 +15211,7 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "cQp" = ( @@ -17469,29 +15221,12 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) -"cQz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/xenobiology) "cQH" = ( /obj/structure/railing/corner/end, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"cQI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "cQY" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -17567,12 +15302,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "cRy" = ( @@ -17596,12 +15327,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -17671,10 +15398,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "cSd" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -17683,6 +15406,7 @@ /obj/structure/chair/sofa/corp/right{ dir = 1 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "cSf" = ( @@ -17708,15 +15432,9 @@ /area/station/command/heads_quarters/blueshield) "cSI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "cSK" = ( /obj/structure/trash_pile, @@ -17725,8 +15443,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "cSO" = ( @@ -17751,17 +15469,7 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"cSV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "cSX" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/chair/sofa/bench/left{ dir = 8; pixel_x = 5 @@ -17769,6 +15477,9 @@ /obj/structure/cable, /obj/effect/landmark/start/assistant, /obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "cTa" = ( @@ -17803,12 +15514,8 @@ /obj/structure/railing/corner/end/flip{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -17835,13 +15542,11 @@ /turf/open/floor/iron/white, /area/station/medical/pharmacy) "cTG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "cTO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "cTR" = ( @@ -17894,25 +15599,13 @@ /obj/item/clothing/accessory/badge/holo/warden{ pixel_x = 13 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/warden) "cUA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "cUE" = ( @@ -17923,19 +15616,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "cUJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/railing/corner/end/flip{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -17950,9 +15637,6 @@ uses = 10 }, /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -17977,36 +15661,20 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "cVe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/secondary/command) -"cVh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "cVn" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/plating, @@ -18016,9 +15684,7 @@ /area/station/security/brig) "cVw" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "cVx" = ( @@ -18078,12 +15744,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "cVV" = ( @@ -18109,10 +15771,8 @@ "cWd" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint) "cWg" = ( @@ -18121,12 +15781,6 @@ /area/station/science/xenobiology) "cWh" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -18145,22 +15799,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/carpet/blue, /area/station/commons/dorms/room3) -"cWq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "cWr" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -18208,8 +15846,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "cWP" = ( @@ -18250,10 +15888,7 @@ /area/space/nearstation) "cXo" = ( /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "cXy" = ( /obj/structure/closet/secure_closet/personal, @@ -18275,24 +15910,14 @@ /area/station/maintenance/department/medical) "cXM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/plating, /area/station/maintenance/port/upper) "cXR" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/table, /obj/item/paper/pamphlet/radstorm{ pixel_x = -6; @@ -18325,9 +15950,7 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) "cYg" = ( @@ -18357,33 +15980,18 @@ "cYn" = ( /turf/closed/wall, /area/station/hallway/primary/central) -"cYt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "cYv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, /turf/open/floor/iron, /area/station/hallway/secondary/command) "cYF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18397,12 +16005,8 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/north, /turf/open/openspace, /area/station/maintenance/aft/upper) @@ -18456,20 +16060,14 @@ /area/station/medical/surgery/theatre) "cZa" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/power/energy_accumulator/tesla_coil, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/engineering/storage) "cZh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "cZl" = ( @@ -18478,18 +16076,12 @@ /area/station/hallway/primary/central) "cZm" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "cZo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/landmark/start/scientist, /turf/open/floor/iron, @@ -18508,17 +16100,13 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "cZC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "cZE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "cZH" = ( @@ -18538,21 +16126,20 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "cZS" = ( /obj/effect/turf_decal/siding/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) +"cZT" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "cZU" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, @@ -18597,12 +16184,8 @@ /area/station/command/teleporter) "daw" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "daC" = ( @@ -18655,7 +16238,7 @@ /area/station/security/prison/safe) "dbj" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) "dbo" = ( @@ -18692,18 +16275,11 @@ /obj/structure/disposalpipe/junction/yjunction{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) "dbE" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, @@ -18711,12 +16287,8 @@ /area/station/engineering/atmos/test_chambers) "dbM" = ( /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "dbQ" = ( @@ -18724,21 +16296,15 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "dbR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "dbX" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -18788,12 +16354,6 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "dcr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/defibrillator_mount/directional/east, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) @@ -18805,18 +16365,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) -"dcA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dcJ" = ( /obj/structure/window/spawner/directional/north, /obj/structure/closet/athletic_mixed, @@ -18828,19 +16376,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"dcM" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dcR" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/cigpack_robustgold{ @@ -18870,8 +16405,8 @@ "dda" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -18944,12 +16479,8 @@ /obj/effect/turf_decal/stripes/end{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "dec" = ( @@ -18996,37 +16527,21 @@ /area/station/security/execution/education) "det" = ( /obj/machinery/porta_turret/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, /obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "deu" = ( /obj/structure/closet/crate, -/obj/effect/turf_decal/bot, /obj/item/crowbar/red, /obj/item/stack/sheet/mineral/plasma{ amount = 20 }, /obj/item/gps/engineering, /obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -19071,22 +16586,15 @@ /turf/open/floor/circuit, /area/station/tcommsat/computer) "deT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) "deY" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/item/folder/blue, /obj/item/hand_labeler, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "dfb" = ( @@ -19116,12 +16624,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "dfB" = ( @@ -19146,8 +16650,8 @@ /area/station/science/xenobiology) "dfG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "dfK" = ( @@ -19174,9 +16678,7 @@ /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/medical/virology) "dfV" = ( /obj/item/kirbyplants/random, @@ -19234,14 +16736,11 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "dgv" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/table, @@ -19249,6 +16748,7 @@ dir = 4; pixel_y = 0 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "dgw" = ( @@ -19270,13 +16770,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) "dgM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -19286,19 +16779,10 @@ /area/station/hallway/primary/port) "dgN" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/item/wrench, /obj/item/crowbar/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "dgO" = ( @@ -19374,11 +16858,6 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"dhz" = ( -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dhI" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -19388,12 +16867,6 @@ /area/station/command/heads_quarters/cmo) "dhK" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 4 @@ -19414,8 +16887,8 @@ /turf/open/floor/wood, /area/station/service/hydroponics/garden) "dhS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) "dhT" = ( @@ -19437,19 +16910,13 @@ /obj/machinery/shower/directional/west{ name = "emergency shower" }, -/obj/effect/turf_decal/bot, /obj/structure/drain, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 8 - }, /obj/machinery/camera/directional/south{ c_tag = "Engineering - Engine Foyer"; dir = 1; name = "engineering camera" }, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/main) "dhZ" = ( @@ -19458,12 +16925,8 @@ }, /obj/item/melee/baton/security/cattleprod, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -19480,12 +16943,8 @@ /obj/machinery/door/airlock/virology{ name = "Virology Cabin" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -19520,8 +16979,8 @@ "dip" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/command) @@ -19565,12 +17024,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "diO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall17"; @@ -19587,9 +17042,7 @@ }, /area/station/hallway/primary/central) "djm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room8) @@ -19623,23 +17076,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) "djy" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/mess) "djC" = ( @@ -19686,9 +17132,7 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "djW" = ( @@ -19714,18 +17158,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dko" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dkt" = ( /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) @@ -19786,20 +17218,11 @@ /area/station/service/library) "dkT" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"dkW" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "dkX" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -19872,9 +17295,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "dlA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/crematorium{ id = "crematoriumChapel"; pixel_y = 26; @@ -19889,13 +17310,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) -"dlH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dlN" = ( /obj/effect/turf_decal/tile/red, /obj/machinery/camera/directional/south{ @@ -19915,22 +17329,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"dlX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) "dlY" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "dma" = ( @@ -19940,8 +17345,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "dmc" = ( @@ -19949,22 +17354,11 @@ /obj/machinery/computer/security, /turf/open/floor/iron/dark, /area/station/command/bridge) -"dmf" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/break_room) "dmt" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/newscaster/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -19991,8 +17385,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/central) "dmD" = ( @@ -20025,13 +17419,12 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) "dmO" = ( -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/corner{ dir = 8 }, @@ -20069,10 +17462,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "dnj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -20085,8 +17474,8 @@ /area/station/science/research) "dnu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/freezer{ name = "Freezer" }, @@ -20112,12 +17501,8 @@ /area/station/security/prison) "dnF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20133,21 +17518,12 @@ }, /area/station/service/chapel) "dnK" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "dnN" = ( @@ -20155,12 +17531,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "dnO" = ( @@ -20191,12 +17563,8 @@ /obj/machinery/door/airlock{ name = "Information Kiosk" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "dom" = ( @@ -20204,12 +17572,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "dos" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -20228,40 +17592,26 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "doF" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "doG" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "doH" = ( /obj/machinery/light/small/broken/directional/east, @@ -20276,18 +17626,12 @@ /obj/machinery/door/firedoor/heavy, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/research{ name = "Bomb Assembly" }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "dpg" = ( /obj/machinery/light/small/broken/directional/north, @@ -20316,15 +17660,8 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/command/gateway) -"dpG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "dpO" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -20337,12 +17674,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "dpT" = ( @@ -20351,8 +17684,8 @@ /area/station/tcommsat/computer) "dqd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -20385,14 +17718,11 @@ }, /obj/item/stack/package_wrap, /obj/item/hand_labeler, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/directional/west, /obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "dqD" = ( @@ -20575,8 +17905,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "dsr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) "dss" = ( @@ -20594,12 +17924,6 @@ /turf/open/floor/iron, /area/station/command/gateway) "dsA" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -20626,12 +17950,8 @@ "dsM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "dsQ" = ( @@ -20738,12 +18058,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock{ id_tag = "Dorm8"; name = "Cabin 8" @@ -20760,10 +18076,6 @@ /turf/closed/wall/rust, /area/station/maintenance/department/medical/central) "dtJ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -20772,12 +18084,8 @@ /area/station/security/prison/mess) "dtK" = ( /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock{ id_tag = "Dorm9"; name = "Cabin 9" @@ -20872,9 +18180,7 @@ /area/station/engineering/transit_tube) "duP" = ( /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "duU" = ( /obj/structure/table, @@ -20950,12 +18256,8 @@ /area/station/command/heads_quarters/hos) "dwi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) "dwk" = ( @@ -20976,8 +18278,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Fitness Courtyard" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/commons/fitness) @@ -21007,15 +18309,6 @@ /area/station/common/tailoring) "dwK" = ( /obj/structure/chair/sofa/bench/right, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -21037,12 +18330,8 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "dwO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -21060,7 +18349,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "dxa" = ( @@ -21073,15 +18362,9 @@ "dxk" = ( /obj/machinery/atmospherics/components/binary/valve/digital, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/science/ordnance) "dxn" = ( /obj/machinery/light/small/directional/east, @@ -21099,8 +18382,8 @@ /area/station/hallway/secondary/command) "dxD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -21141,19 +18424,9 @@ dir = 4; name = "Ordnance Freezer Chamber Access" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance) -"dyb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/escapepodbay) +/area/station/science/ordnance) "dyh" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -21172,30 +18445,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/gateway) -"dyl" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dyt" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/storage/primary) "dyx" = ( @@ -21220,12 +18474,8 @@ dir = 1 }, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21235,10 +18485,8 @@ "dyF" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/customs) "dyI" = ( @@ -21264,8 +18512,8 @@ /turf/open/floor/iron/dark, /area/station/security/prison/safe) "dyO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_corner, /area/station/engineering/atmos/hfr_room) "dyP" = ( @@ -21275,31 +18523,22 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) +"dyS" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "dyT" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"dyW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/medical/cryo) "dzs" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -21416,7 +18655,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "dAo" = ( @@ -21431,8 +18670,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -21467,7 +18706,6 @@ "dAK" = ( /obj/machinery/iv_drip, /obj/machinery/defibrillator_mount/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/stasis{ dir = 4 }, @@ -21487,8 +18725,7 @@ /obj/machinery/computer/camera_advanced/base_construction/aux{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -21498,10 +18735,7 @@ dir = 1 }, /obj/structure/transit_tube/crossing/horizontal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "dBh" = ( /obj/effect/decal/cleanable/dirt{ @@ -21520,10 +18754,8 @@ /area/station/maintenance/department/security/prison_upper) "dBj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/server) "dBm" = ( @@ -21553,9 +18785,6 @@ /area/station/maintenance/department/crew_quarters/bar) "dBv" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 5 @@ -21571,12 +18800,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/surgery) "dBE" = ( @@ -21607,12 +18832,8 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "dBH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/laser_tag) @@ -21643,12 +18864,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "dBT" = ( @@ -21685,8 +18902,8 @@ /area/station/hallway/primary/aft) "dCe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -21695,12 +18912,8 @@ /turf/open/floor/engine/co2, /area/station/engineering/atmos) "dCp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/explab) @@ -21715,12 +18928,8 @@ "dCN" = ( /obj/machinery/firealarm/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -21738,10 +18947,7 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "dCV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "dDf" = ( @@ -21750,23 +18956,13 @@ }, /area/station/security/prison) "dDl" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/computer/security{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 5 }, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "dDr" = ( @@ -21805,8 +19001,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/cargo/office) @@ -21832,8 +19028,8 @@ /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "dEa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties/red, /area/station/common/arcade) "dEb" = ( @@ -21866,10 +19062,8 @@ "dEe" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -21884,8 +19078,8 @@ /area/station/science/circuits) "dEf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/upper) "dEi" = ( @@ -21899,8 +19093,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -21929,11 +19123,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) -"dEI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "dEJ" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/computer/security/hos, @@ -21949,17 +19138,15 @@ "dEU" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "dEY" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer4{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "dFf" = ( /obj/structure/chair/plastic{ @@ -21974,9 +19161,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "dFm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -22002,12 +19187,8 @@ /area/station/common/wrestling/locker) "dFt" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "dFy" = ( @@ -22198,7 +19379,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22210,23 +19391,15 @@ }, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "dHb" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "dHc" = ( @@ -22263,34 +19436,16 @@ /turf/open/floor/iron/freezer, /area/station/medical/aslyum) "dHC" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "dHN" = ( /obj/machinery/computer/prisoner/management{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Security Post - Arrivals"; dir = 10 @@ -22350,8 +19505,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/trash/waffles, /obj/machinery/duct, /turf/open/floor/plating, @@ -22365,12 +19520,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22430,8 +19581,8 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "dIR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/effect/landmark/blobstart, /turf/open/floor/wood, @@ -22526,12 +19677,8 @@ /area/station/maintenance/fore/upper) "dJx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "dJz" = ( @@ -22539,12 +19686,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "dJA" = ( @@ -22554,12 +19697,8 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22602,9 +19741,7 @@ c_tag = " Prison - Locker Room"; network = list("ss13","prison") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/shower) "dJW" = ( @@ -22668,7 +19805,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, @@ -22676,12 +19812,8 @@ /area/station/engineering/main) "dKz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/hydroponics/garden) "dKB" = ( @@ -22720,16 +19852,15 @@ /area/station/engineering/gravity_generator) "dKT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "dKZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -22746,12 +19877,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "dLk" = ( @@ -22806,12 +19933,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/wood{ dir = 8 }, @@ -22820,7 +19943,7 @@ /area/station/service/cafeteria) "dLI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -22828,9 +19951,7 @@ codes_txt = "patrol;next_patrol=hall12"; location = "hall11" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "dLK" = ( @@ -22848,12 +19969,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22902,15 +20019,11 @@ /area/station/service/library/abandoned) "dMw" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "dMx" = ( @@ -22920,23 +20033,15 @@ "dMM" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "dMN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "dMP" = ( /obj/machinery/door/airlock/multi_tile/glass{ @@ -22958,8 +20063,8 @@ /area/station/security/lockers) "dNd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) "dNe" = ( @@ -22972,16 +20077,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) -"dNf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "dNg" = ( /turf/open/floor/iron/smooth_edge{ dir = 4 @@ -22991,7 +20086,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -23036,9 +20131,7 @@ "dNK" = ( /obj/structure/sauna_oven, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/barber/spa) "dNQ" = ( @@ -23091,13 +20184,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"dOR" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) "dOT" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -23131,12 +20217,8 @@ /turf/open/floor/iron, /area/station/common/wrestling/locker) "dPN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "dPO" = ( @@ -23187,10 +20269,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "dQn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -23211,8 +20289,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -23244,9 +20322,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "dRf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/aslyum) "dRn" = ( @@ -23296,26 +20372,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"dRY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "dRZ" = ( /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/landmark/event_spawn, @@ -23364,24 +20420,13 @@ /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) "dSm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/command/bridge) -"dSo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/medical/aslyum) "dSq" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, @@ -23417,12 +20462,8 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "dSI" = ( @@ -23508,7 +20549,7 @@ /area/station/maintenance/department/crew_quarters/bar) "dTa" = ( /obj/structure/safe, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/storage/backpack/duffelbag/syndie/hitman, /obj/item/card/id/advanced/silver/reaper, /obj/item/lazarus_injector, @@ -23548,12 +20589,8 @@ /area/station/science/research) "dTk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -23564,12 +20601,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) @@ -23590,11 +20623,10 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "dTy" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Security Maintenance" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "dTz" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/light/directional/south, @@ -23616,9 +20648,8 @@ "dTH" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; @@ -23642,8 +20673,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -23668,7 +20699,6 @@ /turf/closed/wall/r_wall, /area/station/service/abandoned_gambling_den) "dTP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, /obj/structure/table, /obj/item/book/manual/wiki/barman_recipes{ @@ -23676,47 +20706,22 @@ pixel_y = 11 }, /obj/item/holosign_creator/robot_seat/bar, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) -"dTX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "dTY" = ( /obj/structure/railing{ pixel_y = -5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, /area/station/ai_monitored/aisat/exterior) -"dUd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "dUf" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -23755,12 +20760,8 @@ /area/station/service/bar/atrium) "dUu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) "dUv" = ( @@ -23792,10 +20793,8 @@ /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -23805,24 +20804,16 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "dUF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) "dUP" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "dUS" = ( @@ -23846,9 +20837,6 @@ /area/station/hallway/secondary/service) "dVc" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/camera/directional/west{ c_tag = "Engineering - Power Monitoring"; name = "engineering camera" @@ -23910,13 +20898,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/station/service/hydroponics) "dVP" = ( @@ -23936,16 +20917,6 @@ /obj/effect/spawner/random/trash/moisture, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"dWc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "dWe" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/flowers_pp, @@ -24031,9 +21002,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "dXb" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "dXl" = ( @@ -24057,12 +21025,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer1, /obj/structure/disposalpipe/segment{ dir = 4 @@ -24080,19 +21044,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/office) -"dXz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "dXE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -24106,12 +21057,8 @@ /turf/open/space/basic, /area/space/nearstation) "dXJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, @@ -24144,34 +21091,14 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"dXY" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "dXZ" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "dYe" = ( @@ -24189,10 +21116,8 @@ "dYj" = ( /obj/machinery/holopad, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/checker, /area/station/service/janitor) @@ -24213,12 +21138,8 @@ dir = 8 }, /obj/structure/trash_pile, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "dYL" = ( @@ -24268,12 +21189,8 @@ /area/space/nearstation) "dZo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -24298,10 +21215,8 @@ /turf/open/floor/iron/dark/side, /area/station/science/tele_sci) "dZy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/night_club) "dZA" = ( @@ -24314,14 +21229,11 @@ }, /area/station/ai_monitored/turret_protected/aisat_interior) "dZQ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/light/directional/east, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/commons/storage/primary) "dZR" = ( @@ -24379,9 +21291,6 @@ }, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, @@ -24408,9 +21317,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, /obj/structure/chair/office/light{ dir = 8 }, @@ -24479,30 +21385,16 @@ /area/station/engineering/storage/tcomms) "ebD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "ebF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "ebG" = ( @@ -24535,9 +21427,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "ecj" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /obj/structure/chair/stool/directional/east, /obj/effect/landmark/start/atmospheric_technician, @@ -24548,13 +21437,8 @@ dir = 4; pixel_x = -15 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"eco" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/brig) "ecF" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/status_display/ai/directional/south, @@ -24601,12 +21485,8 @@ name = "Cell 6"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/six, /turf/open/floor/iron/dark/side{ dir = 4 @@ -24625,8 +21505,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/chapel) "edQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/carpet/purple, /area/station/common/night_club) @@ -24639,12 +21519,8 @@ dir = 10 }, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "edY" = ( @@ -24689,16 +21565,6 @@ name = "Cargo Deliveries"; req_access = list("security") }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "eeD" = ( @@ -24707,9 +21573,6 @@ /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "eeE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4; initialize_directions = 8 @@ -24724,13 +21587,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"eeP" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/medical/cryo) "eeQ" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -24772,9 +21628,6 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "eeW" = ( @@ -24788,14 +21641,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage_shared) "eeY" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/tcomms_all, /turf/open/floor/iron/dark, @@ -24835,14 +21685,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"efp" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "efr" = ( /obj/effect/turf_decal/weather/sand{ dir = 10 @@ -24858,25 +21700,15 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "efz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "efD" = ( /obj/machinery/space_heater, @@ -24924,13 +21756,6 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/dorms/room8) -"efZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "egb" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -24940,7 +21765,7 @@ /area/station/hallway/primary/port) "egd" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "egg" = ( @@ -24955,10 +21780,8 @@ /area/station/command/heads_quarters/hop) "ego" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -24980,8 +21803,8 @@ /area/station/maintenance/department/science/central) "egB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/disposalpipe/segment{ dir = 6 @@ -24990,12 +21813,8 @@ /area/station/medical/virology) "egE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25084,9 +21903,7 @@ /area/station/command/heads_quarters/cmo) "ehp" = ( /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25102,8 +21919,8 @@ /area/station/security/prison/workout) "ehs" = ( /obj/effect/landmark/start/geneticist, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -25161,9 +21978,7 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "eid" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -25222,12 +22037,8 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "eiB" = ( @@ -25287,31 +22098,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"eiR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "eiW" = ( /obj/structure/railing, /turf/closed/wall, /area/station/bitrunning/den) "eiY" = ( /obj/structure/fence/door, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -25328,29 +22120,11 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "ejd" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/railing/corner/end, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "eje" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) @@ -25372,7 +22146,6 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/turf_decal/stripes/box, /obj/machinery/disposal/delivery_chute{ dir = 8 }, @@ -25385,8 +22158,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "ejG" = ( @@ -25429,19 +22202,14 @@ "ekl" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/security, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "ekr" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/engineering/tool, /obj/effect/spawner/random/engineering/tool, /turf/open/floor/iron/dark/side{ @@ -25452,10 +22220,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "ekE" = ( /obj/structure/closet, @@ -25465,18 +22230,12 @@ /area/station/maintenance/starboard/fore) "ekF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "ekG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -25491,12 +22250,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ekN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "ekQ" = ( /obj/structure/railing/corner/end, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -25515,9 +22268,6 @@ /turf/open/floor/grass, /area/station/medical/virology/isolation) "elg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -25591,9 +22341,6 @@ }, /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/meter, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -25609,9 +22356,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "elK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 1 }, @@ -25619,13 +22364,6 @@ dir = 1 }, /area/station/commons/dorms) -"elM" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/storage) "elN" = ( /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/mapping_helpers/burnt_floor, @@ -25633,8 +22371,8 @@ /area/station/maintenance/fore/upper) "elO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -25663,12 +22401,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25688,30 +22422,11 @@ /turf/open/floor/iron/dark, /area/station/science/power_station) "emk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"emq" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "emr" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -25721,27 +22436,16 @@ /turf/open/floor/iron/white, /area/station/science/research) "emt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 4 }, /obj/machinery/light/directional/west, /obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) -"emz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "emD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -25777,15 +22481,6 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/dark, /area/station/engineering/break_room) -"enj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "enl" = ( /obj/machinery/light/small/directional/east, /obj/machinery/portable_atmospherics/scrubber, @@ -25807,12 +22502,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) @@ -25822,14 +22513,12 @@ /turf/open/floor/iron/freezer, /area/station/common/locker_room_shower) "enO" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "eod" = ( /obj/structure/mirror/directional/north, @@ -25839,12 +22528,6 @@ /area/station/commons/toilet/auxiliary) "eof" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "eoj" = ( @@ -25884,25 +22567,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) -"eoK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eoO" = ( /obj/item/stack/sheet/iron{ amount = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/research/abandoned) "eoQ" = ( @@ -25915,12 +22588,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/upper) -"eoS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eoV" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -25948,10 +22615,6 @@ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; name = "SapMaster XP" }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -25959,15 +22622,9 @@ /area/station/service/hydroponics) "epc" = ( /obj/machinery/vending/boozeomat, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "epg" = ( @@ -25975,8 +22632,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25988,12 +22645,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "epz" = ( @@ -26024,12 +22677,8 @@ /area/station/maintenance/department/science/ordnance_maint) "epN" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -26106,12 +22755,8 @@ "eqr" = ( /obj/item/trash/syndi_cakes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -26122,8 +22767,8 @@ /area/station/medical/morgue) "eqw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -26186,9 +22831,7 @@ dir = 8 }, /obj/machinery/meter, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "erj" = ( /obj/effect/turf_decal/stripes{ @@ -26217,12 +22860,6 @@ /obj/structure/rack/shelf, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) -"erE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/dorms) "erU" = ( /obj/structure/chair/pew{ dir = 8 @@ -26241,32 +22878,26 @@ /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "esc" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aux_eva) "esd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "esg" = ( /obj/item/trash/waffles, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "esh" = ( /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/north, -/obj/effect/landmark/start/assistant, /obj/structure/chair/sofa/corp/corner{ color = "#DE3A3A"; dir = 4 @@ -26297,7 +22928,7 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, @@ -26312,10 +22943,7 @@ /area/station/cargo/power_station/upper) "esy" = ( /obj/effect/turf_decal/vg_decals/numbers/zero, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "esA" = ( /obj/machinery/iv_drip, @@ -26341,13 +22969,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"esH" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "esP" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -26374,12 +22995,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/aux_base, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -26397,12 +23014,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/disposal) "eth" = ( @@ -26473,12 +23086,6 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "etL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 4 @@ -26522,26 +23129,21 @@ /area/station/engineering/engine_smes) "etY" = ( /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "euj" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "eul" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -26562,11 +23164,11 @@ "eum" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/bar) "euq" = ( @@ -26610,9 +23212,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "euJ" = ( @@ -26631,9 +23231,6 @@ "euL" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/computer/security/telescreen/turbine{ dir = 8; pixel_x = 32 @@ -26648,17 +23245,15 @@ sortType = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "euQ" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "euS" = ( @@ -26713,9 +23308,7 @@ /turf/open/floor/iron/white, /area/station/science/robotics) "evd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -26724,21 +23317,20 @@ dir = 1 }, /obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "evi" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "evl" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/window{ dir = 4; name = "Deliveries"; @@ -26754,12 +23346,8 @@ /area/station/cargo/office) "evn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, @@ -26808,12 +23396,8 @@ /area/station/security/prison/visit) "evQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/blobstart, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) @@ -26824,26 +23408,13 @@ /area/station/maintenance/port/aft) "evT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron, /area/station/service/chapel) -"evX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/station/ai_monitored/turret_protected/aisat_interior) "ewa" = ( /turf/open/floor/wood, /area/station/medical/patients_rooms) @@ -26858,15 +23429,6 @@ dir = 1 }, /area/station/medical/aslyum) -"ewi" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/station/service/library/abandoned) "ewk" = ( /obj/structure/decorative/shelf/crates, /obj/machinery/light/directional/south, @@ -26880,9 +23442,6 @@ /area/station/security/medical) "ews" = ( /obj/effect/turf_decal/box, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/ore_box, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) @@ -26942,17 +23501,12 @@ /area/station/security/prison) "ewI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/cryo) "ewO" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "ewR" = ( @@ -26961,9 +23515,6 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) "ewU" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 9 }, @@ -26981,19 +23532,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "exc" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "exf" = ( @@ -27059,9 +23607,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "exN" = ( @@ -27078,18 +23624,13 @@ /area/station/service/barber) "eya" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/status_display/ai/directional/south, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "eyb" = ( @@ -27147,12 +23688,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "eyD" = ( @@ -27168,10 +23705,8 @@ pixel_x = -6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "eyF" = ( @@ -27191,10 +23726,9 @@ /area/station/maintenance/department/crew_quarters/dorms) "eyN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -27214,7 +23748,7 @@ /area/station/commons/dorms/room2) "ezm" = ( /obj/effect/turf_decal/siding/wood/corner, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -27250,12 +23784,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/cargo/miningdock) "ezC" = ( @@ -27288,10 +23816,7 @@ /obj/structure/transit_tube/diagonal{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "eAa" = ( /obj/machinery/door/firedoor/border_only, @@ -27307,12 +23832,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) @@ -27356,12 +23877,8 @@ "eAz" = ( /obj/machinery/duct, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/workout) "eAB" = ( @@ -27372,28 +23889,11 @@ /obj/structure/railing{ dir = 10 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"eAP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "eAQ" = ( /turf/closed/wall, /area/station/science/robotics/lab) @@ -27418,20 +23918,15 @@ /turf/open/floor/iron/white, /area/station/science/research) "eAU" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "eAV" = ( @@ -27474,24 +23969,16 @@ /area/station/maintenance/department/science/xenobiology) "eBo" = ( /obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "eBp" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "eBq" = ( @@ -27521,15 +24008,12 @@ /area/station/maintenance/department/science/central) "eBG" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Evidence Storage" }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "eBL" = ( @@ -27543,8 +24027,8 @@ /obj/machinery/door/airlock/asylum{ name = "Asylum Entrance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /obj/machinery/duct, /turf/open/floor/iron/white/side{ @@ -27558,12 +24042,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "eCb" = ( @@ -27601,9 +24081,7 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "eCq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -27638,18 +24116,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "eCK" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -27682,8 +24150,7 @@ /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -27706,12 +24173,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "N-O2 Stop Shop" }, @@ -27720,12 +24183,8 @@ }, /area/station/common/gaskiosk) "eDc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark/side, @@ -27735,10 +24194,6 @@ /turf/open/floor/iron/white, /area/station/medical/cryo) "eDl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, /obj/structure/disposalpipe/segment, @@ -27867,12 +24322,8 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "eEN" = ( @@ -27892,14 +24343,6 @@ }, /turf/open/floor/stone, /area/station/common/wrestling/arena) -"eES" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "eEX" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -27916,25 +24359,21 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/flowers_br, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/command/heads_quarters/hos) "eFf" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/noticeboard/directional/east, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "eFi" = ( /obj/structure/chair/sofa/bench/left{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -28009,20 +24448,8 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"eFM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "eFT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "eFU" = ( @@ -28070,38 +24497,21 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/plating, /area/station/engineering/atmos) -"eGm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 +"eGr" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/port/upper) -"eGt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "eGv" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28115,16 +24525,13 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "eGB" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -28156,21 +24563,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"eGN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "eGO" = ( /obj/structure/table, /obj/item/circuitboard/machine/thermomachine, @@ -28187,7 +24585,7 @@ /area/station/service/abandoned_gambling_den) "eGS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "eGW" = ( @@ -28221,17 +24619,11 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) -"eHg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "eHi" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "eHr" = ( @@ -28275,12 +24667,8 @@ name = "Chapel Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) @@ -28303,12 +24691,8 @@ /area/station/commons/dorms) "eHO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28348,16 +24732,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) -"eIy" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "eIA" = ( /obj/structure/chair/wood{ dir = 1 @@ -28375,16 +24749,9 @@ /turf/open/floor/iron/dark, /area/station/science/research) "eIM" = ( -/obj/effect/turf_decal/bot, /obj/item/clothing/glasses/hud/security/sunglasses/gars, /obj/item/clothing/glasses/hud/security, /obj/item/clothing/glasses/hud/security, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -28437,10 +24804,6 @@ dir = 5; id = "cargounload" }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "eJf" = ( @@ -28498,10 +24861,8 @@ /obj/structure/disposalpipe/junction/yjunction{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "eJF" = ( @@ -28527,12 +24888,8 @@ /obj/item/clothing/suit/hazardvest, /obj/item/clothing/head/utility/hardhat, /obj/item/clothing/head/utility/hardhat, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "eJW" = ( @@ -28551,8 +24908,8 @@ name = "Front Desk" }, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/night_club) @@ -28628,15 +24985,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"eKA" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "eKB" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/wood, @@ -28648,16 +24996,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"eKO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "eKU" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) @@ -28751,7 +25089,6 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/effect/landmark/start/assistant, /obj/item/radio/intercom/directional/east, /turf/open/floor/wood, /area/station/hallway/primary/central) @@ -28764,12 +25101,6 @@ }, /area/station/security/prison/workout) "eLF" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/table, /obj/item/book/manual/wiki/security_space_law{ pixel_y = 5 @@ -28879,8 +25210,8 @@ }, /area/station/commons/fitness/recreation) "eMC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/comfy/black{ dir = 8 }, @@ -28898,12 +25229,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "eMK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -28914,8 +25241,8 @@ name = "Art Storage" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/art) "eMP" = ( @@ -28941,43 +25268,32 @@ /obj/item/clothing/gloves/color/black, /obj/item/wrench, /obj/item/clothing/glasses/meson/engine, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "eNn" = ( /obj/effect/landmark/event_spawn, /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /mob/living/basic/pet/bumbles, /obj/structure/bed/dogbed, /turf/open/floor/iron, /area/station/service/hydroponics) "eNq" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "eNx" = ( /obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "eNy" = ( @@ -29011,16 +25327,6 @@ /turf/open/floor/wood/parquet, /area/station/service/theater) "eNV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -29034,7 +25340,7 @@ pixel_y = -3 }, /obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "eNX" = ( /obj/structure/flora/bush/fullgrass, @@ -29043,8 +25349,8 @@ /area/station/security/prison/garden) "eNZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -29071,9 +25377,6 @@ "eOe" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes{ dir = 10 }, @@ -29168,23 +25471,14 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "eOQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium, /area/station/science/research) "eOS" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "eOU" = ( /obj/effect/landmark/start/botanist, @@ -29196,7 +25490,6 @@ /area/station/service/hydroponics) "eOX" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/bot_blue, /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet, /area/station/command/gateway) @@ -29221,15 +25514,10 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "ePc" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 1 - }, /obj/structure/drain, /obj/machinery/shower/directional/north, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/atmos/hfr_room) "ePj" = ( @@ -29295,29 +25583,24 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "ePG" = ( /obj/effect/turf_decal/box/white, -/obj/effect/turf_decal/arrows/white{ - color = "#0000FF"; - pixel_y = 15 +/obj/effect/turf_decal/arrows/blue{ + pixel_y = 13 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "ePN" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison) "ePO" = ( @@ -29356,13 +25639,12 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "eQb" = ( @@ -29388,15 +25670,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"eQh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/science/research) "eQj" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -29423,9 +25696,7 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "eQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -29433,10 +25704,6 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "eQE" = ( @@ -29447,19 +25714,10 @@ /obj/item/bedsheet{ pixel_y = 8 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) "eQF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/airalarm/directional/east, /obj/effect/landmark/blobstart, /turf/open/floor/iron/white, @@ -29480,9 +25738,6 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -29509,21 +25764,9 @@ /turf/open/openspace, /area/station/hallway/primary/upper) "eRk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"eRl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "eRm" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -29536,12 +25779,8 @@ "eRo" = ( /obj/vehicle/ridden/wheelchair, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) @@ -29563,12 +25802,8 @@ "eRy" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, @@ -29581,26 +25816,14 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "eRE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"eRF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "eRN" = ( /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -29620,8 +25843,8 @@ }, /obj/item/trash/raisins, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -29646,17 +25869,12 @@ /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"eSj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 +"eSi" = ( +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/security/prison/upper) +/turf/open/floor/iron/dark, +/area/station/security/brig) "eSk" = ( /obj/machinery/conveyor{ id = "robo2" @@ -29713,15 +25931,6 @@ /obj/item/crowbar, /turf/open/floor/engine, /area/station/engineering/supermatter) -"eSV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "eSY" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -29779,7 +25988,6 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/upper) "eTG" = ( @@ -29787,21 +25995,11 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "eTH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "eTI" = ( /obj/structure/table, @@ -29820,29 +26018,21 @@ /area/station/security/execution/transfer) "eTS" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry3"; name = "Line Reroute Shutter" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "eTU" = ( -/obj/effect/turf_decal/stripes/box, /obj/structure/ladder, /turf/open/floor/plating, /area/station/engineering/main) @@ -29866,9 +26056,6 @@ /area/station/maintenance/department/medical/central) "eUf" = ( /obj/structure/railing/corner, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/light/directional/north, /obj/structure/disposalpipe/segment{ @@ -29972,9 +26159,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "eVc" = ( @@ -30014,7 +26199,7 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "eVv" = ( @@ -30036,22 +26221,9 @@ }, /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"eVz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "eVK" = ( /obj/structure/table, /obj/item/folder/blue{ @@ -30075,12 +26247,8 @@ /area/station/maintenance/solars/starboard/fore) "eVV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -30089,12 +26257,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "eWi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "eWl" = ( @@ -30104,9 +26268,9 @@ /turf/closed/wall/r_wall, /area/station/maintenance/department/engineering/engine_aft_starboard) "eWy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "eWz" = ( @@ -30130,13 +26294,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"eWB" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/office) "eWC" = ( /obj/structure/table/reinforced, /obj/machinery/microwave/engineering/cell_included{ @@ -30206,21 +26363,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/pumproom) -"eWS" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/science/breakroom) "eWU" = ( /obj/structure/bookcase/random, /turf/open/floor/wood, @@ -30251,9 +26393,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, /obj/machinery/modular_computer/preset/cargochat/engineering{ dir = 8 }, @@ -30261,10 +26400,8 @@ /area/station/engineering/break_room) "eXo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -30272,8 +26409,8 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -30281,10 +26418,8 @@ /area/station/commons/dorms) "eXx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "eXy" = ( @@ -30327,20 +26462,16 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/central) "eYs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/command/storage/eva) "eYw" = ( @@ -30357,12 +26488,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -30374,7 +26501,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "eYP" = ( -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/binary/pump{ name = "Mix to Port" @@ -30393,31 +26519,24 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "eZi" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "eZj" = ( /obj/effect/turf_decal/box/white{ color = "#9FED58" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "eZn" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/security/prison/mess) "eZo" = ( @@ -30458,12 +26577,8 @@ /area/station/hallway/primary/upper) "eZz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -30588,8 +26703,8 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "fag" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "fah" = ( @@ -30602,12 +26717,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "fap" = ( @@ -30646,7 +26757,6 @@ "fax" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) "faz" = ( @@ -30671,13 +26781,7 @@ /area/station/security/checkpoint/science/research) "faG" = ( /obj/effect/turf_decal/bot_white/right, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "faI" = ( @@ -30687,8 +26791,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "faJ" = ( @@ -30767,8 +26871,8 @@ /area/station/maintenance/port/fore) "fbt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -30797,18 +26901,14 @@ /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "fbG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "fbI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/red, /area/station/security/warden) "fbR" = ( @@ -30850,31 +26950,14 @@ /obj/machinery/vending/assist, /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) -"fcs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) "fcw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "fcz" = ( /obj/structure/chair/office{ @@ -30891,25 +26974,10 @@ /obj/machinery/light/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) -"fcH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/security/prison/upper) "fcK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "fcM" = ( @@ -30966,12 +27034,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "fcW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) @@ -31036,19 +27100,9 @@ /obj/machinery/door/airlock/freezer{ name = "Medical Freezer" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -31063,16 +27117,14 @@ /area/station/commons/fitness) "fdE" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/nanotrasen{ pixel_y = -32 }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "fdF" = ( @@ -31101,13 +27153,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "fdU" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "fdW" = ( @@ -31131,12 +27182,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -31188,12 +27235,8 @@ name = "Customs Desk" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -31243,21 +27286,11 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office) "ffG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/trashcart/laundry, /obj/effect/spawner/random/contraband/prison, /obj/machinery/camera/directional/north{ @@ -31289,23 +27322,16 @@ /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat_interior) "fgg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "fgj" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/mess) "fgn" = ( @@ -31314,9 +27340,6 @@ /obj/item/healthanalyzer, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/science, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/light_switch/directional/south, /obj/structure/cable, /turf/open/floor/iron, @@ -31334,8 +27357,8 @@ /area/station/service/lawoffice) "fgA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ id = "Portbowmaints"; @@ -31369,12 +27392,8 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "fgO" = ( @@ -31449,17 +27468,12 @@ /area/station/maintenance/abandon_kitchen_upper) "fhl" = ( /obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) "fhm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -31470,12 +27484,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Medbay Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -31528,8 +27538,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "fhS" = ( @@ -31537,10 +27547,8 @@ /area/station/medical/morgue) "fhU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -31577,16 +27585,6 @@ }, /turf/open/floor/circuit, /area/station/science/research/abandoned) -"fhY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "fhZ" = ( /turf/closed/wall/r_wall, /area/station/science/research/abandoned) @@ -31637,26 +27635,19 @@ /obj/effect/turf_decal/vg_decals/numbers/two{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "fin" = ( /turf/closed/wall/r_wall, /area/station/maintenance/eva_shed/port) "fiv" = ( -/obj/effect/turf_decal/tile/purple{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/purple/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/purple, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/service/barber) "fiw" = ( @@ -31671,8 +27662,8 @@ dir = 6 }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "fiI" = ( @@ -31686,9 +27677,6 @@ /turf/open/floor/iron, /area/station/science/research) "fiN" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/security_all, /turf/open/floor/iron/dark, @@ -31707,8 +27695,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -31721,8 +27709,8 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -31730,12 +27718,8 @@ "fjr" = ( /obj/effect/turf_decal/vg_decals/numbers/five, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "fjw" = ( @@ -31833,7 +27817,6 @@ /area/station/cargo/miningoffice) "fkJ" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot, /obj/machinery/photocopier, /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/siding/thinplating_new/end{ @@ -31842,12 +27825,8 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) "fkL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "fkN" = ( @@ -31890,9 +27869,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "flL" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 4 }, @@ -31901,28 +27877,11 @@ /turf/open/floor/plating, /area/station/medical/break_room) "flM" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "flR" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/rnd_all, /turf/open/floor/iron/dark, @@ -31946,10 +27905,7 @@ /obj/structure/transit_tube/curved{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "fmu" = ( /obj/effect/spawner/structure/window/reinforced, @@ -31962,21 +27918,9 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "fmw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fmx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "fmC" = ( /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -31987,19 +27931,6 @@ "fmI" = ( /obj/structure/table_frame/wood, /obj/effect/spawner/random/trash/mess, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "fmM" = ( @@ -32007,12 +27938,8 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -32038,15 +27965,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "fnb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/test_chambers) "fnc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/east, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -32070,12 +27995,8 @@ }, /obj/item/trash/candy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) @@ -32083,9 +28004,6 @@ /turf/closed/wall/r_wall, /area/station/science/xenobiology/hallway) "fnp" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/toy/figure/engineer, @@ -32101,9 +28019,6 @@ /area/station/hallway/secondary/command) "fnu" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/item/clothing/neck/stethoscope, /obj/item/storage/box/beakers{ pixel_x = 3; @@ -32162,12 +28077,8 @@ /turf/open/floor/iron/dark, /area/station/service/hydroponics) "fnL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel/funeral) "fnO" = ( @@ -32264,19 +28175,15 @@ /area/station/maintenance/port/upper) "foT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) "foV" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -32290,19 +28197,15 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "foZ" = ( /obj/machinery/light/small/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "fpl" = ( @@ -32337,10 +28240,6 @@ /area/station/science/breakroom) "fpt" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/cup/glass/bottle/champagne{ pixel_x = 6; pixel_y = 25 @@ -32374,7 +28273,7 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/wood, /area/station/security/detectives_office) "fpz" = ( @@ -32395,8 +28294,8 @@ "fpD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "fpI" = ( @@ -32421,12 +28320,8 @@ /obj/item/radio/intercom/directional/north, /obj/machinery/firealarm/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/south, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -32436,8 +28331,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/departments/restroom/directional/west, /turf/open/floor/iron, @@ -32454,10 +28349,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "fqc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) "fqd" = ( @@ -32471,10 +28364,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/black, /area/station/service/barber) "fqi" = ( @@ -32492,12 +28383,8 @@ /area/station/security/prison/rec) "fqs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) "fqw" = ( @@ -32527,33 +28414,17 @@ "fqG" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "fqK" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "fqM" = ( /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/closet/crate/bin, /obj/effect/spawner/random/trash/garbage, /obj/effect/spawner/random/trash/garbage, @@ -32567,7 +28438,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "fqR" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/seeds/lime{ pixel_x = 6 @@ -32579,12 +28449,6 @@ /obj/item/food/grown/wheat, /obj/item/food/grown/watermelon, /obj/item/food/grown/banana, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side{ dir = 4 @@ -32594,12 +28458,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -32630,8 +28490,6 @@ "fre" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -32683,13 +28541,13 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "fsa" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/reagentgrinder{ pixel_x = -5; pixel_y = 9 }, /obj/item/reagent_containers/cup/glass/shaker, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "fsk" = ( @@ -32704,20 +28562,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"fsu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "fsv" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "fsx" = ( @@ -32780,21 +28630,12 @@ /turf/closed/wall, /area/station/service/kitchen/diner) "ftk" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/light/directional/east, /obj/machinery/cryopod{ dir = 8 }, /turf/open/floor/iron/dark/textured_large, /area/station/common/cryopods) -"ftv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "ftH" = ( /obj/structure/bodycontainer/morgue{ dir = 8 @@ -32852,12 +28693,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 4 }, @@ -32886,21 +28723,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"fuv" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "fuw" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron/freezer, @@ -32935,17 +28757,9 @@ }, /area/station/common/wrestling/arena) "fuM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -32969,7 +28783,6 @@ /area/station/hallway/secondary/exit) "fuX" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /turf/open/floor/iron/dark, /area/station/service/hydroponics) @@ -32980,13 +28793,6 @@ "fuZ" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "fvc" = ( @@ -32994,19 +28800,6 @@ /obj/structure/sign/warning/radiation/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"fvn" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "fvp" = ( /obj/structure/chair/office{ dir = 1 @@ -33047,15 +28840,6 @@ "fvF" = ( /turf/open/floor/plating, /area/station/security/execution/transfer) -"fvY" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "fvZ" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -33069,12 +28853,6 @@ /area/station/hallway/secondary/entry) "fwb" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/sign/departments/exam_room/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -33082,13 +28860,10 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/library) "fwe" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 4 }, @@ -33180,9 +28955,6 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "fwv" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/item/t_scanner, /obj/item/t_scanner, @@ -33193,12 +28965,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/night_club/back_stage) @@ -33218,19 +28986,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "fwE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) "fwI" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/cargo/drone_bay) "fwM" = ( @@ -33238,9 +29001,6 @@ /turf/open/space/openspace, /area/space) "fwU" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access" }, @@ -33311,12 +29071,8 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "fxz" = ( @@ -33334,8 +29090,8 @@ }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, @@ -33371,13 +29127,11 @@ /area/station/maintenance/abandon_holding_cell) "fyg" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/warden) "fyi" = ( /obj/effect/turf_decal/stripes{ @@ -33439,9 +29193,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) @@ -33454,9 +29206,7 @@ /turf/open/floor/iron/white, /area/station/science/research) "fyM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -33469,21 +29219,11 @@ /obj/machinery/door/airlock/service{ name = "Kitchen" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/open/floor/iron/checker, /area/station/service/kitchen) -"fyV" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "fyW" = ( /obj/structure/chair/comfy{ color = "#596479"; @@ -33548,8 +29288,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_office) @@ -33571,12 +29311,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) @@ -33589,10 +29325,6 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "fAn" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, /turf/open/floor/iron/smooth_large, @@ -33609,21 +29341,9 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "fAB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) -"fAG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "fAH" = ( /obj/structure/rack/wooden, /obj/item/clothing/under/pants/camo{ @@ -33648,18 +29368,11 @@ /turf/open/floor/wood/parquet, /area/station/common/tailoring) "fAR" = ( -/obj/effect/turf_decal/bot, /obj/structure/window/spawner/directional/south, /obj/structure/reagent_dispensers/watertank/high, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron/dark/side{ dir = 4 @@ -33679,9 +29392,7 @@ "fAX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "fAY" = ( @@ -33690,16 +29401,6 @@ }, /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/upper) -"fBc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "fBk" = ( /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -33737,10 +29438,10 @@ }, /area/station/science/explab) "fBH" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/modular_computer/preset/engineering{ dir = 1 }, -/obj/machinery/modular_computer/preset/engineering{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -33801,8 +29502,8 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -33811,12 +29512,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "fCB" = ( @@ -33831,22 +29528,10 @@ /area/station/service/cafeteria) "fCQ" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) "fCT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -33858,7 +29543,7 @@ req_access = list("ai_upload") }, /obj/effect/spawner/random/aimodule/neutral, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "fCU" = ( /turf/open/floor/carpet, @@ -33884,9 +29569,6 @@ /area/station/maintenance/department/medical/central) "fDk" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/spawner/random/techstorage/rnd_secure_all, /obj/machinery/light/directional/east, /obj/structure/cable, @@ -33903,15 +29585,13 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 9 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "fDD" = ( /obj/structure/railing/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "fDI" = ( @@ -33931,13 +29611,10 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_office) "fDP" = ( -/obj/effect/turf_decal/tile/red{ +/obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/chair{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark/side, @@ -33955,19 +29632,10 @@ "fDW" = ( /obj/structure/railing/corner/end/flip, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"fEc" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, -/area/space/nearstation) "fEp" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -33985,15 +29653,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"fEt" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "fEx" = ( /obj/machinery/button/door/directional/south{ id = "Toilet5"; @@ -34036,9 +29695,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "fEO" = ( /obj/structure/table, @@ -34047,9 +29704,7 @@ /area/station/maintenance/port/upper) "fEY" = ( /obj/machinery/newscaster/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -34064,37 +29719,20 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "fFo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/chapel/office) "fFq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) -"fFy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "fFB" = ( /obj/structure/sink/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/south{ id = "ChapelHall"; name = "Outer Garden Shutters" @@ -34113,16 +29751,6 @@ /obj/item/circuitboard/mecha/clarke/peripherals, /turf/open/floor/circuit, /area/station/science/research/abandoned) -"fFS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "fFU" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -34131,12 +29759,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34195,8 +29819,8 @@ /area/station/maintenance/port/aft) "fGA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -34204,22 +29828,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"fGC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) -"fGO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/carpet/blue, -/area/station/command/heads_quarters/captain/private) "fGR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage_shared) "fGV" = ( @@ -34227,12 +29840,8 @@ icon_state = "dirt-flat-1" }, /mob/living/simple_animal/pet/cat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/abandon_exam/cat) @@ -34303,9 +29912,6 @@ /area/station/maintenance/starboard/fore) "fHD" = ( /obj/machinery/light/small/red/dim/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/escapepodbay) "fHF" = ( @@ -34322,11 +29928,10 @@ "fHM" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -34348,16 +29953,14 @@ /turf/open/floor/wood, /area/station/service/barber/spa) "fIb" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "fIc" = ( @@ -34365,12 +29968,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/main) "fId" = ( @@ -34384,9 +29983,7 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -34405,46 +30002,25 @@ /area/station/security/detectives_office) "fIk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "fIr" = ( /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) -"fIt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "fIv" = ( /obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light_switch/directional/south, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "fIw" = ( @@ -34453,12 +30029,11 @@ amount = 10 }, /obj/item/stack/rods/fifty, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "fIA" = ( @@ -34487,8 +30062,8 @@ pixel_x = -11; pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) @@ -34510,29 +30085,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"fJi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "fJl" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/item/wrench, /obj/item/assembly/timer, /obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -34571,8 +30129,8 @@ "fJK" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -34580,12 +30138,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "fJL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) @@ -34593,18 +30147,12 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "fJT" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "fJW" = ( @@ -34638,8 +30186,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "fKq" = ( @@ -34654,12 +30202,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 8 }, @@ -34669,39 +30213,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "fKw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/washing_machine, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"fKy" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/spawner/random/structure/steam_vent, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "fKz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/arena) "fKK" = ( @@ -34715,9 +30234,7 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/engine, @@ -34766,17 +30283,12 @@ }, /obj/structure/curtain/cloth/fancy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/service/theater/abandoned) "fLn" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -34861,8 +30373,8 @@ /area/station/service/abandoned_gambling_den) "fMq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -34944,10 +30456,8 @@ /area/station/medical/chemistry) "fMS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "fMV" = ( @@ -34998,8 +30508,8 @@ "fNd" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -35022,8 +30532,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "fNr" = ( @@ -35064,12 +30574,8 @@ /area/space/nearstation) "fNC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) @@ -35085,17 +30591,13 @@ "fNK" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "fNT" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35172,18 +30674,11 @@ /area/station/maintenance/port/upper) "fOE" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "fOI" = ( @@ -35205,9 +30700,6 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "fON" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/storage/part_replacer, /turf/open/floor/iron/dark, @@ -35241,15 +30733,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "fPk" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -35273,8 +30760,8 @@ /area/station/security/prison) "fPo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -35338,16 +30825,6 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) -"fQh" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/security/prison) "fQk" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -35378,16 +30855,6 @@ /obj/item/surgical_drapes, /turf/open/floor/plating, /area/station/maintenance/abandon_surgery) -"fQS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "fQT" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 @@ -35442,12 +30909,8 @@ /turf/open/floor/iron/smooth_corner, /area/station/maintenance/disposal/incinerator) "fRq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -35517,9 +30980,7 @@ /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /obj/item/key/security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "fRM" = ( @@ -35560,8 +31021,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) "fSw" = ( @@ -35578,23 +31039,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/carpet/lone, /area/station/service/bar/atrium) -"fSE" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "fSM" = ( /obj/structure/chair/wood{ dir = 1 }, -/obj/effect/landmark/start/bouncer, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35624,10 +31072,6 @@ }, /turf/open/floor/wood, /area/station/service/bar/atrium) -"fTg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/gateway) "fTh" = ( /obj/structure/reagent_dispensers/plumbed{ dir = 8 @@ -35658,12 +31102,8 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) "fTD" = ( @@ -35672,12 +31112,8 @@ }, /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "fTF" = ( @@ -35716,8 +31152,8 @@ /area/station/hallway/primary/central) "fTV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -35727,12 +31163,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/captain, /obj/machinery/duct, /turf/open/floor/wood, @@ -35742,12 +31174,8 @@ /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) "fUp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35790,16 +31218,6 @@ /turf/open/floor/plating, /area/station/service/hydroponics) "fUZ" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "fVb" = ( @@ -35810,12 +31228,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "fVd" = ( @@ -35889,22 +31303,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "fVQ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light/small/directional/north, /obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "fVS" = ( /obj/structure/chair/stool/directional/west, @@ -35914,7 +31315,6 @@ }, /area/station/security/prison/visit) "fVT" = ( -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/storage) @@ -35953,16 +31353,6 @@ /obj/structure/table/reinforced, /obj/item/folder/red, /obj/item/binoculars, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, @@ -36041,12 +31431,8 @@ "fXh" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, @@ -36107,12 +31493,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner{ dir = 8 }, @@ -36133,12 +31515,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "fXT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -36166,6 +31544,10 @@ dir = 4 }, /area/station/maintenance/disposal/incinerator) +"fYr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit, +/area/station/security/mechbay) "fYz" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -36196,8 +31578,8 @@ "fYJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -36231,17 +31613,13 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "fYU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/upper) "fYW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/carpet/blue, @@ -36253,12 +31631,8 @@ /obj/machinery/door/airlock/silver{ name = "Catering Area" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) "fZd" = ( @@ -36301,8 +31675,8 @@ "fZv" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "fZC" = ( @@ -36313,21 +31687,15 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "fZE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "fZH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "fZI" = ( @@ -36347,12 +31715,8 @@ /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) "fZL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 4 }, @@ -36374,8 +31738,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -36387,8 +31751,8 @@ /obj/effect/spawner/random/trash/mess, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "gah" = ( @@ -36437,10 +31801,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"gay" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "gaz" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/machinery/light/small/directional/north, @@ -36450,12 +31810,8 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -36501,12 +31857,8 @@ dir = 4 }, /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "gbc" = ( @@ -36517,12 +31869,6 @@ /area/station/engineering/supermatter/room) "gbf" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/effect/turf_decal/stripes, /obj/machinery/shieldgen, /turf/open/floor/iron/dark/side{ @@ -36545,9 +31891,7 @@ name = "lavaland"; shuttle_id = "pod_lavaland" }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "gbv" = ( /obj/effect/decal/cleanable/dirt{ @@ -36575,7 +31919,7 @@ /area/station/command/heads_quarters/captain) "gbC" = ( /obj/structure/rack, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/reagent_containers/condiment/cherryjelly{ pixel_x = -6 }, @@ -36607,8 +31951,8 @@ /area/station/maintenance/abandon_exam/cat) "gbM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup18"; location = "hallup17" @@ -36617,8 +31961,8 @@ /area/station/hallway/primary/upper) "gbQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -36640,12 +31984,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -36666,25 +32006,16 @@ /area/station/maintenance/department/science/lower) "gcs" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/clipboard, /obj/item/mining_voucher, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/command/bridge) "gct" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/service/barber) @@ -36693,9 +32024,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "gcy" = ( /obj/machinery/door/airlock/bathroom{ @@ -36714,8 +32043,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) "gcX" = ( @@ -36730,7 +32059,6 @@ /area/station/medical/psychology) "gcY" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -36757,19 +32085,10 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "gdq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) @@ -36858,9 +32177,7 @@ /turf/open/floor/engine, /area/station/science/explab) "gef" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -36918,8 +32235,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/iron/dark, /area/station/science/robotics) @@ -36928,19 +32245,22 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "geH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"geL" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/camera/directional/west{ + c_tag = "Security - Mechbay" + }, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "geQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -36950,10 +32270,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -36966,12 +32282,8 @@ /area/space/nearstation) "gfk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ name = "Detective Junction"; renamedByPlayer = 30 @@ -36984,12 +32296,8 @@ /area/station/maintenance/eva_shed/starboard) "gfr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall2"; location = "hall1" @@ -37008,7 +32316,7 @@ /turf/open/floor/plating, /area/station/cargo/storage) "gfI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/rack, /obj/item/reagent_containers/condiment/olive_oil{ pixel_x = -6 @@ -37037,9 +32345,7 @@ dir = 1; name = "Ordnance Freezer Chamber Access" }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "ggh" = ( /obj/effect/turf_decal/stripes{ @@ -37050,8 +32356,8 @@ /area/station/science/xenobiology) "ggl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -37069,12 +32375,8 @@ }, /area/station/science/xenobiology) "ggt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white/side{ dir = 1 @@ -37089,12 +32391,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "ggF" = ( @@ -37174,8 +32472,8 @@ "ghu" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Central Upper Hallway" }, @@ -37210,19 +32508,13 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "gij" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37281,8 +32573,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -37302,12 +32594,6 @@ /area/station/science/tele_sci) "gji" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/dark/side{ dir = 4 @@ -37331,7 +32617,6 @@ dir = 8; name = "Mix to Engine" }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/atmos) "gjt" = ( @@ -37392,14 +32677,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/command/bridge) -"gjO" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "gjW" = ( /obj/structure/railing{ dir = 10 @@ -37414,10 +32691,6 @@ /area/station/maintenance/department/medical/central) "gkh" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 8 @@ -37449,15 +32722,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "gky" = ( /obj/machinery/computer/atmos_control/nitrous_tank, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/tile/red/real_red/diagonal_centre, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) "gkz" = ( @@ -37485,8 +32751,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "gkQ" = ( @@ -37551,8 +32817,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Science Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -37578,8 +32844,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -37588,8 +32854,8 @@ /obj/machinery/door/airlock/public/glass{ name = "Hydroponics Animal Pen" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /obj/structure/cable, /turf/open/floor/iron/dark/side{ @@ -37615,12 +32881,8 @@ /area/station/service/barber) "glL" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/floor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -37638,9 +32900,7 @@ /area/station/commons/dorms/room3) "glU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "glW" = ( @@ -37658,21 +32918,11 @@ /area/station/medical/surgery) "glX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/hallway/primary/port) -"glZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/xenobiology) "gma" = ( /turf/open/floor/plating, /area/station/maintenance/port/central) @@ -37707,10 +32957,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "gmi" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/stool/bar/directional{ dir = 4 }, @@ -37718,9 +32964,7 @@ /area/station/security/prison/mess) "gml" = ( /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "gmr" = ( /obj/effect/decal/cleanable/dirt{ @@ -37780,9 +33024,7 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "gmZ" = ( @@ -37833,12 +33075,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -37861,12 +33099,8 @@ "gns" = ( /obj/structure/cable, /obj/effect/landmark/start/captain, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -37893,29 +33127,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "gny" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/brig) "gnB" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, @@ -37949,10 +33169,6 @@ "gnP" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron, /area/station/cargo/lobby) "gnU" = ( @@ -37970,35 +33186,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"goa" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"goc" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "goe" = ( /obj/structure/chair/office, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38013,8 +33205,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "gok" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science) @@ -38023,16 +33215,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/iron/dark, /area/station/service/kitchen) -"gov" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "gow" = ( /obj/structure/cable, /turf/open/floor/iron/stairs, @@ -38042,12 +33224,8 @@ /obj/structure/flora/bush/flowers_br, /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/commons/dorms) "goF" = ( @@ -38080,12 +33258,8 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "goQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -38129,16 +33303,6 @@ /turf/open/floor/carpet, /area/station/service/chapel) "gpq" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/table/glass, /obj/item/petri_dish{ pixel_x = -6; @@ -38178,17 +33342,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"gpy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/security/prison/upper) "gpz" = ( /turf/closed/wall/r_wall, /area/station/engineering/gravity_generator) @@ -38207,23 +33360,21 @@ /area/station/science/xenobiology/hallway) "gpJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "gpM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) "gpT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -38245,7 +33396,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "gqa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) @@ -38262,21 +33413,15 @@ }, /obj/effect/landmark/start/librarian, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/carpet, /area/station/service/library) "gqr" = ( -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/station/hallway/secondary/exit) "gqu" = ( /obj/machinery/door/firedoor, @@ -38294,9 +33439,6 @@ /turf/open/floor/iron/dark, /area/station/science/lab) "gqy" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/servo/nano, /obj/item/stock_parts/servo/nano, @@ -38305,21 +33447,12 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"gqC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "gqL" = ( /obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "gqM" = ( /obj/structure/window/reinforced/spawner/directional/west, @@ -38369,20 +33502,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "grb" = ( -/obj/effect/turf_decal/stripes, /obj/structure/railing, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) @@ -38455,8 +33580,8 @@ /area/station/security/prison/upper) "grJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -38486,12 +33611,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "gsj" = ( @@ -38511,31 +33632,8 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"gsn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) -"gso" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "gsx" = ( /obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -38548,7 +33646,7 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "gsK" = ( -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron/white, @@ -38642,15 +33740,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"gtr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "gtx" = ( /obj/structure/stairs/north, /turf/open/floor/iron/dark, @@ -38677,12 +33766,8 @@ /area/station/service/hydroponics) "gtR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner, /turf/open/floor/iron, /area/station/commons/dorms) @@ -38700,22 +33785,15 @@ /obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "guj" = ( /obj/structure/cable, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -38749,12 +33827,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -38775,12 +33849,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/wood, /area/station/service/theater) -"guB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/ordnance_maint) "guC" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -38834,8 +33902,8 @@ /area/station/maintenance/starboard/fore) "gva" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/chapel) "gvb" = ( @@ -38847,22 +33915,14 @@ /area/station/security/courtroom) "gve" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "gvm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -38872,8 +33932,8 @@ "gvt" = ( /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 1 }, @@ -38898,7 +33958,7 @@ /area/station/cargo/miningdock) "gvN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -38947,16 +34007,9 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"gwj" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/port) "gwk" = ( /obj/machinery/iv_drip, /obj/machinery/defibrillator_mount/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/stasis{ dir = 4 }, @@ -39020,12 +34073,8 @@ /area/station/service/barber) "gwW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) "gwX" = ( @@ -39123,10 +34172,8 @@ /area/station/hallway/primary/starboard) "gxY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "gyb" = ( @@ -39137,12 +34184,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -39157,12 +34200,8 @@ dir = 1 }, /obj/structure/chair/stool/bar/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/hallway/primary/port) "gyd" = ( @@ -39173,25 +34212,8 @@ }, /turf/open/floor/plating, /area/station/medical/surgery) -"gye" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "gyf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "gyg" = ( @@ -39199,12 +34221,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "gyh" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) @@ -39231,18 +34247,14 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "gyP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/wood{ dir = 4 }, @@ -39253,12 +34265,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/clown_chamber) "gyX" = ( @@ -39289,12 +34297,12 @@ /turf/open/floor/iron/freezer, /area/station/commons/dorms/vacantroom) "gzo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gzr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, @@ -39318,7 +34326,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "gzD" = ( @@ -39330,8 +34338,8 @@ name = "Cryopods" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/upper) @@ -39344,9 +34352,7 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/primary/upper) "gzG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/machinery/shower/directional/south, /obj/effect/turf_decal/stripes/end, @@ -39355,9 +34361,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "gzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -39370,12 +34374,8 @@ /area/station/service/hydroponics) "gzL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -39387,8 +34387,8 @@ name = "Recovery Ward" }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -39412,8 +34412,8 @@ /area/station/security/checkpoint/customs) "gAo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -39444,13 +34444,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/hallway/primary/port) -"gAz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/interrogation) "gAC" = ( /obj/structure/chair, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -39488,13 +34481,7 @@ name = "Labor Camp Shuttle Airlock" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -39509,8 +34496,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "gBa" = ( @@ -39520,9 +34507,6 @@ /turf/open/floor/engine, /area/station/science/explab) "gBb" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/power/smes/engineering, /obj/structure/cable, /obj/structure/railing{ @@ -39559,12 +34543,8 @@ /turf/open/floor/iron, /area/station/commons/dorms) "gBk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -39587,12 +34567,6 @@ /obj/structure/chair/sofa/bench{ pixel_y = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Center"; @@ -39656,14 +34630,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/common/wrestling/arena) -"gCa" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "gCd" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -39684,8 +34650,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "gCs" = ( @@ -39736,24 +34702,11 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "gDk" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "gDn" = ( /obj/effect/turf_decal/stripes/white/line{ @@ -39765,9 +34718,7 @@ "gDp" = ( /obj/machinery/light_switch/directional/south, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old{ dir = 8 }, @@ -39800,22 +34751,18 @@ /area/station/maintenance/port/upper) "gDF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "gDI" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -39829,8 +34776,8 @@ }, /obj/effect/turf_decal/siding/wood, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood/parquet, @@ -39899,12 +34846,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "gEV" = ( @@ -39932,7 +34875,6 @@ /turf/open/floor/carpet/black, /area/station/service/barber) "gFg" = ( -/obj/effect/turf_decal/bot_white, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) @@ -39945,7 +34887,7 @@ }, /obj/effect/landmark/start/assistant, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "gFE" = ( @@ -39958,10 +34900,6 @@ /area/station/security/power_station) "gFG" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/storage/fancy/cigarettes/cigars/cohiba{ pixel_y = 5 }, @@ -39973,12 +34911,8 @@ "gFM" = ( /obj/effect/turf_decal/caution, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "gFO" = ( @@ -40003,11 +34937,8 @@ /obj/structure/chair/sofa/corp{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "gFX" = ( @@ -40041,25 +34972,17 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "gGo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/secondary/command) -"gGq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "gGr" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "gGw" = ( @@ -40117,12 +35040,8 @@ /obj/machinery/door/airlock/captain{ name = "Captain's Suite" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40202,21 +35121,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"gHQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "gHT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -40243,12 +35151,9 @@ /turf/open/floor/iron, /area/station/security/courtroom) "gIe" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -40290,8 +35195,8 @@ /area/station/science/xenobiology/control) "gIN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engineering/atmos_aux_port) "gIR" = ( @@ -40308,24 +35213,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"gJb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva/upper) "gJd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -40351,7 +35242,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/barber/spa) "gJh" = ( @@ -40371,51 +35263,17 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) -"gJm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "gJq" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/structure/statue/silver/sec, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "gJt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/service/library/printer) -"gJv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40554,10 +35412,7 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "gLc" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "gLe" = ( /obj/effect/turf_decal/tile/neutral{ @@ -40568,10 +35423,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"gLh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "gLj" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -40624,12 +35475,9 @@ /area/station/cargo/miningoffice) "gLu" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, /obj/machinery/destructive_scanner, /obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) "gLv" = ( @@ -40641,12 +35489,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "gLI" = ( @@ -40660,12 +35504,7 @@ /area/station/maintenance/department/security/lower) "gLQ" = ( /obj/machinery/seed_extractor, -/obj/effect/turf_decal/bot, /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -40675,10 +35514,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/machinery/door/window/right{ base_state = "left"; dir = 1; @@ -40699,16 +35534,13 @@ /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gMj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/landmark/start/bartender, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/bar) @@ -40738,12 +35570,6 @@ /obj/item/paper_bin, /turf/open/floor/carpet, /area/station/service/lawoffice) -"gMv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "gMw" = ( /obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt{ @@ -40773,12 +35599,8 @@ /obj/machinery/door/airlock/security{ name = "Detective's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40792,15 +35614,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "gMP" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, /turf/open/floor/iron, /area/station/common/laser_tag) "gMR" = ( @@ -40824,6 +35641,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/security/range) +"gNf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/locker) "gNv" = ( /obj/machinery/smartfridge, /turf/open/floor/iron/dark, @@ -40842,31 +35669,22 @@ dir = 4 }, /obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "gNG" = ( /obj/machinery/door/airlock/grunge{ name = "Chapel Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "gNT" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/engineering/main) "gNW" = ( @@ -40932,12 +35750,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "gOx" = ( @@ -40994,18 +35808,9 @@ /obj/effect/mapping_helpers/requests_console/information, /turf/open/floor/iron/dark/textured_large, /area/station/command/heads_quarters/ce) -"gOR" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "gOT" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron, /area/station/medical/virology/isolation) "gOY" = ( @@ -41098,10 +35903,6 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance) "gPE" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/chair/sofa/bench/right{ dir = 8; pixel_x = 5 @@ -41109,6 +35910,9 @@ /obj/structure/cable, /obj/effect/landmark/start/assistant, /obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "gPF" = ( @@ -41117,9 +35921,7 @@ }, /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "gPJ" = ( @@ -41132,12 +35934,8 @@ /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "gPM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /obj/machinery/duct, /turf/open/floor/carpet/green, @@ -41193,27 +35991,6 @@ dir = 8 }, /area/station/science) -"gQA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/service/library) -"gQM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "gQU" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; @@ -41226,12 +36003,8 @@ /turf/open/floor/engine, /area/station/science/ordnance) "gQW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -41252,12 +36025,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -41275,10 +36044,6 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "gRe" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 8 }, @@ -41295,12 +36060,8 @@ }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "gRj" = ( @@ -41313,12 +36074,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 8 }, @@ -41339,9 +36096,7 @@ }, /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "gRC" = ( @@ -41398,12 +36153,6 @@ /turf/open/space/basic, /area/space/nearstation) "gSi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, /obj/machinery/camera/directional/east{ @@ -41448,8 +36197,8 @@ /area/station/cargo/office) "gSE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) @@ -41460,12 +36209,8 @@ /area/station/security/prison) "gSQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "gST" = ( @@ -41494,12 +36239,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -41511,12 +36252,8 @@ name = "Engineering Security Post" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/engie_guard, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "gTg" = ( @@ -41536,13 +36273,11 @@ "gTl" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "gTn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured_large, /area/station/common/cryopods) "gTo" = ( @@ -41550,8 +36285,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip, /obj/machinery/duct, /turf/open/floor/iron, @@ -41560,9 +36295,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "gTD" = ( /obj/effect/turf_decal/tile/neutral{ @@ -41577,44 +36310,23 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "gTF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/interrogation) "gTL" = ( /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) -"gTN" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/layer1, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gTS" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "gTU" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/lab) "gTW" = ( @@ -41644,9 +36356,6 @@ "gUa" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/computer/department_orders/security, /turf/open/floor/iron/dark/corner{ @@ -41697,12 +36406,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -41714,8 +36419,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -41766,15 +36469,6 @@ /turf/open/floor/iron, /area/station/medical/medbay/central) "gVw" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, @@ -41783,12 +36477,8 @@ /area/station/medical/coldroom) "gVx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "gVz" = ( @@ -41844,12 +36534,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "gWf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 @@ -41893,10 +36579,8 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "gWF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -41911,8 +36595,8 @@ "gWR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -41969,21 +36653,15 @@ name = "Command Evac Lounge" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "gXH" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/wrestling/lobby) @@ -42044,7 +36722,7 @@ /turf/open/floor/carpet, /area/station/service/electronic_marketing_den) "gXZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "gYf" = ( @@ -42057,9 +36735,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "gYl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -42077,10 +36753,6 @@ /turf/open/floor/wood, /area/station/medical/exam_room) "gYX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/west, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark/side{ @@ -42101,12 +36773,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) @@ -42119,19 +36787,11 @@ "gZm" = ( /turf/open/floor/wood, /area/station/service/library) -"gZp" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/engine, -/area/station/science/xenobiology) "gZu" = ( -/obj/machinery/computer/atmos_control/noreconnect{ - atmos_chambers = list("ordnancegas1"="Burn Chamber","ordnancegas2"="Freezer Chamber"); +/obj/machinery/computer/atmos_control/ordnancemix{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "gZw" = ( /obj/item/kirbyplants/organic/plant21, @@ -42149,16 +36809,6 @@ /turf/open/floor/iron/dark, /area/station/commons/fitness) "gZL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42188,29 +36838,20 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/medical/virology/isolation) -"hak" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/common/wrestling/locker) "hal" = ( /turf/closed/wall/rust, /area/station/security/detectives_office/private_investigators_office) "haw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron, /area/station/science/robotics) "haD" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 5 @@ -42224,12 +36865,8 @@ /area/space/nearstation) "haK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, @@ -42241,22 +36878,14 @@ /area/station/maintenance/disposal/incinerator) "haN" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, /obj/item/stack/sheet/rglass{ amount = 20; pixel_x = 2; pixel_y = -2 }, /obj/item/stack/rods/fifty, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "haQ" = ( @@ -42295,12 +36924,8 @@ /area/station/maintenance/department/medical/central) "hbk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -42326,7 +36951,7 @@ /area/station/engineering/supermatter) "hbu" = ( /obj/item/reagent_containers/cup/bucket/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "hbv" = ( @@ -42422,11 +37047,6 @@ }, /turf/closed/wall, /area/station/maintenance/clown_chamber) -"hcl" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "hcn" = ( /obj/structure/rack/wooden, /obj/machinery/light/directional/east, @@ -42500,26 +37120,20 @@ /area/station/hallway/secondary/entry) "hcy" = ( /obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "hcK" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "hcL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -42563,8 +37177,8 @@ "hdx" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Command Hallway" @@ -42579,8 +37193,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage_shared) "hdL" = ( @@ -42591,12 +37205,8 @@ /area/station/science/ordnance/testlab) "hdS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -42617,22 +37227,13 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "hdY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "hef" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/iron/dark, @@ -42664,16 +37265,12 @@ /turf/open/floor/carpet/blue, /area/station/command/captain_dining) "hey" = ( -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "heB" = ( -/obj/effect/spawner/random/trash/mess, /obj/structure/sign/warning/vacuum/external/directional/east, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -42705,12 +37302,8 @@ }, /obj/structure/curtain/bounty, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -42720,21 +37313,13 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "heZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/common/night_club/changing_room) @@ -42750,8 +37335,8 @@ /turf/open/floor/material/meat, /area/station/maintenance/department/science/xenobiology) "hfm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -42764,12 +37349,8 @@ /area/station/maintenance/department/crew_quarters/bar) "hfI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel) "hfM" = ( @@ -42888,12 +37469,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -42920,9 +37497,6 @@ /area/station/commons/dorms/room2) "hgM" = ( /obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -42936,12 +37510,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "hha" = ( @@ -42970,8 +37540,8 @@ /area/station/maintenance/library/lower) "hhr" = ( /obj/machinery/light/small/red/dim/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "hhx" = ( @@ -42995,8 +37565,8 @@ id = "brigfront"; name = "Brig Blast Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -43011,12 +37581,8 @@ id_tag = "CEdoor"; name = "Chief Engineer's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -43025,12 +37591,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "hhF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) "hhH" = ( @@ -43047,17 +37609,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "hhW" = ( -/obj/effect/turf_decal/stripes, /obj/effect/decal/cleanable/greenglow, /obj/effect/decal/remains/human, /turf/open/floor/plating, @@ -43100,8 +37657,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "hiD" = ( @@ -43123,8 +37680,8 @@ /obj/structure/lattice/catwalk, /obj/item/shard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "hiM" = ( @@ -43144,9 +37701,6 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron, /area/station/medical/cryo) @@ -43176,22 +37730,24 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/range) +"hiZ" = ( +/obj/machinery/porta_turret/ai{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "hjd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "hjh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ dir = 4 }, @@ -43202,19 +37758,10 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /turf/open/floor/iron/smooth_large, /area/station/cargo/miningdock) "hjp" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) @@ -43234,37 +37781,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"hjy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) -"hjD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/security/prison/upper) -"hjE" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "hjI" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, @@ -43288,12 +37804,8 @@ /area/station/science/explab) "hjS" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -43307,9 +37819,6 @@ "hjV" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -43331,8 +37840,8 @@ }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark/side, /area/station/security/range) @@ -43341,10 +37850,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) @@ -43366,12 +37873,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/random/directional/south, /obj/effect/spawner/random/trash/moisture, /turf/open/floor/plating, @@ -43456,23 +37959,23 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "hlu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/vacantroom) +"hlw" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "hlC" = ( /obj/effect/turf_decal/box, /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -43482,9 +37985,7 @@ /obj/item/key/janitor, /obj/item/toy/figure/janitor, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) "hlP" = ( @@ -43548,8 +38049,8 @@ /area/station/common/night_club) "hmi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/office) @@ -43588,13 +38089,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery) -"hmC" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "hmD" = ( /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/engine/hull/reinforced, @@ -43625,22 +38119,16 @@ dir = 8 }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/random/directional/west, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) "hmS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/black{ dir = 8 }, @@ -43648,8 +38136,8 @@ /area/station/command/captain_dining) "hmT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -43728,12 +38216,8 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "hnW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "hnX" = ( @@ -43742,28 +38226,11 @@ }, /obj/effect/spawner/random/trash/food_packaging, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "hnZ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -43773,12 +38240,8 @@ /turf/open/floor/iron, /area/station/maintenance/abandon_diner) "hob" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room4) @@ -43786,9 +38249,7 @@ /obj/machinery/holopad{ name = "botany requests holopad" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "hog" = ( @@ -43810,8 +38271,8 @@ }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "hoz" = ( @@ -43848,8 +38309,8 @@ /area/station/maintenance/department/security) "hoH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) "hoI" = ( @@ -43866,12 +38327,8 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_arcade) "hoT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/left{ dir = 4 }, @@ -43884,12 +38341,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "hpb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -43909,12 +38362,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) "hpj" = ( @@ -43941,25 +38390,22 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/effect/turf_decal/stripes/end, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) +"hpF" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hpS" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -43970,20 +38416,10 @@ "hqa" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/cigarette, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"hqe" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "hqo" = ( /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/east, @@ -43999,45 +38435,20 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "hqv" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/cryopod{ dir = 8 }, /turf/open/floor/iron/dark/textured_large, /area/station/common/cryopods) -"hqz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "hqC" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/firealarm/directional/north, /obj/item/pipe_dispenser, /obj/structure/sign/delam_procedure/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/main) -"hqD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint) "hqF" = ( /obj/structure/railing/corner{ dir = 4 @@ -44048,9 +38459,7 @@ c_tag = "Crew Area - Cryopods"; name = "dormitories camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -44068,9 +38477,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -44105,21 +38512,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hrF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "hrJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -44156,7 +38558,6 @@ /area/station/maintenance/department/medical/central) "hrO" = ( /obj/machinery/vending/wardrobe/jani_wardrobe, -/obj/effect/turf_decal/bot, /obj/structure/cable, /turf/open/floor/iron/checker, /area/station/service/janitor) @@ -44173,8 +38574,8 @@ /obj/item/stack/sheet/cardboard, /obj/item/storage/box, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "hsi" = ( @@ -44182,9 +38583,7 @@ id_tag = "Toilet4"; name = "Stall 4" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "hsm" = ( @@ -44193,13 +38592,9 @@ }, /turf/closed/wall, /area/station/hallway/primary/upper) -"hsn" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "hss" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/mess) @@ -44209,12 +38604,8 @@ id = "SnacksKitchen"; name = "Snack Bar Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/concessions) "hsI" = ( @@ -44301,12 +38692,8 @@ /area/station/common/tailoring) "htq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage/tech) @@ -44326,18 +38713,8 @@ /obj/machinery/door/airlock/virology/glass{ name = "Isolation A" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /turf/open/floor/iron, /area/station/medical/virology) @@ -44356,13 +38733,10 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "htF" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_corner, /area/station/cargo/miningdock) "htI" = ( @@ -44380,8 +38754,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/border_only{ dir = 4 }, @@ -44392,12 +38766,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "htS" = ( @@ -44411,19 +38781,15 @@ "htV" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "hud" = ( /obj/machinery/light/directional/south, /obj/effect/landmark/start/chaplain, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "hui" = ( @@ -44456,23 +38822,15 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner{ dir = 8 }, /area/station/hallway/secondary/entry) "huI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "huN" = ( @@ -44485,7 +38843,6 @@ /turf/open/floor/plating, /area/station/maintenance/salon/lower) "hvn" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -44508,9 +38865,7 @@ /area/station/medical/chemistry) "hvq" = ( /obj/structure/railing/corner/end/flip, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -44533,27 +38888,15 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/cargo/sorting) -"hvC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "hvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/pool) "hvH" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 @@ -44562,10 +38905,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "hvJ" = ( @@ -44581,11 +38921,9 @@ /turf/open/floor/iron, /area/station/science/research) "hvU" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron, /area/station/cargo/storage) "hvV" = ( @@ -44595,7 +38933,6 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "hwb" = ( -/obj/effect/turf_decal/bot, /obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/floor/iron/dark, /area/station/service/hydroponics) @@ -44625,10 +38962,6 @@ /area/station/service/janitor) "hwl" = ( /obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -44642,11 +38975,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"hwA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/security/detectives_office) "hwD" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -44656,7 +38984,6 @@ /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "hwM" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/space_heater, /obj/structure/railing, /turf/open/floor/plating/rust, @@ -44679,9 +39006,7 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "hwT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "hwU" = ( @@ -44694,18 +39019,12 @@ }, /area/station/engineering/atmos/hfr_room) "hxd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "hxh" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, +/obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hxm" = ( @@ -44744,11 +39063,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"hxv" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "hxw" = ( /obj/structure/showcase/cyborg/old{ pixel_y = 20 @@ -44778,20 +39092,14 @@ pixel_x = 3 }, /obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hxO" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "hxV" = ( @@ -44843,9 +39151,7 @@ "hyt" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/bed/dogbed, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "hyw" = ( @@ -44882,8 +39188,8 @@ "hyM" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "hyY" = ( @@ -44899,9 +39205,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "hzr" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -44925,12 +39229,8 @@ /area/station/common/wrestling/lobby) "hzH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "hzU" = ( @@ -44960,12 +39260,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "hAd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) "hAn" = ( @@ -45004,6 +39300,17 @@ }, /turf/open/floor/wood/parquet, /area/station/common/night_club) +"hAz" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/window{ + id = "SecMech"; + name = "Security Mechbay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hAB" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -45054,8 +39361,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) "hBk" = ( @@ -45071,9 +39378,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hBq" = ( /obj/effect/turf_decal/tile/red, @@ -45095,26 +39400,14 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/glass, /area/station/commons/dorms) -"hBH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "hBJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/science/ordnance) "hBL" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ @@ -45125,10 +39418,8 @@ /area/station/engineering/atmos/pumproom) "hBM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "hBP" = ( @@ -45167,12 +39458,8 @@ dir = 5; name = "chapel camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -45225,18 +39512,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/escapepodbay) -"hCC" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "hCF" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -45292,12 +39567,8 @@ name = "Visitation" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 @@ -45418,25 +39689,20 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "hDU" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/item/radio/intercom/directional/north, /obj/item/pipe_dispenser, /turf/open/floor/iron/dark, /area/station/engineering/main) "hDY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/water_source/puddle, /obj/structure/flora/bush/reed{ pixel_y = 8 @@ -45448,12 +39714,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "hEi" = ( @@ -45469,9 +39731,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "hEv" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/item/assembly/timer{ pixel_x = -6; @@ -45516,12 +39775,6 @@ /area/station/engineering/storage/tech) "hEA" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -45536,7 +39789,6 @@ "hED" = ( /obj/structure/window/spawner/directional/north, /obj/structure/chair/sofa/left/brown, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/bar/atrium) "hEI" = ( @@ -45553,24 +39805,9 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) -"hET" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/bar) -"hEZ" = ( -/obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, -/area/space/nearstation) "hFf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45581,7 +39818,6 @@ dir = 9 }, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/assembly/igniter, /obj/item/assembly/igniter, /obj/item/assembly/timer{ @@ -45596,6 +39832,9 @@ pixel_x = 3; pixel_y = -3 }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hFk" = ( @@ -45621,9 +39860,7 @@ id = "BevStand"; name = "Beverage Stand Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "hFB" = ( @@ -45651,8 +39888,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -45674,15 +39911,6 @@ "hFZ" = ( /turf/open/floor/iron/white/textured, /area/station/common/cryopods) -"hGe" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) "hGf" = ( /turf/closed/wall/r_wall, /area/station/security/brig) @@ -45703,12 +39931,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -45740,12 +39964,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -45758,7 +39978,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "hGX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/hallway/secondary/construction) "hGY" = ( @@ -45817,12 +40037,8 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/nt_rep) "hHe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -45845,8 +40061,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -45860,12 +40075,8 @@ /area/station/hallway/primary/central) "hHt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "hHv" = ( @@ -45886,8 +40097,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "hHJ" = ( @@ -45896,9 +40107,6 @@ codes_txt = "patrol;next_patrol=hall10"; location = "hall9" }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -45954,19 +40162,13 @@ pixel_y = 3 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/restraints/handcuffs/cable/cyan, /turf/open/floor/iron, /area/station/security/checkpoint/medical) "hIp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "hIu" = ( @@ -45975,7 +40177,6 @@ "hIv" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/siding/thinplating_new/end{ dir = 4 }, @@ -45998,12 +40199,8 @@ /area/station/hallway/primary/upper) "hIV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness) @@ -46011,15 +40208,6 @@ /obj/machinery/power/shuttle_engine/heater, /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) -"hJa" = ( -/obj/structure/window/spawner/directional/east, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 8 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "hJb" = ( /obj/machinery/sparker/directional/north{ id = "Xenobio" @@ -46049,12 +40237,8 @@ /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "hJm" = ( @@ -46069,12 +40253,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "hJr" = ( @@ -46108,12 +40288,8 @@ /obj/machinery/light/directional/east, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/bar/atrium) "hJz" = ( @@ -46123,8 +40299,10 @@ pixel_x = 6 }, /obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "hJA" = ( @@ -46143,7 +40321,7 @@ /turf/open/floor/engine, /area/station/science/ordnance) "hJF" = ( -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -46156,9 +40334,6 @@ /turf/closed/wall, /area/station/maintenance/fore/upper) "hJL" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/structure/table, /obj/structure/cable, /obj/item/storage/bag/construction, @@ -46167,12 +40342,6 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) -"hJQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/command) "hJR" = ( /turf/closed/wall, /area/station/science/research) @@ -46182,20 +40351,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/abandon_wrestle) -"hJY" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Upper Hallway" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "hKf" = ( /obj/structure/table, /obj/item/paper_bin, @@ -46211,8 +40366,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "hKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -46235,19 +40390,12 @@ "hKn" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "hKt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "hKw" = ( @@ -46288,16 +40436,6 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"hLf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "hLg" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /obj/effect/mapping_helpers/broken_floor, @@ -46307,9 +40445,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hLk" = ( /obj/structure/chair/office{ @@ -46336,18 +40472,6 @@ /obj/machinery/dish_drive/bullet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"hLp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "hLu" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -46407,12 +40531,8 @@ /area/station/maintenance/console_room) "hMj" = ( /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "hMm" = ( @@ -46438,10 +40558,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -46455,10 +40573,8 @@ /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner{ dir = 1 }, @@ -46493,26 +40609,15 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "hMH" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "hMI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -46558,9 +40663,7 @@ /turf/open/floor/carpet, /area/station/service/chapel/office) "hNj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "hNk" = ( @@ -46633,12 +40736,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "hNI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) "hNP" = ( @@ -46743,7 +40842,7 @@ /turf/open/space/basic, /area/space/nearstation) "hOx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/lone, /area/station/service/chapel) "hOA" = ( @@ -46784,16 +40883,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "rnd-enterance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron, /area/station/science/research) "hPg" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/table, /obj/item/paper_bin{ pixel_y = 3 @@ -46818,9 +40914,6 @@ dir = 8 }, /obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "hPp" = ( @@ -46898,15 +40991,8 @@ /area/station/hallway/secondary/command) "hPQ" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/main) "hPR" = ( @@ -46931,12 +41017,8 @@ /obj/structure/fence/door/opened{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "hPZ" = ( @@ -46945,7 +41027,6 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/button/door/directional/north{ id = "trashcompactor"; name = "Trash Compactor"; @@ -46988,19 +41069,15 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Observation" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "hQi" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "hQm" = ( @@ -47017,15 +41094,11 @@ /obj/structure/chair/office{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "hQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "hQA" = ( @@ -47068,9 +41141,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "hRq" = ( /obj/effect/turf_decal/stripes{ @@ -47094,10 +41165,8 @@ /area/station/maintenance/starboard/fore) "hRv" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/stone, /area/station/common/wrestling/arena) @@ -47159,8 +41228,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "hSm" = ( @@ -47213,16 +41282,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"hSF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) "hSG" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -47243,10 +41302,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/grass, /area/station/science/research) -"hSP" = ( -/obj/effect/spawner/random/trash/graffiti, -/turf/closed/wall, -/area/station/maintenance/department/engineering/engine_aft_port) "hSQ" = ( /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) @@ -47266,12 +41321,8 @@ "hSU" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "hSW" = ( @@ -47301,12 +41352,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47319,10 +41366,8 @@ /area/station/command/heads_quarters/captain) "hTD" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -47369,10 +41414,8 @@ /turf/open/floor/plating, /area/station/maintenance/rus_surgery) "hTY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/psychology) "hUg" = ( @@ -47408,10 +41451,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -47444,12 +41485,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47465,41 +41502,21 @@ /turf/open/floor/iron/dark, /area/station/security/lockers) "hVk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/basic/mouse/brown/tom, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"hVn" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/openspace, -/area/station/maintenance/aft/upper) "hVo" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Office" }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/office) @@ -47529,8 +41546,8 @@ /area/station/commons/dorms) "hVE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -47581,14 +41598,13 @@ /turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "hWj" = ( -/obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/security/prison/mess) "hWl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "hWp" = ( @@ -47599,14 +41615,12 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_exam/cat) "hWs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) "hWy" = ( -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 }, /turf/open/floor/iron/white, @@ -47635,10 +41649,6 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "hWC" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -47648,8 +41658,8 @@ id = "Psychward2"; name = "Cell Door 2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -47669,16 +41679,6 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/iron/dark, /area/station/security/prison/workout) -"hWY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "hWZ" = ( /obj/structure/table, /obj/item/pai_card, @@ -47733,8 +41733,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/cable, /obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/sorting) "hXK" = ( @@ -47753,9 +41753,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "hXM" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/railing{ dir = 4 }, @@ -47771,8 +41768,8 @@ /area/station/common/wrestling/arena) "hXS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/atmos{ name = "Atmospherics Auxiliary Port" }, @@ -47800,12 +41797,8 @@ /turf/open/floor/glass/reinforced, /area/station/science) "hYo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/upper) @@ -47825,21 +41818,8 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"hYA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "hYF" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -47856,32 +41836,20 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "hYS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/item/cigbutt, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "hYV" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "hYX" = ( /obj/effect/landmark/start/bartender, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) "hYZ" = ( @@ -47900,9 +41868,6 @@ /obj/machinery/door/window/brigdoor/left/directional/west{ name = "Experimental Containment" }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/engine, /area/station/science/explab) "hZm" = ( @@ -47925,12 +41890,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library/abandoned) "hZq" = ( @@ -47947,8 +41908,8 @@ /turf/closed/wall, /area/station/commons/locker) "hZz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -47977,15 +41938,12 @@ name = "science camera"; network = list("ss13","rd") }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "hZI" = ( /turf/closed/wall, /area/station/security/execution/transfer) "hZO" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /obj/structure/disposalpipe/segment{ dir = 10 @@ -47998,21 +41956,6 @@ }, /turf/open/floor/iron/grimy, /area/station/command/meeting_room/council) -"hZQ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "iaa" = ( /obj/structure/chair, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -48022,12 +41965,8 @@ "iac" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/simple_animal/bot/medbot{ name = "Doctor Heals-The-Idiot" }, @@ -48035,28 +41974,17 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iai" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ian" = ( /obj/effect/turf_decal/vg_decals/numbers/two{ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "iau" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -48155,12 +42083,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -48186,20 +42110,14 @@ "ibo" = ( /obj/structure/table/reinforced, /obj/item/folder/red, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "ibr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/shower) @@ -48264,14 +42182,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) -"ich" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "icj" = ( /obj/structure/decorative/shelf, /obj/effect/spawner/random/maintenance/two, @@ -48294,12 +42204,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -48307,22 +42213,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "icv" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/machinery/modular_computer/preset/id{ dir = 8 }, /obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "icG" = ( @@ -48353,12 +42250,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "icN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -48443,42 +42336,15 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"idD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "idG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner/end/flip{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"idM" = ( -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "AISATFOYER" - }, -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "MiniSat Exterior Access" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/engineering/transit_tube) "idP" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -48505,10 +42371,9 @@ /area/station/medical/chemistry) "idY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iej" = ( @@ -48534,9 +42399,6 @@ /obj/structure/sign/barber{ pixel_x = -13 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -48544,32 +42406,20 @@ "iem" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/security/armory) "ien" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) "ies" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/siding/wood{ dir = 9 }, @@ -48577,63 +42427,34 @@ dir = 4 }, /obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ieu" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "iev" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"ieF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "ieG" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/hallway/primary/port) -"ieJ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ieR" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/tank_holder/extinguisher, @@ -48656,9 +42477,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ieX" = ( @@ -48667,9 +42486,7 @@ /obj/machinery/door/airlock/atmos/glass{ name = "Distribution Loop" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/office) "ifb" = ( @@ -48688,10 +42505,6 @@ /area/station/maintenance/starboard/fore) "ifj" = ( /obj/structure/table/wood/fancy/red, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/cup/rag{ pixel_x = 2; pixel_y = 11 @@ -48712,6 +42525,7 @@ pixel_x = -2; pixel_y = 9 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ifn" = ( @@ -48739,35 +42553,17 @@ /area/station/maintenance/department/medical/central) "ifq" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"ifs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "ifx" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "ify" = ( @@ -48785,16 +42581,14 @@ /area/station/medical/medbay/lobby) "ifG" = ( /obj/machinery/chem_heater/withbuffer, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "ifQ" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured, /area/station/common/cryopods) "ifR" = ( @@ -48807,9 +42601,6 @@ /area/station/service/bar/atrium) "ifS" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/plating, /area/station/escapepodbay) "ifT" = ( @@ -48841,12 +42632,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/station/science/research) -"igG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "igH" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -48913,9 +42698,6 @@ /turf/open/floor/iron/dark, /area/station/security/power_station) "igR" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 1 }, @@ -48924,10 +42706,8 @@ /turf/open/floor/iron/checker, /area/station/engineering/gravity_generator) "ihg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) "ihs" = ( @@ -48936,26 +42716,19 @@ /area/station/command/heads_quarters/captain/private) "ihD" = ( /obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) "ihH" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "ihM" = ( @@ -49012,7 +42785,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "iij" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint) @@ -49063,8 +42836,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/wrestling/locker) "iiL" = ( @@ -49080,36 +42853,31 @@ }, /area/station/command/gateway) "iiT" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/item/kirbyplants/random, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "ijc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) "iji" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "ijj" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -49132,8 +42900,8 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/iron/white, /area/station/science/explab) @@ -49169,15 +42937,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ijC" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) @@ -49188,12 +42949,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49229,32 +42986,18 @@ /area/station/commons/dorms/room2) "ijZ" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/item/toy/plush/nukeplushie{ name = "Lasertag Red Flag" }, /obj/structure/window/reinforced/tinted/spawner/directional/north, /obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "ikb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -49265,19 +43008,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "ikn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -49287,12 +43024,8 @@ }, /obj/effect/spawner/random/trash/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "ikr" = ( @@ -49315,12 +43048,8 @@ /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -49347,8 +43076,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_diner) @@ -49405,12 +43134,8 @@ /area/station/science/robotics) "ilB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/secbot/beepsky/officer, /obj/structure/disposalpipe/segment{ dir = 4 @@ -49427,12 +43152,8 @@ /area/station/hallway/secondary/entry) "ilK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49472,22 +43193,8 @@ /turf/open/floor/iron, /area/station/commons/fitness/recreation) "img" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, /obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "iml" = ( @@ -49500,12 +43207,8 @@ /area/station/science/robotics) "imm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/chapel{ dir = 8 }, @@ -49534,8 +43237,8 @@ "imD" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -49558,10 +43261,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/morgue) "imR" = ( @@ -49592,14 +43293,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/room1) -"ina" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/medical_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "inc" = ( /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/iron/dark, @@ -49610,13 +43303,10 @@ dir = 4; pixel_x = -5 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -49663,8 +43353,8 @@ }, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, @@ -49676,17 +43366,12 @@ name = "Distribution Loop" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "inQ" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 4 @@ -49704,7 +43389,6 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "inZ" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) @@ -49719,8 +43403,8 @@ /area/station/maintenance/port/upper) "iof" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/digital_clock/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -49728,12 +43412,8 @@ /obj/structure/lattice/catwalk, /obj/structure/railing/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/aft/upper) "ior" = ( @@ -49742,8 +43422,8 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iox" = ( @@ -49753,8 +43433,8 @@ /area/station/engineering/atmos) "ioy" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "ioE" = ( @@ -49842,8 +43522,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "ipR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -49911,7 +43591,7 @@ "iqk" = ( /obj/effect/turf_decal/bot, /obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "iqm" = ( /obj/structure/window/reinforced/plasma/spawner/directional/west, @@ -49948,19 +43628,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/engineering/main) -"iqE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "iqG" = ( /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/vending/colavend, @@ -49977,23 +43644,16 @@ /obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "iqP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/main) "iqT" = ( @@ -50018,19 +43678,12 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Xenobio Containment"; name = "Xenobiology Containment Shutters" }, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) -"ira" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/gravity_generator) "irb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner/end{ @@ -50046,9 +43699,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/brown{ color = "#A46106" }, @@ -50138,12 +43789,6 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/table, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, @@ -50152,12 +43797,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/bitrunning/den) @@ -50168,7 +43809,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "isg" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -50194,19 +43834,6 @@ /obj/structure/table, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) -"isu" = ( -/obj/structure/cable, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/locker) "isy" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2, @@ -50219,9 +43846,6 @@ /turf/closed/wall, /area/station/security/checkpoint/medical) "isJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/tcomms_all, /obj/machinery/light/directional/south, @@ -50232,12 +43856,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "isR" = ( @@ -50264,15 +43884,12 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "ita" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/upper) "itv" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "itJ" = ( @@ -50291,8 +43908,8 @@ /obj/machinery/door/airlock/silver{ name = "Changing Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/iron/dark/side, @@ -50321,8 +43938,8 @@ "iuq" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -50331,24 +43948,20 @@ /area/station/hallway/primary/central/aft) "iur" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "iuy" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "iuD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -50366,12 +43979,8 @@ /area/station/commons/dorms/room5) "iuN" = ( /obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "iuP" = ( @@ -50384,9 +43993,7 @@ /turf/open/floor/plating, /area/station/science/ordnance/testlab) "iuS" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "iuT" = ( @@ -50395,8 +44002,9 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) "iuU" = ( @@ -50408,21 +44016,8 @@ /area/station/maintenance/department/security/upper) "iuW" = ( /obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"iuY" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/engine_aft_starboard) "ivc" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -50432,14 +44027,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) -"ivd" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ivh" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -50463,10 +44050,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white/side{ dir = 8 @@ -50483,7 +44068,6 @@ /obj/machinery/mass_driver/trash{ dir = 4 }, -/obj/effect/turf_decal/stripes/full, /turf/open/floor/plating, /area/station/maintenance/disposal) "ivs" = ( @@ -50503,9 +44087,7 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "ivB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/common/laser_tag) @@ -50538,12 +44120,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50583,9 +44161,6 @@ /area/station/maintenance/starboard/fore) "ivX" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/book/manual/wiki/infections, /obj/item/reagent_containers/syringe/antiviral, /obj/item/reagent_containers/dropper, @@ -50603,9 +44178,7 @@ /area/station/science/explab) "iwe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/power_station) "iwl" = ( @@ -50616,12 +44189,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "prison-mess-hall" }, @@ -50649,12 +44218,8 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "iwt" = ( @@ -50674,12 +44239,8 @@ "iwv" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50709,8 +44270,8 @@ "iwV" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -50736,12 +44297,8 @@ "ixh" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/chair/sofa/bench/right, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/workout) "ixj" = ( @@ -50763,10 +44320,8 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "ixs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "ixt" = ( @@ -50781,8 +44336,8 @@ /area/station/hallway/primary/upper) "ixy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "ixA" = ( @@ -50889,26 +44444,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"ixZ" = ( -/obj/effect/turf_decal/stripes/end, -/obj/machinery/suit_storage_unit/engine, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) -"iye" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "iyf" = ( /obj/structure/fence/door/opened{ dir = 4 @@ -50926,21 +44465,14 @@ name = "Secure Tool Storage Blast Door" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) -"iyq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "iyE" = ( /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/loading_area/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "iyH" = ( @@ -50952,10 +44484,8 @@ /obj/effect/turf_decal/bot_red, /obj/structure/cable, /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "iyX" = ( @@ -50973,12 +44503,10 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "izc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "izd" = ( /obj/structure/chair/sofa/corp/right, @@ -51004,25 +44532,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "izm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/theater/abandoned) "izq" = ( /obj/structure/railing, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/command/storage/eva) -"izF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "izM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -51037,12 +44553,8 @@ /obj/machinery/door/airlock/corporate{ name = "Blueshield's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -51064,22 +44576,14 @@ /turf/open/floor/plating, /area/station/construction/mining/aux_base) "iAj" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) "iAk" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/window/left{ dir = 1 }, @@ -51133,14 +44637,6 @@ }, /turf/open/floor/glass, /area/station/commons/dorms) -"iAO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance/testlab) "iAU" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -51244,18 +44740,8 @@ /obj/machinery/door/airlock/virology/glass{ name = "Isolation B" }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /turf/open/floor/iron, /area/station/medical/virology) @@ -51263,9 +44749,6 @@ /obj/structure/fence/cut/medium{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/firedoor/border_only{ dir = 1 }, @@ -51320,12 +44803,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "iCi" = ( @@ -51353,13 +44832,6 @@ /obj/machinery/computer/shuttle/labor{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "iCD" = ( @@ -51372,12 +44844,8 @@ "iCF" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "iCJ" = ( @@ -51385,12 +44853,8 @@ icon_state = "dirt-flat-1" }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, @@ -51446,8 +44910,8 @@ }, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "iDw" = ( @@ -51459,12 +44923,7 @@ /area/station/maintenance/department/security/lower) "iDx" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -51484,12 +44943,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "iDH" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/bin, /obj/machinery/light/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -51512,22 +44965,15 @@ "iDX" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iEg" = ( /obj/structure/trash_pile, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"iEh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "iEm" = ( /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, @@ -51535,19 +44981,15 @@ /area/station/engineering/main) "iEp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/security/prison/upper) "iEr" = ( /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable/multilayer/connected, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -51557,13 +44999,8 @@ /area/station/cargo/warehouse) "iEx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/machinery/door/firedoor, /turf/open/floor/iron/white, @@ -51584,14 +45021,11 @@ /turf/open/floor/plating, /area/station/service/chapel) "iEB" = ( -/obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/vg_decals/numbers/one, /obj/structure/closet/emcloset/wall{ pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/escapepodbay) "iEC" = ( @@ -51644,12 +45078,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) @@ -51697,17 +45127,13 @@ /area/station/engineering/break_room) "iFx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "iFz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "iFA" = ( @@ -51772,43 +45198,29 @@ /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "iFX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/machinery/power/shuttle_engine/propulsion{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "iGa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "iGb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iGe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "iGg" = ( @@ -51819,15 +45231,6 @@ "iGk" = ( /turf/closed/wall, /area/station/maintenance/abandon_wrestle) -"iGo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "iGr" = ( /obj/machinery/shower/directional/west, /obj/structure/drain, @@ -51844,7 +45247,7 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "iGu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -51861,9 +45264,6 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "iGE" = ( @@ -51907,9 +45307,6 @@ /turf/open/floor/carpet, /area/station/service/library) "iHj" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/side{ dir = 8 @@ -51920,8 +45317,8 @@ name = "Interrogation" }, /obj/effect/turf_decal/delivery/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -51940,8 +45337,8 @@ /area/station/command/heads_quarters/captain) "iHv" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "iHw" = ( @@ -51949,8 +45346,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "iHC" = ( @@ -51963,9 +45360,7 @@ /area/station/maintenance/abandon_arcade) "iHI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "iHJ" = ( @@ -51975,9 +45370,7 @@ /obj/structure/cable, /obj/machinery/duct, /obj/effect/decal/cleanable/food/flour, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "iHL" = ( @@ -52026,13 +45419,6 @@ dir = 8 }, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/office) "iIk" = ( @@ -52041,9 +45427,6 @@ }, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, @@ -52067,12 +45450,8 @@ /area/station/escapepodbay) "iIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/effect/landmark/start/science_guard, /turf/open/floor/iron, @@ -52081,9 +45460,7 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "iIz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "iIJ" = ( @@ -52106,12 +45483,8 @@ }, /area/station/commons/fitness) "iJe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52120,30 +45493,14 @@ /area/station/maintenance/thruster_room/central) "iJh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/duct, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) -"iJm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "iJw" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/bot, @@ -52157,9 +45514,7 @@ id_tag = "Toilet3"; name = "Stall 3" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "iJK" = ( @@ -52179,12 +45534,8 @@ /obj/structure/disposalpipe/junction{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "iJY" = ( @@ -52201,12 +45552,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iKb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "iKj" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/railing/corner/end/flip{ @@ -52225,10 +45570,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "iKD" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/button/door{ id = "Barshutters"; name = "Bar Shutters"; @@ -52243,9 +45584,10 @@ pixel_y = -6; req_access = list("bar") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "iKG" = ( @@ -52301,12 +45643,8 @@ /area/station/science/breakroom) "iLo" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52325,16 +45663,6 @@ }, /area/station/science) "iLs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access" }, @@ -52342,19 +45670,15 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload_foyer) "iLw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/bin, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -52362,12 +45686,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "iLx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) "iLD" = ( @@ -52383,9 +45703,7 @@ pixel_y = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "iLH" = ( @@ -52450,17 +45768,6 @@ "iMc" = ( /turf/closed/wall/r_wall, /area/station/common/pool) -"iMd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "iMf" = ( /obj/structure/flora/bush/jungle/c/style_3, /obj/structure/flora/bush/flowers_br, @@ -52494,16 +45801,11 @@ /turf/open/floor/plating, /area/station/command/secure_bunker) "iMB" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "iMC" = ( @@ -52522,7 +45824,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -52538,12 +45840,8 @@ /area/station/maintenance/department/security/prison_upper) "iMN" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science) "iMU" = ( @@ -52582,19 +45880,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) -"iNs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "iNy" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 8 @@ -52605,23 +45894,11 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iNB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "iNE" = ( /obj/effect/spawner/random/trash/food_packaging, @@ -52633,8 +45910,8 @@ /area/station/maintenance/port/fore) "iOb" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/firealarm/directional/west, /obj/machinery/duct, @@ -52649,8 +45926,8 @@ /area/space/nearstation) "iOl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -52711,12 +45988,8 @@ "iOR" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "iOX" = ( @@ -52732,10 +46005,10 @@ /area/station/maintenance/department/security/lower) "iPj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, @@ -52752,9 +46025,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "iPA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "iPE" = ( @@ -52764,9 +46035,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "iPK" = ( @@ -52796,9 +46065,6 @@ /obj/item/book/manual/wiki/security_space_law, /obj/item/radio, /obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/end{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint) "iQb" = ( @@ -52820,9 +46086,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "iQx" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 }, @@ -52837,12 +46100,8 @@ /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -52868,12 +46127,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "iQP" = ( @@ -52938,14 +46193,13 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iRq" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 8 }, /obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "iRz" = ( @@ -52955,8 +46209,8 @@ /area/station/maintenance/port/aft) "iRC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "iRJ" = ( @@ -52966,18 +46220,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"iRM" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "iRO" = ( /obj/structure/railing{ dir = 4 @@ -52998,7 +46240,6 @@ }, /obj/machinery/defibrillator_mount/directional/north, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "iSa" = ( @@ -53017,8 +46258,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) @@ -53043,12 +46284,8 @@ "iSV" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/common/locker_room_shower) @@ -53076,8 +46313,8 @@ /area/station/maintenance/starboard/fore) "iTp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -53217,12 +46454,8 @@ "iUv" = ( /obj/effect/landmark/start/chief_medical_officer, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "iUy" = ( @@ -53235,12 +46468,8 @@ /turf/open/floor/wood, /area/station/command/meeting_room/council) "iUB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 @@ -53257,9 +46486,6 @@ /turf/open/floor/grass, /area/station/hallway/primary/aft) "iUL" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/white/smooth_corner{ dir = 1 }, @@ -53279,13 +46505,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"iUR" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "iUS" = ( /obj/item/radio/intercom/directional/east, /obj/machinery/camera/directional/east{ @@ -53300,9 +46519,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/machinery/fax{ fax_name = "Engineering Lobby"; @@ -53320,9 +46536,9 @@ /area/station/command/gateway) "iVe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -53330,9 +46546,7 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "iVh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/nt_rep) @@ -53353,7 +46567,7 @@ /obj/structure/railing/corner/end/flip{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -53404,8 +46618,8 @@ /turf/closed/wall/r_wall, /area/station/maintenance/aft/upper) "iVM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -53420,16 +46634,14 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "iVV" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -53437,8 +46649,8 @@ "iWe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden) "iWi" = ( @@ -53454,22 +46666,16 @@ /area/station/security/detectives_office) "iWu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "iWw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) "iWz" = ( @@ -53480,8 +46686,8 @@ /obj/structure/chair/comfy/black{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, /area/station/command/captain_dining) "iWF" = ( @@ -53499,10 +46705,6 @@ /turf/closed/wall, /area/station/commons/vacant_room/commissary) "iWV" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -53544,12 +46746,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/digital_clock/directional/south, /obj/machinery/duct, /turf/open/floor/wood, @@ -53584,33 +46782,22 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /obj/machinery/duct, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "iXF" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53619,8 +46806,8 @@ }, /area/station/hallway/primary/central) "iXJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53647,10 +46834,8 @@ /area/station/medical/psychology) "iXS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -53670,15 +46855,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/office) -"iXW" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "iYc" = ( /obj/structure/table, /obj/machinery/bluespace_vendor/directional/north, @@ -53709,12 +46885,8 @@ }, /obj/structure/cable, /obj/effect/landmark/start/research_director, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) @@ -53732,17 +46904,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/office) -"iYo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "iYx" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iYA" = ( @@ -53796,8 +46962,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "iYV" = ( @@ -53864,10 +47030,8 @@ /obj/effect/mapping_helpers/requests_console/supplies, /obj/structure/cable, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "iZs" = ( @@ -53891,9 +47055,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "iZv" = ( /turf/open/floor/iron/stairs/right, @@ -53912,7 +47074,7 @@ "iZC" = ( /obj/structure/table/wood, /obj/structure/window/reinforced/spawner/directional/west, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = 5 }, @@ -53942,9 +47104,7 @@ /area/station/common/tailoring) "iZT" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "iZW" = ( /obj/structure/mirror{ @@ -53984,18 +47144,6 @@ }, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"jan" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "jas" = ( /obj/machinery/door/airlock/command/glass{ name = "Control Room" @@ -54029,15 +47177,9 @@ /area/station/hallway/primary/central/aft) "jaI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "jaJ" = ( /obj/effect/turf_decal/bot, @@ -54053,10 +47195,8 @@ /area/station/security/prison/upper) "jaM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "jaR" = ( @@ -54079,18 +47219,11 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "jbh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/herringbone, /area/station/cargo/storage) "jbj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "jbn" = ( @@ -54152,12 +47285,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/library/private) "jbR" = ( @@ -54189,18 +47318,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jbW" = ( -/obj/structure/fence{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/iron/dark/herringbone, -/area/station/cargo/storage) "jbX" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/west, @@ -54210,12 +47327,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 @@ -54243,12 +47356,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "jcn" = ( @@ -54278,19 +47387,14 @@ }, /area/station/security/office) "jcu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/corrections_officer) "jcw" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -54322,12 +47426,8 @@ /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/ce) "jcR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -54346,9 +47446,6 @@ "jdg" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/firecloset, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "jdh" = ( @@ -54389,12 +47486,8 @@ /area/station/security/prison/rec) "jdz" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/drone_bay) @@ -54410,9 +47503,7 @@ /area/station/maintenance/port/upper) "jdO" = ( /obj/machinery/griddle, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "jdR" = ( @@ -54483,7 +47574,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "jeT" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/item/storage/fancy/coffee_condi_display{ pixel_x = 4; @@ -54493,6 +47583,7 @@ pixel_x = -10; pixel_y = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "jfa" = ( @@ -54559,12 +47650,8 @@ /turf/open/floor/carpet/blue, /area/station/service/lawoffice) "jfR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/education) @@ -54575,12 +47662,8 @@ "jfW" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -54594,12 +47677,8 @@ /obj/machinery/door/airlock{ name = "Law Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54612,12 +47691,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "jgo" = ( @@ -54627,9 +47702,7 @@ /obj/machinery/power/terminal, /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -54661,7 +47734,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -54676,9 +47749,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "jha" = ( @@ -54692,17 +47763,9 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/common/cryopods) "jhk" = ( @@ -54710,9 +47773,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "jho" = ( @@ -54731,12 +47792,8 @@ /area/station/medical/virology/isolation) "jhw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -54747,28 +47804,13 @@ /area/station/engineering/supermatter/room) "jhF" = ( /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"jhI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jhL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/secbot{ name = "Officer Beats-The-Kobold" }, @@ -54805,8 +47847,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "jhW" = ( @@ -54872,11 +47914,11 @@ dir = 8 }, /obj/structure/sign/poster/contraband/secborg_vale/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) "jiF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "jiS" = ( @@ -54911,15 +47953,13 @@ "jiV" = ( /obj/item/reagent_containers/cup/bucket/wooden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber/spa) "jiZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "jjb" = ( @@ -54939,12 +47979,8 @@ /area/station/hallway/primary/central/aft) "jjg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "jjm" = ( @@ -54964,9 +48000,6 @@ /obj/item/reagent_containers/cup/glass/coffee{ pixel_x = -7 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/central) "jjr" = ( @@ -54984,8 +48017,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "jju" = ( @@ -55011,9 +48044,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/chemistry) "jjG" = ( @@ -55059,12 +48090,8 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "jkr" = ( @@ -55072,35 +48099,20 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/science/xenobiology) "jku" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "jkx" = ( /obj/structure/disposalpipe/segment{ @@ -55124,31 +48136,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) -"jkF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"jkJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jkO" = ( /obj/structure/chair/sofa/bench/left{ dir = 8; @@ -55171,18 +48158,14 @@ /obj/effect/turf_decal/siding/wood{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/cafeteria) "jkZ" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/assistant, /turf/open/floor/carpet, /area/station/common/tailoring) @@ -55206,8 +48189,8 @@ icon_state = "dirt-flat-1" }, /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "jlt" = ( @@ -55327,8 +48310,8 @@ /area/station/command/heads_quarters/ce) "jmn" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -55348,8 +48331,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "jmH" = ( @@ -55386,20 +48369,14 @@ /area/station/security/prison/mess) "jmT" = ( /obj/effect/landmark/start/blueshield, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "jmZ" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -55414,8 +48391,8 @@ /area/station/engineering/atmos) "jnd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red/half{ dir = 1 }, @@ -55448,15 +48425,10 @@ icon_state = "dirt-flat-1" }, /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "jnr" = ( @@ -55523,28 +48495,14 @@ /turf/open/floor/iron, /area/station/science/circuits) "jnR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/ai_slipper{ uses = 10 }, /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload_foyer) "jnW" = ( /obj/effect/spawner/structure/window/reinforced, @@ -55565,12 +48523,8 @@ "joe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/wood, @@ -55642,19 +48596,6 @@ }, /turf/open/floor/iron/checker, /area/station/service/janitor) -"joG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "joK" = ( /obj/machinery/light/small/directional/west, /obj/machinery/power/port_gen/pacman/pre_loaded, @@ -55669,8 +48610,8 @@ "joN" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "joU" = ( @@ -55701,7 +48642,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -55727,24 +48667,16 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "jpA" = ( /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/security/execution/transfer) "jpC" = ( @@ -55779,16 +48711,10 @@ /area/station/commons/dorms/room1) "jpR" = ( /obj/structure/railing, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/effect/landmark/start/head_of_security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "jpY" = ( @@ -55853,11 +48779,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"jqu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/lesser) "jqx" = ( /obj/machinery/vending/cigarette, /turf/open/floor/carpet/purple, @@ -55868,12 +48789,8 @@ /area/station/common/arcade) "jqC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "jqG" = ( @@ -55885,7 +48802,6 @@ /area/station/security/execution/education) "jqJ" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -55928,23 +48844,10 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"jqZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/courtroom) "jrg" = ( /obj/machinery/door/airlock/medical{ name = "Psychologist's Office" @@ -55954,12 +48857,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /turf/open/floor/wood, /area/station/medical/psychology) @@ -55985,15 +48884,14 @@ "jrw" = ( /obj/effect/turf_decal/bot, /obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, /obj/machinery/camera/directional/east{ c_tag = "Security Post - Cargo"; dir = 8 }, /obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -56015,9 +48913,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -56026,22 +48921,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/common/night_club) "jrH" = ( /obj/effect/turf_decal/stripes/end{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "jrJ" = ( @@ -56052,13 +48941,12 @@ name = "Cell 1"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/one, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -56099,16 +48987,6 @@ /obj/machinery/light/small/broken/directional/west, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"jrZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "jsd" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -56188,12 +49066,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "jsO" = ( @@ -56212,14 +49086,11 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "jsX" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "jtc" = ( @@ -56252,10 +49123,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "jtu" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/light/directional/west, /obj/machinery/cryopod{ dir = 4 @@ -56295,15 +49162,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/station/science/ordnance/bomb) -"jtN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "jtO" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/entertainment/money, @@ -56327,27 +49185,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"jtX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) -"jtY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jub" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -56373,10 +49210,6 @@ /turf/open/floor/wood, /area/station/medical/psychology) "jun" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/command/captain_dining) "juo" = ( @@ -56384,17 +49217,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"juz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "juD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) "juE" = ( @@ -56408,12 +49234,8 @@ /turf/closed/wall, /area/station/security/checkpoint) "juG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56424,17 +49246,15 @@ /area/station/common/locker_room_shower) "juQ" = ( /obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/machinery/status_display/evac/directional/north, /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "juT" = ( @@ -56452,8 +49272,8 @@ "juW" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -56503,9 +49323,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "jvs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -56540,15 +49357,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"jvJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) "jvL" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -56561,10 +49369,9 @@ /area/space/nearstation) "jvQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/execution/transfer) "jvV" = ( @@ -56663,9 +49470,7 @@ "jwV" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "jwX" = ( @@ -56695,12 +49500,8 @@ /area/station/maintenance/department/science/ordnance_maint) "jxk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "jxl" = ( @@ -56717,17 +49518,15 @@ /area/station/security/prison/safe) "jxq" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/carpet, /area/station/service/library) "jxr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "jxs" = ( @@ -56740,9 +49539,7 @@ /area/station/command/heads_quarters/qm) "jxv" = ( /obj/structure/fluff/fokoff_sign, -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "jxx" = ( /obj/effect/turf_decal/tile/neutral{ @@ -56771,13 +49568,12 @@ dir = 1 }, /obj/machinery/vending/coffee, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 9 }, /area/station/hallway/primary/port) "jxF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56795,9 +49591,7 @@ "jxT" = ( /obj/structure/marker_beacon/burgundy, /obj/effect/turf_decal/trimline/white, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "jya" = ( /obj/structure/frame/computer{ @@ -56817,9 +49611,6 @@ pixel_y = 7 }, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "jyo" = ( @@ -56837,8 +49628,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "jyx" = ( @@ -56900,9 +49691,7 @@ /area/station/medical/aslyum) "jzh" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/large, /area/station/cargo/lobby) "jzj" = ( @@ -56913,9 +49702,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -56971,9 +49758,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "jzJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/library/private) "jzZ" = ( @@ -57075,8 +49860,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/effect/mapping_helpers/airlock/abandoned, @@ -57148,12 +49933,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57168,15 +49949,15 @@ name = "Lockdown" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/upper) "jBI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "jBN" = ( @@ -57213,10 +49994,8 @@ /turf/closed/wall/rust, /area/station/maintenance/starboard/fore) "jBZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/mineral/titanium/tiled/white{ name = "Padded tile" @@ -57240,8 +50019,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/research{ name = "Robotics" }, @@ -57295,7 +50074,7 @@ dir = 1 }, /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "jCN" = ( @@ -57310,10 +50089,6 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "jCZ" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -57392,40 +50167,25 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "jDB" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "jDE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -57441,12 +50201,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57454,14 +50210,7 @@ /area/station/maintenance/department/medical/central) "jDU" = ( /obj/structure/rack, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -57473,8 +50222,8 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/service) "jEg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "jEk" = ( @@ -57495,17 +50244,25 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jEs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/stairs{ dir = 4 }, /area/station/cargo/miningoffice) +"jEw" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/cell_charger_multi/wall_mounted/directional/west, +/obj/structure/table, +/obj/item/circuitboard/computer/mech_bay_power_console, +/obj/item/stack/sheet/glass{ + pixel_y = 14 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "jEz" = ( /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -57543,7 +50300,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "jER" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "jEU" = ( @@ -57563,23 +50320,14 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) -"jFe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jFf" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "jFj" = ( @@ -57601,12 +50349,8 @@ c_tag = "Bridge - Command Dining Room"; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57630,12 +50374,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/medical/psychology) "jFw" = ( @@ -57650,7 +50390,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/teleporter) "jFE" = ( @@ -57666,10 +50406,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "jFN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/item/radio/intercom/directional/north, /obj/structure/disposalpipe/segment{ @@ -57689,7 +50425,6 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "jGa" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, @@ -57736,15 +50471,15 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/lobby) "jGA" = ( /obj/structure/table/glass, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/dryer{ dir = 4; pixel_x = -6; @@ -57752,18 +50487,6 @@ }, /turf/open/floor/carpet/black, /area/station/service/barber) -"jGL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "jGS" = ( /obj/structure/chair/comfy/beige, /obj/effect/landmark/start/psychologist, @@ -57788,7 +50511,7 @@ /obj/machinery/door/airlock/security{ name = "Isolation Cell 1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -57811,16 +50534,6 @@ "jHh" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/fax{ fax_name = "Research Division"; name = "Research Division Fax Machine"; @@ -57848,12 +50561,8 @@ }, /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "jHD" = ( @@ -57932,12 +50641,8 @@ /turf/open/floor/iron/dark, /area/station/service/power_station) "jIf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -57988,12 +50693,8 @@ /area/station/science/research) "jIV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 8 }, @@ -58030,18 +50731,9 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "jJl" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/statue/silver/sec, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -58088,12 +50780,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "jJJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties/red, /area/station/common/arcade) "jJK" = ( @@ -58109,19 +50797,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"jJT" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "jJU" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) @@ -58164,12 +50839,8 @@ /area/station/maintenance/aft/upper) "jKw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/line{ dir = 8 }, @@ -58178,8 +50849,8 @@ /area/station/medical/treatment_center) "jKx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -58192,25 +50863,14 @@ }, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"jKJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "jKM" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/effect/landmark/start/bartender, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "jKP" = ( @@ -58218,8 +50878,8 @@ /area/station/common/gaskiosk) "jKU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "Kitchen Junction"; @@ -58234,12 +50894,8 @@ name = "Customs Desk" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -58283,8 +50939,8 @@ /area/station/security/execution/transfer) "jLp" = ( /obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "jLu" = ( @@ -58295,7 +50951,7 @@ /area/station/common/pool) "jLv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs, /area/station/medical/cryo) "jLw" = ( @@ -58305,38 +50961,27 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "jLy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 4 }, /turf/open/floor/carpet, /area/station/hallway/primary/port) "jLA" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/machinery/newscaster/directional/west, /turf/open/floor/iron, /area/station/commons/storage/primary) "jLC" = ( @@ -58390,7 +51035,7 @@ /obj/machinery/door/morgue{ name = "Confession Booth" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "jMm" = ( @@ -58398,8 +51043,8 @@ name = "Supermatter Engine Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/supermatter/room) @@ -58409,12 +51054,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) -"jMq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/research) "jMr" = ( /obj/item/cigbutt, /obj/structure/cable, @@ -58436,13 +51075,6 @@ /obj/machinery/computer/security/labor{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/window/spawner/directional/north, /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, @@ -58495,10 +51127,6 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "jNf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; name = "Warehouse Shutters" @@ -58556,12 +51184,8 @@ /area/station/science/xenobiology) "jNv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/morgue) "jNx" = ( @@ -58573,29 +51197,20 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "jNE" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/commons/storage/primary) "jNH" = ( @@ -58668,12 +51283,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58695,26 +51306,14 @@ /area/station/science/research) "jOn" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/security/interrogation) "jOo" = ( /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) -"jOt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "jOx" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -58723,15 +51322,11 @@ name = "Captains Office Access" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) @@ -58748,9 +51343,7 @@ /area/station/science/breakroom) "jPb" = ( /obj/item/clothing/mask/gas/clown_hat, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "jPe" = ( /obj/structure/table/glass, @@ -58780,8 +51373,8 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jPi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/station/service/theater) @@ -58816,20 +51409,16 @@ /area/station/security/prison/shower) "jPu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "jPv" = ( /obj/effect/turf_decal/caution/stand_clear/blue, /obj/effect/turf_decal/bot_blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "jPK" = ( @@ -58847,8 +51436,8 @@ /area/station/commons/fitness/recreation) "jPP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/dark/side, @@ -58861,14 +51450,14 @@ /obj/effect/mapping_helpers/airlock/access/all/service/general, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "jPR" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) @@ -58900,8 +51489,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -58957,9 +51544,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -58994,9 +51579,7 @@ /obj/structure/chair/office{ dir = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "jQV" = ( /obj/machinery/light/small/directional/north, @@ -59010,16 +51593,14 @@ /area/station/hallway/primary/central) "jQY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "jQZ" = ( /obj/structure/bed, /obj/item/bedsheet/chaplain, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "jRa" = ( @@ -59027,12 +51608,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -59041,12 +51618,6 @@ /obj/structure/railing/corner, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) -"jRd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/security/prison/upper) "jRe" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -59067,13 +51638,9 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -59107,9 +51674,6 @@ /turf/open/openspace, /area/station/commons/dorms) "jRB" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/scanning_module/adv, /obj/item/stock_parts/scanning_module/adv, @@ -59180,8 +51744,8 @@ network = list("minisat"); start_active = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "jSd" = ( @@ -59193,11 +51757,6 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central) -"jSf" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) "jSs" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -59222,8 +51781,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -59235,12 +51794,8 @@ }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "jSI" = ( @@ -59253,13 +51808,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/carpet, /area/station/service/chapel) -"jSL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "jSR" = ( /obj/structure/trash_pile, /obj/effect/decal/cleanable/dirt{ @@ -59287,9 +51835,7 @@ /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "jTj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -59308,20 +51854,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) -"jTC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jTD" = ( /obj/effect/turf_decal/trimline/blue, /obj/item/toy/basketball, @@ -59344,13 +51880,12 @@ name = "Cell 4"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/four, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -59429,12 +51964,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -59484,16 +52015,12 @@ /area/station/security/prison/safe) "jUF" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/large, /area/station/cargo/lobby) "jUM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59501,22 +52028,16 @@ /turf/open/floor/iron, /area/station/common/wrestling/arena) "jUN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/upper) "jUO" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -59578,12 +52099,8 @@ "jVm" = ( /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "jVo" = ( @@ -59593,8 +52110,8 @@ "jVp" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -59605,26 +52122,16 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/engineering/atmos) "jVv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "jVw" = ( /obj/effect/decal/cleanable/dirt{ @@ -59650,12 +52157,8 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "jVB" = ( @@ -59669,12 +52172,8 @@ /area/station/command/heads_quarters/hos) "jVI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -59741,21 +52240,13 @@ }, /obj/item/tank/jetpack/carbondioxide, /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "jWg" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/night_club) "jWh" = ( @@ -59788,9 +52279,7 @@ dir = 1 }, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/storage) "jWp" = ( @@ -59809,9 +52298,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "jWA" = ( @@ -59830,6 +52317,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "jWJ" = ( @@ -59848,33 +52336,19 @@ }, /area/station/security/prison/visit) "jXa" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/machinery/computer/records/medical{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/machinery/computer/records/medical{ +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "jXA" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "jXB" = ( @@ -59887,9 +52361,6 @@ "jXG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry2"; @@ -59898,19 +52369,14 @@ /obj/machinery/door/airlock/public/glass{ name = "Arrivals" }, -/obj/effect/turf_decal/siding/thinplating_new{ +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "jXI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -59941,8 +52407,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "jXV" = ( @@ -59956,9 +52422,6 @@ /area/station/security/prison) "jYb" = ( /obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -60016,9 +52479,7 @@ /obj/machinery/atmospherics/components/binary/valve/digital{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "jYt" = ( /obj/effect/spawner/structure/window/reinforced, @@ -60031,20 +52492,6 @@ "jYy" = ( /turf/open/openspace, /area/station/maintenance/port/upper) -"jYB" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) -"jYD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "jYG" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, @@ -60059,21 +52506,13 @@ /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "jYJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/work) @@ -60087,9 +52526,6 @@ /turf/open/floor/plating, /area/station/command/heads_quarters/hop) "jYQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/storage/belt/utility, /obj/item/storage/belt/utility, @@ -60108,16 +52544,6 @@ "jYX" = ( /turf/open/floor/iron/white, /area/station/science/research) -"jYZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "jZa" = ( /obj/machinery/light/small/broken/directional/west, /obj/effect/decal/cleanable/dirt{ @@ -60135,12 +52561,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "West RnD Wing" }, @@ -60179,9 +52601,7 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "jZq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -60258,12 +52678,11 @@ /turf/open/floor/wood, /area/station/service/kitchen/diner) "jZK" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "jZN" = ( @@ -60277,12 +52696,6 @@ }, /area/station/security/prison/visit) "jZP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -60322,20 +52735,14 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) "kau" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -60359,15 +52766,9 @@ /area/station/command/heads_quarters/rd) "kba" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance) "kbe" = ( /obj/structure/dresser, @@ -60383,12 +52784,8 @@ /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) "kbs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -60434,12 +52831,8 @@ /area/station/science) "kbZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -60452,12 +52845,8 @@ /area/station/commons/toilet/auxiliary) "kci" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel) @@ -60480,15 +52869,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/common/laser_tag) -"kcK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "kcM" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -60535,9 +52915,7 @@ "kcZ" = ( /obj/effect/turf_decal/bot, /obj/structure/liquid_pump, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -60570,8 +52948,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/genetics, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -60596,9 +52974,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kdO" = ( /obj/machinery/light/directional/west, @@ -60648,10 +53024,9 @@ "key" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -60681,12 +53056,8 @@ /area/station/hallway/secondary/command) "keK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -60704,12 +53075,8 @@ }, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/plasticflaps/opaque, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "keT" = ( @@ -60772,37 +53139,21 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"kfq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/department/engineering/atmos_aux_port) "kft" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, -/turf/open/floor/engine{ - icon_state = "floor" +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" }, -/area/station/science/ordnance/burnchamber) +/turf/open/floor/iron, +/area/station/science/ordnance) "kfv" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -60827,12 +53178,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "kfD" = ( @@ -60886,12 +53233,8 @@ }, /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) @@ -60902,10 +53245,6 @@ /area/station/engineering/atmos/test_chambers) "kfW" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark/side{ @@ -60933,8 +53272,8 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "kgf" = ( @@ -60948,8 +53287,8 @@ /area/station/service/chapel) "kgh" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ dir = 8 }, @@ -60971,8 +53310,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -60989,8 +53328,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) "kgr" = ( @@ -61005,33 +53344,11 @@ pixel_y = 5 }, /obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"kgs" = ( -/obj/structure/railing/corner/end/flip{ - dir = 1 - }, -/obj/structure/railing/corner/end{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "kgt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "kgv" = ( @@ -61074,20 +53391,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/mess) -"kgJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kgO" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/engineering/main) "kgQ" = ( @@ -61100,8 +53406,8 @@ id_tag = "HoPdoor"; name = "Head Of Personel's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/hop, /obj/machinery/duct, /turf/open/floor/wood, @@ -61140,12 +53446,8 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -61174,8 +53476,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/wood, @@ -61203,9 +53505,7 @@ /area/station/science/research) "khA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -61252,10 +53552,8 @@ /area/station/service/hydroponics/garden/abandoned) "khN" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/dorms) "khO" = ( @@ -61295,24 +53593,11 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"khZ" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 4 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "kib" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) @@ -61340,15 +53625,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"kim" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "kir" = ( /obj/structure/cable, /obj/machinery/duct, @@ -61359,15 +53635,6 @@ /obj/machinery/vending/wardrobe/coroner_wardrobe, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"kiI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "kiL" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Aft Solar Access" @@ -61422,12 +53689,8 @@ name = "Locker Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/common/locker_room_shower) @@ -61473,13 +53736,6 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "kjL" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall8"; @@ -61498,12 +53754,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "kkf" = ( @@ -61514,8 +53766,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "kkg" = ( @@ -61524,16 +53776,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"kkh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "kkv" = ( /obj/machinery/door/airlock/bathroom{ name = "Restroom" @@ -61551,26 +53793,21 @@ /turf/open/floor/wood/parquet, /area/station/service/theater) "kky" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "kkC" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/comfy/brown{ dir = 4 }, /obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "kkD" = ( @@ -61614,12 +53851,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "klh" = ( @@ -61654,8 +53887,8 @@ "klB" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -61672,12 +53905,8 @@ /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/aft) "klV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -61705,7 +53934,6 @@ /turf/open/floor/iron/dark, /area/station/service/library/printer) "kmb" = ( -/obj/effect/turf_decal/stripes, /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high, @@ -61717,12 +53945,8 @@ /area/station/engineering/storage/tech) "kmc" = ( /obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "kmg" = ( @@ -61744,10 +53968,8 @@ /area/station/science/research) "kmi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "kmj" = ( @@ -61771,8 +53993,8 @@ "kml" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "kmq" = ( @@ -61793,12 +54015,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "kms" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -61822,12 +54040,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "kmG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 4 @@ -61867,12 +54081,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -61888,12 +54098,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -61901,16 +54107,13 @@ /area/station/science/ordnance/storage) "knm" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /obj/structure/closet/secure_closet/brig{ id = "cargocell"; name = "Cargo Cell Locker" }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -61922,12 +54125,8 @@ /area/station/security/prison/upper) "kno" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -61947,12 +54146,8 @@ /area/station/service/chapel) "knw" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61992,11 +54187,6 @@ }, /turf/open/floor/iron, /area/station/science/research) -"knD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/brig) "knM" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/extinguisher_cabinet/directional/east, @@ -62018,7 +54208,7 @@ /area/station/hallway/secondary/command) "knV" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/security/prison/visit) @@ -62036,9 +54226,6 @@ /area/station/hallway/primary/central) "koc" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/rack, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, @@ -62052,17 +54239,8 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "kox" = ( @@ -62108,31 +54286,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"koL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"koW" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "kpo" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, @@ -62145,8 +54298,8 @@ /area/station/security/prison/garden) "kpz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall7"; location = "hall6" @@ -62165,9 +54318,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "kpP" = ( @@ -62187,12 +54338,8 @@ name = "Blueshield's Equipment Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -62269,19 +54416,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "kqo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/bed, /obj/item/bedsheet/clown, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62350,12 +54484,8 @@ /area/space/nearstation) "kqL" = ( /obj/structure/sign/poster/party_game/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "kqU" = ( @@ -62387,9 +54517,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "krl" = ( /obj/effect/turf_decal/stripes/line, @@ -62413,12 +54541,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/rd) "krt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "kru" = ( @@ -62457,8 +54581,8 @@ /area/station/common/wrestling/arena) "krU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "krV" = ( @@ -62473,14 +54597,14 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "ksj" = ( /obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/side{ dir = 1 @@ -62501,18 +54625,6 @@ dir = 1 }, /area/station/security/warden) -"ksp" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/landmark/start/scientist, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/science/research) "kss" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -62530,10 +54642,8 @@ /area/station/medical/exam_room) "ksu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat/hallway) "ksx" = ( @@ -62583,7 +54693,6 @@ /turf/open/floor/iron, /area/station/security/checkpoint/science/research) "ksV" = ( -/obj/effect/turf_decal/tile/red, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -62598,12 +54707,8 @@ /area/station/maintenance/department/science/lower) "ktc" = ( /obj/effect/spawner/random/trash/moisture_trap, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "ktl" = ( @@ -62616,9 +54721,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "kts" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -62667,12 +54769,8 @@ /area/station/maintenance/department/medical/central) "ktK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -62683,10 +54781,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "ktQ" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#00ff00"; - name = "green" - }, /obj/machinery/cryopod{ dir = 4 }, @@ -62729,7 +54823,7 @@ name = "Service Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/service/power_station) @@ -62741,15 +54835,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/night_club) -"kuj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "kus" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -62762,8 +54847,8 @@ /area/station/command/heads_quarters/hop) "kut" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -62824,59 +54909,20 @@ pixel_x = -3; pixel_y = -4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance/testlab) -"kuR" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, -/area/station/security/brig) -"kuS" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) -"kuV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) +/area/station/science/ordnance/testlab) "kvp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron/white, /area/station/science/research) "kvs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/service/chapel/office) @@ -62889,9 +54935,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "kvx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) @@ -62908,8 +54952,8 @@ id_tag = "HoPdoor"; name = "Head of Personel's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -62921,20 +54965,14 @@ }, /area/station/hallway/primary/central/aft) "kvQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "kvR" = ( /obj/structure/table, /obj/item/plate, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "kvS" = ( @@ -62956,9 +54994,7 @@ /area/station/service/chapel/office) "kvY" = ( /mob/living/simple_animal/bot/floorbot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -62987,13 +55023,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) -"kwm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/brig) "kwo" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/light/directional/east, @@ -63018,8 +55047,8 @@ name = "Service Supply Closet" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "kwu" = ( @@ -63030,9 +55059,7 @@ /obj/machinery/airalarm/directional/north{ pixel_y = 22 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "kwv" = ( @@ -63042,12 +55069,8 @@ /turf/open/floor/carpet/purple, /area/station/commons/dorms/room4) "kww" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "kwB" = ( @@ -63074,22 +55097,16 @@ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/oil/streak, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "kwM" = ( /obj/structure/table/reinforced/rglass, /obj/machinery/cell_charger, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/spawner/directional/west, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -63117,6 +55134,12 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"kxe" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kxk" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 @@ -63126,48 +55149,20 @@ "kxn" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/secondary/command) "kxq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/command/gateway) -"kxs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) -"kxv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kxz" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/smooth_large, @@ -63178,8 +55173,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/corner, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -63197,12 +55192,8 @@ "kxH" = ( /obj/item/cigbutt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -63259,21 +55250,14 @@ /obj/effect/turf_decal/stripes{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) "kyr" = ( /obj/machinery/computer/records/medical, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "kys" = ( @@ -63297,8 +55281,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/side, /area/station/command/heads_quarters/ce) @@ -63346,8 +55330,8 @@ /area/station/hallway/primary/upper) "kzb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -63390,23 +55374,13 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"kzp" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "kzr" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating, @@ -63421,22 +55395,12 @@ /turf/open/floor/wood/tile, /area/station/service/bar/atrium) "kzx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, /obj/machinery/light/directional/north, /obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "kzy" = ( /obj/machinery/light/directional/north, @@ -63445,10 +55409,8 @@ /area/station/service/bar/backroom) "kzz" = ( /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -63472,19 +55434,18 @@ /obj/structure/window/spawner/directional/north, /obj/structure/table/reinforced, /obj/machinery/computer/security/telescreen/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "kzI" = ( /turf/open/floor/iron, /area/station/science/xenobiology) "kzN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/meeting_room/council) "kzQ" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, @@ -63498,12 +55459,8 @@ /area/station/construction/mining/aux_base) "kzV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint/medical) @@ -63524,16 +55481,14 @@ /turf/open/floor/plating, /area/station/security/power_station) "kAh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/office) "kAi" = ( /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/south, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -63550,9 +55505,7 @@ /obj/item/storage/box/deputy{ pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) "kAn" = ( @@ -63562,12 +55515,8 @@ req_access = list("security") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "kAp" = ( @@ -63582,7 +55531,7 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "kAy" = ( @@ -63647,12 +55596,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "kBa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/time_clock/directional/north, /turf/open/floor/iron/dark/textured, @@ -63664,10 +55607,7 @@ /obj/structure/transit_tube/curved/flipped{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "kBg" = ( /obj/structure/chair/plastic{ @@ -63678,7 +55618,7 @@ /area/station/maintenance/abandon_wrestle) "kBo" = ( /obj/structure/closet/secure_closet/personal, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) @@ -63702,10 +55642,6 @@ /area/station/science/xenobiology/control) "kBG" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/directional/east, /turf/open/floor/plating, /area/station/cargo/storage) @@ -63733,12 +55669,8 @@ /area/station/service/cafeteria) "kCe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "kCf" = ( @@ -63772,10 +55704,8 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "kCt" = ( @@ -63905,12 +55835,8 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -63922,9 +55848,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "kDP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) @@ -63947,14 +55871,8 @@ /area/station/maintenance/starboard/fore) "kEa" = ( /obj/effect/turf_decal/arrows/white, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"kEh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "kEj" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/grassy, @@ -63962,12 +55880,8 @@ /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/commons/dorms) "kEr" = ( @@ -63985,9 +55899,7 @@ "kEs" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/landmark/start/paramedic, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) "kEv" = ( @@ -64001,19 +55913,6 @@ pixel_y = -3 }, /obj/item/lipstick/random, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "kEw" = ( @@ -64021,8 +55920,8 @@ /obj/structure/statue/sandstone/venus{ layer = 3.1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -64073,13 +55972,12 @@ /area/station/cargo/miningoffice) "kFe" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) "kFn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -64089,19 +55987,9 @@ /area/station/maintenance/port/fore) "kFt" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "kFv" = ( @@ -64125,17 +56013,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/security/checkpoint) -"kFC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "kFL" = ( /obj/structure/railing{ dir = 10 @@ -64178,9 +56055,6 @@ /turf/closed/wall, /area/station/command/gateway) "kGm" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, @@ -64188,12 +56062,14 @@ /area/station/science/xenobiology) "kGp" = ( /obj/machinery/light/directional/west, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/chem_dispenser/drinks{ dir = 4; pixel_y = 2 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "kGs" = ( @@ -64202,8 +56078,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/white/side, @@ -64229,30 +56105,21 @@ /turf/open/floor/plating, /area/station/cargo/storage) "kGE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "kGL" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/engineering_all, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "kGM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /obj/machinery/duct, /turf/open/floor/wood, @@ -64294,12 +56161,9 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "kHq" = ( -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "kHt" = ( @@ -64331,17 +56195,6 @@ }, /turf/open/floor/eighties/red, /area/station/common/arcade) -"kHC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kHF" = ( /obj/effect/spawner/random/trash/moisture_trap, /obj/structure/disposalpipe/segment{ @@ -64362,9 +56215,6 @@ id = "Cell 5"; name = "Cell 5 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -64374,12 +56224,8 @@ "kHP" = ( /obj/machinery/power/terminal, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/science/power_station) @@ -64392,14 +56238,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"kHW" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/service_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "kIi" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -64416,9 +56254,7 @@ /turf/open/floor/iron, /area/station/engineering/storage) "kIp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/effect/turf_decal/trimline/green/filled/corner{ @@ -64439,9 +56275,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "kIH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/work) @@ -64466,12 +56300,8 @@ /area/station/command/meeting_room/council) "kIK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -64481,14 +56311,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"kIX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/landmark/start/scientist, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/science/breakroom) "kJm" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/safe/floor{ @@ -64515,12 +56337,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "kJB" = ( @@ -64532,12 +56350,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kJK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "kJQ" = ( /obj/machinery/modular_computer/preset/command, /turf/open/floor/iron/dark, @@ -64567,8 +56379,8 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -64611,8 +56423,8 @@ /area/station/science/lab) "kKC" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "kKD" = ( @@ -64641,12 +56453,8 @@ name = "hallway camera" }, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron, /area/station/commons/dorms) @@ -64715,12 +56523,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "kLj" = ( @@ -64754,7 +56557,6 @@ /area/station/service/hydroponics) "kLy" = ( /obj/machinery/computer/order_console/cook, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "kLH" = ( @@ -64762,19 +56564,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "kLP" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 10 - }, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) "kLQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -64814,12 +56610,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/commons/dorms/vacantroom) @@ -64868,8 +56660,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -64914,8 +56706,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, @@ -64928,12 +56720,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "kNe" = ( @@ -64941,12 +56729,8 @@ name = "Janitorial Closet" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -64967,15 +56751,6 @@ }, /turf/open/floor/wood, /area/station/service/barber) -"kNM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "kNR" = ( /obj/structure/table, /obj/item/folder/red, @@ -65012,8 +56787,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/lesser) "kOd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/stone, /area/station/common/wrestling/arena) @@ -65038,12 +56813,8 @@ }, /obj/machinery/light/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/black, /area/station/service/barber) "kOs" = ( @@ -65088,12 +56859,8 @@ /area/station/cargo/miningdock) "kOD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -65113,8 +56880,8 @@ /area/station/maintenance/port/central) "kPf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "kPg" = ( @@ -65142,9 +56909,7 @@ /turf/open/floor/wood, /area/station/service/library) "kPw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "kPx" = ( @@ -65162,22 +56927,12 @@ /turf/open/floor/iron, /area/station/science/breakroom) "kPK" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "kQd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, @@ -65195,15 +56950,11 @@ /area/station/engineering/atmos) "kQl" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "kQo" = ( @@ -65211,8 +56962,8 @@ name = "Abandoned Storage" }, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/side{ @@ -65221,10 +56972,8 @@ /area/station/medical/abandoned) "kQp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall22"; location = "hall21" @@ -65311,12 +57060,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "kQQ" = ( @@ -65327,8 +57072,8 @@ /obj/item/radio/intercom/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -65341,11 +57086,8 @@ /turf/open/floor/carpet, /area/station/common/wrestling/lobby) "kRo" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/stack/rods/ten, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "kRp" = ( @@ -65364,6 +57106,16 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) +"kRw" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/smooth_large/airless, +/area/space/nearstation) "kRD" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/disposal/bin, @@ -65397,9 +57149,7 @@ /area/station/commons/storage/primary) "kRU" = ( /obj/item/kirbyplants/organic/plant22, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/office) @@ -65411,8 +57161,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, @@ -65454,9 +57204,6 @@ /obj/machinery/power/shuttle_engine/heater{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating/airless, /area/space/nearstation) "kSC" = ( @@ -65467,10 +57214,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -65478,9 +57221,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 @@ -65516,9 +57256,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 10 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kTj" = ( /obj/structure/lattice/catwalk, @@ -65536,12 +57274,8 @@ /area/station/engineering/supermatter) "kTo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "kTq" = ( @@ -65553,21 +57287,11 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "kTK" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Far Port"; dir = 1 @@ -65602,9 +57326,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "kUv" = ( /obj/machinery/airalarm/directional/north, @@ -65641,9 +57363,7 @@ pixel_y = -4 }, /obj/item/assembly/timer, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "kUL" = ( /obj/structure/trash_pile, @@ -65652,16 +57372,8 @@ /area/station/maintenance/aft/upper) "kUO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -65687,24 +57399,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "kVc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/white, /area/station/medical/coldroom) -"kVi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/prison/upper) "kVJ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4 @@ -65721,10 +57418,6 @@ dir = 4 }, /area/station/security/prison/upper) -"kVY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "kWb" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/hallway) @@ -65765,8 +57458,8 @@ /obj/structure/extinguisher_cabinet/directional/east{ pixel_x = 34 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/ai_monitored/command/storage/eva) "kWH" = ( @@ -65803,23 +57496,17 @@ name = "Armory" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/security/armory) "kXl" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/medical_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "kXm" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/service_all, /turf/open/floor/iron/dark, @@ -65853,9 +57540,7 @@ /area/station/maintenance/starboard/fore) "kXM" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/science/research) "kXP" = ( @@ -65890,12 +57575,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -65935,12 +57616,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "kYk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -65949,12 +57626,6 @@ "kYo" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/folder/red, /obj/item/stamp/denied{ pixel_y = 5 @@ -65998,16 +57669,11 @@ /area/station/science/genetics) "kYB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -66033,12 +57699,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/bar/atrium) "kYZ" = ( @@ -66067,25 +57729,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"kZh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "kZi" = ( /obj/effect/turf_decal/siding/wideplating/dark, /obj/machinery/door/airlock/grunge{ name = "Nerd Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "kZk" = ( @@ -66127,12 +57778,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-enterance-west" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/duct, @@ -66142,8 +57789,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "kZK" = ( @@ -66154,13 +57801,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) -"kZL" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "kZZ" = ( /obj/structure/bed, /obj/item/clothing/suit/jacket/straight_jacket, @@ -66229,9 +57869,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "laC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -66279,30 +57917,14 @@ /area/station/engineering/supermatter/room) "laX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) -"lbe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "lbi" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -66338,12 +57960,8 @@ /obj/effect/turf_decal/siding/purple{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -66451,12 +58069,8 @@ /turf/open/floor/grass, /area/station/science/genetics) "lbZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -66478,23 +58092,19 @@ /obj/item/paper_bin{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "lck" = ( /obj/machinery/newscaster/directional/north, /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "lcm" = ( @@ -66524,8 +58134,8 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/vehicle/ridden/wheelchair, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) @@ -66562,26 +58172,18 @@ /area/station/service/library) "lcG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "lcJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall6"; location = "hall5" @@ -66607,7 +58209,9 @@ }, /obj/item/reagent_containers/cup/beaker/large, /obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "lcO" = ( @@ -66638,26 +58242,22 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/medical) "ldt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "ldA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ldD" = ( @@ -66687,8 +58287,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "lec" = ( @@ -66711,12 +58311,6 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "leg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark/side{ @@ -66730,12 +58324,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -66747,12 +58335,7 @@ /turf/open/floor/plating, /area/station/engineering/engine_smes) "leo" = ( -/obj/effect/turf_decal/bot, /obj/structure/sink/directional/east, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -66781,9 +58364,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "leA" = ( @@ -66805,13 +58386,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer4{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "leE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/aslyum) "leF" = ( @@ -66822,12 +58401,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -66841,8 +58416,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "leK" = ( @@ -66859,16 +58434,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/hallway/primary/port) -"leW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lfd" = ( /obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet/directional/east, @@ -66896,15 +58461,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/library/abandoned) -"lfB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "lfG" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -66969,7 +58525,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/power_station) "lgi" = ( @@ -66978,24 +58534,16 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"lgm" = ( -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "lgr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/dorms/room1) "lgw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "Test Lab Junction"; @@ -67010,13 +58558,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"lgL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen, -/area/station/security/prison/mess) "lgV" = ( /obj/machinery/shower/directional/west, /obj/machinery/light/small/directional/north, @@ -67032,8 +58573,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/item/cigbutt, /turf/open/openspace, @@ -67067,12 +58608,8 @@ /area/station/ai_monitored/command/storage/eva) "lhl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -67126,7 +58663,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -67162,13 +58699,11 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/radio, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -67192,12 +58727,8 @@ /obj/machinery/door/airlock/rd{ name = "Research Director's Study" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -67209,23 +58740,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/central) -"liS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "liY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/atmos{ name = "Atmospherics Auxiliary Port" }, @@ -67243,13 +58761,6 @@ /area/station/medical/storage) "ljh" = ( /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera/directional/south{ c_tag = "Security - Brig Port"; dir = 1 @@ -67263,12 +58774,8 @@ }, /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -67277,7 +58784,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, @@ -67288,12 +58795,6 @@ /turf/open/floor/iron, /area/station/security/warden) "ljx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/rack/shelf, /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -67320,12 +58821,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/captain_dining) "ljS" = ( @@ -67343,8 +58840,8 @@ /area/station/engineering/supermatter/room) "ljZ" = ( /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lkh" = ( @@ -67356,12 +58853,8 @@ /area/station/maintenance/department/medical/central) "lkl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -67377,38 +58870,23 @@ /area/station/security/prison/rec) "lkp" = ( /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) "lkq" = ( /turf/closed/wall, /area/station/maintenance/gag_room) "lkr" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "lkt" = ( /obj/effect/spawner/structure/window/reinforced, @@ -67471,8 +58949,8 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/library) "lkY" = ( @@ -67521,22 +58999,24 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "llv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) +"llz" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/bar) "llL" = ( /obj/structure/railing, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) "llN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -67549,16 +59029,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/floor/grass, /area/station/hallway/secondary/entry) -"llP" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "llV" = ( /obj/structure/table, /obj/item/reagent_containers/cup/soda_cans/cola{ @@ -67575,10 +59045,8 @@ }, /obj/machinery/newscaster/directional/east, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "lmd" = ( @@ -67601,8 +59069,8 @@ name = "Restroom" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "lmi" = ( @@ -67646,12 +59114,8 @@ /area/space/nearstation) "lmz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 4 }, @@ -67661,16 +59125,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) -"lmC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/port/fore) "lmE" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron, @@ -67692,8 +59146,8 @@ }, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /obj/machinery/duct, @@ -67703,18 +59157,14 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "lmV" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/cleanbot{ name = "Sweeps-The-Tiles" }, @@ -67743,12 +59193,8 @@ name = "Cabin 2" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -67785,19 +59231,9 @@ /turf/open/floor/plating, /area/station/medical/medbay/lobby) "lnC" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -67807,14 +59243,11 @@ /turf/closed/wall/rust, /area/station/service/power_station) "lnM" = ( -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "lnW" = ( /obj/effect/turf_decal/bot, /obj/machinery/suit_storage_unit/mining, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/miningoffice) "lnX" = ( @@ -67834,10 +59267,6 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "lov" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/conveyor{ id = "cargoload" }, @@ -67869,10 +59298,7 @@ /area/station/service/bar/backroom) "loJ" = ( /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "loN" = ( /obj/effect/turf_decal/siding/wood, @@ -67880,18 +59306,14 @@ /obj/machinery/door/airlock/ce{ name = "Chief Engineer's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/engineering/ce, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) "loR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, @@ -67919,8 +59341,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -67940,12 +59362,8 @@ /area/station/maintenance/aft/upper) "lpe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/holopad, /turf/open/floor/iron, @@ -67953,26 +59371,9 @@ "lpf" = ( /turf/closed/wall, /area/station/maintenance/abandon_surgery) -"lpg" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "lpi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall14"; @@ -67990,13 +59391,10 @@ shuttle_id = "commonmining_home"; width = 7 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "lpo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, @@ -68011,19 +59409,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"lpx" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/port) "lpC" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -68045,46 +59430,18 @@ /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"lpP" = ( -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lpQ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/power_station) "lpR" = ( -/obj/machinery/doppler_array, /obj/effect/turf_decal/bot_red, +/obj/machinery/doppler_array, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"lpV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "lqa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "lqf" = ( @@ -68123,12 +59480,6 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -68199,12 +59550,8 @@ /area/station/service/theater/abandoned) "lre" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -68218,9 +59565,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lrf" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -68256,8 +59600,8 @@ name = "Holodeck" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side, /area/station/common/arcade) @@ -68283,11 +59627,9 @@ /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "lrK" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "lrQ" = ( @@ -68312,9 +59654,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ piping_layer = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "lsb" = ( /obj/effect/turf_decal/tile/neutral, @@ -68328,8 +59668,8 @@ dir = 6; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -68397,12 +59737,8 @@ pixel_y = 3 }, /obj/item/camera_film, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -68410,8 +59746,8 @@ /area/station/service/chapel/office) "lsM" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -68420,9 +59756,7 @@ /area/station/medical/medbay/central) "lsO" = ( /obj/effect/turf_decal/tile/brown, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/drone_bay) "lsQ" = ( @@ -68464,8 +59798,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "ltv" = ( @@ -68480,23 +59814,16 @@ name = "Service Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/service/power_station) "ltF" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/filingcabinet, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 8 @@ -68524,12 +59851,11 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "ltW" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 6 }, @@ -68564,12 +59890,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -68609,16 +59931,9 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 6 }, @@ -68634,9 +59949,7 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/assistant, /turf/open/floor/wood/parquet, /area/station/common/arcade) @@ -68650,12 +59963,8 @@ /area/station/maintenance/pool_maintenance) "lvb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -68705,12 +60014,8 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "lvS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) @@ -68724,15 +60029,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"lvW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "lwb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold/green/visible, @@ -68743,12 +60039,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "lwm" = ( @@ -68777,9 +60069,7 @@ /turf/open/floor/iron, /area/station/commons/fitness) "lwp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/south, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -68813,10 +60103,7 @@ /obj/structure/transit_tube/curved{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "lwZ" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -68825,20 +60112,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "lxj" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/tank/internals/emergency_oxygen/empty, /turf/open/floor/plating, /area/station/maintenance/port/aft) "lxt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -68870,8 +60150,8 @@ /area/space) "lxA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /mob/living/simple_animal/bot/medbot{ name = "Healy Stabby" @@ -68883,8 +60163,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -68952,9 +60232,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "lyP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /obj/machinery/duct, @@ -68974,10 +60252,6 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "lyW" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/conveyor_switch/oneway{ dir = 8; id = "garbage"; @@ -69006,10 +60280,8 @@ "lze" = ( /obj/effect/turf_decal/caution/stand_clear/blue, /obj/effect/turf_decal/bot_blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "lzn" = ( @@ -69084,12 +60356,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -69099,18 +60367,6 @@ /obj/machinery/vending/boozeomat, /turf/closed/wall, /area/station/command/captain_dining) -"lAb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "lAg" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -69119,12 +60375,8 @@ name = "Maint Kicks" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Clothingstore"; name = "Clothing Store Shutters" @@ -69144,16 +60396,6 @@ /obj/item/gun_maintenance_supplies, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"lAw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "lAC" = ( /obj/structure/railing{ dir = 8 @@ -69164,23 +60406,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass, /area/station/commons/dorms) -"lAD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/lockers) "lAE" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -69191,47 +60420,31 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "lAL" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/machinery/computer/prisoner/management{ dir = 4 }, /obj/machinery/light/directional/west, /obj/machinery/newscaster/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "lAM" = ( /obj/structure/flora/bush/flowers_pp, /mob/living/carbon/human/species/monkey, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/science/genetics) "lAP" = ( /turf/open/floor/carpet, /area/station/service/library) -"lAQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "lAU" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -69241,14 +60454,6 @@ /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) "lAY" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 4 - }, /obj/structure/chair{ dir = 1 }, @@ -69256,6 +60461,9 @@ c_tag = "Recreation - Lasertag Lockers"; name = "hallway camera" }, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "lAZ" = ( @@ -69284,26 +60492,23 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "lBj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/security/prison) "lBn" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side, /area/station/common/laser_tag) "lBq" = ( @@ -69339,7 +60544,7 @@ name = "engineering camera" }, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "lBC" = ( @@ -69347,12 +60552,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/fore/upper) "lBD" = ( @@ -69360,16 +60561,6 @@ /obj/item/bedsheet/hos/double, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) -"lBE" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "lBH" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -69406,8 +60597,8 @@ /area/station/maintenance/port/fore) "lCo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/upper) @@ -69422,12 +60613,8 @@ "lCx" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "lCF" = ( @@ -69438,12 +60625,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "lCH" = ( @@ -69480,12 +60663,8 @@ /area/station/science/genetics) "lCK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -69519,9 +60698,7 @@ /obj/structure/chair/office{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "lCV" = ( /obj/structure/grille, @@ -69539,24 +60716,18 @@ "lDc" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/customs_agent, /turf/open/floor/iron, /area/station/security/checkpoint/supply) "lDg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/medium{ dir = 4 }, /area/station/science/research) "lDk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "lDl" = ( @@ -69575,12 +60746,8 @@ /area/station/hallway/primary/central) "lDq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -69589,9 +60756,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lDr" = ( -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "lDs" = ( /obj/machinery/light/directional/east, @@ -69612,15 +60777,6 @@ /obj/structure/alien/weeds/xen, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"lDz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "lDB" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -69647,12 +60803,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "lDR" = ( @@ -69690,7 +60842,7 @@ /obj/effect/turf_decal/stripes, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "lEj" = ( @@ -69708,12 +60860,8 @@ /area/station/maintenance/starboard/fore) "lEo" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 1 }, @@ -69746,8 +60894,8 @@ /area/station/service/barber) "lEO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -69762,12 +60910,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lEZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "lFa" = ( /obj/structure/chair/sofa/right/brown, /obj/effect/turf_decal/siding/wood{ @@ -69780,12 +60922,8 @@ /turf/open/floor/iron, /area/station/maintenance/console_room) "lFo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering, /obj/machinery/door/airlock/engineering{ @@ -69905,6 +61043,10 @@ /obj/machinery/atmospherics/components/binary/pump{ name = "Gas to Chamber" }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter) "lGz" = ( @@ -69921,12 +61063,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -69953,14 +61091,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/security/range) -"lGT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "lGU" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -69977,9 +61107,7 @@ /area/station/service/bar/atrium) "lGW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) "lHb" = ( @@ -70010,29 +61138,9 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron, /area/station/security/office) -"lHk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "lHt" = ( /obj/effect/turf_decal/bot, /obj/structure/sink/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -70043,12 +61151,8 @@ /area/station/hallway/primary/upper) "lHw" = ( /obj/effect/landmark/start/nanotrasen_consultant, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -70071,20 +61175,15 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lHT" = ( -/obj/structure/closet/crate/trashcart/filled, -/obj/effect/spawner/random/contraband/cannabis, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/machinery/recharge_station, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "lHV" = ( /obj/structure/railing/corner{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "lHW" = ( @@ -70112,11 +61211,13 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "lIu" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/machinery/coffeemaker{ pixel_y = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "lIx" = ( @@ -70197,12 +61298,8 @@ /turf/open/floor/iron, /area/station/engineering/supermatter/room) "lIZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater) "lJa" = ( @@ -70212,19 +61309,13 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lJc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "lJg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/wrestling/locker) "lJh" = ( @@ -70257,12 +61348,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "lJs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -70277,7 +61364,6 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "lJw" = ( @@ -70294,12 +61380,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -70345,26 +61427,13 @@ /turf/open/floor/iron/dark, /area/station/maintenance/thruster_room/central) "lKd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"lKi" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "lKk" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -70385,19 +61454,12 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "lKw" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ pixel_y = 7 }, /obj/item/gun/energy/laser/practice, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark, /area/station/security/range) "lKx" = ( @@ -70422,10 +61484,8 @@ /area/station/hallway/secondary/command) "lKC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -70492,25 +61552,13 @@ name = "Virology Access" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) "lLl" = ( @@ -70533,13 +61581,9 @@ /turf/open/floor/iron, /area/station/science/breakroom) "lLr" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/mess) @@ -70591,7 +61635,6 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_psych) "lLD" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/machinery/light/small/directional/north, @@ -70603,8 +61646,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -70649,9 +61692,6 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "lMu" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/door/window/right{ base_state = "left"; dir = 1; @@ -70674,24 +61714,12 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "lMz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "lME" = ( /obj/effect/turf_decal/bot, @@ -70717,12 +61745,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -70732,21 +61756,15 @@ }, /obj/structure/cable, /obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "lMR" = ( /obj/structure/chair/office{ dir = 1 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "lMX" = ( @@ -70844,9 +61862,7 @@ /turf/open/floor/iron, /area/station/medical/surgery/theatre) "lNG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "lNI" = ( @@ -70856,7 +61872,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) @@ -70868,15 +61884,13 @@ /obj/item/toy/dodgeball, /obj/item/toy/dodgeball, /obj/structure/rack, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/fitness) "lNR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) "lNU" = ( @@ -70887,8 +61901,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -70926,9 +61940,7 @@ "lOn" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -70974,14 +61986,12 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "lOz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "lOL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/night_club/changing_room) "lOW" = ( @@ -70998,8 +62008,8 @@ "lPf" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "lPl" = ( @@ -71024,33 +62034,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"lPC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lPG" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -71088,8 +62077,8 @@ /area/station/hallway/primary/port) "lQt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/power_station) "lQA" = ( @@ -71112,7 +62101,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "lQD" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/table/wood/fancy/royalblue, /obj/item/stack/spacecash/c500, /obj/item/paper/fluff{ @@ -71134,12 +62122,8 @@ name = "Jail Cell" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -71226,8 +62210,8 @@ /area/station/hallway/primary/central) "lRv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -71258,12 +62242,8 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "lRD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "lRF" = ( @@ -71276,9 +62256,6 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) "lRG" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 3" }, @@ -71312,12 +62289,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "lRZ" = ( @@ -71326,8 +62299,8 @@ }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "lSb" = ( @@ -71368,30 +62341,12 @@ dir = 8 }, /area/station/common/wrestling/arena) -"lSr" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "lSs" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "lSv" = ( @@ -71407,17 +62362,14 @@ name = "Teleporter Shutters" }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/teleporter) "lSI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/chair/stool/directional/north, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "lSP" = ( @@ -71511,17 +62463,6 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"lTJ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lTO" = ( /obj/machinery/disposal/bin, /obj/machinery/light/directional/west, @@ -71531,9 +62472,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "lTQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "lTZ" = ( @@ -71548,8 +62487,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /obj/structure/sign/departments/medbay/alt/directional/east, /obj/machinery/duct, @@ -71568,7 +62507,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "lUA" = ( @@ -71586,12 +62525,8 @@ /turf/open/floor/iron/white, /area/station/medical/pharmacy) "lUD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/eighties/red, /area/station/common/arcade) @@ -71599,17 +62534,12 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/obj/effect/turf_decal/stripes, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "lUG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "lUP" = ( @@ -71706,27 +62636,20 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "lVP" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/structure/chair/office{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/start/engineering_guard, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/engineering/lobby) "lVQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/miningdock) "lVR" = ( @@ -71769,7 +62692,6 @@ /obj/structure/chair/wood{ dir = 1 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/cafeteria) "lWk" = ( @@ -71816,12 +62738,8 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "lWL" = ( @@ -71849,18 +62767,14 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "lXc" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/structure/closet/crate/engineering{ name = "Turbine Board Crate" }, /obj/item/circuitboard/computer/turbine_computer, /obj/item/circuitboard/machine/turbine_rotor, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -71914,12 +62828,8 @@ /area/station/security/prison/upper) "lXs" = ( /obj/structure/trash_pile, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "lXw" = ( @@ -71941,10 +62851,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "lXC" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/camera/directional/south{ c_tag = "Bar - Counter"; dir = 1; @@ -71955,27 +62861,15 @@ department = "Bar"; name = "Bar Requests Console" }, -/obj/effect/turf_decal/bot, /obj/machinery/chem_master/condimaster{ desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; name = "HoochMaster Deluxe" }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) -"lXD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "lXI" = ( /turf/closed/wall, /area/station/maintenance/department/engineering/atmos_aux_port) @@ -72010,33 +62904,21 @@ }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) -"lXT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/prison/upper) "lYe" = ( /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "lYg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "lYi" = ( /obj/effect/turf_decal/stripes{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -72060,9 +62942,7 @@ /turf/closed/wall/r_wall, /area/station/science/xenobiology) "lYx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -72084,12 +62964,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -72113,9 +62989,7 @@ /obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "lYI" = ( @@ -72169,18 +63043,8 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) -"lZf" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/science/upper) "lZg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "lZl" = ( @@ -72209,12 +63073,8 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "lZC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "lZH" = ( @@ -72226,12 +63086,8 @@ /turf/open/floor/carpet, /area/station/service/library/lounge) "lZM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/beacon, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -72276,19 +63132,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "mah" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "man" = ( @@ -72317,12 +63161,8 @@ name = "Self Care Salon" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72339,12 +63179,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) -"maD" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "maF" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/stripes, @@ -72358,10 +63192,8 @@ pixel_y = -29 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "maI" = ( @@ -72426,12 +63258,8 @@ name = "Weapons Test Range" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/structure/cable, /turf/open/floor/iron/white/side{ @@ -72470,8 +63298,8 @@ dir = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/poddoor/shutters/preopen{ id = "Xeno9"; name = "Xenobio Pens Containment" @@ -72484,12 +63312,6 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) -"mcd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "mcl" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -72529,9 +63351,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "mcE" = ( @@ -72556,23 +63377,13 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"mcP" = ( -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mcR" = ( /obj/structure/closet/lawcloset, /obj/item/storage/briefcase{ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/clothing/glasses/sunglasses/big{ pixel_x = 3; pixel_y = 3 @@ -72586,12 +63397,8 @@ /area/station/maintenance/department/security/upper) "mcT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -72600,24 +63407,13 @@ "mcW" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "mdb" = ( /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/secondary/command) -"mdf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "mdj" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -72642,12 +63438,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "mdm" = ( @@ -72679,6 +63471,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"mdA" = ( +/obj/structure/chair/sofa/bench{ + dir = 8; + pixel_x = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/secondary/entry) "mdF" = ( /obj/machinery/power/supermatter_crystal/engine, /obj/effect/turf_decal/stripes/box, @@ -72719,25 +63520,10 @@ req_access = list("command") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) -"mdU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics) "mdY" = ( /obj/structure/chair/wood{ dir = 4 @@ -72778,16 +63564,10 @@ }, /obj/machinery/status_display/ai/directional/west, /obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "mei" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -72796,12 +63576,6 @@ "mem" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/effect/turf_decal/stripes, /turf/open/floor/iron/dark/side, /area/station/engineering/storage) @@ -72810,12 +63584,8 @@ dir = 8 }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) "meu" = ( @@ -72823,8 +63593,8 @@ dir = 8 }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) "mex" = ( @@ -72833,20 +63603,10 @@ /area/station/command/gateway) "mey" = ( /obj/structure/plaque/static_plaque/golden/commission, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"meF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/solars/starboard/fore) "meJ" = ( /obj/effect/turf_decal/stripes{ dir = 5 @@ -72866,9 +63626,7 @@ "meY" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72878,12 +63636,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -72913,11 +63667,12 @@ c_tag = "Engineering - Secure tech storage"; name = "engineering camera" }, -/obj/item/circuitboard/machine/circuit_imprinter/department, -/obj/item/circuitboard/machine/protolathe/department, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 8 +/obj/item/ai_module/reset{ + pixel_y = 8 + }, +/obj/item/ai_module/core/full/custom{ + pixel_y = -4 }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) @@ -72995,16 +63750,10 @@ /obj/effect/turf_decal/siding/brown{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "mgt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/button/door/directional/west{ id = "prison release"; name = "Labor Camp Shuttle Lockdown"; @@ -73021,8 +63770,8 @@ /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "mgu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -73033,8 +63782,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "mgF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) "mgG" = ( @@ -73061,10 +63810,8 @@ /area/station/science/robotics/lab) "mgL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "mgM" = ( @@ -73082,8 +63829,8 @@ "mgX" = ( /obj/structure/disposalpipe/segment, /obj/structure/falsewall, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/cargo/warehouse) "mhf" = ( @@ -73186,12 +63933,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -73209,41 +63952,22 @@ dir = 8 }, /area/station/hallway/primary/central) -"mif" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/blueshield) "miw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/weldingtool/largetank{ pixel_x = -4; pixel_y = 3 }, /obj/item/clothing/head/utility/welding, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "miB" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) "miC" = ( @@ -73310,20 +64034,8 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) -"mjr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) "mjw" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /obj/machinery/light/directional/east, /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/dark/side{ @@ -73334,34 +64046,18 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"mjz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central) "mjA" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral, /obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "mjB" = ( @@ -73403,22 +64099,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_wrestle) -"mjY" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mjZ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73428,16 +64115,19 @@ /obj/structure/railing/corner/end/flip, /obj/machinery/light/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/black, /area/station/service/barber) -"mko" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) +"mkf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/iron, +/area/station/command/captain_dining) "mky" = ( /obj/structure/chair, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "mkC" = ( @@ -73507,37 +64197,25 @@ id = "hopline"; name = "Queue Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "mly" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "mlB" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/door/poddoor/massdriver_trash, /obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/disposal) "mlC" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/computer/atmos_alert{ dir = 1 }, -/obj/machinery/computer/atmos_alert{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -73548,8 +64226,8 @@ /area/station/maintenance/department/science/xenobiology) "mlH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/machinery/duct, /turf/open/floor/plating, @@ -73558,16 +64236,6 @@ /obj/machinery/vending/sovietsoda, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mlQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/service/chapel) "mlX" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -73586,14 +64254,12 @@ name = "lavaland"; shuttle_id = "pod_2_lavaland" }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "mme" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -73605,16 +64271,23 @@ }, /obj/item/trash/peanuts, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"mmu" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/item/stack/rods/two, +/obj/item/stack/cable_coil/five, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "mmz" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -73636,17 +64309,11 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) "mmL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/smartfridge/organ, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -73656,8 +64323,8 @@ }, /obj/item/trash/boritos, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -73665,8 +64332,8 @@ /obj/machinery/door/airlock{ name = "Lasertag Arena" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/laser_tag) @@ -73745,29 +64412,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"mnV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) -"mnW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/medical/psychology) "moh" = ( /obj/machinery/door/airlock/silver{ name = "Locker Room" @@ -73779,22 +64423,14 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "mot" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -73822,20 +64458,9 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "moz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) -"moC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "moF" = ( /obj/structure/railing{ dir = 1 @@ -73866,9 +64491,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "moY" = ( @@ -73879,26 +64502,16 @@ /area/station/command/heads_quarters/ce) "moZ" = ( /obj/machinery/light/small/red/dim/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/escapepodbay) "mpb" = ( /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "mpe" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "mpg" = ( @@ -73920,12 +64533,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "mpD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/door/firedoor, /turf/open/floor/iron/stairs/left{ @@ -73960,12 +64569,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) @@ -73981,10 +64586,6 @@ }, /turf/open/misc/beach/sand, /area/station/service/barber) -"mqb" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mqf" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -74000,12 +64601,8 @@ /area/station/maintenance/department/eva) "mqi" = ( /obj/structure/flora/bush/lavendergrass, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/hydroponics/soil, /turf/open/floor/grass, @@ -74013,10 +64610,8 @@ "mqj" = ( /obj/structure/cable, /obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74024,7 +64619,7 @@ /turf/open/floor/iron, /area/station/commons/locker) "mqm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office) "mqs" = ( @@ -74045,9 +64640,7 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "mqD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/engine_smes) "mqG" = ( @@ -74060,22 +64653,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/wood, /area/station/hallway/primary/central) "mqN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -74094,17 +64681,12 @@ dir = 6; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) "mqY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -74122,16 +64704,13 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "mrc" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/camera/directional/east{ c_tag = "Security - Brig Port upper"; dir = 10 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "mrl" = ( @@ -74150,18 +64729,10 @@ /turf/open/floor/wood, /area/station/security/courtroom) "mro" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) -"mrp" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "mrw" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/side{ @@ -74216,7 +64787,7 @@ /area/station/maintenance/abandon_arcade) "mrY" = ( /obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "mrZ" = ( @@ -74275,11 +64846,10 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "msQ" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "msS" = ( @@ -74291,21 +64861,25 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "msT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) +"msV" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyer"; + name = "Medbay" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "mtc" = ( /obj/effect/turf_decal/delivery, /obj/structure/rack, @@ -74319,18 +64893,11 @@ }, /obj/item/gavelblock, /obj/item/gavelhammer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "mtk" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, @@ -74370,10 +64937,7 @@ /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) "mtF" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mtR" = ( @@ -74390,12 +64954,8 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) "mui" = ( @@ -74420,17 +64980,6 @@ dir = 1 }, /area/station/command/secure_bunker) -"muA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/maintenance/central) "muK" = ( /obj/structure/cable, /obj/machinery/door/airlock/hatch{ @@ -74488,12 +65037,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "mvo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/surplus_limbs, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -74516,10 +65059,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/junction/flip, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "mvK" = ( @@ -74528,12 +65069,8 @@ layer = 3.5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue, /obj/machinery/door/airlock/public/glass{ @@ -74558,8 +65095,8 @@ /area/station/command/heads_quarters/cmo) "mvR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/customs) "mvS" = ( @@ -74607,35 +65144,24 @@ /turf/open/openspace, /area/station/maintenance/department/medical/central) "mwm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/simple_animal/pet/gondola/funky, /turf/open/floor/iron, /area/station/service/theater) "mwn" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) "mwt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -74692,7 +65218,6 @@ /area/station/command/heads_quarters/hop) "mwX" = ( /obj/structure/closet/firecloset, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/thinplating_new{ dir = 6 }, @@ -74752,12 +65277,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "mya" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "mys" = ( @@ -74784,12 +65305,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, /turf/open/floor/plating, @@ -74812,12 +65329,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -74826,12 +65339,8 @@ /area/station/science/research) "myG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74853,18 +65362,14 @@ /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "myQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Arcade" }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -74874,9 +65379,6 @@ /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -74918,23 +65420,10 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/cryopods) -"mzm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mzp" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -75015,18 +65504,14 @@ /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/medical/orderly, /turf/open/floor/iron/white/side, /area/station/security/checkpoint/medical) "mzP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/common/laser_tag) @@ -75075,22 +65560,10 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) -"mAv" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/rnd_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "mAB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) @@ -75101,12 +65574,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "mAK" = ( @@ -75128,7 +65597,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mAN" = ( @@ -75141,7 +65610,7 @@ /area/station/cargo/storage) "mAP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) @@ -75161,7 +65630,7 @@ /area/station/science/xenobiology) "mBe" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "mBt" = ( @@ -75179,14 +65648,19 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"mBw" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "mBC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, @@ -75221,12 +65695,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "mBT" = ( @@ -75268,8 +65738,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "mCj" = ( @@ -75317,10 +65787,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "mCV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -75328,10 +65796,8 @@ /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "mDc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/wrestling/lobby) @@ -75347,9 +65813,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "mDi" = ( @@ -75361,12 +65825,8 @@ /area/station/tcommsat/server) "mDj" = ( /obj/structure/flora/bush/sparsegrass, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/flora/bush/lavendergrass, /turf/open/floor/grass, @@ -75379,7 +65839,7 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) "mDn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) "mDo" = ( @@ -75410,7 +65870,6 @@ /obj/effect/turf_decal/tile/red/half{ dir = 1 }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -75448,13 +65907,12 @@ /turf/open/floor/iron, /area/station/security/courtroom) "mEf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/storage/art) "mEg" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Pure to Mix" @@ -75469,9 +65927,7 @@ /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/side{ dir = 8 @@ -75570,26 +66026,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"mFc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/upper) -"mFf" = ( -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "mFg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -75606,19 +66042,6 @@ "mFi" = ( /obj/structure/table_frame/wood, /obj/effect/spawner/random/clothing/costume, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -75628,8 +66051,8 @@ "mFp" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "mFs" = ( @@ -75643,9 +66066,9 @@ /obj/machinery/computer/atmos_control/oxygen_tank{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/red/diagonal_centre, /turf/open/floor/iron, /area/station/engineering/atmos) "mFy" = ( @@ -75668,10 +66091,8 @@ /area/station/service/lawoffice) "mFM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) @@ -75706,12 +66127,8 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "mFT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "mFY" = ( @@ -75726,27 +66143,13 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/science/breakroom) -"mGj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/medical/psychology) "mGl" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -75756,12 +66159,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "mGs" = ( @@ -75788,16 +66187,12 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "mGD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "mGG" = ( @@ -75837,8 +66232,8 @@ /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/service/janitor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/checker, /area/station/service/janitor) @@ -75868,12 +66263,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "mHp" = ( @@ -75888,29 +66279,18 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "mHv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mHx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) "mHA" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/table/reinforced, /obj/item/airlock_painter/decal, /turf/open/floor/iron/dark, @@ -75992,12 +66372,8 @@ id = "Luggagebelt" }, /obj/structure/plasticflaps/opaque, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "mIn" = ( @@ -76023,9 +66399,7 @@ /turf/open/floor/iron/dark, /area/station/science/genetics) "mIv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light_switch/directional/south, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) @@ -76050,21 +66424,8 @@ "mIz" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) -"mIG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "mIQ" = ( /obj/machinery/light/directional/west, /turf/open/floor/engine, @@ -76078,24 +66439,14 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "mIY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/fuel_pellet, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "mJa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -76117,28 +66468,14 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "mJm" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "mJr" = ( /mob/living/simple_animal/hostile/cult/mannequin, @@ -76154,8 +66491,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "mJC" = ( @@ -76172,12 +66509,8 @@ /area/station/service/chapel) "mJD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -76223,7 +66556,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) "mJX" = ( -/obj/effect/turf_decal/tile/purple, /obj/structure/curtain/bounty, /obj/structure/sign/calendar/directional/west, /turf/open/floor/iron/dark/side{ @@ -76280,7 +66612,6 @@ /obj/structure/table/glass, /obj/structure/window/spawner/directional/east, /obj/item/stack/medical/gauze, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "mKz" = ( @@ -76288,7 +66619,6 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/machinery/button/door{ id = "custodialshutters"; name = "Custodial Shutters"; @@ -76297,25 +66627,8 @@ }, /turf/open/floor/iron/dark, /area/station/service/janitor) -"mKE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mKG" = ( /obj/structure/chair/stool, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) "mKJ" = ( @@ -76381,12 +66694,8 @@ /area/station/security/checkpoint/escape) "mLj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall18"; location = "hall17" @@ -76404,7 +66713,7 @@ /turf/closed/wall, /area/station/science/research/abandoned) "mLq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 8 @@ -76445,14 +66754,7 @@ /turf/open/misc/sandy_dirt, /area/station/maintenance/department/medical) "mLZ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "mMc" = ( @@ -76466,9 +66768,7 @@ /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) "mMd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room2) @@ -76568,8 +66868,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "mMU" = ( @@ -76607,12 +66907,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -76626,9 +66922,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/comfy/brown{ color = "#A46106" }, @@ -76645,12 +66939,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"mNF" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "mNI" = ( /obj/structure/girder/displaced, /obj/structure/grille/broken, @@ -76682,7 +66970,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "mOb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/common/wrestling/lobby) @@ -76734,12 +67022,8 @@ "mOS" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/xenobiology) "mOX" = ( @@ -76749,10 +67033,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/port) "mPa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/button/door/directional/east{ id = "qm_warehouse"; name = "Warehouse Door Control"; @@ -76764,8 +67044,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/small, /area/station/cargo/warehouse) "mPf" = ( @@ -76828,7 +67108,7 @@ "mPG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/medical/virology) @@ -76851,9 +67131,7 @@ /turf/open/misc/asteroid, /area/station/hallway/primary/upper) "mPL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -76887,8 +67165,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -76906,12 +67184,8 @@ /area/station/maintenance/department/crew_quarters/dorms) "mQt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -76933,12 +67207,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -76967,10 +67237,8 @@ /area/station/service/library/private) "mQI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -77000,7 +67268,6 @@ /turf/open/floor/iron, /area/station/common/wrestling/locker) "mQS" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/wood/fancy/black, /obj/structure/window/spawner/directional/north, /obj/item/reagent_containers/cup/glass/bottle/trappist{ @@ -77014,6 +67281,7 @@ pixel_x = 9; pixel_y = -2 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "mQU" = ( @@ -77045,22 +67313,11 @@ /area/station/engineering/atmos) "mRf" = ( /obj/structure/chair/wood, -/obj/effect/landmark/start/bouncer, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/wood, /area/station/service/bar/atrium) -"mRg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "mRh" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -77076,12 +67333,6 @@ "mRm" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/common/night_club) "mRu" = ( @@ -77114,15 +67365,6 @@ }, /turf/open/floor/engine, /area/station/command/heads_quarters/rd) -"mRG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/gravity_generator) "mRN" = ( /obj/effect/mob_spawn/corpse/human/skeleton, /turf/open/floor/plating, @@ -77149,16 +67391,9 @@ /area/station/commons/dorms) "mRY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark/side{ @@ -77184,24 +67419,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"mSo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) -"mSs" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/station/cargo/miningdock) "mSx" = ( /obj/effect/turf_decal/tile/red/half, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -77212,16 +67429,6 @@ /obj/machinery/dish_drive/bullet, /turf/open/floor/iron/dark/side, /area/station/security/office) -"mSA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/department/engineering/atmos_aux_port) "mSE" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/siding/thinplating_new{ @@ -77234,8 +67441,8 @@ /area/station/science/power_station) "mSI" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) @@ -77243,7 +67450,7 @@ /obj/structure/sign/painting/parting{ pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "mSO" = ( @@ -77357,9 +67564,6 @@ /turf/open/floor/iron/dark, /area/station/cargo/office) "mTU" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, @@ -77369,12 +67573,8 @@ name = "Janitorial Closet" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -77392,15 +67592,6 @@ /obj/item/paper_bin/carbon, /obj/item/pen/fountain, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/office) "mUi" = ( @@ -77451,14 +67642,6 @@ /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"mUz" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "mUF" = ( /obj/structure/chair/sofa/bench/right{ dir = 4; @@ -77470,17 +67653,13 @@ "mUH" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "mUL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -77497,12 +67676,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "mVb" = ( @@ -77518,16 +67693,6 @@ }, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"mVf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "mVh" = ( /obj/structure/flora/bush/jungle/b, /obj/structure/flora/bush/flowers_yw, @@ -77549,16 +67714,6 @@ "mVk" = ( /turf/closed/wall, /area/station/service/bar) -"mVn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "mVo" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -77597,20 +67752,10 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "mVF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/warden) "mVI" = ( /obj/effect/turf_decal/bot, @@ -77621,7 +67766,6 @@ /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "mVS" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) @@ -77635,20 +67779,16 @@ name = "Courtroom" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/court, /turf/open/floor/carpet, /area/station/security/courtroom) "mWf" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "mWh" = ( @@ -77674,8 +67814,8 @@ /area/station/maintenance/fore/upper) "mWm" = ( /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "mWp" = ( @@ -77691,9 +67831,6 @@ dir = 10; name = "hallway camera" }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -77703,28 +67840,19 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "mWL" = ( /obj/structure/chair/sofa/corp/right, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "mWQ" = ( -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/catwalk_floor/iron/airless, /area/space/nearstation) "mWU" = ( /obj/effect/turf_decal/tile/neutral{ @@ -77732,28 +67860,19 @@ }, /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "mWW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/escapepodbay) "mWY" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, /obj/structure/chair/office{ dir = 4 }, @@ -77765,12 +67884,8 @@ /area/station/maintenance/department/security/greater) "mXe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/medical/medbay/central) "mXl" = ( @@ -77789,12 +67904,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner/end{ dir = 4 }, @@ -77803,21 +67914,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mXo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "mXq" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -77837,7 +67933,7 @@ "mXB" = ( /obj/machinery/light/small/directional/west, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "mXC" = ( @@ -77870,14 +67966,17 @@ /area/station/cargo/storage) "mXM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "mXO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "mYc" = ( @@ -77908,10 +68007,8 @@ /area/station/science/robotics/lab) "mYn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "mYo" = ( @@ -77944,12 +68041,8 @@ "mYD" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /obj/machinery/door/airlock/hydroponics{ name = "Hydroponics Backroom" @@ -77958,6 +68051,9 @@ dir = 4 }, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics) "mYG" = ( @@ -77977,12 +68073,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -78015,12 +68107,8 @@ /area/station/maintenance/starboard/fore) "mZA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "mZE" = ( @@ -78042,12 +68130,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -78105,12 +68189,8 @@ /area/station/commons/locker) "naj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -78135,31 +68215,13 @@ "nao" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/fore/upper) -"nas" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "nav" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78177,10 +68239,6 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "nay" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/firealarm/directional/east, /obj/machinery/light_switch/directional/north, /obj/structure/table/reinforced, @@ -78191,6 +68249,7 @@ /obj/item/book/manual/wiki/engineering_guide{ pixel_x = -2 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -78229,12 +68288,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/detective, /turf/open/floor/wood, /area/station/security/detectives_office) @@ -78249,12 +68304,8 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/security/prison_upper) "nbq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -78267,12 +68318,8 @@ /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/commons/dorms) "nbC" = ( @@ -78310,12 +68357,8 @@ /area/station/science/xenobiology) "nbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4; name = "Dorm Junction"; @@ -78335,9 +68378,7 @@ /area/station/science/xenobiology) "nbW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "nca" = ( @@ -78356,19 +68397,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "ncn" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -78426,9 +68456,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "ncJ" = ( @@ -78498,8 +68526,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron, @@ -78523,12 +68551,8 @@ /area/station/maintenance/department/science/xenobiology) "ndT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "nec" = ( @@ -78544,8 +68568,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "nef" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/carpet/purple, @@ -78602,7 +68626,7 @@ /turf/open/floor/engine/vacuum, /area/station/engineering/atmos/test_chambers) "neG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/ordnance/office) @@ -78626,17 +68650,11 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "neQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) "neV" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 }, @@ -78749,8 +68767,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -78762,8 +68780,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -78816,12 +68834,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78836,8 +68850,8 @@ /obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Control Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable, /turf/open/floor/iron, @@ -78890,12 +68904,8 @@ /area/station/command/heads_quarters/captain) "ngZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78904,9 +68914,6 @@ /area/station/command/heads_quarters/captain) "nha" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/structure/cable, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 1" @@ -78972,7 +68979,7 @@ /turf/closed/wall, /area/station/engineering/storage/tcomms) "nhR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -78983,21 +68990,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "nhZ" = ( /obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "nid" = ( @@ -79013,19 +69014,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"nig" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "nih" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -79041,16 +69029,6 @@ /obj/item/stack/ore/glass, /turf/open/space/basic, /area/space/nearstation) -"nip" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "niu" = ( /obj/effect/turf_decal/weather/sand{ dir = 10 @@ -79070,28 +69048,20 @@ /obj/structure/mirror/directional/west, /obj/effect/landmark/start/mime, /obj/structure/sink/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/theater) "niD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/iron, /area/station/engineering/lobby) "niE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -79110,12 +69080,8 @@ "niJ" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/hallway/secondary/entry) "niN" = ( @@ -79127,7 +69093,7 @@ c_tag = "Primary Tool Storage"; name = "engineering camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/commons/storage/primary) @@ -79139,12 +69105,8 @@ name = "Study Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79165,8 +69127,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -79239,12 +69201,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "nko" = ( @@ -79261,12 +69219,8 @@ /area/station/security/checkpoint/science/research) "nkI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -79280,8 +69234,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/research, /obj/machinery/duct, @@ -79302,9 +69256,6 @@ /obj/item/crowbar, /obj/item/wirecutters, /obj/item/stack/cable_coil, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "nkY" = ( @@ -79324,28 +69275,20 @@ /turf/open/floor/cult, /area/station/maintenance/department/science/xenobiology) "nlg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/turf/open/floor/iron/dark/side{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, /area/station/security/brig) "nli" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "nly" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "nlI" = ( @@ -79357,12 +69300,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "nlN" = ( @@ -79375,27 +69314,17 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "nlO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "nlR" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -79406,26 +69335,14 @@ /area/station/maintenance/port/central) "nmh" = ( /obj/machinery/biogenerator, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/service/hydroponics) "nmi" = ( /obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "nmk" = ( @@ -79451,18 +69368,12 @@ "nmv" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "nmK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79495,7 +69406,6 @@ /obj/structure/window/spawner/directional/north, /obj/machinery/light/directional/east, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nnc" = ( @@ -79550,15 +69460,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"nnz" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "nnB" = ( /obj/structure/chair/sofa/bench{ dir = 4; @@ -79608,22 +69509,10 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/maintenance/gamer_lair) -"nnM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/bridge) "nnS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79659,12 +69548,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "noo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -79683,12 +69568,8 @@ /area/station/maintenance/department/medical/morgue) "noU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -79784,8 +69665,8 @@ "npQ" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/trash/mopbucket, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "npR" = ( @@ -79837,21 +69718,15 @@ icon_state = "dirt-flat-1" }, /obj/machinery/light/broken/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "nqG" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "nqH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -79862,9 +69737,7 @@ dir = 4 }, /obj/item/stack/spacecash/c10, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/common/arcade) "nqK" = ( @@ -79886,9 +69759,7 @@ /area/station/maintenance/port/fore) "nqT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "nqY" = ( @@ -79909,9 +69780,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -79920,15 +69789,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) -"nrw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "nrx" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/mechbay) @@ -79955,12 +69815,8 @@ /area/space/nearstation) "nrV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80000,15 +69856,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "nsg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "nsi" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 @@ -80024,20 +69877,15 @@ /obj/machinery/door/firedoor, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left, /area/station/cargo/storage) "nsy" = ( /obj/structure/ladder, -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/white/box, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "nsz" = ( @@ -80058,12 +69906,8 @@ /area/station/science/xenobiology) "nsH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -80089,8 +69933,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai) @@ -80098,16 +69942,12 @@ /obj/effect/turf_decal/arrows/white{ dir = 4 }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "nsV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80135,7 +69975,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "nty" = ( @@ -80173,13 +70013,14 @@ /area/station/maintenance/wrestle) "nud" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/tcommsat/computer) "nuj" = ( /obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -80212,12 +70053,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -80314,10 +70151,8 @@ /area/station/service/kitchen/diner) "nvr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) @@ -80352,13 +70187,11 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nvM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/office) "nvP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -80370,12 +70203,8 @@ dir = 5; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) @@ -80415,8 +70244,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "nws" = ( @@ -80429,24 +70258,11 @@ network = list("ss13","rd") }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "nwt" = ( /turf/closed/wall/r_wall, /area/station/service/barber) -"nwB" = ( -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/carpet/purple, -/area/station/common/night_club) "nwD" = ( /obj/structure/cable, /obj/machinery/light/small/directional/north, @@ -80521,12 +70337,8 @@ /area/station/commons/fitness) "nxw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 8 @@ -80536,33 +70348,17 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/maintenance/abandon_diner) "nxH" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/commons/fitness) -"nxO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/wood, -/area/station/hallway/primary/port) "nxQ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/flora/bush/jungle/a/style_3, @@ -80632,12 +70428,8 @@ dir = 10 }, /obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "nyk" = ( @@ -80648,9 +70440,6 @@ /obj/effect/turf_decal/bot{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -80673,8 +70462,8 @@ }, /obj/effect/mapping_helpers/airlock/abandoned, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -80688,13 +70477,6 @@ /area/station/service/barber) "nyD" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "nyM" = ( @@ -80728,9 +70510,7 @@ /obj/structure/table/reinforced, /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/north, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, +/turf/open/floor/iron, /area/station/medical/storage) "nyU" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, @@ -80753,13 +70533,10 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "nzd" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 8 }, -/obj/machinery/washing_machine, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "nzh" = ( @@ -80772,27 +70549,14 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "nzi" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/suit_storage_unit/open, /turf/open/floor/iron/dark, /area/station/engineering/break_room) "nzm" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/coldroom) "nzn" = ( @@ -80817,47 +70581,18 @@ "nzp" = ( /turf/open/floor/iron, /area/station/cargo/drone_bay) -"nzt" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nzv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"nzz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "nzA" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/compact_remote, /obj/item/controller, /obj/item/compact_remote, @@ -80867,9 +70602,7 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "nzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "nzJ" = ( @@ -80921,12 +70654,8 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "nAb" = ( @@ -80945,9 +70674,7 @@ "nAl" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) "nAr" = ( @@ -81013,17 +70740,15 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 1 }, /area/station/command/gateway) "nBd" = ( /obj/structure/marker_beacon/teal, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "nBf" = ( /obj/effect/turf_decal/weather/sand{ @@ -81035,12 +70760,8 @@ /area/station/command/heads_quarters/captain) "nBh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/upper) "nBi" = ( @@ -81065,7 +70786,7 @@ /turf/open/floor/iron, /area/station/science/research/abandoned) "nBu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -81136,13 +70857,6 @@ }, /turf/open/water/overlay, /area/station/hallway/primary/central) -"nBZ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nCh" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/west, @@ -81193,7 +70907,7 @@ /area/station/command/heads_quarters/rd) "nCA" = ( /obj/effect/turf_decal/bot/right, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "nCB" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -81202,12 +70916,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/surgery) "nCD" = ( @@ -81251,8 +70961,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "nCS" = ( @@ -81264,12 +70974,8 @@ /obj/machinery/door/airlock/engineering{ name = "Power Access Hatch" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /obj/structure/cable, /turf/open/floor/plating, @@ -81281,16 +70987,16 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "nCZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "nDa" = ( @@ -81322,16 +71028,20 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"nDT" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 +"nDO" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/window{ + id = "SecMech"; + name = "Security Mechbay Shutters" }, /turf/open/floor/iron/dark, -/area/station/security/brig) +/area/station/security/mechbay) "nDV" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, @@ -81384,9 +71094,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "nEx" = ( @@ -81418,12 +71126,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "nEW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/white, @@ -81440,12 +71142,8 @@ /area/station/hallway/primary/central) "nFg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -81490,12 +71188,6 @@ }, /turf/closed/wall, /area/station/hallway/primary/upper) -"nFq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/courtroom) "nFs" = ( /obj/machinery/shower/directional/south, /obj/structure/drain, @@ -81516,15 +71208,13 @@ }, /area/station/command/secure_bunker) "nFF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "nFJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -81536,8 +71226,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) "nFN" = ( @@ -81630,9 +71320,6 @@ /area/station/maintenance/gamer_lair) "nGv" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/emergency_oxygen, @@ -81652,8 +71339,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -81685,8 +71372,8 @@ "nGQ" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -81694,12 +71381,8 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) "nGZ" = ( @@ -81741,12 +71424,8 @@ /area/station/medical/break_room) "nHB" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -81776,15 +71455,12 @@ name = "Bar" }, /obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/east, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "nIu" = ( @@ -81801,19 +71477,10 @@ /obj/machinery/door/airlock/medical/glass{ name = "Primary Treatment Centre" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nIB" = ( @@ -81869,15 +71536,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"nIP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "nIV" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, @@ -81900,19 +71558,9 @@ /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "nJc" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/port) @@ -81921,41 +71569,26 @@ /obj/machinery/computer/records/security/laptop{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/camera/directional/north{ c_tag = "Security - Departures Port" }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/checkpoint/escape) "nJe" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ name = "Security Shuttlebay" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "nJg" = ( /obj/machinery/door/window/left{ @@ -81966,7 +71599,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 8 }, -/obj/effect/turf_decal/siding/yellow/end, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -82039,8 +71671,8 @@ /obj/structure/cable, /obj/effect/turf_decal/delivery/blue, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -82070,12 +71702,8 @@ /turf/closed/wall/r_wall, /area/station/service/barber/spa) "nKf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 1 }, @@ -82130,8 +71758,8 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) "nKD" = ( @@ -82141,10 +71769,9 @@ /turf/open/floor/iron, /area/station/engineering/atmos/office) "nKI" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, /turf/open/floor/iron, /area/station/service/bar) "nKJ" = ( @@ -82161,9 +71788,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "nKK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/warehouse) "nKV" = ( @@ -82175,13 +71800,6 @@ }, /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) -"nKY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/warden) "nKZ" = ( /obj/machinery/holopad, /turf/open/floor/iron/grimy, @@ -82208,7 +71826,6 @@ /turf/open/floor/iron/dark/small, /area/station/bitrunning/den) "nLh" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; name = "Unfiltered to Mix" @@ -82271,19 +71888,13 @@ /area/station/maintenance/department/science/central) "nLC" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 9 - }, /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/security/lockers) "nLF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/robotics) "nLG" = ( @@ -82314,18 +71925,21 @@ /area/space/nearstation) "nMc" = ( /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel) +"nMo" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "nMD" = ( /obj/structure/table/wood, /obj/item/taperecorder, @@ -82344,12 +71958,6 @@ }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain) -"nMI" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "nMN" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/curtain/bounty, @@ -82422,23 +72030,9 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"nNF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "nNI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82475,9 +72069,6 @@ }, /obj/structure/cable, /obj/effect/landmark/start/security_officer, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -82494,32 +72085,9 @@ }, /turf/open/floor/carpet/purple, /area/station/science/breakroom) -"nOc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "nOf" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen{ dir = 1 }, @@ -82540,12 +72108,8 @@ name = "Engineering Locker Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -82554,9 +72118,7 @@ /area/station/science/ordnance) "nOv" = ( /obj/effect/turf_decal/siding/thinplating_new, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "nOw" = ( @@ -82584,29 +72146,15 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "nOF" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) -"nOG" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "nOL" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nOO" = ( @@ -82632,7 +72180,6 @@ /turf/open/floor/plating, /area/station/engineering/supermatter/room) "nPo" = ( -/obj/effect/turf_decal/stripes, /obj/item/chair/plastic, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -82698,9 +72245,7 @@ "nPY" = ( /obj/structure/cable, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -82720,7 +72265,6 @@ /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "nQh" = ( -/obj/effect/turf_decal/stripes/box, /obj/machinery/processor, /obj/structure/table, /turf/open/floor/iron/dark, @@ -82765,8 +72309,8 @@ /turf/open/floor/wood, /area/station/hallway/primary/central) "nQA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -82840,12 +72384,8 @@ /turf/open/floor/iron/dark/side, /area/station/hallway/primary/upper) "nRc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/airalarm/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -82857,22 +72397,14 @@ dir = 8 }, /obj/machinery/door/airlock/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "nRk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82880,8 +72412,8 @@ /area/station/service/lawoffice) "nRo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /obj/effect/landmark/event_spawn, /turf/open/floor/carpet, @@ -82930,18 +72462,8 @@ /area/station/command/gateway) "nRJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nRW" = ( @@ -82960,8 +72482,8 @@ /obj/structure/lattice/catwalk, /obj/item/trash/raisins, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/department/medical/central) "nSh" = ( @@ -82973,8 +72495,8 @@ /turf/open/floor/iron, /area/station/maintenance/abandon_holding_cell) "nSk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) "nSl" = ( @@ -83001,12 +72523,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -83018,16 +72536,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"nSx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "nSD" = ( /obj/structure/chair/plastic, /turf/open/floor/plating, @@ -83057,18 +72565,15 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "nSQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/firealarm/directional/west{ pixel_x = -27; pixel_y = 24 }, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -83101,7 +72606,6 @@ /area/station/hallway/secondary/entry) "nSZ" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "nTd" = ( @@ -83114,9 +72618,7 @@ "nTe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83127,12 +72629,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/abandon_exam/cat) "nTj" = ( @@ -83151,12 +72649,8 @@ /area/station/maintenance/department/security/prison_upper) "nTw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/hos{ name = "Head Of Security's Quarters" }, @@ -83177,23 +72671,13 @@ "nTC" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/night_club) "nTK" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/kitchen{ dir = 1 @@ -83213,25 +72697,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "nTO" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/locker) -"nTP" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nTR" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, @@ -83313,7 +72786,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "nUx" = ( -/obj/effect/turf_decal/bot, /obj/structure/rack/shelf, /obj/item/crowbar, /obj/item/gps/engineering{ @@ -83331,18 +72803,10 @@ /obj/structure/chair{ pixel_y = -2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, /area/station/security/warden) "nUG" = ( /obj/structure/flora/bush/grassy, @@ -83350,12 +72814,8 @@ /area/station/service/chapel) "nUH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/upper) @@ -83365,20 +72825,12 @@ /turf/open/floor/plating, /area/station/command/secure_bunker) "nUM" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/brig) "nUQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, /turf/open/floor/plating, @@ -83395,12 +72847,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/abandon_exam/cat) @@ -83408,8 +72856,8 @@ /obj/machinery/door/airlock{ name = "Commentator Studio" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/common/wrestling/arena) @@ -83418,8 +72866,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/east, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -83441,9 +72889,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -83473,12 +72919,8 @@ /turf/closed/wall/r_wall, /area/station/science/research) "nVB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/stairs/medium{ dir = 4 @@ -83490,32 +72932,20 @@ "nVQ" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "nVU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) "nWa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/wood, /area/station/service/lawoffice) @@ -83535,12 +72965,8 @@ "nWe" = ( /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "nWi" = ( @@ -83566,12 +72992,8 @@ /area/station/engineering/atmos/pumproom) "nWx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -83602,16 +73024,12 @@ /area/station/science) "nWI" = ( /obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 8 }, /obj/item/flashlight/seclite, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) "nWK" = ( @@ -83627,22 +73045,14 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "nWR" = ( /obj/effect/turf_decal/siding/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) @@ -83652,13 +73062,10 @@ /turf/open/floor/iron/dark/side, /area/station/security/lockers) "nXd" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) "nXn" = ( @@ -83713,7 +73120,6 @@ /obj/effect/turf_decal/vg_decals/atmos/oxygen{ dir = 1 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/o2, /area/station/engineering/atmos) "nXP" = ( @@ -83728,14 +73134,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"nXU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "nXV" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -83762,7 +73160,9 @@ /area/space/nearstation) "nYF" = ( /obj/machinery/chem_dispenser, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "nYM" = ( @@ -83771,7 +73171,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "nYP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/wood/fancy/black, /obj/item/reagent_containers/cup/glass/bottle/champagne{ pixel_x = 4; @@ -83781,6 +73180,9 @@ pixel_x = -5; pixel_y = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "nYQ" = ( @@ -83802,20 +73204,9 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/service/library) -"nYT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "nYU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -83837,19 +73228,13 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "nZe" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/primary) "nZg" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/item/airlock_painter, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, @@ -83858,6 +73243,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "nZi" = ( @@ -83895,10 +73281,8 @@ /area/station/common/arcade) "nZt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) @@ -83967,9 +73351,6 @@ /turf/open/floor/iron/white/small, /area/station/medical/break_room) "nZT" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/power/smes{ capacity = 9e+006; charge = 10000 @@ -83978,35 +73359,21 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "oag" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 4 }, /area/station/hallway/secondary/exit) "oak" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room7) "oaq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/security/brig) "oar" = ( /turf/open/floor/iron/dark, @@ -84028,7 +73395,7 @@ /turf/open/floor/iron, /area/station/security/prison/upper) "oax" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) "oaG" = ( @@ -84055,12 +73422,8 @@ "obc" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/flowers_yw, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/chapel) "obf" = ( @@ -84079,9 +73442,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "obn" = ( /obj/machinery/door/firedoor, @@ -84092,21 +73453,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/lobby) "obq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) "obs" = ( @@ -84114,12 +73467,8 @@ /turf/open/floor/grass, /area/station/security/prison/garden) "obz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -84128,12 +73477,8 @@ /area/station/service/chapel/funeral) "obB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/ordnance) @@ -84145,12 +73490,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "obJ" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -84164,12 +73503,8 @@ /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "obQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -84179,7 +73514,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/courtroom) "obU" = ( @@ -84189,25 +73524,15 @@ /turf/open/floor/carpet, /area/station/security/detectives_office) "occ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, /obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "oci" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -84221,16 +73546,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"ocp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "ocu" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -84247,9 +73562,9 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/item/storage/briefcase/secure, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "ocy" = ( @@ -84260,12 +73575,8 @@ /turf/open/floor/iron/dark, /area/station/service/library/lounge) "ocz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -84277,9 +73588,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "ocN" = ( /obj/structure/trash_pile, @@ -84304,12 +73613,6 @@ /area/station/service/lawoffice) "odb" = ( /obj/effect/turf_decal/trimline/blue/line, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -84325,9 +73628,7 @@ dir = 8 }, /obj/effect/landmark/start/station_engineer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "odl" = ( @@ -84342,16 +73643,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) -"odn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "odo" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -84366,8 +73657,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "odv" = ( @@ -84412,24 +73703,15 @@ /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/central) "odP" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Head of Security's Office" }, /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "odQ" = ( @@ -84470,12 +73752,8 @@ pixel_y = 4 }, /obj/item/clothing/shoes/magboots, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "oer" = ( @@ -84504,12 +73782,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/lobby) "oeB" = ( @@ -84522,21 +73796,13 @@ /area/station/maintenance/aux_eva) "oeI" = ( /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "oeK" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/camera/directional/west{ c_tag = "Engineering - Secure Storage Upper"; name = "engineering camera" @@ -84564,12 +73830,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "oeN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office) "oeQ" = ( @@ -84578,12 +73840,8 @@ }, /area/station/common/night_club) "oeS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "oeZ" = ( @@ -84602,24 +73860,10 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"ofc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "ofd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall1"; location = "hall22" @@ -84696,12 +73940,10 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "ofS" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/hydroponics, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "ofT" = ( -/obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/seeds/wheat{ pixel_x = 6 @@ -84714,10 +73956,6 @@ /obj/item/food/grown/watermelon, /obj/item/food/grown/grapes, /obj/item/food/grown/tomato, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -84727,8 +73965,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/nanotrasen{ pixel_x = -32 }, @@ -84744,7 +73982,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/power_station) "ogj" = ( @@ -84752,16 +73990,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/eva) -"ogl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "ogq" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 @@ -84798,12 +74026,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "ogw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -84832,11 +74056,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "ogD" = ( -/obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "ogN" = ( @@ -84878,12 +74099,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84910,8 +74127,8 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "ohd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/medical/psychology) "ohg" = ( @@ -84928,9 +74145,7 @@ /area/station/hallway/primary/central) "ohj" = ( /obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "ohk" = ( /obj/structure/bookcase/random/nonfiction, @@ -85013,16 +74228,6 @@ /obj/structure/table, /turf/open/floor/wood, /area/station/service/kitchen/diner) -"ohJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/nt_rep) "ohK" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -85033,9 +74238,6 @@ /area/station/medical/exam_room) "ohL" = ( /obj/machinery/computer/teleporter, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 5 }, @@ -85060,12 +74262,8 @@ "oib" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) "oic" = ( @@ -85092,8 +74290,8 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "oil" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -85125,15 +74323,11 @@ name = "RnD Cell"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "oiz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "oiD" = ( @@ -85173,7 +74367,7 @@ network = list("ss13","medbay") }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/medical/cryo) "oiQ" = ( @@ -85195,12 +74389,8 @@ /area/station/security/prison) "oiX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "ojg" = ( @@ -85230,18 +74420,6 @@ /obj/item/modular_computer/laptop/preset/civilian, /turf/open/floor/carpet/blue, /area/station/service/lawoffice) -"ojC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "ojG" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/corner{ @@ -85263,13 +74441,12 @@ /turf/open/space/openspace, /area/space/nearstation) "ojS" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/comfy/brown{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "ojU" = ( @@ -85287,8 +74464,8 @@ /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/white/side, /area/station/security/prison) @@ -85296,13 +74473,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "oke" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -85329,9 +74499,7 @@ /area/station/medical/chemistry) "okr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) "oky" = ( @@ -85346,8 +74514,8 @@ /obj/machinery/status_display/evac/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -85390,23 +74558,9 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "okJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"okL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "okO" = ( /obj/structure/chair/sofa/left/brown{ dir = 4 @@ -85418,20 +74572,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/parquet, /area/station/service/theater) -"okV" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "okY" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "okZ" = ( /obj/structure/girder, @@ -85454,9 +74599,7 @@ dir = 2 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/lobby) @@ -85478,6 +74621,16 @@ /obj/item/reagent_containers/cup/glass/bottle/hooch, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) +"olk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/diner) "olm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -85494,9 +74647,7 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) "olu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -85507,31 +74658,12 @@ dir = 4 }, /area/station/hallway/primary/upper) -"olz" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "olF" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) -"olG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "olH" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -85613,12 +74745,8 @@ /area/station/science/xenobiology) "omt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -85630,12 +74758,8 @@ /turf/open/floor/iron, /area/station/maintenance/thruster_room/central) "omD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85647,7 +74771,6 @@ /obj/item/clothing/neck/stethoscope, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "omM" = ( @@ -85663,20 +74786,10 @@ /area/station/maintenance/department/eva) "omQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"omR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "omT" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -85685,12 +74798,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter) "omU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/computer/monitor, /turf/open/floor/iron/smooth, @@ -85723,12 +74832,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85761,12 +74866,8 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "onB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -85775,14 +74876,13 @@ /turf/open/floor/iron/dark, /area/station/security/office) "onF" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) "onG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/checker, /area/station/service/janitor) @@ -85790,12 +74890,11 @@ /obj/structure/table, /obj/item/storage/box/lights/mixed, /obj/item/pipe_dispenser, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "onO" = ( @@ -85847,28 +74946,16 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) "ook" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "oom" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -85895,25 +74982,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"ooA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "ooB" = ( /obj/machinery/door/airlock/corporate{ name = "Representative's Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85929,13 +75003,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/engine_smes) "ooG" = ( -/obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; name = "Air to Distro" @@ -85973,9 +75046,6 @@ /area/station/science/xenobiology/hallway) "ooY" = ( /obj/machinery/teleport/hub, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/effect/turf_decal/stripes/blue/line{ dir = 9 }, @@ -85991,17 +75061,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"ooZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "opb" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -86059,7 +75118,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) "opJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -86074,10 +75133,7 @@ /area/station/medical/patients_rooms) "opP" = ( /obj/structure/grille, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "opY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -86101,9 +75157,7 @@ name = "Exam Room Privacy Shutters"; pixel_x = -6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/door/directional/north{ id = "ExamRoom"; name = "Door Lock"; @@ -86122,10 +75176,8 @@ /area/station/hallway/primary/starboard) "oqi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/medical) "oql" = ( @@ -86147,21 +75199,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "oqu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/visit) "oqw" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "oqz" = ( @@ -86176,12 +75220,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, @@ -86191,21 +75231,11 @@ /obj/structure/flora/bush/reed, /turf/open/water/overlay, /area/station/hallway/primary/central) -"oqK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/research) "oqM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance/testlab) "oqO" = ( /obj/effect/spawner/liquids_spawner{ @@ -86223,12 +75253,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -86236,10 +75262,8 @@ "oqU" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/tcommsat/computer) "oqZ" = ( @@ -86259,16 +75283,13 @@ /area/station/security/prison/upper) "orn" = ( /obj/effect/turf_decal/vg_decals/numbers/three, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "orp" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/duct, @@ -86276,10 +75297,8 @@ /area/station/maintenance/department/medical/morgue) "ort" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup2"; location = "hallup1" @@ -86294,9 +75313,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /turf/open/floor/iron/smooth_corner{ dir = 4 }, @@ -86348,9 +75364,7 @@ /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) "osb" = ( @@ -86359,9 +75373,7 @@ name = "Prisoner Processing Blast Door" }, /obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 @@ -86431,12 +75443,8 @@ name = "medbay camera"; network = list("ss13","medbay") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "osE" = ( @@ -86451,10 +75459,8 @@ /area/station/engineering/supermatter/room) "osN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/science/research) "osQ" = ( @@ -86481,8 +75487,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "otd" = ( @@ -86493,9 +75499,6 @@ /area/station/science/auxlab/firing_range) "otk" = ( /obj/machinery/photocopier, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/light/directional/north, /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/stripes/blue/line{ @@ -86515,7 +75518,6 @@ /area/station/hallway/secondary/exit) "otv" = ( /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/mineral/plastitanium, /area/station/maintenance/cult_chapel_maint) "otE" = ( @@ -86539,12 +75541,8 @@ /area/station/service/lawoffice) "otN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86555,14 +75553,13 @@ /turf/open/floor/iron, /area/station/commons/dorms) "otQ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 4 }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "otS" = ( @@ -86614,7 +75611,7 @@ /obj/structure/railing/corner/end{ dir = 8 }, -/obj/structure/railing/corner/end{ +/obj/structure/railing/corner/end/flip{ dir = 4 }, /turf/open/floor/iron/dark, @@ -86629,7 +75626,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 8 }, @@ -86645,12 +75642,8 @@ }, /area/station/security/prison) "ouM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -86660,7 +75653,7 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 4 }, @@ -86713,9 +75706,6 @@ /obj/effect/turf_decal/tile/red/half{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -86738,17 +75728,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ovN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics) "ovO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -86769,12 +75748,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "ovW" = ( @@ -86847,12 +75822,8 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "owK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat_interior) "owM" = ( @@ -86881,12 +75852,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "owN" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86895,6 +75862,9 @@ /obj/machinery/door/airlock/hydroponics/glass{ name = "Hydroponics" }, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "owP" = ( @@ -86937,10 +75907,7 @@ "owS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -86968,12 +75935,8 @@ /turf/open/floor/iron/white, /area/station/medical/surgery) "oxB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "oxF" = ( @@ -87011,12 +75974,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -87035,23 +75994,12 @@ "oyh" = ( /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ +/obj/structure/closet/secure_closet/barber, +/obj/effect/turf_decal/tile/purple/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/purple, -/obj/structure/closet/secure_closet/barber, /turf/open/floor/iron, /area/station/service/barber) -"oyj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oym" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -87074,9 +76022,6 @@ /area/station/service/library) "oyw" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/status_display/ai/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -87110,12 +76055,8 @@ /turf/open/floor/carpet, /area/station/common/tailoring) "oyI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "oyK" = ( @@ -87126,17 +76067,11 @@ /turf/open/floor/wood, /area/station/service/library/printer) "oyN" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -87146,12 +76081,8 @@ name = "Holding Cell"; req_access = list("brig") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "ozb" = ( @@ -87164,32 +76095,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"ozj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "ozm" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/engine_smes) @@ -87198,22 +76113,14 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, /turf/open/floor/iron/white, /area/station/science/research) "ozu" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 4 }, @@ -87264,12 +76171,8 @@ "oAd" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -87278,20 +76181,9 @@ dir = 8 }, /area/station/command/heads_quarters/nt_rep) -"oAg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "oAu" = ( /obj/structure/chair/sofa/middle/brown, /obj/structure/window/spawner/directional/north, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/bar/atrium) "oAv" = ( @@ -87300,9 +76192,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "oAC" = ( @@ -87419,20 +76309,10 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "oBp" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "oBt" = ( /obj/structure/window/reinforced/fulltile, @@ -87479,19 +76359,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "oBE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "oBI" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "oBJ" = ( @@ -87509,18 +76385,12 @@ id = "Luggagebelt" }, /obj/structure/plasticflaps, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "oBP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -87563,17 +76433,16 @@ /area/station/tcommsat/server) "oCd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/library/printer) "oCh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/main) @@ -87609,21 +76478,10 @@ "oCx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/gag_room) -"oCy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/prison/upper) "oCG" = ( /obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -87644,12 +76502,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/south, /obj/machinery/duct, /turf/open/floor/plating, @@ -87664,15 +76518,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -87689,26 +76534,11 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/cafeteria) -"oDr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/common/wrestling/arena) "oDt" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater) "oDw" = ( @@ -87736,19 +76566,15 @@ /area/station/security/corrections_officer) "oDH" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/disposalpipe/trunk{ dir = 2 }, /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "oDK" = ( @@ -87770,23 +76596,13 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "oEl" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -87801,12 +76617,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "oEw" = ( @@ -87814,12 +76626,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "oEx" = ( @@ -87866,14 +76674,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "oFo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, /turf/open/floor/iron/white, @@ -87889,15 +76693,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"oFD" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron, -/area/station/maintenance/aux_eva) "oFH" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/atmos/glass{ @@ -87914,7 +76709,7 @@ "oFI" = ( /obj/structure/railing/corner/end/flip, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "oFJ" = ( @@ -87947,20 +76742,14 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) "oGm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -87984,28 +76773,14 @@ /area/station/security/checkpoint/escape) "oGp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/one, /turf/open/floor/iron, /area/station/hallway/primary/central) "oGA" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) -"oGE" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "oGF" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -88021,12 +76796,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -88043,16 +76814,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"oGI" = ( -/obj/structure/chair/sofa/bench{ - dir = 4; - pixel_x = -5 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/secondary/entry) "oGK" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -88103,12 +76864,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass, /area/station/hallway/primary/upper) -"oHn" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) "oHq" = ( /obj/structure/curtain/cloth, /obj/structure/drain, @@ -88188,9 +76943,6 @@ /area/station/cargo/miningdock) "oHS" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/status_display/evac/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -88203,12 +76955,6 @@ /turf/open/floor/iron/dark, /area/station/service/library) "oIe" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/washing_machine, /obj/machinery/status_display/ai/directional/north, /obj/machinery/light/directional/north, @@ -88229,12 +76975,6 @@ name = "Forbidden Chapel" }, /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/iron/dark, @@ -88245,8 +76985,8 @@ }, /obj/structure/closet, /obj/item/fuel_pellet/advanced, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/broken/directional/east, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -88280,18 +77020,12 @@ pixel_y = 16 }, /obj/machinery/light/directional/west, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "oIw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -88328,14 +77062,11 @@ "oIW" = ( /obj/effect/turf_decal/bot_white, /obj/item/banner/command/mundane, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "oJc" = ( @@ -88349,14 +77080,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/plating, /area/station/command/secure_bunker) -"oJf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "oJg" = ( /turf/closed/wall, /area/station/engineering/storage_shared) @@ -88378,9 +77101,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /turf/open/floor/wood/parquet, /area/station/common/night_club) @@ -88408,35 +77129,15 @@ /obj/machinery/door/airlock/medical{ name = "Ward Controll Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /turf/open/floor/iron, /area/station/medical/psychology) -"oJK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "oJY" = ( /obj/structure/falsewall/reinforced, /turf/open/floor/plating, /area/station/command/secure_bunker) -"oKc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "oKi" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 @@ -88499,8 +77200,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -88526,12 +77227,8 @@ pixel_x = 22; pixel_y = 21 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/north{ id = "HoPdoor"; name = "HoP Door Lock"; @@ -88548,12 +77245,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "oKF" = ( @@ -88570,15 +77263,8 @@ }, /area/station/maintenance/disposal/incinerator) "oKN" = ( -/obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/watertank/high, /obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron/dark/side{ dir = 4 @@ -88592,8 +77278,8 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/carpet, @@ -88608,9 +77294,6 @@ name = "Solar Maintenance" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/unres, /obj/structure/sign/warning/electric_shock/directional/east, @@ -88755,17 +77438,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"oMy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oMC" = ( /obj/structure/bed, /obj/item/bedsheet/mime, @@ -88785,21 +77457,14 @@ /obj/machinery/door/airlock/security/glass{ name = "Equipment Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/security/lockers) "oML" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/railing{ dir = 6 }, @@ -88814,7 +77479,7 @@ color = "#DE3A3A"; dir = 1 }, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -88834,27 +77499,17 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "oNc" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, /obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "oNh" = ( /obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "oNk" = ( /obj/structure/flora/bush/grassy, @@ -88885,23 +77540,10 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"oNA" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "oNC" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/random/entertainment/gambling, @@ -88988,7 +77630,7 @@ /obj/structure/closet/secure_closet/contraband/heads, /obj/effect/turf_decal/bot, /obj/item/storage/box/ids, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -89055,10 +77697,6 @@ "oPc" = ( /obj/effect/turf_decal/bot, /obj/machinery/photocopier, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/machinery/newscaster/directional/east, @@ -89070,16 +77708,6 @@ /obj/item/book/manual/wiki/security_space_law, /turf/open/floor/iron, /area/station/security/courtroom) -"oPg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison) "oPn" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 4 @@ -89160,13 +77788,10 @@ }, /area/station/service/chapel) "oPZ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "oQc" = ( @@ -89202,19 +77827,6 @@ /turf/open/floor/iron/dark, /area/station/service/barber) "oQq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp{ pixel_y = 16 @@ -89236,13 +77848,10 @@ /area/station/hallway/secondary/service) "oQD" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/structure/closet/secure_closet/security/cargo, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -89274,8 +77883,8 @@ "oQI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) "oQO" = ( @@ -89290,19 +77899,15 @@ /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "oQT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/escapepodbay) "oQY" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -89341,12 +77946,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "oRw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/medical/psychology) "oRy" = ( @@ -89367,7 +77968,7 @@ /turf/open/floor/iron, /area/station/engineering/break_room) "oSe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) "oSf" = ( @@ -89472,21 +78073,11 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "oTc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/stairs, /area/station/science/xenobiology) -"oTe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "oTg" = ( /turf/open/floor/iron/dark/side{ dir = 1 @@ -89517,23 +78108,15 @@ /area/station/medical/patients_rooms) "oTC" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "oTH" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89547,12 +78130,8 @@ /area/station/security/brig) "oTW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) "oUd" = ( @@ -89560,8 +78139,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89596,7 +78175,6 @@ }, /area/station/science/circuits) "oUr" = ( -/obj/effect/spawner/random/structure/steam_vent, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 10 @@ -89661,12 +78239,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89674,16 +78248,6 @@ /turf/open/floor/iron, /area/station/commons/locker) "oUI" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/records/security{ dir = 1 }, @@ -89717,26 +78281,11 @@ /turf/open/floor/wood, /area/station/commons/dorms/room5) "oUN" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "oUO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/common/locker_room_shower) @@ -89747,25 +78296,14 @@ /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/iron/dark, /area/station/security/warden) -"oUU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "oVd" = ( /obj/structure/chair/sofa/bench{ dir = 8; @@ -89788,7 +78326,7 @@ /area/station/medical/morgue) "oVJ" = ( /obj/machinery/suit_storage_unit/cmo, -/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "oVN" = ( @@ -89842,12 +78380,8 @@ /area/station/ai_monitored/command/nuke_storage) "oVX" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -89861,12 +78395,7 @@ "oWi" = ( /obj/structure/table/glass, /obj/item/modular_computer/laptop/preset/civilian, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "oWj" = ( @@ -89881,16 +78410,6 @@ /turf/open/floor/iron/dark, /area/station/command/gateway) "oWl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/item/ai_module/supplied/quarantine{ pixel_x = 3; @@ -89903,7 +78422,7 @@ }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "oWx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -89933,12 +78452,8 @@ }, /obj/structure/chair/office, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "oWJ" = ( @@ -89967,7 +78482,6 @@ /area/station/common/laser_tag) "oXa" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/random/trash/mess, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -89989,29 +78503,13 @@ /obj/structure/desk_bell, /turf/open/floor/iron/dark, /area/station/service/bar) -"oXx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance) "oXz" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "oXE" = ( @@ -90025,7 +78523,7 @@ /turf/open/floor/plating, /area/station/medical/psychology) "oXF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, /obj/structure/table/glass, /turf/open/floor/wood, @@ -90040,19 +78538,14 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/vending/modularpc, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron/white/side, /area/station/science) "oXP" = ( /obj/structure/table/reinforced, /obj/item/clipboard, /obj/item/toy/figure/secofficer, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/office) @@ -90074,17 +78567,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/construction) "oYg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -90094,12 +78579,8 @@ }, /area/station/hallway/primary/port) "oYi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "oYm" = ( @@ -90115,11 +78596,9 @@ req_access = list("engine_equip") }, /obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -90132,27 +78611,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) -"oYG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"oYH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "oYP" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/bot, @@ -90200,9 +78658,7 @@ /turf/open/floor/wood, /area/station/security/courtroom) "oZd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) "oZi" = ( @@ -90245,12 +78701,10 @@ }, /area/station/science/cytology) "oZu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/blobstart, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/closet/cardboard, /obj/item/toy/plush/lizard_plushie/green{ name = "Tends-the-Wounds" @@ -90293,22 +78747,10 @@ /turf/open/floor/iron/pool/cobble/corner, /area/station/common/pool) "oZK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"oZO" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "oZQ" = ( /turf/open/floor/wood, /area/station/hallway/primary/port) @@ -90317,21 +78759,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/customs/auxiliary) -"oZX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/ordnance_maint) "oZY" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/library/upper) "pae" = ( /obj/structure/railing/corner, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "pai" = ( /obj/machinery/door/airlock/security/glass{ @@ -90343,19 +78777,12 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) "paj" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 10 }, @@ -90364,16 +78791,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"pal" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/cargo/power_station/upper) "pao" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -90425,9 +78842,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "paH" = ( /turf/open/floor/iron/solarpanel/airless, @@ -90459,12 +78874,8 @@ /turf/open/floor/plating/airless, /area/station/maintenance/eva_shed/port) "pbb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "pbe" = ( @@ -90483,8 +78894,8 @@ "pbi" = ( /obj/item/stack/sheet/cardboard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "pbm" = ( @@ -90500,12 +78911,8 @@ /obj/structure/disposalpipe/junction/flip{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "pbt" = ( @@ -90529,16 +78936,8 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "pbC" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "pbG" = ( @@ -90547,31 +78946,19 @@ /area/station/maintenance/disposal) "pbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/surgery_tray/full/deployed, /turf/open/floor/iron, /area/station/medical/surgery/theatre) "pbP" = ( /obj/effect/landmark/start/bitrunner, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/bitrunning/den) "pbS" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/common/night_club) @@ -90621,7 +79008,7 @@ name = "motion-sensitive ai camera"; network = list("aiupload") }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "pcy" = ( /obj/structure/trash_pile, @@ -90660,17 +79047,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/dark, /area/station/security/corrections_officer) -"pdl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/commons/dorms/room2) "pdp" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -90680,9 +79056,7 @@ /area/station/medical/treatment_center) "pdD" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -90779,20 +79153,14 @@ /turf/open/floor/wood, /area/station/service/theater) "peD" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "peF" = ( /obj/machinery/computer/records/security{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint) @@ -90803,20 +79171,12 @@ /obj/machinery/door/airlock{ name = "Quarters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/wood/parquet, /area/station/command/gateway) "peT" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/chair/stool/bar/directional{ @@ -90825,13 +79185,7 @@ /turf/open/floor/iron, /area/station/security/prison/mess) "peU" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "peV" = ( @@ -90952,12 +79306,8 @@ "pgi" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "pgs" = ( @@ -90977,13 +79327,6 @@ dir = 1 }, /area/station/science/xenobiology) -"pgy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen, -/area/station/security/prison/mess) "pgz" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/service/bar, @@ -90993,44 +79336,20 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"pgG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/station/service/theater/abandoned) "pgJ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/service/barber) "pgK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/courtroom) -"pgM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "pgN" = ( /obj/structure/table/glass, /obj/item/stack/package_wrap, @@ -91042,11 +79361,6 @@ dir = 1 }, /area/station/science/research) -"pgQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "pgV" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -91068,16 +79382,6 @@ /obj/machinery/light/directional/north, /turf/open/misc/asteroid, /area/station/hallway/primary/upper) -"pha" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "phg" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/bot, @@ -91097,12 +79401,12 @@ /area/station/cargo/power_station/upper) "phD" = ( /obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"phG" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"phG" = ( /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, @@ -91113,19 +79417,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"phM" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/secondary/command) "phO" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt{ @@ -91134,9 +79425,6 @@ /turf/open/floor/iron/dark, /area/station/common/wrestling/arena) "phP" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/weightmachine/weightlifter, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, @@ -91182,17 +79470,15 @@ "pid" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Upper Hallway" }, /turf/open/floor/iron, /area/station/hallway/primary/upper) "pih" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table, /obj/item/burner/fuel{ pixel_y = 4 @@ -91206,12 +79492,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91225,13 +79507,9 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-east" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -91250,8 +79528,8 @@ /obj/machinery/door/airlock/security/glass{ name = "Shaving Station" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/prison) @@ -91284,11 +79562,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/power_station) -"piA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "piD" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -91299,9 +79572,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/camera/directional/north{ c_tag = "Security - Medbay Waiting Room" }, @@ -91317,16 +79588,6 @@ /area/station/hallway/secondary/exit) "piO" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/brig) "piQ" = ( @@ -91339,13 +79600,13 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lab) "piZ" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/structure/cable, /obj/machinery/door/airlock/research{ @@ -91355,12 +79616,8 @@ /area/station/science/ordnance) "pja" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/yjunction{ dir = 4 }, @@ -91370,8 +79627,8 @@ /obj/machinery/door/airlock{ name = "Abandoned Arcade" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_arcade) @@ -91393,10 +79650,6 @@ }, /area/station/maintenance/xenobio_disposals) "pjl" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/right{ dir = 4 }, @@ -91409,9 +79662,7 @@ /turf/open/floor/plating/airless, /area/station/maintenance/eva_shed/port) "pjt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -91470,14 +79721,10 @@ /area/station/medical/virology/isolation) "pjC" = ( /obj/item/weldingtool, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 9 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "pjH" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "pjI" = ( @@ -91569,9 +79816,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "pkC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) @@ -91599,17 +79844,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pld" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"plq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison/shower) "plv" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/disposal/bin, @@ -91642,9 +79876,7 @@ /turf/open/floor/grass, /area/station/maintenance/port/fore) "plJ" = ( -/turf/open/floor/iron/airless{ - icon_state = "textured_white_large" - }, +/turf/open/floor/iron/white/textured_large/airless, /area/space/nearstation) "plN" = ( /obj/structure/cable, @@ -91654,12 +79886,8 @@ /obj/machinery/firealarm/directional/north{ pixel_x = -22 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 9 @@ -91710,24 +79938,17 @@ /area/station/security/detectives_office/private_investigators_office) "pmr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /obj/machinery/door/airlock/hydroponics{ name = "Hydroponics Backroom" }, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/tram, /turf/open/floor/iron, /area/station/service/hydroponics) -"pmt" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "pmD" = ( /obj/structure/chair/wood{ dir = 8 @@ -91772,9 +79993,7 @@ }, /obj/machinery/status_display/evac/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "pnd" = ( @@ -91789,15 +80008,14 @@ dir = 8 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "pnj" = ( /obj/machinery/hydroponics/constructable, /obj/structure/flora/bush/sparsegrass, -/obj/machinery/hydroponics/constructable, /turf/open/floor/grass, /area/station/security/prison/garden) "pnk" = ( @@ -91813,19 +80031,6 @@ dir = 1 }, /area/station/science/research) -"pnn" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/brig) "pnv" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -91843,9 +80048,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "pnz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/railing{ dir = 1 @@ -91854,8 +80057,8 @@ /area/station/ai_monitored/turret_protected/ai) "pnA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -91880,13 +80083,9 @@ /area/station/maintenance/starboard/fore) "pnK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance/testlab) "pnL" = ( /obj/structure/lattice/catwalk, @@ -91920,9 +80119,6 @@ "pnS" = ( /obj/machinery/autolathe, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/cargo/office) "pnV" = ( @@ -91974,20 +80170,6 @@ /obj/structure/cable, /turf/open/floor/glass/reinforced, /area/station/science) -"poo" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology/isolation) "pov" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -91996,18 +80178,11 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "poD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/chair/plastic{ dir = 1 }, @@ -92029,23 +80204,18 @@ /area/station/maintenance/department/security/prison_upper) "poY" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) "ppj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/bar/directional{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "ppn" = ( @@ -92079,7 +80249,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "pqc" = ( @@ -92104,34 +80274,14 @@ /turf/closed/wall, /area/station/maintenance/rus_gambling) "pqp" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half, /turf/open/floor/iron, /area/station/hallway/primary/upper) "pqq" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/central) -"pqv" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) -"pqw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pqz" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/landmark/start/hangover, @@ -92144,12 +80294,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -92177,12 +80321,8 @@ /area/station/service/janitor) "pqU" = ( /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable/layer1, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -92206,9 +80346,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "pre" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Security - Interrogation Monitoring"; dir = 10 @@ -92253,12 +80390,6 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/security/courtroom) -"prw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "prL" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -92276,9 +80407,7 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "prU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) "prV" = ( @@ -92331,8 +80460,8 @@ /area/station/maintenance/department/medical) "psu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "psw" = ( @@ -92347,12 +80476,8 @@ /obj/structure/railing{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "psD" = ( @@ -92374,12 +80499,8 @@ /area/station/engineering/supermatter/room) "psQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -92450,8 +80571,8 @@ dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "ptx" = ( @@ -92472,19 +80593,6 @@ /turf/open/floor/iron/dark, /area/station/security/office) "ptL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/table/wood, /obj/item/clothing/suit/toggle/suspenders, /obj/effect/spawner/random/clothing/costume, @@ -92495,23 +80603,14 @@ /area/station/maintenance/clown_chamber) "ptO" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/duct, /turf/open/floor/carpet/purple, /area/station/common/night_club) -"ptR" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "ptU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -92542,8 +80641,8 @@ "pue" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -92583,16 +80682,14 @@ "puL" = ( /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/break_room) "puT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "puV" = ( @@ -92600,9 +80697,7 @@ /turf/open/floor/iron/white, /area/station/medical/morgue) "puX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "puZ" = ( @@ -92615,18 +80710,13 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "pvb" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "pvc" = ( @@ -92654,9 +80744,7 @@ c_tag = "Security - Holding Cell" }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "pvk" = ( @@ -92673,44 +80761,27 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "pvr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pvv" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/station/common/wrestling/lobby) "pvB" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, /obj/machinery/computer/crew{ dir = 8 }, /obj/machinery/light/directional/east, /obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pvF" = ( @@ -92725,12 +80796,8 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "pvL" = ( @@ -92743,7 +80810,7 @@ /area/station/ai_monitored/command/storage/eva/upper) "pvU" = ( /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/reinforced, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) @@ -92790,12 +80857,9 @@ /obj/item/pen{ pixel_y = 4 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "pwi" = ( @@ -92840,29 +80904,18 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "pwo" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "pwr" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/computer/shuttle/labor{ dir = 4 }, /obj/machinery/status_display/evac/directional/west, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pwt" = ( @@ -92870,8 +80923,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -92923,9 +80976,7 @@ /area/station/cargo/lobby) "pwH" = ( /obj/item/kirbyplants/organic/plant22, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "pwR" = ( @@ -92934,7 +80985,7 @@ /turf/open/floor/plating, /area/station/maintenance/central) "pwW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "pwX" = ( @@ -92942,10 +80993,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "pxa" = ( @@ -92953,13 +81002,13 @@ dir = 4 }, /obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "pxb" = ( -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "pxd" = ( /obj/effect/turf_decal/siding/wood{ @@ -92973,23 +81022,18 @@ /obj/machinery/door/firedoor, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) "pxe" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot_blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pxh" = ( /obj/machinery/door/airlock/highsecurity{ @@ -93014,12 +81058,8 @@ }, /obj/effect/spawner/random/maintenance, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -93042,41 +81082,31 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "pxK" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "pxL" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pxT" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "pxU" = ( @@ -93088,8 +81118,8 @@ /obj/effect/spawner/random/structure/steam_vent, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "pya" = ( @@ -93179,16 +81209,12 @@ /turf/open/floor/iron/smooth_corner, /area/station/engineering/atmos/hfr_room) "pzl" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "Security Junction"; sortType = 7 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pzm" = ( /obj/effect/spawner/structure/window/reinforced, @@ -93265,9 +81291,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) "pzN" = ( @@ -93340,11 +81364,10 @@ }, /area/station/command/gateway) "pAF" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "pAH" = ( @@ -93394,12 +81417,8 @@ name = "Arcade" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, @@ -93407,6 +81426,9 @@ "pBb" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "pBo" = ( @@ -93416,15 +81438,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/central) -"pBq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/library) "pBr" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/bar{ @@ -93484,12 +81497,8 @@ /obj/machinery/door/airlock{ name = "Public Pool" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -93518,31 +81527,11 @@ "pCQ" = ( /obj/effect/turf_decal/delivery, /obj/structure/tank_dispenser, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /turf/open/floor/iron/dark, /area/station/engineering/main) "pCR" = ( /turf/closed/wall, /area/station/common/arcade) -"pDm" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/escapepodbay) -"pDo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/carpet/purple, -/area/station/command/heads_quarters/rd) "pDq" = ( /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) @@ -93586,25 +81575,13 @@ dir = 10 }, /area/station/hallway/secondary/exit) -"pDN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "pEc" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "pEe" = ( @@ -93630,14 +81607,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"pEn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "pEo" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -93658,8 +81627,8 @@ dir = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/court, /turf/open/floor/wood, /area/station/security/courtroom) @@ -93692,12 +81661,8 @@ "pEN" = ( /obj/effect/turf_decal/tile/brown, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/office) "pET" = ( @@ -93708,18 +81673,13 @@ /turf/closed/wall/r_wall, /area/station/hallway/secondary/exit) "pFh" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "pFi" = ( @@ -93729,8 +81689,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -93739,12 +81699,7 @@ /turf/closed/wall, /area/station/maintenance/abandon_kitchen_upper) "pFt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/machinery/camera/directional/east{ c_tag = "Bridge - Command Bar"; name = "command camera" @@ -93752,6 +81707,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "pFw" = ( @@ -93767,20 +81723,14 @@ }, /obj/item/trash/can/food/beans, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "pFD" = ( /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/station/cargo/storage) @@ -93825,8 +81775,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/duct, @@ -93879,12 +81829,8 @@ /area/station/cargo/warehouse) "pGt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -93896,10 +81842,8 @@ name = "recreation camera" }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/stone, /area/station/common/wrestling/arena) @@ -93930,12 +81874,8 @@ /area/station/engineering/supermatter/room) "pHf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -93950,9 +81890,7 @@ /turf/open/floor/iron/white, /area/station/science/lab) "pHz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "pHB" = ( @@ -93961,12 +81899,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "pHD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/security/detectives_office) @@ -93979,7 +81913,6 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "pHL" = ( @@ -93988,8 +81921,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "pHQ" = ( @@ -94035,10 +81968,8 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "pIn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) "pIo" = ( @@ -94066,12 +81997,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "pIA" = ( @@ -94082,9 +82009,7 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "pIJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -94098,32 +82023,22 @@ }, /area/station/command/heads_quarters/ce) "pJb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "pJc" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4; pixel_x = -12 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "pJq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94132,8 +82047,8 @@ "pJy" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "pJB" = ( @@ -94142,9 +82057,6 @@ id = "Cell 4"; name = "Cell 4 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -94153,9 +82065,7 @@ /area/station/security/brig) "pJI" = ( /obj/effect/spawner/random/trash/moisture, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, @@ -94163,8 +82073,8 @@ /area/station/maintenance/department/crew_quarters/dorms) "pJO" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -94267,19 +82177,6 @@ /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) -"pKm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "pKp" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -94300,8 +82197,8 @@ "pKx" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -94359,17 +82256,13 @@ "pKW" = ( /obj/effect/turf_decal/bot, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "pKX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security{ name = "Shuttle Bay" }, @@ -94415,8 +82308,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/cent_com/rep_door, /obj/machinery/duct, @@ -94424,9 +82317,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "pLg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/ordnance_maint) "pLk" = ( @@ -94536,22 +82427,12 @@ /turf/open/floor/carpet, /area/station/maintenance/abandon_psych) "pMb" = ( -/obj/effect/turf_decal/tile/bar{ +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison/mess) -"pMg" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/clown_chamber) "pMh" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -94596,17 +82477,11 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "pMq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "pMw" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94631,10 +82506,7 @@ /obj/structure/transit_tube/horizontal{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "pMQ" = ( /obj/effect/turf_decal/tile/neutral{ @@ -94648,8 +82520,8 @@ dir = 10; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -94661,12 +82533,8 @@ /area/station/common/wrestling/arena) "pMW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, @@ -94689,10 +82557,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "pNb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/nt_rep) "pNh" = ( @@ -94703,18 +82569,6 @@ }, /turf/open/floor/carpet, /area/station/service/library/lounge) -"pNj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, -/area/station/science/ordnance/testlab) "pNl" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -94754,12 +82608,8 @@ icon_state = "dirt-flat-1" }, /obj/item/trash/chips, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -94822,26 +82672,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) -"pOE" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) -"pOF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "pOJ" = ( /turf/open/floor/iron, /area/station/hallway/secondary/construction) @@ -94850,6 +82680,7 @@ /obj/structure/railing{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "pOM" = ( @@ -94903,12 +82734,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -94921,12 +82748,9 @@ /turf/open/floor/iron, /area/station/science/explab) "pPx" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, /obj/effect/landmark/start/assistant, /obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar/atrium) "pPz" = ( @@ -94939,17 +82763,16 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "pPD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/gateway) "pPF" = ( /obj/item/radio/intercom/directional/north, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "pPJ" = ( @@ -94966,8 +82789,8 @@ /obj/machinery/door/airlock/security{ name = "Court Cell" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/courtroom) @@ -94985,7 +82808,7 @@ /area/station/security/prison) "pQs" = ( /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 5 }, /obj/item/storage/lockbox/loyalty, @@ -95018,10 +82841,8 @@ /area/station/common/pool) "pQC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/office) @@ -95052,12 +82873,8 @@ /area/station/security/prison/shower) "pQT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -95076,30 +82893,18 @@ req_access = list("command") }, /obj/item/radio/intercom/directional/south, -/obj/item/storage/secure/safe/caps_spare{ +/obj/structure/secure_safe/caps_spare{ pixel_x = 5; pixel_y = -37 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "pQZ" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/mess) "pRa" = ( @@ -95109,7 +82914,6 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/effect/turf_decal/stripes/box, /obj/structure/disposaloutlet, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -95123,12 +82927,8 @@ /area/station/maintenance/aux_eva) "pRs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/prison/rec) "pRx" = ( @@ -95177,7 +82977,6 @@ pixel_x = -32 }, /obj/structure/railing, -/obj/effect/turf_decal/trimline/white/filled/corner, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -95186,10 +82985,8 @@ /area/station/hallway/primary/starboard) "pSd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/medical/psychology) "pSh" = ( @@ -95203,16 +83000,6 @@ /area/station/service/chapel/funeral) "pSi" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "pSk" = ( @@ -95230,12 +83017,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "pSu" = ( @@ -95248,13 +83031,10 @@ dir = 8; pixel_x = 5 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -95293,8 +83073,8 @@ /turf/open/floor/iron, /area/station/engineering/atmos/office) "pSS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) "pSY" = ( @@ -95303,10 +83083,6 @@ /turf/open/floor/iron, /area/station/security/warden) "pTj" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/chem_dispenser/drinks/beer{ dir = 8 @@ -95325,28 +83101,11 @@ /area/station/engineering/supermatter) "pTx" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) -"pTz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "pTE" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/maintenance, @@ -95368,8 +83127,8 @@ }, /obj/structure/curtain/cloth/fancy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/captain_dining) @@ -95401,18 +83160,10 @@ /obj/structure/chair{ pixel_y = -2 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/warden) "pUc" = ( /obj/machinery/light/directional/west, @@ -95457,12 +83208,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/maintenance/abandon_diner) @@ -95527,16 +83274,6 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"pUY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "pVg" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -95550,19 +83287,6 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central) -"pVj" = ( -/obj/structure/railing/wooden_fencing{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/common/pool) "pVn" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -95580,12 +83304,6 @@ /area/station/maintenance/port/aft) "pVA" = ( /obj/structure/closet/toolcloset, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/light_switch/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -95600,9 +83318,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -95678,19 +83394,12 @@ /turf/open/floor/plating, /area/station/maintenance/library/upper) "pWc" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) "pWi" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table/wood/fancy/black, /obj/structure/window/spawner/directional/south, /obj/item/reagent_containers/cup/glass/bottle/lizardwine{ @@ -95705,6 +83414,7 @@ pixel_x = 2; pixel_y = 6 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "pWk" = ( @@ -95715,8 +83425,8 @@ name = "Lockdown" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/upper) @@ -95736,12 +83446,8 @@ }, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -95773,12 +83479,8 @@ /turf/open/space/basic, /area/space/nearstation) "pWt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -95797,9 +83499,7 @@ /area/station/commons/dorms) "pWy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -95849,9 +83549,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "pWL" = ( @@ -95875,12 +83573,8 @@ /turf/closed/wall, /area/station/cargo/storage) "pWV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/stairs/medium{ dir = 8 @@ -95892,8 +83586,8 @@ /obj/machinery/door/airlock/bathroom{ name = "Primary Restroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -95964,9 +83658,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) "pXK" = ( @@ -95984,12 +83676,8 @@ icon_state = "dirt-flat-1" }, /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) @@ -96000,12 +83688,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/department/engineering/atmos_aux_port) "pXP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/night_club) @@ -96018,8 +83702,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/white/side, /area/station/science) @@ -96071,12 +83755,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/smooth_large, /area/station/command/secure_bunker) @@ -96110,12 +83790,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "pYM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "pYQ" = ( @@ -96139,12 +83815,6 @@ /turf/open/floor/iron, /area/station/science/explab) "pZl" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/medical, /turf/open/floor/iron/white, /area/station/medical/coldroom) @@ -96154,7 +83824,7 @@ c_tag = "Bridge - Captain's Lounge"; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "pZn" = ( @@ -96167,27 +83837,19 @@ }, /area/station/hallway/primary/central) "pZt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "pZy" = ( -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, /obj/item/kirbyplants/organic/plant22, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/machinery/camera/directional/east{ c_tag = "Security - Head of Security's Office" }, /obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/red/real_red/anticorner/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "pZA" = ( @@ -96197,10 +83859,8 @@ /turf/closed/wall, /area/station/maintenance/department/security/prison_upper) "pZJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness) @@ -96230,12 +83890,6 @@ /turf/open/floor/iron, /area/station/security/brig) "qao" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "qax" = ( @@ -96247,7 +83901,6 @@ /area/station/service/barber) "qaB" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, @@ -96281,12 +83934,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -96312,10 +83961,10 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "qaZ" = ( -/obj/effect/turf_decal/stripes{ +/obj/machinery/computer/station_alert{ dir = 1 }, -/obj/machinery/computer/station_alert{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/dark, @@ -96334,12 +83983,8 @@ /area/station/security/prison/mess) "qbj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/hallway/primary/port) "qbq" = ( @@ -96357,9 +84002,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "qbu" = ( @@ -96378,20 +84021,14 @@ "qby" = ( /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) "qbD" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/library/lounge) "qbG" = ( @@ -96443,25 +84080,19 @@ /area/station/science/research) "qcm" = ( /obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "qcs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/hallway/secondary/entry) "qcx" = ( /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/item/stack/sheet/iron{ amount = 30 }, @@ -96485,32 +84116,13 @@ "qcC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) -"qcD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/carpet, -/area/station/service/chapel) "qcE" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -96540,8 +84152,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "qcU" = ( @@ -96637,21 +84249,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "qdC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/machinery/shower/directional/south, /obj/effect/turf_decal/stripes/end, @@ -96697,10 +84303,6 @@ /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/mechbay) "qei" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -96709,10 +84311,6 @@ "qem" = ( /turf/closed/wall/rust, /area/station/medical/power_station) -"qeo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "qet" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -96763,9 +84361,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "qeW" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -96777,7 +84372,6 @@ /turf/open/floor/iron/dark/small, /area/station/bitrunning/den) "qfc" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -96866,12 +84460,8 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "qgb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -96927,16 +84517,23 @@ /area/station/security/prison/workout) "qgI" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/trimline/white/filled/arrow_cw{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/white/filled/corner, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, /obj/structure/railing/corner/end/flip, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"qgJ" = ( +/obj/machinery/button/door/directional/south{ + name = "Security Mech Garage Door Controls"; + id = "SecMech"; + req_access = list("security") + }, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "qgM" = ( /obj/machinery/chem_master/condimaster{ name = "HoochMaster 2000" @@ -96970,15 +84567,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "qgZ" = ( /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 4 @@ -96996,8 +84593,8 @@ dir = 8 }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -97012,7 +84609,6 @@ /obj/structure/table/glass, /obj/structure/window/spawner/directional/west, /obj/item/stack/medical/gauze/twelve, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "qhn" = ( @@ -97029,25 +84625,17 @@ /area/station/maintenance/aft/upper) "qho" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/aft/upper) "qhq" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "qht" = ( @@ -97087,7 +84675,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/greater) "qhK" = ( -/obj/effect/spawner/random/trash/mess, /obj/structure/cable, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, @@ -97098,13 +84685,6 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"qhP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qhR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer4{ @@ -97131,9 +84711,7 @@ /area/station/service/theater/abandoned) "qii" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "qip" = ( @@ -97165,9 +84743,7 @@ /area/station/maintenance/department/medical/central) "qit" = ( /obj/machinery/status_display/evac/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "qiv" = ( @@ -97178,20 +84754,14 @@ name = "Private Detective Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) "qiC" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/research) @@ -97230,8 +84800,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -97247,20 +84817,7 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "qjv" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "qjx" = ( /turf/open/misc/beach/sand, @@ -97290,8 +84847,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "qjL" = ( @@ -97345,15 +84902,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "qkp" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "qkq" = ( @@ -97370,12 +84924,12 @@ /area/station/maintenance/abandon_diner) "qku" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "qkw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison/upper) "qkx" = ( @@ -97389,12 +84943,8 @@ /area/station/maintenance/aft/upper) "qkz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/service/chapel/office) @@ -97459,9 +85009,7 @@ "qlt" = ( /obj/effect/turf_decal/bot, /obj/structure/rack/shelf, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) "qlu" = ( @@ -97470,27 +85018,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"qly" = ( -/obj/structure/cable, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/locker) "qlC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red{ dir = 4 }, /turf/open/floor/iron, @@ -97579,12 +85111,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -97609,9 +85137,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "qmn" = ( -/obj/machinery/air_sensor{ - chamber_id = "ordnancegas1" - }, +/obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) "qmr" = ( @@ -97621,16 +85147,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/common/pool/sauna) -"qmt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "qmx" = ( /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) @@ -97642,12 +85158,8 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "qmB" = ( @@ -97656,39 +85168,16 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/bar/backroom) "qmI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side, /area/station/security/brig) -"qmO" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/station/science/robotics/lab) "qmP" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 4 @@ -97696,20 +85185,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) "qmT" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "qmW" = ( @@ -97737,8 +85220,8 @@ }, /obj/structure/barricade/wooden/crude, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/wood, @@ -97760,26 +85243,19 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "qnr" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "qnt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) "qnw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; name = "Warehouse Shutters" @@ -97791,11 +85267,10 @@ dir = 4; pixel_x = -5 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -97805,26 +85280,6 @@ /obj/item/radio/intercom, /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) -"qnB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/brig) "qnH" = ( /obj/structure/chair/sofa/bench/left{ dir = 4; @@ -97837,12 +85292,8 @@ /area/station/hallway/primary/central/aft) "qnI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 4 }, @@ -97850,12 +85301,8 @@ "qnM" = ( /mob/living/simple_animal/bot/secbot/pingsky, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 1 }, @@ -97863,10 +85310,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "qnR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "qnW" = ( @@ -97874,19 +85319,14 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "qoe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/aslyum) "qoj" = ( /obj/structure/closet/lasertag/blue, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -97940,26 +85380,12 @@ /area/station/maintenance/department/security/prison_upper) "qoL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron, /area/station/commons/dorms) -"qoR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "qoV" = ( /obj/machinery/photocopier, /obj/machinery/light/directional/south, @@ -97985,12 +85411,8 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -97999,12 +85421,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) "qpb" = ( @@ -98022,7 +85440,7 @@ /turf/open/floor/iron/dark, /area/station/maintenance/abandon_exam/cat) "qpd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -98054,12 +85472,8 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "qpu" = ( @@ -98087,8 +85501,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/central) "qpL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -98147,8 +85561,8 @@ "qqb" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -98160,12 +85574,8 @@ "qqo" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/solars/port/fore) "qqs" = ( @@ -98182,19 +85592,11 @@ /obj/item/plant_analyzer, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"qqC" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "qqK" = ( /turf/open/floor/engine, /area/station/science/auxlab/firing_range) "qqM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/storage/tech) "qqT" = ( @@ -98238,12 +85640,8 @@ /area/station/medical/break_room) "qrd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -98312,12 +85710,6 @@ /obj/structure/flora/bush/fullgrass, /turf/open/floor/grass, /area/station/security/prison/garden) -"qrM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "qrP" = ( /obj/structure/chair/sofa/bench/right{ dir = 8; @@ -98335,8 +85727,8 @@ /area/station/commons/dorms) "qrU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 8 }, @@ -98358,8 +85750,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/side, /area/station/science) @@ -98398,11 +85790,10 @@ /area/station/science/research) "qsl" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark/side{ dir = 8 @@ -98411,12 +85802,8 @@ "qsm" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 4 }, @@ -98437,31 +85824,23 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "qsz" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/departments/science/alt/directional/north, /turf/open/floor/iron/white, /area/station/science/research) "qsD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "qsG" = ( @@ -98513,16 +85892,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "qsW" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "qsY" = ( @@ -98556,15 +85932,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"qth" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "qti" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/firealarm/directional/north, @@ -98628,9 +85995,6 @@ /area/station/maintenance/department/science/ordnance_maint) "qtw" = ( /obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/central) @@ -98642,7 +86006,6 @@ /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "qtM" = ( @@ -98675,16 +86038,6 @@ }, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) -"qtR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/common/laser_tag) "qtS" = ( /obj/item/cigbutt, /obj/structure/cable, @@ -98741,7 +86094,6 @@ /area/station/maintenance/department/crew_quarters/dorms) "qut" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/clothing/gloves/color/orange, /obj/item/clothing/gloves/color/orange, /obj/item/clothing/gloves/color/orange, @@ -98792,12 +86144,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/cryo) "quA" = ( @@ -98808,22 +86156,11 @@ /area/station/command/heads_quarters/blueshield) "quC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /mob/living/simple_animal/bot/medbot/autopatrol, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"quE" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "quF" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -98832,16 +86169,13 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "quH" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/radio/intercom/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "quJ" = ( @@ -98863,12 +86197,8 @@ pixel_y = 20 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing{ dir = 8 }, @@ -98884,20 +86214,16 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/abandon_diner) "qvj" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "qvs" = ( @@ -98913,12 +86239,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "qvB" = ( @@ -98950,6 +86272,7 @@ /obj/structure/railing/corner{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) "qvW" = ( @@ -98975,9 +86298,7 @@ }, /area/station/hallway/primary/central) "qwg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -99030,12 +86351,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -99097,12 +86414,7 @@ /turf/open/floor/iron/dark, /area/station/common/locker_room_shower) "qxt" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "qxI" = ( @@ -99130,37 +86442,26 @@ uses = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat/hallway) "qya" = ( /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "qyf" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/modular_computer/preset/civilian, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "qyi" = ( @@ -99188,7 +86489,7 @@ /turf/open/floor/iron/dark, /area/station/maintenance/solars/starboard/fore) "qyn" = ( -/obj/item/storage/secure/safe{ +/obj/structure/secure_safe{ pixel_x = 32 }, /obj/structure/chair/comfy/brown, @@ -99210,8 +86511,8 @@ /obj/machinery/door/airlock{ name = "Commisary Desk" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "qyr" = ( @@ -99240,7 +86541,7 @@ /area/station/science/breakroom) "qyx" = ( /obj/item/camera, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) "qyy" = ( @@ -99287,8 +86588,8 @@ /area/station/service/cafeteria) "qyT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/range) "qyY" = ( @@ -99308,12 +86609,8 @@ /area/station/hallway/primary/port) "qzi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/service/theater/abandoned) "qzj" = ( @@ -99325,12 +86622,8 @@ /area/station/science/research) "qzm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "qzn" = ( @@ -99350,19 +86643,6 @@ /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "qzz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -99371,17 +86651,13 @@ /obj/machinery/door/airlock/maintenance{ name = "Abandoned Clown Theater" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "qzC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99481,13 +86757,6 @@ pixel_x = -6 }, /obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -99498,19 +86767,14 @@ name = "Cell 3"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/three, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/brig) "qAE" = ( -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -99564,6 +86828,9 @@ c_tag = "Security - Outpost"; dir = 9 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "qBm" = ( @@ -99584,12 +86851,8 @@ /area/station/ai_monitored/security/armory) "qBA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/office/light{ dir = 8 }, @@ -99667,9 +86930,7 @@ /obj/effect/turf_decal/siding/thinplating/dark/end, /obj/machinery/shower/directional/south, /obj/structure/drain, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "qCv" = ( /obj/effect/turf_decal/trimline/red/filled/line{ @@ -99677,12 +86938,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -99711,8 +86968,8 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "qCI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/white/side, /area/station/security/prison/upper) @@ -99778,12 +87035,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/atmos/office) @@ -99826,10 +87079,8 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "qDn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) @@ -99855,12 +87106,8 @@ }, /obj/machinery/light/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "qDq" = ( @@ -99895,12 +87142,8 @@ /obj/structure/cable, /obj/machinery/firealarm/directional/west, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "qDF" = ( @@ -99916,20 +87159,17 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "qDH" = ( -/obj/effect/turf_decal/tile/green{ - dir = 1 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark/side{ dir = 6 }, /area/station/hallway/primary/central) "qDO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/interrogation) "qDP" = ( @@ -99959,16 +87199,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/wood, /area/station/command/meeting_room/council) -"qEm" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "qEn" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/caution/stand_clear{ @@ -99977,16 +87207,10 @@ /turf/open/floor/plating, /area/station/escapepodbay) "qEo" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos/test_chambers) "qEt" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/clothing/mask/breath, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -100025,17 +87249,11 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/sorting) "qEW" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/light/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -100051,9 +87269,7 @@ /area/station/security/checkpoint) "qFa" = ( /obj/structure/cable, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "qFc" = ( /obj/effect/turf_decal/bot, @@ -100078,8 +87294,8 @@ /area/station/maintenance/aft/upper) "qFr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -100114,28 +87330,15 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "qFI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /obj/machinery/duct, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) -"qFP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "qFQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/curtain/cloth/fancy/mechanical/start_closed{ desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; id = "theater_curtains"; @@ -100144,18 +87347,14 @@ /turf/open/floor/wood, /area/station/service/theater) "qFV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "qFW" = ( /obj/structure/railing/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 1 }, @@ -100177,12 +87376,8 @@ "qGm" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100214,7 +87409,7 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "qGC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/commons/fitness) @@ -100238,12 +87433,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "qGP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner{ dir = 4 }, @@ -100256,21 +87447,14 @@ /obj/machinery/recharger{ pixel_y = 2 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qGV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -100307,12 +87491,8 @@ "qHq" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "qHx" = ( @@ -100332,8 +87512,7 @@ dir = 8; pixel_x = 30 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -100356,12 +87535,8 @@ /turf/open/floor/iron/white/side, /area/station/science/xenobiology) "qHK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -100428,20 +87603,16 @@ /turf/closed/wall/r_wall, /area/station/common/arcade) "qIv" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/kitchen/diner) "qIA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) "qIB" = ( @@ -100574,8 +87745,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "qJF" = ( @@ -100586,8 +87757,8 @@ /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison/garden) "qJH" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/vending/boozeomat, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "qJJ" = ( @@ -100668,12 +87839,8 @@ "qKA" = ( /obj/machinery/power/terminal, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) "qKF" = ( @@ -100686,9 +87853,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "qKN" = ( @@ -100708,9 +87873,6 @@ /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) "qKW" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, @@ -100718,9 +87880,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) "qLh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/laser_tag) "qLj" = ( @@ -100739,7 +87899,7 @@ dir = 4 }, /obj/effect/landmark/start/bartender, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/secondary/service) "qLC" = ( @@ -100754,12 +87914,6 @@ /area/station/medical/storage) "qLQ" = ( /obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, /obj/structure/closet/crate/hydroponics, /turf/open/floor/iron/dark/small, /area/station/cargo/miningdock) @@ -100783,10 +87937,8 @@ /obj/effect/turf_decal/bot_white, /obj/structure/cable, /obj/machinery/holopad/secure, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "qMb" = ( @@ -100794,25 +87946,12 @@ /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) "qMm" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/table, /obj/structure/bedsheetbin, /turf/open/floor/iron/kitchen{ dir = 1 }, /area/station/security/prison/upper) -"qMq" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "qMs" = ( /obj/effect/turf_decal/weather/sand{ dir = 1 @@ -100852,12 +87991,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "qML" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100870,9 +88005,7 @@ req_access = list("security") }, /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qMV" = ( @@ -100892,8 +88025,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "qNf" = ( @@ -100935,12 +88068,8 @@ /obj/effect/turf_decal/bot, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/iron/dark/side{ dir = 8 @@ -100956,21 +88085,15 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron/white, /area/station/science/xenobiology) "qNB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 1 }, @@ -100986,17 +88109,6 @@ }, /turf/open/floor/iron, /area/station/science/research/abandoned) -"qNL" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "qNP" = ( /obj/structure/railing{ dir = 8 @@ -101030,24 +88142,16 @@ dir = 9 }, /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "qOe" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -101064,9 +88168,6 @@ /obj/machinery/computer/security{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /obj/machinery/airalarm/directional/south, @@ -101074,28 +88175,18 @@ /area/station/security/checkpoint) "qOA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/iron, /area/station/commons/dorms) -"qOD" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "qOJ" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" @@ -101131,8 +88222,8 @@ /area/station/science/xenobiology/control) "qPh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -101163,9 +88254,6 @@ /obj/structure/railing{ dir = 10 }, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /turf/open/floor/plating/rust, /area/station/maintenance/department/science/xenobiology) "qPs" = ( @@ -101190,12 +88278,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "qPD" = ( @@ -101231,27 +88315,20 @@ /area/station/maintenance/department/security/lower) "qPT" = ( /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "qQe" = ( /obj/effect/turf_decal/vg_decals/numbers/zero{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "qQf" = ( /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/library/printer) "qQh" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 6"; dir = 6 @@ -101262,10 +88339,8 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "qQi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, /obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "qQj" = ( @@ -101285,16 +88360,7 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/console_room) -"qQr" = ( -/obj/structure/chair/stool/bar/directional/north, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen/diner) "qQs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron/dark/side{ @@ -101317,8 +88383,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/east, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -101361,9 +88427,6 @@ }, /obj/effect/landmark/start/security_officer, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark/corner{ dir = 4 }, @@ -101394,21 +88457,13 @@ /turf/open/floor/iron, /area/station/engineering/storage/tech) "qRI" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "qRN" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -101440,9 +88495,6 @@ /turf/open/floor/iron/white, /area/station/science) "qSd" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/aux_eva) "qSe" = ( @@ -101459,9 +88511,6 @@ /turf/open/floor/wood/parquet, /area/station/common/night_club) "qSo" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/photocopier, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -101472,10 +88521,6 @@ }, /area/station/commons/vacant_room/commissary) "qSs" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/stool/bar/directional{ dir = 1 }, @@ -101494,18 +88539,11 @@ /area/station/maintenance/aft/upper) "qSy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -101517,20 +88555,13 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/parquet, /area/station/service/theater) -"qSH" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "qSJ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -101617,22 +88648,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/gateway) -"qTB" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qTC" = ( /obj/machinery/door/airlock/command{ name = "Telescience Supply Storage" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -101662,12 +88682,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "qTT" = ( @@ -101675,38 +88691,20 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ dir = 4 }, /area/station/hallway/primary/port) "qTW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "qUa" = ( /obj/item/paper/fluff{ @@ -101716,9 +88714,7 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "qUg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 @@ -101729,10 +88725,6 @@ /obj/machinery/computer/security/telescreen/interrogation{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -101803,15 +88795,8 @@ /area/station/service/lawoffice) "qVa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -101853,12 +88838,8 @@ /area/station/maintenance/department/engineering/engine_aft_port) "qVs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -101904,12 +88885,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "qVI" = ( @@ -101928,8 +88905,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "qVY" = ( @@ -101956,12 +88933,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -101973,18 +88946,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "qWn" = ( /obj/structure/flippedtable{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable/layer1, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -102079,10 +89049,8 @@ /area/station/maintenance/fore/upper) "qWU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/medical/aslyum) @@ -102093,10 +89061,8 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) @@ -102110,9 +89076,6 @@ /area/station/maintenance/department/science/xenobiology) "qXp" = ( /obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, @@ -102121,12 +89084,6 @@ "qXs" = ( /turf/closed/wall, /area/station/commons/dorms/room3) -"qXu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/test_chambers) "qXv" = ( /obj/structure/sink/kitchen/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -102145,12 +89102,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, @@ -102196,9 +89149,7 @@ pixel_x = 3; pixel_y = -1 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "qYf" = ( /obj/effect/spawner/random/trash/garbage, @@ -102215,13 +89166,12 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "qYk" = ( -/obj/effect/turf_decal/bot, /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo" }, @@ -102253,29 +89203,6 @@ "qYv" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) -"qYw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "qYC" = ( /obj/structure/chair/office{ dir = 1 @@ -102308,6 +89235,7 @@ /area/station/maintenance/port/upper) "qYI" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "qYP" = ( @@ -102384,13 +89312,11 @@ /area/station/command/secure_bunker) "qZA" = ( /obj/machinery/photocopier, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "qZD" = ( @@ -102414,10 +89340,6 @@ /area/station/cargo/power_station/upper) "qZM" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, @@ -102435,11 +89357,8 @@ /area/station/hallway/primary/port) "qZQ" = ( /obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -102460,17 +89379,6 @@ }, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) -"rak" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 10 - }, -/obj/structure/closet/secure_closet/personal, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "ral" = ( /obj/machinery/camera/directional/south{ c_tag = "Engineering - Gravity Generator"; @@ -102478,9 +89386,7 @@ name = "engineering camera" }, /obj/machinery/status_display/ai/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -102498,22 +89404,12 @@ /turf/open/floor/plating, /area/station/common/pool) "raF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/central) "raG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/machinery/washing_machine, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/kitchen{ @@ -102522,12 +89418,8 @@ /area/station/security/prison/upper) "raJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/cafeteria) @@ -102541,7 +89433,7 @@ }, /area/station/science/ordnance/bomb) "rba" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "rbc" = ( @@ -102593,12 +89485,8 @@ /turf/open/floor/wood, /area/station/service/library/abandoned) "rbq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -102666,8 +89554,8 @@ /area/station/cargo/miningoffice) "rci" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "rcq" = ( @@ -102689,9 +89577,6 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) "rcw" = ( @@ -102705,12 +89590,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -102760,8 +89641,8 @@ "rcX" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -102785,22 +89666,11 @@ /obj/machinery/recharger{ pixel_y = 3 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/item/borg/sight/hud/sec{ pixel_y = 17 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "rdo" = ( @@ -102817,8 +89687,8 @@ /area/station/engineering/atmos/hfr_room) "rdr" = ( /obj/structure/flora/bush/flowers_pp, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/chapel) "rdz" = ( @@ -102829,7 +89699,6 @@ /area/station/security/execution/transfer) "rdB" = ( /obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/bot_blue, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -102846,9 +89715,7 @@ pixel_x = -4; pixel_y = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "rdL" = ( /obj/structure/sign/directions/security{ @@ -102868,7 +89735,6 @@ /area/station/maintenance/department/chapel) "rdR" = ( /obj/structure/chair/sofa/right/brown, -/obj/effect/landmark/start/assistant, /obj/machinery/airalarm/directional/north, /turf/open/floor/carpet, /area/station/common/wrestling/lobby) @@ -102886,12 +89752,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rem" = ( @@ -102921,12 +89783,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -102940,22 +89798,8 @@ /obj/machinery/computer/atmos_control/nitrogen_tank{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/tile/red/real_red/diagonal_centre, /turf/open/floor/iron, /area/station/engineering/atmos) "rew" = ( @@ -102975,10 +89819,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) "reA" = ( @@ -102987,10 +89829,8 @@ /turf/open/floor/iron/dark, /area/station/security/office) "reB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "reE" = ( @@ -103031,9 +89871,6 @@ /area/station/security/execution/transfer) "reW" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/iron, /area/station/medical/cryo) @@ -103046,13 +89883,10 @@ /turf/open/floor/plating, /area/station/science/lab) "rfh" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "rfm" = ( @@ -103060,9 +89894,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -103084,25 +89916,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"rft" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "rfu" = ( /turf/open/floor/iron, /area/station/science/auxlab/firing_range) "rfv" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/trimline/white/filled/arrow_cw{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -103157,9 +89975,6 @@ /area/station/security/prison/upper) "rfX" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/structure/bed{ dir = 1; pixel_y = 8 @@ -103201,12 +90016,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/supply/customs, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "rgn" = ( @@ -103256,12 +90067,8 @@ name = "Engineering Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) "rgW" = ( @@ -103305,10 +90112,8 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "rhp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 @@ -103322,10 +90127,7 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology/control) "rhu" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi'; - icon_state = "submarine_perf" - }, +/turf/open/floor/iron/submarine_perf/airless, /area/space/nearstation) "rhA" = ( /obj/structure/table/wood, @@ -103346,15 +90148,10 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "rhV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/lockers) "rhW" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, /obj/item/radio{ @@ -103377,8 +90174,8 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "rib" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/purple, /area/station/common/night_club) @@ -103449,9 +90246,7 @@ /area/station/medical/medbay/central) "riS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -103471,10 +90266,6 @@ /turf/open/space/basic, /area/space/nearstation) "rje" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103487,12 +90278,8 @@ /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "rjm" = ( @@ -103504,7 +90291,9 @@ /obj/item/reagent_containers/cup/beaker/large, /obj/item/reagent_containers/dropper, /obj/structure/noticeboard/directional/south, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "rjq" = ( @@ -103518,9 +90307,6 @@ /turf/open/floor/engine, /area/station/maintenance/department/science/xenobiology) "rjt" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, @@ -103536,12 +90322,8 @@ /area/station/service/cafeteria) "rjB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103549,12 +90331,8 @@ /area/station/service/cafeteria) "rjF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -103570,35 +90348,18 @@ }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) "rjO" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) @@ -103620,12 +90381,6 @@ "rjX" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -103638,8 +90393,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "rkc" = ( @@ -103682,14 +90437,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) -"rkr" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "rkv" = ( /turf/open/floor/iron/stairs/right{ dir = 8 @@ -103736,21 +90483,7 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/common/arcade) -"rkO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "rkS" = ( -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -103839,22 +90572,10 @@ name = "chapel camera" }, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/chapel) -"rlD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "rlG" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" @@ -103863,12 +90584,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison) @@ -103945,16 +90662,11 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Theater" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "rmz" = ( @@ -103995,18 +90707,12 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) "rnl" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/gulag_teleporter, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) @@ -104015,10 +90721,7 @@ /area/station/science/ordnance/testlab) "rns" = ( /obj/effect/turf_decal/vg_decals/numbers/five, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "rny" = ( /obj/effect/decal/cleanable/dirt{ @@ -104026,12 +90729,8 @@ }, /obj/item/stack/sheet/cardboard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -104058,7 +90757,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "rnT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "rnU" = ( @@ -104091,8 +90790,8 @@ /area/station/science/research/abandoned) "rog" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104125,12 +90824,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "roU" = ( @@ -104151,12 +90846,8 @@ dir = 4 }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -104180,29 +90871,21 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rpk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/command) "rpn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -104211,7 +90894,7 @@ /turf/open/floor/plating, /area/station/science/research/abandoned) "rpr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet, /area/station/common/tailoring) @@ -104259,8 +90942,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "rpO" = ( @@ -104286,12 +90969,8 @@ /area/station/commons/toilet/restrooms) "rpU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104332,17 +91011,11 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, /obj/item/assembly/flash/handheld, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -104382,11 +91055,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"rqB" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "rqC" = ( /turf/closed/wall, /area/station/cargo/office) @@ -104399,12 +91067,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) "rqF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/commons/dorms/room3) @@ -104422,8 +91086,8 @@ /area/station/medical/surgery) "rqN" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104503,12 +91167,8 @@ /area/station/hallway/primary/central) "rsi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -104577,8 +91237,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "rsO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -104609,8 +91269,8 @@ id = "brigfront"; name = "Brig Blast Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -104740,16 +91400,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) -"rtW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "rtX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -104766,35 +91416,31 @@ "rua" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/main) "rum" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/bar) "ruq" = ( /obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/loading_area/white{ - dir = 8 - }, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry4"; name = "Line Acces Shutter" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, +/obj/effect/turf_decal/arrows/white{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "rur" = ( @@ -104821,9 +91467,7 @@ /area/station/maintenance/department/crew_quarters/dorms) "rux" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) "ruz" = ( @@ -104837,12 +91481,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/iron, @@ -104852,8 +91492,8 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "ruG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -104912,19 +91552,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-east" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark, /area/station/command/bridge) "ruY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/night_club) "rvb" = ( @@ -104951,12 +91585,8 @@ /turf/open/floor/glass, /area/station/commons/dorms) "rvl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) @@ -104969,8 +91599,8 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) "rvs" = ( @@ -104981,58 +91611,27 @@ icon_state = "dirt-flat-1" }, /obj/item/trash/semki, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "rvy" = ( /obj/structure/sign/barber{ pixel_x = -13 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/hallway/primary/port) -"rvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/central) "rvL" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) "rvO" = ( /obj/structure/chair/comfy/black, /obj/effect/landmark/start/head_of_security, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) "rvP" = ( @@ -105053,14 +91652,8 @@ /obj/machinery/shower/directional/east{ name = "emergency shower" }, -/obj/effect/turf_decal/bot, /obj/structure/drain, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating/dark/end{ - dir = 4 - }, +/obj/effect/turf_decal/box, /turf/open/floor/iron/checker, /area/station/engineering/main) "rwl" = ( @@ -105120,9 +91713,7 @@ /obj/effect/turf_decal/vg_decals/numbers/nine{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "rwS" = ( /obj/structure/chair/sofa/bench/left{ @@ -105142,8 +91733,8 @@ }, /area/station/security/prison) "rwZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -105193,9 +91784,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 @@ -105203,8 +91791,8 @@ /area/station/hallway/primary/port) "rxy" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) @@ -105225,10 +91813,6 @@ /area/station/maintenance/abandon_office) "rxG" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/machinery/light/directional/west, /obj/machinery/power/energy_accumulator/tesla_coil, /turf/open/floor/iron/dark/side{ @@ -105245,33 +91829,18 @@ /obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"rxP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "rxQ" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/common/night_club) "rxR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "rxV" = ( /obj/machinery/computer/security, -/obj/effect/turf_decal/stripes, /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/stripes/blue/line, /turf/open/floor/iron/dark, @@ -105303,10 +91872,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -105341,8 +91908,8 @@ /area/station/maintenance/department/science/ordnance_maint) "ryK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/hallway/primary/central) "ryM" = ( @@ -105373,8 +91940,8 @@ "rzg" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "rzv" = ( @@ -105387,12 +91954,8 @@ id_tag = "Capoffice2"; name = "Captain's Suite" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -105434,7 +91997,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) "rAA" = ( @@ -105462,29 +92025,7 @@ }, /turf/open/floor/grass, /area/station/medical/patients_rooms) -"rAL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, -/area/station/medical/surgery) "rAN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall11"; location = "hall10" @@ -105511,22 +92052,10 @@ "rBo" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) -"rBt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "rBw" = ( /obj/structure/inflatable/door, /turf/open/floor/plating, @@ -105551,12 +92080,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "rBK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/auxlab/firing_range) @@ -105582,8 +92107,8 @@ /area/station/hallway/primary/central) "rBT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/meeting_room/council) @@ -105650,12 +92175,8 @@ /obj/item/stack/sheet/cardboard, /obj/item/storage/box/lights/mixed, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "rCi" = ( @@ -105682,30 +92203,16 @@ /turf/open/floor/iron/checker, /area/station/service/janitor) "rCA" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, /obj/machinery/door/airlock/maintenance{ name = "Abandoned Clown Theater" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/clown_chamber) "rCC" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -105784,9 +92291,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "rCS" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/maintenance/fore/upper) "rCT" = ( /obj/effect/turf_decal/tile/red, @@ -105802,8 +92307,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, @@ -105829,13 +92334,6 @@ dir = 8 }, /area/station/hallway/primary/upper) -"rDs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "rDv" = ( /obj/structure/chair{ dir = 4 @@ -105851,21 +92349,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"rDG" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "rDK" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -105901,18 +92384,8 @@ "rDT" = ( /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security/glass{ name = "Shuttle Hangar" }, @@ -105920,18 +92393,14 @@ dir = 1 }, /obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "rDU" = ( /obj/effect/turf_decal/delivery, /obj/machinery/bluespace_beacon, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "rDV" = ( @@ -105977,18 +92446,14 @@ /area/station/hallway/secondary/exit/departure_lounge) "rEk" = ( /obj/effect/decal/cleanable/blood/gibs/old, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "rEm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -106019,20 +92484,16 @@ network = list("minisat"); start_active = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "rED" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science) @@ -106071,12 +92532,8 @@ c_tag = " Prison - Upper"; network = list("ss13","prison") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/newscaster/directional/north, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -106095,19 +92552,6 @@ "rFr" = ( /turf/open/floor/iron/dark/corner, /area/station/security/prison/upper) -"rFt" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "rFv" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -106125,12 +92569,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "rFD" = ( @@ -106157,14 +92597,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) +"rFN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/mess) "rFR" = ( /obj/machinery/camera/directional/west{ c_tag = "Prison gym"; @@ -106191,10 +92632,8 @@ c_tag = "Command - E.V.A."; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "rFV" = ( @@ -106240,8 +92679,8 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/machinery/firealarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/testlab) "rGn" = ( @@ -106321,31 +92760,14 @@ /obj/item/pen{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "rGZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science) -"rHc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/prison/workout) "rHm" = ( /obj/structure/chair/office{ dir = 8 @@ -106353,19 +92775,6 @@ /obj/effect/landmark/start/geneticist, /turf/open/floor/iron/white, /area/station/science/genetics) -"rHt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs) "rHu" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side{ @@ -106403,16 +92812,13 @@ /area/station/command/heads_quarters/captain) "rHI" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/firealarm/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Security - Gear Room" }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -106421,19 +92827,9 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -106454,12 +92850,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "rHT" = ( @@ -106467,8 +92859,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "rHV" = ( @@ -106485,7 +92877,6 @@ /area/station/maintenance/department/medical/central) "rIc" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/aimodule/harmful, /obj/machinery/light/directional/east, /obj/structure/cable, @@ -106499,17 +92890,6 @@ name = "Padded tile" }, /area/station/medical/aslyum) -"rIg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "rIh" = ( /obj/structure/railing{ dir = 1 @@ -106519,36 +92899,18 @@ dir = 8 }, /area/station/cargo/miningdock) -"rIi" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/medical/coldroom) "rIB" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/fore/upper) "rIC" = ( /obj/machinery/suit_storage_unit/industrial, -/obj/effect/turf_decal/stripes/end, /turf/open/floor/plating, /area/station/cargo/storage) "rIJ" = ( /obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 }, @@ -106573,12 +92935,8 @@ /area/station/service/theater/abandoned) "rIP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -106586,31 +92944,12 @@ /area/station/commons/dorms) "rIQ" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) -"rIR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "rIX" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/prisoner/gulag_teleporter_computer{ dir = 8 }, @@ -106618,21 +92957,12 @@ /area/station/security/execution/transfer) "rJf" = ( /obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/item/toy/plush/slimeplushie{ name = "Lasertag Blue Flag" }, /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "rJh" = ( @@ -106690,13 +93020,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/central) -"rJD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/brig) "rJL" = ( /obj/structure/table/wood, /obj/item/food/grown/harebell, @@ -106729,8 +93052,8 @@ /area/station/hallway/primary/central) "rJZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden) "rKn" = ( @@ -106802,8 +93125,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /obj/machinery/duct, @@ -106828,12 +93151,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "rLH" = ( @@ -106846,9 +93165,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "rLL" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 6 }, @@ -106883,12 +93199,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) "rMr" = ( @@ -106924,10 +93236,8 @@ /area/station/maintenance/department/security/lesser) "rMz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup3"; location = "hallup2" @@ -106945,16 +93255,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"rMC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/nt_rep) "rMM" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/effect/turf_decal/siding/wood{ @@ -106969,12 +93269,8 @@ pixel_y = 32 }, /obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -107004,9 +93300,10 @@ name = "Science Power Station" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/science/rd, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/power_station) "rNl" = ( @@ -107028,18 +93325,14 @@ "rNv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "rNy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "rNG" = ( @@ -107062,12 +93355,8 @@ /area/station/maintenance/port/upper) "rNY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "rOc" = ( @@ -107095,12 +93384,8 @@ "rOl" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/ai/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left{ dir = 8 }, @@ -107149,20 +93434,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "rOM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain/private) "rON" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "rPi" = ( @@ -107196,9 +93474,7 @@ dir = 9 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -107293,12 +93569,8 @@ pixel_y = 5 }, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/grass, /area/station/service/chapel) "rQn" = ( @@ -107323,7 +93595,7 @@ /turf/open/floor/wood, /area/station/security/courtroom) "rQt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -107337,27 +93609,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) -"rQA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/catwalk_floor{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) -"rRb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "rRe" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -107405,12 +93656,8 @@ /area/station/common/arcade) "rRu" = ( /obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, /turf/open/floor/plating, @@ -107419,8 +93666,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -107467,9 +93714,6 @@ /turf/open/floor/iron/dark/small, /area/station/bitrunning/den) "rSj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" @@ -107488,10 +93732,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"rSr" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/storage) "rSs" = ( /turf/open/floor/glass/reinforced, /area/station/security/prison) @@ -107526,12 +93766,8 @@ "rSB" = ( /obj/machinery/holopad/secure, /obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "rSK" = ( @@ -107560,18 +93796,11 @@ }, /turf/open/space/basic, /area/space/nearstation) -"rST" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "rSX" = ( /obj/structure/stairs/south, /turf/open/floor/iron, /area/station/hallway/primary/port) "rSY" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/table/reinforced, /obj/item/storage/toolbox/electrical, /obj/item/clothing/gloves/color/yellow, @@ -107605,17 +93834,12 @@ /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/office) -"rTg" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "rTs" = ( /obj/structure/flora/bush/lavendergrass, /obj/machinery/door/window/left{ @@ -107630,24 +93854,19 @@ id = "rdgene"; name = "Genetics Lab Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/science/genetics) "rTv" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/item/paper_bin{ pixel_y = 3 }, /obj/item/pen{ pixel_y = 4 }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "rTx" = ( @@ -107667,9 +93886,7 @@ /turf/open/openspace/airless, /area/station/maintenance/port/upper) "rTH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/theater/abandoned) "rTL" = ( @@ -107679,26 +93896,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"rTO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"rTQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "rUb" = ( /obj/machinery/button/curtain{ id = "prisoncell7"; @@ -107723,8 +93920,8 @@ /area/station/science/xenobiology) "rUd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -107768,17 +93965,8 @@ /obj/machinery/power/shuttle_engine/heater{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating/airless, /area/space/nearstation) -"rUM" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/primary/port) "rVd" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 1 @@ -107805,14 +93993,10 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "rVq" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -107849,12 +94033,8 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "rVE" = ( @@ -107885,8 +94065,8 @@ name = "Penalty Chamber" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, @@ -107899,51 +94079,14 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark, /area/station/command/gateway) -"rVS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "rVU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/science/robotics) -"rVY" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"rWa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rWg" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/tile/neutral, @@ -107966,10 +94109,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108023,8 +94164,8 @@ /area/station/maintenance/solars/starboard/fore) "rWQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) @@ -108051,12 +94192,8 @@ /area/station/maintenance/abandon_exam/cat) "rXg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108064,9 +94201,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "rXk" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 5"; dir = 6 @@ -108102,12 +94236,8 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "rXy" = ( @@ -108132,12 +94262,8 @@ /area/station/science/xenobiology) "rXO" = ( /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -108150,12 +94276,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "rXY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/maintenance/abandon_diner) @@ -108236,12 +94358,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "rYU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -108295,12 +94411,8 @@ name = "Gravity Generator Room" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sign/warning/radiation/directional/north, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "grav-gen" @@ -108312,13 +94424,10 @@ }, /area/station/engineering/gravity_generator) "rZq" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/stripes/box, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "rZu" = ( /obj/item/storage/crayons{ pixel_x = 2; @@ -108329,9 +94438,9 @@ /turf/open/floor/grass, /area/station/medical/patients_rooms) "rZz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/security/prison) "rZC" = ( @@ -108360,11 +94469,13 @@ /turf/closed/wall/r_wall, /area/station/command/gateway) "rZM" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/kitchen/diner) "rZN" = ( @@ -108374,12 +94485,8 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "rZO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/start/hangover, /turf/open/floor/eighties/red, @@ -108427,8 +94534,8 @@ /area/station/security/warden) "sal" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 4; name = "Toxin Junction"; @@ -108444,15 +94551,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"saI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "saL" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -108460,13 +94558,12 @@ /obj/machinery/airalarm/directional/west, /obj/machinery/light/directional/west, /obj/machinery/chem_mass_spec, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "saM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -108502,12 +94599,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "sbk" = ( @@ -108523,21 +94616,15 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "sbn" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) "sbo" = ( @@ -108596,12 +94683,8 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "sbQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108647,10 +94730,6 @@ /turf/open/floor/iron, /area/station/maintenance/console_room) "sci" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108658,8 +94737,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "sck" = ( @@ -108675,17 +94754,13 @@ /area/station/hallway/secondary/command) "sco" = ( /obj/machinery/light/floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "scr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/blueshield) "scw" = ( @@ -108716,22 +94791,14 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "scI" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108779,7 +94846,7 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "sdw" = ( @@ -108790,9 +94857,6 @@ dir = 8 }, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/station/maintenance/cult_chapel_maint) @@ -108831,12 +94895,8 @@ /turf/open/floor/iron, /area/station/engineering/storage) "sdK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -108847,8 +94907,8 @@ /area/station/common/wrestling/arena) "sdM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -108860,22 +94920,12 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "sdR" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/command/bridge) "sdU" = ( @@ -108889,7 +94939,6 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "sdZ" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, @@ -108955,8 +95004,8 @@ /area/station/cargo/sorting) "seG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) @@ -109027,9 +95076,6 @@ name = "Luggage conveyor switch"; pixel_y = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/central) "sfn" = ( @@ -109061,9 +95107,7 @@ /turf/open/floor/wood, /area/station/service/cafeteria) "sfS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -109081,8 +95125,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/white, @@ -109122,7 +95166,6 @@ /area/station/hallway/primary/upper) "sgw" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, @@ -109139,9 +95182,7 @@ /area/station/medical/medbay/central) "sgz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -109152,25 +95193,10 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"sgF" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "sgI" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 @@ -109180,12 +95206,8 @@ /area/station/science/research) "sgU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109194,16 +95216,10 @@ /area/station/commons/dorms) "sgW" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/item/book/manual/wiki/security_space_law{ pixel_y = 3 }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/office) "sgZ" = ( @@ -109228,12 +95244,6 @@ /turf/open/floor/iron, /area/station/security/checkpoint/medical) "she" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/closet/crate/freezer/blood, /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -109254,15 +95264,6 @@ /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/command/heads_quarters/ce) -"shy" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, -/area/space/nearstation) "shI" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, @@ -109331,12 +95332,8 @@ /turf/open/floor/grass, /area/station/medical/patients_rooms) "siA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/iron/smooth, /area/station/bitrunning/den) @@ -109346,12 +95343,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "siD" = ( @@ -109374,9 +95367,7 @@ "siP" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/bed/dogbed, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "siQ" = ( @@ -109447,12 +95438,8 @@ }, /obj/machinery/pdapainter/security, /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "sjq" = ( @@ -109506,8 +95493,8 @@ "sjT" = ( /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -109528,12 +95515,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/command/secure_bunker) "skf" = ( @@ -109547,16 +95530,6 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) "skg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -109570,7 +95543,7 @@ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload) "skh" = ( /obj/machinery/door/airlock/maintenance, @@ -109596,12 +95569,8 @@ /area/station/science/xenobiology/hallway) "skz" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -109623,12 +95592,8 @@ /area/station/engineering/atmos/test_chambers) "skS" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109641,15 +95606,6 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/break_room) -"skU" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/fore/upper) "skZ" = ( /obj/effect/decal/cleanable/oil, /obj/effect/spawner/random/trash/cigbutt, @@ -109673,8 +95629,8 @@ "slh" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -109700,15 +95656,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"slF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "slG" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -109837,22 +95784,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"smU" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "smV" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, @@ -109866,22 +95797,12 @@ /turf/open/floor/wood, /area/station/service/barber/spa) "smY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/item/screwdriver{ pixel_y = 3 }, /obj/item/wirecutters, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sna" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -109951,12 +95872,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/upper) "snF" = ( @@ -109994,39 +95911,20 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "sof" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 }, /area/station/security/prison/upper) "soi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/machinery/light/small/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/virology) "sot" = ( @@ -110042,19 +95940,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "sov" = ( -/obj/effect/turf_decal/trimline/white/filled/line{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "sox" = ( @@ -110067,9 +95958,7 @@ /turf/open/floor/iron, /area/station/commons/dorms) "soz" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "soC" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, @@ -110110,12 +95999,8 @@ name = "Jail Cell" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -110139,8 +96024,8 @@ /area/station/maintenance/aft/upper) "spp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "spq" = ( @@ -110158,27 +96043,16 @@ name = "Court Cell"; req_access = list("brig") }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) "spD" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "spE" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 1 @@ -110196,38 +96070,19 @@ /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) -"spL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "spO" = ( /turf/open/floor/iron/white, /area/station/science/genetics) "spS" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "sqa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/shower) -"sqh" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "sqn" = ( /obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/box, @@ -110248,8 +96103,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "sqy" = ( @@ -110258,18 +96113,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"sqD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "sqS" = ( /obj/structure/railing{ dir = 8 @@ -110293,12 +96136,8 @@ /area/station/security/brig) "srd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -110314,30 +96153,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"srh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "srj" = ( /obj/effect/turf_decal/delivery, /obj/machinery/space_heater, @@ -110382,19 +96197,13 @@ /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "srx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) "sry" = ( /obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "srD" = ( @@ -110406,9 +96215,6 @@ /area/station/security/execution/transfer) "srJ" = ( /obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -110420,12 +96226,8 @@ /obj/structure/sign/picture_frame/showroom/four{ pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -110453,12 +96255,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/cigbutt, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -110483,15 +96281,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/white, /area/station/science/research) -"ssp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/security/courtroom) "ssr" = ( /obj/effect/landmark/start/lawyer, /obj/structure/cable, @@ -110532,8 +96321,8 @@ /area/station/hallway/primary/upper) "ssB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -110544,49 +96333,20 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/lesser) "ssN" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/mirror/directional/west, /obj/effect/landmark/start/clown, /obj/structure/sink/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/theater) -"ssS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/textured, -/area/station/medical/aslyum) "ssU" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/aft/upper) "ssW" = ( @@ -110604,15 +96364,10 @@ /area/space) "sto" = ( /obj/structure/chair/sofa/corp/left, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) @@ -110635,8 +96390,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) @@ -110670,16 +96425,6 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) "stP" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/structure/filingcabinet/chestdrawer, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, @@ -110687,12 +96432,8 @@ "stQ" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -110778,9 +96519,6 @@ /area/station/service/theater/abandoned) "sut" = ( /obj/machinery/rnd/production/techfab/department/cargo, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/status_display/supply{ pixel_y = 32 }, @@ -110807,12 +96545,8 @@ "suN" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lab) @@ -110882,9 +96616,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -110896,12 +96628,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/department/medical/central) @@ -110960,9 +96688,7 @@ /turf/open/floor/plating, /area/station/security/range) "svL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -110975,13 +96701,10 @@ /turf/open/floor/wood, /area/station/service/library) "svX" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "svZ" = ( @@ -110992,26 +96715,18 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "swi" = ( /obj/effect/spawner/random/structure/closet_maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/ordnance_maint) "swj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security{ name = "Warden's Quarters" }, @@ -111023,25 +96738,13 @@ /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lab) "swr" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "swt" = ( @@ -111078,40 +96781,23 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"swE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "swG" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "swO" = ( /obj/structure/chair/sofa/corp, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "swQ" = ( @@ -111141,12 +96827,8 @@ /area/station/cargo/lobby) "sxc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -111171,13 +96853,6 @@ name = "Shooting Range"; req_access = list("security") }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/range) "sxk" = ( @@ -111196,14 +96871,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"sxn" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "sxp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore/upper) @@ -111249,9 +96920,7 @@ /area/station/science/server) "sxF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/effect/turf_decal/trimline/green/filled/corner, /obj/structure/cable, @@ -111267,18 +96936,6 @@ /obj/item/storage/photo_album, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"sxK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "sxM" = ( /turf/open/floor/iron/stairs/medium{ dir = 1 @@ -111309,8 +96966,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/wood, @@ -111356,16 +97013,6 @@ /obj/effect/decal/cleanable/food/flour, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) -"syD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium/red, -/area/station/maintenance/cult_chapel_maint) "syJ" = ( /obj/effect/landmark/start/engineering_guard, /turf/open/floor/iron, @@ -111397,10 +97044,6 @@ /area/station/maintenance/abandon_arcade) "szb" = ( /obj/structure/fans/tiny/forcefield, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/cargo/storage) "szl" = ( @@ -111485,15 +97128,6 @@ dir = 8 }, /area/station/command/gateway) -"sAp" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "sAs" = ( /obj/effect/turf_decal/delivery/white, /obj/machinery/status_display/supply{ @@ -111504,7 +97138,7 @@ /area/station/cargo/storage) "sAv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/iron/white, /area/station/security/medical) @@ -111536,12 +97170,8 @@ /area/station/science/research) "sAG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/gym{ pixel_y = 32 }, @@ -111588,12 +97218,8 @@ /area/station/service/abandoned_gambling_den) "sBh" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "sBj" = ( @@ -111619,7 +97245,6 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "sBu" = ( -/obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/stripes/red/corner{ dir = 1 }, @@ -111642,22 +97267,17 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_psych) "sBG" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -111666,7 +97286,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "sBK" = ( @@ -111688,12 +97308,8 @@ /turf/open/floor/iron/white, /area/station/science/research) "sBZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -111701,12 +97317,8 @@ "sCa" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/purple, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -111767,12 +97379,8 @@ /area/station/command/heads_quarters/rd) "sCB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "sCE" = ( @@ -111784,12 +97392,8 @@ /area/station/maintenance/rus_gambling) "sCF" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plating, /area/station/engineering/atmos/upper) @@ -111799,8 +97403,7 @@ /obj/item/radio, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark/side{ @@ -111832,7 +97435,7 @@ /area/station/commons/storage/primary) "sCZ" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "sDg" = ( @@ -111842,12 +97445,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "sDl" = ( @@ -111857,7 +97456,7 @@ /turf/open/floor/iron, /area/station/engineering/break_room) "sDm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "sDp" = ( @@ -111877,15 +97476,6 @@ "sDx" = ( /turf/open/floor/iron, /area/station/engineering/storage/tech) -"sDz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "sDG" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -111976,20 +97566,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/service/bar/atrium) -"sEE" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/power/smes/engineering, -/obj/structure/cable, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "sEF" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -112002,9 +97578,6 @@ /area/station/maintenance/starboard/fore) "sEL" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" }, @@ -112012,12 +97585,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/cargo/office) "sER" = ( @@ -112068,7 +97637,7 @@ }, /area/station/service/hydroponics) "sFl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) "sFm" = ( @@ -112113,12 +97682,8 @@ /area/station/command/gateway) "sFC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -112128,12 +97693,14 @@ /turf/open/floor/iron, /area/station/science/ordnance/storage) "sFF" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/sign/picture_frame/portrait/bar{ name = "Portrait of the late MR.Deempisi"; pixel_x = 32; pixel_y = 32 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "sFG" = ( @@ -112142,12 +97709,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -112164,12 +97725,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/security/courtroom) -"sFT" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "sFU" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/plating, @@ -112181,8 +97736,8 @@ /area/station/ai_monitored/aisat/exterior) "sFZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "sGa" = ( @@ -112198,9 +97753,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "sGr" = ( /obj/machinery/door/firedoor, @@ -112209,12 +97762,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, /turf/open/floor/iron, /area/station/command/gateway) @@ -112291,8 +97840,8 @@ /area/station/maintenance/department/science/ordnance_maint) "sHp" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -112302,25 +97851,18 @@ /obj/structure/cable, /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "sHt" = ( /turf/open/floor/iron/white, /area/station/medical/treatment_center) "sHv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/newscaster/directional/south, /obj/machinery/light/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "sHy" = ( @@ -112343,10 +97885,8 @@ /area/station/cargo/miningdock) "sHE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -112358,15 +97898,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/storage/art) -"sHP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "sHQ" = ( /obj/machinery/door/airlock/external{ name = "External Docking Port"; @@ -112400,8 +97931,8 @@ /area/station/commons/fitness) "sHV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "sIg" = ( @@ -112412,13 +97943,6 @@ /turf/open/floor/iron, /area/station/security/prison/upper) "sIh" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/computer/records/security{ dir = 4 }, @@ -112440,16 +97964,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) -"sIr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "sIv" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/hedge, @@ -112460,8 +97974,8 @@ /area/station/hallway/primary/upper) "sIH" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "sIL" = ( @@ -112473,7 +97987,7 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "sIN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -112490,12 +98004,8 @@ /obj/machinery/door/airlock/silver{ name = "Locker Room" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -112517,12 +98027,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -112618,12 +98124,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -112641,15 +98143,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "sKb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "sKc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -112687,12 +98189,8 @@ /area/station/service/chapel/office) "sKo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -112764,12 +98262,8 @@ /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "sKL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -112815,22 +98309,17 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "sLm" = ( /obj/machinery/computer/atmos_alert{ dir = 8 }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "sLr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -112842,8 +98331,8 @@ /area/station/command/heads_quarters/captain/private) "sLx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/space_cola/directional/west, /turf/open/floor/wood, @@ -112853,8 +98342,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -112875,9 +98364,7 @@ "sLK" = ( /obj/effect/turf_decal/siding/wood, /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/captain_dining) "sLL" = ( @@ -112896,14 +98383,6 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/wood, /area/station/hallway/primary/port) -"sLS" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "sLT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -112916,13 +98395,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"sLX" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/science/lab) "sMb" = ( /obj/structure/chair{ dir = 4 @@ -112964,9 +98436,7 @@ /area/station/command/heads_quarters/hop) "sMu" = ( /obj/effect/landmark/start/librarian, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "sMv" = ( @@ -112982,9 +98452,7 @@ "sMw" = ( /obj/structure/sauna_oven, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "sMx" = ( @@ -112992,9 +98460,6 @@ dir = 4; id = "garbage" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/plating, /area/station/maintenance/disposal) "sME" = ( @@ -113011,8 +98476,8 @@ "sMM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "sMR" = ( @@ -113023,20 +98488,10 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"sMU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "sMY" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/ordnance/testlab) "sNa" = ( @@ -113064,7 +98519,7 @@ "sNk" = ( /obj/machinery/light/directional/east, /obj/effect/landmark/start/blueshield, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/blueshield) "sNn" = ( @@ -113084,9 +98539,7 @@ /turf/open/floor/iron, /area/station/security/checkpoint/supply) "sNw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "sNz" = ( @@ -113096,19 +98549,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "sND" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/hydroponics) "sNE" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ dir = 1 }, @@ -113152,17 +98601,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sOe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/engineering/main) "sOh" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -113246,8 +98684,8 @@ /obj/machinery/door/airlock/external{ name = "MiniSat Exterior Access" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "sOV" = ( @@ -113268,12 +98706,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "sPk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel) @@ -113295,7 +98729,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/carpet, /area/station/service/library/printer) "sPB" = ( @@ -113319,7 +98753,7 @@ /area/station/service/hydroponics/garden/abandoned) "sPS" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "sPT" = ( @@ -113327,12 +98761,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "sPU" = ( @@ -113369,13 +98799,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/common/tailoring) -"sQo" = ( -/obj/effect/spawner/random/structure/steam_vent, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/iron, -/area/station/maintenance/department/engineering/engine_aft_port) "sQr" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/stairs{ @@ -113391,10 +98814,8 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "sQv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) "sQw" = ( @@ -113452,12 +98873,8 @@ /area/station/science/xenobiology) "sQO" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/cargo/lobby) @@ -113465,18 +98882,13 @@ /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "sQS" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, /obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark, /area/station/commons/fitness) "sQU" = ( /obj/structure/sink/directional/west, /obj/machinery/status_display/evac/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) "sQX" = ( @@ -113484,12 +98896,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -113513,26 +98921,11 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) -"sRv" = ( -/obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) "sRw" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/delivery, @@ -113546,26 +98939,16 @@ /turf/open/floor/iron/white, /area/station/science/cytology) "sRx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/table, /obj/machinery/power/shuttle_engine/heater{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sRD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -113590,31 +98973,21 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "sSi" = ( /obj/effect/turf_decal/vg_decals/numbers/one{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "sSp" = ( /obj/effect/turf_decal/vg_decals/numbers/one, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "sSq" = ( @@ -113642,12 +99015,8 @@ /obj/structure/table/wood, /obj/item/taperecorder, /obj/item/tape, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/detectives_office) "sSE" = ( @@ -113662,7 +99031,7 @@ /area/station/maintenance/department/chapel) "sSF" = ( /obj/structure/lattice/catwalk, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /obj/structure/railing/corner/end/flip{ @@ -113670,21 +99039,15 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sSN" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) -"sSP" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +"sSI" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, /turf/open/floor/iron, /area/station/security/prison/mess) +"sSP" = ( +/turf/open/floor/iron, +/area/station/security/prison/mess) "sSS" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -113707,13 +99070,10 @@ /area/station/maintenance/starboard/fore) "sTg" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "sTh" = ( @@ -113735,22 +99095,16 @@ "sTA" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/medical) "sTB" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Controls" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) "sTF" = ( @@ -113781,12 +99135,8 @@ /turf/open/floor/carpet, /area/station/maintenance/abandon_psych) "sUe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 @@ -113799,12 +99149,8 @@ }, /obj/structure/railing, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) @@ -113813,15 +99159,14 @@ id = "evashutters2"; name = "E.V.A. Storage Shutters" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/aux_eva) "sUs" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/security/old{ name = "Library" }, @@ -113835,10 +99180,8 @@ /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -113866,9 +99209,7 @@ /turf/closed/wall, /area/station/maintenance/department/engineering/engine_aft_starboard) "sUV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) @@ -113876,12 +99217,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science) @@ -113900,9 +99237,7 @@ /area/station/maintenance/department/medical) "sVi" = ( /obj/structure/closet/cardboard, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "sVj" = ( @@ -113915,11 +99250,11 @@ /area/station/hallway/primary/central/aft) "sVk" = ( /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/turf_decal/siding/wood{ dir = 1 }, /obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/kitchen/diner) "sVm" = ( @@ -113938,36 +99273,13 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) -"sVq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/command/bridge) "sVt" = ( /turf/open/floor/iron, /area/station/command/gateway) "sVu" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing/corner/end/flip, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/security/execution/transfer) "sVz" = ( /obj/machinery/power/shuttle_engine/heater, @@ -114103,10 +99415,6 @@ /area/station/maintenance/port/aft) "sVZ" = ( /obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) @@ -114128,15 +99436,12 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "sWo" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "sWA" = ( @@ -114148,15 +99453,13 @@ /area/station/maintenance/aft/upper) "sWE" = ( /obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/dorms) "sWF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -114164,9 +99467,6 @@ /obj/machinery/computer/atmos_control/mix_tank{ dir = 8 }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -114187,7 +99487,6 @@ /obj/machinery/computer/station_alert{ dir = 8 }, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, @@ -114198,10 +99497,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "sXb" = ( @@ -114247,7 +99544,9 @@ /turf/open/floor/carpet, /area/station/security/courtroom) "sXy" = ( -/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "sXD" = ( @@ -114267,8 +99566,8 @@ /area/station/maintenance/aft/upper) "sXH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) @@ -114304,12 +99603,8 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -114344,8 +99639,7 @@ /obj/machinery/computer/shuttle/mining{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -114359,8 +99653,8 @@ /area/station/common/night_club) "sYe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/lone, /area/station/service/chapel) "sYh" = ( @@ -114409,12 +99703,8 @@ /area/station/common/wrestling/lobby) "sYN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -114447,29 +99737,15 @@ }, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) -"sYR" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/test_chambers) "sYX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) "sYY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/theater) "sZb" = ( @@ -114491,8 +99767,8 @@ /area/station/security/courtroom) "sZd" = ( /obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/engineering/atmos/upper) "sZm" = ( @@ -114576,7 +99852,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "sZV" = ( -/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) @@ -114607,12 +99882,8 @@ /turf/open/floor/iron, /area/station/command/teleporter) "tax" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -114634,19 +99905,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"taG" = ( -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "taK" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -114686,12 +99944,8 @@ /obj/machinery/airalarm/directional/north, /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "taR" = ( @@ -114712,12 +99966,8 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/eva, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) @@ -114767,9 +100017,6 @@ dir = 9 }, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) "tbm" = ( @@ -114821,15 +100068,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"tbF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tbH" = ( /obj/structure/chair/pew/left{ dir = 4 @@ -114856,11 +100094,8 @@ /turf/open/floor/iron/white, /area/station/command/gateway) "tbW" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -114880,12 +100115,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -114919,7 +100150,6 @@ /obj/effect/turf_decal/tile/blue/half{ dir = 8 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron/white/side{ dir = 8 }, @@ -114931,12 +100161,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "tcp" = ( @@ -114947,8 +100173,10 @@ name = "Medbay" }, /obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tcq" = ( @@ -115000,9 +100228,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) "tdk" = ( @@ -115027,9 +100253,7 @@ pixel_x = 8; pixel_y = 2 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "tdr" = ( @@ -115051,12 +100275,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -115064,7 +100283,7 @@ "tdy" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/trinary/filter/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -115084,12 +100303,8 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) "tdK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -115112,15 +100327,9 @@ "tdR" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/science/ordnance) "tdU" = ( /obj/machinery/duct, @@ -115149,12 +100358,8 @@ /area/station/science/xenobiology) "tef" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/hallway/primary/port) "tej" = ( @@ -115162,8 +100367,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) "tel" = ( @@ -115197,16 +100402,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"tem" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "teo" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -115222,19 +100417,19 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/storage) "tez" = ( /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "teA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) @@ -115276,12 +100471,8 @@ /turf/open/floor/wood, /area/station/service/electronic_marketing_den) "teQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -115293,8 +100484,8 @@ }, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "teV" = ( @@ -115324,19 +100515,21 @@ /area/station/engineering/supermatter) "tfh" = ( /obj/structure/closet/secure_closet/chief_medical, -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "tfq" = ( /obj/structure/noticeboard/directional/south, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/clothing/glasses/science{ pixel_x = 3; pixel_y = 3 }, /obj/item/clothing/glasses/science, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "tfC" = ( @@ -115347,12 +100540,8 @@ pixel_y = -38 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 8 }, @@ -115368,12 +100557,8 @@ /area/station/commons/dorms/vacantroom) "tfJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "tfO" = ( @@ -115386,12 +100571,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) "tfR" = ( @@ -115425,8 +100606,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -115467,16 +100648,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) -"tgB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "tgH" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -115505,12 +100676,8 @@ "tgW" = ( /obj/machinery/light/floor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "thg" = ( @@ -115543,8 +100710,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ dir = 1 }, @@ -115605,17 +100772,14 @@ }, /area/station/security/lockers) "tib" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/airalarm/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/bar) @@ -115629,12 +100793,8 @@ "tik" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "tim" = ( @@ -115652,9 +100812,6 @@ /area/station/maintenance/abandon_wrestle) "tix" = ( /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/computer/piratepad_control/civilian{ dir = 1 }, @@ -115666,15 +100823,11 @@ /turf/open/floor/iron/dark, /area/station/cargo/lobby) "tiy" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/door/airlock{ name = "Bar" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) "tiA" = ( @@ -115689,14 +100842,8 @@ /obj/machinery/computer/prisoner/management{ dir = 8 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "tiE" = ( @@ -115757,7 +100904,6 @@ /area/station/hallway/primary/port) "tjC" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/folder/yellow, /obj/item/flashlight/lamp, @@ -115767,7 +100913,7 @@ /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "tjK" = ( /obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2{ @@ -115779,12 +100925,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) "tka" = ( @@ -115804,10 +100944,8 @@ }, /obj/effect/turf_decal/caution/stand_clear/red, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) "tkf" = ( @@ -115847,14 +100985,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/eva) -"tkE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/security/range) "tkG" = ( /obj/structure/grille, /obj/structure/window/spawner/directional/south, @@ -115868,8 +100998,8 @@ "tkM" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -115907,17 +101037,6 @@ "tle" = ( /turf/open/floor/iron/dark, /area/station/security/courtroom) -"tlh" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "tli" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/structure/transport/linear/public, @@ -115934,14 +101053,8 @@ /area/station/hallway/primary/central) "tlr" = ( /obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; - dir = 8 - }, /obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -116074,7 +101187,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) "tmD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/checkpoint/customs) @@ -116082,12 +101195,8 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Hydroponics Maintenance" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/plating, @@ -116138,19 +101247,17 @@ }, /obj/effect/turf_decal/bot_white, /obj/machinery/status_display/ai/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "tnh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "tnj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/commons/fitness) @@ -116201,12 +101308,8 @@ req_access = list("library") }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116224,12 +101327,8 @@ "tnW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -116237,22 +101336,16 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "toc" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/chem_master/condimaster{ desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; name = "HoochMaster Deluxe" }, -/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/command/captain_dining) "tod" = ( -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) "toe" = ( @@ -116283,18 +101376,8 @@ /area/station/maintenance/port/upper) "toB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116306,12 +101389,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "toK" = ( @@ -116369,7 +101448,6 @@ /obj/item/hatchet, /obj/item/wirecutters, /obj/item/shovel/spade, -/obj/effect/turf_decal/bot, /obj/item/wrench, /obj/item/crowbar/large, /obj/item/screwdriver, @@ -116377,8 +101455,8 @@ /area/station/service/hydroponics) "tpd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood, /obj/structure/disposalpipe/segment{ dir = 6 @@ -116390,12 +101468,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -116403,7 +101477,7 @@ /area/station/hallway/primary/central) "tpg" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/lawoffice) "tph" = ( @@ -116411,8 +101485,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -116450,33 +101524,21 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "tpN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tpR" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/beacon, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -116501,12 +101563,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "tqh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/secondary/service) "tqo" = ( @@ -116521,26 +101579,13 @@ /turf/open/floor/plating, /area/station/maintenance/port/upper) "tqs" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "tqu" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -116551,7 +101596,6 @@ /area/station/science/research) "tqE" = ( /obj/structure/chair/comfy, -/obj/effect/landmark/start/scientist, /obj/structure/cable, /turf/open/floor/carpet/purple, /area/station/science/breakroom) @@ -116597,7 +101641,6 @@ dir = 8; id = "garbage" }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -116631,16 +101674,8 @@ name = "Service Hallway Maintenance Hatch" }, /obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"trK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable, /turf/open/floor/iron, -/area/station/security/prison) +/area/station/maintenance/starboard/fore) "trM" = ( /obj/structure/railing/corner/end{ dir = 1 @@ -116666,8 +101701,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -116694,7 +101729,6 @@ req_access = list("cargo") }, /obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, /obj/machinery/disposal/delivery_chute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -116720,30 +101754,22 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/comfy/brown{ color = "#A46106" }, /turf/open/floor/wood/parquet, /area/station/service/theater) "tsR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "tsS" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -116869,9 +101895,6 @@ /turf/open/floor/wood, /area/station/security/prison/mess) "tuv" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -116900,12 +101923,8 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/newscaster/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -116922,8 +101941,8 @@ /area/station/hallway/primary/aft) "tuS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/explab) @@ -116950,10 +101969,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "tvk" = ( @@ -116962,9 +101979,6 @@ /area/station/service/cafeteria) "tvl" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/piratepad/civilian, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -116981,36 +101995,22 @@ /area/station/commons/dorms/room2) "tvs" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/item/clipboard, /obj/item/toy/figure/virologist, /turf/open/floor/iron, /area/station/medical/virology) "tvu" = ( /obj/item/radio/intercom/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "tvB" = ( /turf/closed/wall, /area/station/service/chapel/office) -"tvG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/lockers) "tvI" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/security/lockers) @@ -117018,9 +102018,6 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117059,16 +102056,11 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "twp" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/rack/shelf, /obj/effect/spawner/random/techstorage/engineering_all, /turf/open/floor/iron/dark, @@ -117196,13 +102188,9 @@ /obj/item/toy/crayon/white{ pixel_y = -4 }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/office) "txl" = ( @@ -117215,7 +102203,6 @@ dir = 10; id = "garbage" }, -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -117226,10 +102213,7 @@ /obj/structure/transit_tube/junction{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "txw" = ( /obj/structure/cable, @@ -117248,32 +102232,14 @@ dir = 10; id = "cargounload" }, -/obj/effect/turf_decal/delivery, /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/storage) -"txF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "txP" = ( /obj/machinery/duct, /turf/open/floor/carpet/purple, /area/station/common/night_club) "txW" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, @@ -117329,8 +102295,8 @@ /area/station/service/chapel/office) "tyu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -117356,19 +102322,15 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tyG" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -117382,8 +102344,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "tyK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "tyT" = ( @@ -117400,12 +102362,8 @@ /area/station/medical/aslyum) "tyX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) "tzc" = ( @@ -117424,12 +102382,8 @@ }, /obj/structure/extinguisher_cabinet/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -117497,19 +102451,15 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "tzE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tzF" = ( @@ -117528,8 +102478,8 @@ /area/station/maintenance/port/upper) "tzJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -117568,7 +102518,6 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "tzV" = ( -/obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -117584,9 +102533,7 @@ }, /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "tAc" = ( @@ -117685,7 +102632,7 @@ /area/station/hallway/secondary/service) "tAL" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "tAM" = ( @@ -117718,12 +102665,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "tAX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/gbp_redemption{ pixel_y = 6 @@ -117738,10 +102681,8 @@ /area/station/hallway/primary/aft) "tBc" = ( /obj/structure/noticeboard/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "tBi" = ( @@ -117752,8 +102693,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "tBp" = ( @@ -117791,12 +102732,8 @@ /area/station/security/checkpoint/medical) "tBF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117845,13 +102782,8 @@ /area/station/science/xenobiology) "tCd" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/office) @@ -117866,12 +102798,8 @@ /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "tCi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -117901,8 +102829,8 @@ /area/station/security/checkpoint/medical) "tCt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -117949,12 +102877,8 @@ /area/station/hallway/primary/central) "tCN" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/ordnance) @@ -117964,20 +102888,14 @@ /area/station/maintenance/department/science/upper) "tCS" = ( /obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) "tCX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -117996,9 +102914,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/iron/smooth_large, /area/station/cargo/miningdock) "tDr" = ( @@ -118006,12 +102921,8 @@ dir = 1 }, /obj/structure/chair/office, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) "tDy" = ( @@ -118021,12 +102932,8 @@ "tDH" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118088,21 +102995,11 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "tEl" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "tEr" = ( /obj/structure/chair/sofa/corp/left{ @@ -118132,16 +103029,16 @@ /obj/item/book/manual/wiki/chemistry{ pixel_x = 8 }, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "tEx" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -118149,8 +103046,8 @@ /area/station/commons/dorms) "tEA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/theater/abandoned) "tEK" = ( @@ -118173,9 +103070,6 @@ /turf/open/space/basic, /area/space/nearstation) "tEU" = ( -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 1 - }, /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -118185,7 +103079,7 @@ /area/station/commons/dorms/room7) "tFa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "tFc" = ( @@ -118196,12 +103090,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118209,8 +103099,8 @@ /area/station/commons/dorms) "tFd" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -118277,15 +103167,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/common/pool) -"tFV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/carpet, -/area/station/security/courtroom) "tFX" = ( /obj/structure/door_assembly, /obj/structure/barricade/wooden/crude, @@ -118293,10 +103174,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "tGb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/courtroom) "tGf" = ( @@ -118340,12 +103219,8 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tGx" = ( @@ -118358,22 +103233,17 @@ dir = 10 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/main) "tGH" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118385,12 +103255,8 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "tHo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -118413,12 +103279,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 @@ -118447,8 +103309,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -118469,12 +103331,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "tHQ" = ( -/obj/effect/turf_decal/bot, /obj/structure/sink/directional/north, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -118487,9 +103344,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "tHX" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 6 }, @@ -118513,16 +103367,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"tIf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "tIh" = ( /obj/structure/curtain/bounty, /obj/structure/cable, @@ -118599,27 +103443,14 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"tIQ" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tIW" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "tJe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -118634,12 +103465,8 @@ /area/station/hallway/primary/port) "tJx" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -118695,12 +103522,8 @@ /obj/machinery/door/airlock/grunge{ name = "Chapel Apiary" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -118713,28 +103536,18 @@ pixel_x = 40; pixel_y = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "tKg" = ( /obj/structure/railing/corner{ dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "tKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118761,9 +103574,7 @@ pixel_x = -4; pixel_y = -9 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/common/wrestling/concessions) "tKz" = ( @@ -118775,8 +103586,8 @@ /area/station/science/xenobiology) "tKB" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/central) "tKH" = ( @@ -118791,7 +103602,6 @@ /turf/open/floor/iron/smooth_corner, /area/station/command/secure_bunker) "tKM" = ( -/obj/effect/turf_decal/siding/wideplating/dark, /obj/item/paper{ default_raw_text = "The goons over at our NT relations department have informed us we've gotta somehow shove a 3 deck ship into 2 decks on a budget fit to build us a frigate.. maybe a very cheap destroyer, best we can do at the moment is just weld off the bottom deck starting at the structural support beams and ending with the stairwells and elevator shaft, we'll take it up from there with the engine array.. just make sure to plug the hole."; name = "Shipyard Orders"; @@ -118800,24 +103610,12 @@ }, /turf/open/floor/plating, /area/station/hallway/primary/port) -"tKO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "tKQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "tKX" = ( /obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 6 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "tLf" = ( @@ -118828,9 +103626,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/siding/wood, /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118852,12 +103648,8 @@ name = "science camera"; network = list("ss13","rd") }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -118873,11 +103665,8 @@ /turf/closed/wall, /area/station/maintenance/department/chapel) "tLM" = ( -/obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "tLN" = ( @@ -118906,12 +103695,8 @@ dir = 6 }, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 5 @@ -118968,16 +103753,6 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) "tMz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/item/radio/intercom/directional/south, /obj/machinery/light/directional/south, /obj/machinery/computer/security/labor{ @@ -119015,12 +103790,8 @@ pixel_y = 3 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119033,16 +103804,10 @@ }, /obj/effect/turf_decal/stripes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research) -"tMK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "tMM" = ( /obj/structure/mirror/directional/south, /obj/structure/mannequin/plastic{ @@ -119065,12 +103830,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -119078,7 +103839,7 @@ /obj/structure/chair/comfy/barber_chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) "tNg" = ( @@ -119138,12 +103899,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "tNy" = ( @@ -119154,15 +103911,11 @@ /turf/closed/wall/r_wall, /area/station/maintenance/port/fore) "tNE" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear/blue{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "tNM" = ( @@ -119191,16 +103944,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/science) -"tNT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/transit_tube) "tNU" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -119213,12 +103956,8 @@ name = "command camera" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "tNZ" = ( @@ -119237,12 +103976,8 @@ /obj/structure/railing, /obj/machinery/light/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "tOv" = ( @@ -119265,12 +104000,8 @@ id_tag = "Capoffice"; name = "Captain's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119393,10 +104124,8 @@ /area/station/cargo/drone_bay) "tPn" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "tPs" = ( @@ -119431,12 +104160,8 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "tPH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) @@ -119446,12 +104171,8 @@ /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) "tPS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup8"; location = "hallup7" @@ -119472,12 +104193,8 @@ "tQg" = ( /obj/effect/turf_decal/vg_decals/numbers/four, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "tQj" = ( @@ -119498,24 +104215,16 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/wood, /area/station/service/library) "tQr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) "tQu" = ( @@ -119550,13 +104259,9 @@ /area/station/science/ordnance) "tQB" = ( /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "tQJ" = ( -/obj/effect/turf_decal/stripes/end, /obj/machinery/power/smes/engineering, /obj/structure/cable, /obj/structure/railing{ @@ -119571,12 +104276,11 @@ /area/station/commons/toilet/restrooms) "tQQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tQS" = ( @@ -119588,12 +104292,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "tQT" = ( @@ -119621,15 +104321,11 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) "tRe" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 @@ -119638,6 +104334,9 @@ pixel_x = 3; pixel_y = 16 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "tRj" = ( @@ -119665,16 +104364,14 @@ /area/station/maintenance/solars/starboard/aft) "tRz" = ( /obj/structure/window/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/theater) "tRC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119685,10 +104382,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"tRO" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "tRP" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -119736,9 +104429,7 @@ dir = 8; pixel_x = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) "tRX" = ( @@ -119767,7 +104458,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/lower) "tSE" = ( -/obj/effect/turf_decal/bot_white, /obj/machinery/telecomms/relay/preset/station, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) @@ -119798,7 +104488,6 @@ /obj/item/storage/box/lights, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "tSL" = ( @@ -119815,9 +104504,7 @@ /area/station/maintenance/department/medical) "tSR" = ( /obj/structure/closet/crate/bin, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/security/prison) @@ -119843,12 +104530,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "tTn" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/service/barber) "tTp" = ( @@ -119872,21 +104556,15 @@ name = "MiniSat Foyer" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "tTy" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "tTB" = ( @@ -119948,31 +104626,38 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "tUd" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tUg" = ( /obj/machinery/door/airlock/security{ name = "Interrogation Monitoring" }, /obj/effect/turf_decal/delivery/blue, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"tUj" = ( +/turf/open/floor/circuit, +/area/station/security/mechbay) "tUm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) @@ -120034,15 +104719,15 @@ /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "tUO" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/dark_blue{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) "tUP" = ( @@ -120053,8 +104738,8 @@ "tUS" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) @@ -120086,7 +104771,7 @@ /turf/open/floor/iron, /area/station/command/bridge) "tVr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "tVt" = ( @@ -120099,12 +104784,11 @@ /area/station/medical/surgery/theatre) "tVH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 4 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -120165,16 +104849,18 @@ /obj/machinery/light_switch/directional/south{ pixel_y = -37 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "tWx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/carpet, /area/station/service/library/printer) +"tWE" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/central) "tWN" = ( /obj/structure/sign/directions/vault{ dir = 1 @@ -120190,7 +104876,6 @@ /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) "tWO" = ( -/obj/effect/turf_decal/bot, /obj/machinery/oven/range, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -120210,12 +104895,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/security/brig) -"tWX" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "tWY" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -120253,9 +104932,7 @@ /obj/item/assembly/igniter/condenser{ pixel_x = 8 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "tXk" = ( /obj/structure/closet/secure_closet/freezer/fridge, @@ -120279,12 +104956,8 @@ "tXu" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -120305,9 +104978,7 @@ /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "tXQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/wood, @@ -120326,8 +104997,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -120343,20 +105014,13 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "tYp" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/flag/nanotrasen/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/structure/sign/flag/nanotrasen/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "tYr" = ( @@ -120366,12 +105030,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "tYu" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 1 @@ -120385,12 +105043,8 @@ department = "Detective's Office"; name = "Detective's Requests Console" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/security/detectives_office) "tYA" = ( @@ -120398,12 +105052,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tYB" = ( @@ -120475,8 +105125,8 @@ }, /obj/effect/turf_decal/trimline/yellow/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -120500,18 +105150,6 @@ "tZD" = ( /turf/open/floor/iron, /area/station/ai_monitored/security/armory) -"tZH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "tZU" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt{ @@ -120535,16 +105173,9 @@ /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "tZV" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "CMO's Junction"; @@ -120567,20 +105198,13 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "uao" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/flag/nanotrasen/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/sign/flag/nanotrasen/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "uaL" = ( @@ -120647,12 +105271,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, /obj/structure/cable, @@ -120672,12 +105292,9 @@ dir = 6 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage) "uci" = ( @@ -120690,16 +105307,6 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "uck" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Starboard Hallway - Info Kiosk"; dir = 10; @@ -120724,9 +105331,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/chapel) "ucm" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, /obj/machinery/camera/directional/west{ c_tag = "Security - Brig Cell 2" }, @@ -120738,26 +105342,10 @@ "ucn" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/upper) -"ucp" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "ucs" = ( /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, @@ -120773,27 +105361,14 @@ /obj/effect/landmark/start/head_of_personnel, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"ucJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/port) "ucK" = ( /obj/machinery/griddle, /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/prison/mess) "ucO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -120815,10 +105390,6 @@ }, /area/station/service/hydroponics) "uda" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair/sofa/bench/left{ dir = 4; pixel_x = -5 @@ -120846,10 +105417,6 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "udr" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -120859,8 +105426,8 @@ id = "Psychward3"; name = "Cell Door 3" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) @@ -120869,19 +105436,13 @@ /turf/open/floor/iron/white, /area/station/science/research) "udt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/table, /obj/machinery/reagentgrinder{ pixel_x = -5; pixel_y = 9 }, /obj/item/reagent_containers/cup/glass/shaker, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/captain_dining) "udv" = ( @@ -120915,14 +105476,14 @@ /turf/open/floor/iron/dark, /area/station/science/xenobiology) "udH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) "udI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "udK" = ( @@ -120948,18 +105509,10 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison) -"udS" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "udT" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor_switch/oneway{ @@ -120974,10 +105527,6 @@ /obj/item/taperecorder, /obj/item/tape, /obj/item/tape, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/interrogation) @@ -120993,26 +105542,12 @@ name = "Chapel Office" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"uea" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "ued" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -121029,12 +105564,8 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -121051,32 +105582,16 @@ /turf/open/floor/iron/dark, /area/station/cargo/sorting) "ueo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "ueq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/office) -"ues" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "uex" = ( /obj/structure/table, /obj/item/clothing/head/helmet/skull, @@ -121087,12 +105602,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -121147,47 +105658,17 @@ pixel_y = -4; req_access = list("brig") }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/railing{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/security/warden) -"ueN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "ueR" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"ueV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/eighties/red, -/area/station/common/arcade) "ueW" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/status_display/ai/directional/south, @@ -121219,24 +105700,11 @@ /obj/structure/railing{ dir = 6 }, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "ufk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/port) @@ -121286,20 +105754,11 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/main) -"ufD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "ufG" = ( /obj/structure/window/spawner/directional/west, /obj/structure/chair/sofa/corp/right{ @@ -121337,27 +105796,13 @@ /turf/open/space/basic, /area/space/nearstation) "ugk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/lab) -"ugm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "ugo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "ugq" = ( @@ -121397,12 +105842,8 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "ugS" = ( @@ -121421,8 +105862,8 @@ /area/station/maintenance/aft/upper) "uhc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -121439,12 +105880,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "uho" = ( @@ -121459,19 +105896,9 @@ }, /area/station/service/chapel) "uhs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -121480,9 +105907,6 @@ }, /area/station/hallway/primary/port) "uhv" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, @@ -121492,10 +105916,6 @@ /turf/closed/wall, /area/station/medical/coldroom) "uhE" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/pipedispenser/disposal/transit_tube, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -121524,12 +105944,8 @@ }, /obj/machinery/door/firedoor/heavy, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/smooth_large, /area/station/command/secure_bunker) @@ -121559,12 +105975,8 @@ /turf/open/floor/iron/dark, /area/station/security/prison/safe) "uif" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) "uig" = ( @@ -121601,8 +106013,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) "uiy" = ( @@ -121627,12 +106039,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"uiJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/department/engineering/atmos_aux_port) "uiR" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -121667,20 +106073,12 @@ }, /obj/machinery/airalarm/directional/south, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, -/area/station/science/ordnance/freezerchamber) -"uja" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" }, /turf/open/floor/iron/dark, -/area/station/security/brig) +/area/station/science/ordnance) "ujk" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -121723,8 +106121,8 @@ "ujB" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "ujF" = ( @@ -121779,9 +106177,7 @@ dir = 6 }, /obj/structure/tank_dispenser, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "ukr" = ( /obj/structure/cable, @@ -121789,8 +106185,8 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "uks" = ( @@ -121799,12 +106195,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "ukv" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/disposaloutlet{ dir = 8 @@ -121905,14 +106295,6 @@ /obj/structure/railing/corner, /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) -"ulh" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/techstorage/security_all, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "ulk" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -121934,12 +106316,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -121963,12 +106341,8 @@ "uly" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -122105,24 +106479,13 @@ }, /obj/structure/cable, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/stairs/old{ dir = 8 }, /area/station/science/ordnance) -"ulS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ulX" = ( /obj/structure/rack, /obj/item/grenade/smokebomb{ @@ -122154,8 +106517,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -122189,10 +106551,8 @@ /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) "umx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -122248,8 +106608,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white/side{ dir = 1 @@ -122265,16 +106625,14 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "unv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "unA" = ( @@ -122282,12 +106640,6 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, /obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "unF" = ( @@ -122296,12 +106648,8 @@ }, /obj/effect/decal/cleanable/oil, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122327,22 +106675,17 @@ /area/station/security/checkpoint/customs/auxiliary) "unT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) "unX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "uoa" = ( @@ -122354,12 +106697,8 @@ name = "Cabin 1" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -122388,9 +106727,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -122460,16 +106797,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"uoG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "uoI" = ( /obj/machinery/light/directional/north, /obj/machinery/newscaster/directional/north, @@ -122481,7 +106808,7 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair{ dir = 1 }, @@ -122491,7 +106818,7 @@ "uoP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/right{ dir = 1 }, @@ -122508,11 +106835,7 @@ /turf/open/floor/iron/dark, /area/station/common/pool) "upg" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/bar/directional{ dir = 4 }, @@ -122532,12 +106855,8 @@ }, /area/station/hallway/secondary/exit) "upz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -122550,17 +106869,6 @@ dir = 10 }, /area/station/security/prison/work) -"upJ" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central) -"upN" = ( -/obj/effect/landmark/carpspawn, -/turf/open/floor/iron/shuttle/evac{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "upO" = ( /turf/closed/wall, /area/station/maintenance/gamer_lair) @@ -122583,11 +106891,6 @@ "upX" = ( /turf/closed/wall, /area/station/service/barber) -"uql" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/security/courtroom) "uqr" = ( /obj/structure/chair, /obj/effect/landmark/start/assistant, @@ -122606,12 +106909,8 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122641,10 +106940,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "uqH" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ @@ -122701,14 +106996,6 @@ dir = 8 }, /area/station/common/locker_room_shower) -"uqQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/ai_monitored/turret_protected/aisat/hallway) "urb" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -122728,13 +107015,15 @@ /obj/structure/table/reinforced/rglass, /obj/item/clipboard, /obj/item/toy/figure/chemist, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "urm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/duct, @@ -122742,8 +107031,7 @@ /area/station/maintenance/port/fore) "uro" = ( /obj/structure/closet/secure_closet/evidence, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, /turf/open/floor/iron/dark, @@ -122777,20 +107065,15 @@ /turf/open/floor/plating, /area/station/maintenance/department/security) "urH" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/barber) "urM" = ( @@ -122803,10 +107086,7 @@ "urN" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "urU" = ( /obj/structure/railing/corner{ @@ -122832,8 +107112,8 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "ush" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "usi" = ( @@ -122865,9 +107145,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -122883,17 +107161,13 @@ "usq" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/office) "ust" = ( /obj/machinery/newscaster/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "usu" = ( @@ -122980,9 +107254,7 @@ /turf/open/floor/iron/dark, /area/station/cargo/office) "utj" = ( -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/maintenance/department/medical) "utr" = ( /obj/structure/curtain/cloth, @@ -123035,12 +107307,8 @@ /area/station/maintenance/rus_surgery) "utQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad/secure, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) @@ -123048,12 +107316,8 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) @@ -123085,14 +107349,17 @@ name = "Overgrown Gardain" }, /obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) +"uut" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "uuu" = ( /obj/effect/spawner/random/trash/cigbutt, /obj/effect/decal/cleanable/dirt{ @@ -123159,10 +107426,6 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -123180,17 +107443,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/service/theater/abandoned) -"uvr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/engineering/engine_aft_starboard) "uvu" = ( /turf/closed/wall, /area/station/common/wrestling/arena) @@ -123200,12 +107452,8 @@ /area/station/maintenance/department/security/prison_upper) "uvF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -123228,15 +107476,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/grass, /area/station/command/heads_quarters/captain) -"uwb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "uwh" = ( /obj/structure/table, /obj/machinery/computer/records/medical/laptop{ @@ -123297,8 +107536,8 @@ /area/station/security/prison) "uwH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -123307,12 +107546,8 @@ /area/station/science/genetics) "uwI" = ( /obj/effect/turf_decal/vg_decals/numbers/one, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "uwO" = ( @@ -123351,48 +107586,21 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) "uxa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/security/corrections_officer) "uxy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "uxA" = ( /obj/item/banner/security/mundane, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/brig) -"uxC" = ( -/obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) -"uxH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "uxI" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -123417,14 +107625,11 @@ }, /obj/effect/mapping_helpers/requests_console/ore_update, /obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"uxN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/command/gateway) "uxO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -123436,9 +107641,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) "uxV" = ( @@ -123468,9 +107671,6 @@ /area/station/security/execution/education) "uxW" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/atmospherics/components/trinary/mixer/flipped{ dir = 4 }, @@ -123535,8 +107735,8 @@ /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/prison/garden) @@ -123571,12 +107771,8 @@ "uyT" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "uyZ" = ( @@ -123589,9 +107785,6 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "uzf" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/sorting/mail{ dir = 1; @@ -123614,21 +107807,15 @@ /turf/open/floor/iron/dark, /area/station/common/laser_tag) "uzj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/meeting_room/council) "uzl" = ( /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "uzm" = ( @@ -123668,8 +107855,8 @@ /turf/closed/wall, /area/station/medical/medbay/central) "uzV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron, @@ -123701,12 +107888,8 @@ /turf/open/floor/plating, /area/station/service/library/abandoned) "uAl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/vg_decals/numbers/one, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -123738,14 +107921,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) -"uAu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "uAI" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, @@ -123760,8 +107935,8 @@ name = "MiniSat Antechamber" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, @@ -123786,8 +107961,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) @@ -123836,8 +108011,8 @@ "uBt" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -123846,12 +108021,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "uBu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -123860,10 +108031,7 @@ /area/station/command/heads_quarters/nt_rep) "uBz" = ( /obj/structure/chair, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -123908,23 +108076,18 @@ /turf/closed/wall/r_wall, /area/station/maintenance/pool_maintenance) "uCf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "uCg" = ( /turf/open/floor/iron/dark, /area/station/security/power_station) "uCj" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, /turf/open/floor/iron, @@ -123972,24 +108135,16 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/room7) -"uCx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "uCB" = ( /obj/machinery/light/directional/east, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "uCC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124028,7 +108183,7 @@ "uCR" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 + dir = 8 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -124050,8 +108205,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "uDf" = ( @@ -124071,12 +108226,8 @@ /area/station/maintenance/abandon_exam/cat) "uDm" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ dir = 4; name = "Theatre Junction"; @@ -124085,22 +108236,18 @@ /turf/open/floor/iron, /area/station/commons/dorms) "uDy" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/dark_blue{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) "uDz" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "uDC" = ( @@ -124135,17 +108282,11 @@ /area/station/commons/fitness) "uDZ" = ( /obj/effect/landmark/carpspawn, -/turf/open/floor/glass/reinforced{ - initial_gas_mix = "TEMP=2.7" - }, +/turf/open/floor/glass/reinforced/airless, /area/space/nearstation) "uEa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -124158,7 +108299,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/common/pool) @@ -124167,8 +108308,8 @@ /turf/open/floor/iron/dark, /area/station/common/tailoring) "uEk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron/white, @@ -124183,12 +108324,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "uEt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/eighties/red, /area/station/common/arcade) @@ -124240,10 +108377,8 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/mess, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -124292,12 +108427,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124320,28 +108451,22 @@ /area/station/medical/chemistry) "uFD" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/table, /obj/structure/bedsheetbin, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "uFG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, -/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -124351,16 +108476,9 @@ dir = 8; id = "Luggagebelt" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "uFT" = ( @@ -124372,12 +108490,8 @@ c_tag = "Leisure Hallway - Starboard"; name = "hallway camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124398,27 +108512,19 @@ pixel_x = -4 }, /obj/item/tank/jetpack/carbondioxide, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "uGc" = ( /obj/machinery/door/airlock{ name = "Courtroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "uGd" = ( @@ -124426,13 +108532,12 @@ dir = 8 }, /obj/structure/rack/shelf, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/brig) "uGf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -124456,8 +108561,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -124513,9 +108618,6 @@ dir = 8 }, /obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) "uHf" = ( @@ -124552,7 +108654,6 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "uHy" = ( -/obj/effect/turf_decal/bot, /obj/machinery/grill, /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/cafeteria, @@ -124623,12 +108724,8 @@ name = "Gear Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, @@ -124670,23 +108767,10 @@ /area/station/maintenance/department/security/lower) "uIX" = ( /obj/structure/rack, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/spawner/random/techstorage/command_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "uJc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -124694,7 +108778,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "uJk" = ( /obj/machinery/light/small/directional/east, @@ -124740,8 +108824,8 @@ /area/station/ai_monitored/command/storage/eva/upper) "uJz" = ( /obj/effect/spawner/random/trash/garbage, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -124795,30 +108879,21 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) "uJZ" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/vending/wardrobe/viro_wardrobe, /obj/structure/cable, /turf/open/floor/iron, /area/station/medical/virology/isolation) "uKc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -124862,12 +108937,8 @@ /area/station/engineering/gravity_generator) "uKh" = ( /obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) "uKq" = ( @@ -125029,18 +109100,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/engineering/engine_aft_port) -"uMn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "uMr" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance, @@ -125049,12 +109108,8 @@ "uMs" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125086,15 +109141,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "uMX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -125105,9 +109155,6 @@ /obj/structure/disposaloutlet{ dir = 4 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -125124,14 +109171,11 @@ /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) "uNk" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/airalarm/directional/west, /obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/security/interrogation) "uNl" = ( @@ -125159,9 +109203,7 @@ /turf/open/water/overlay, /area/station/hallway/primary/central) "uNt" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/shower) @@ -125170,12 +109212,8 @@ /area/station/service/lawoffice) "uND" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125207,8 +109245,8 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -125226,24 +109264,10 @@ cycle_id = "AIsatAirlock" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) -"uOc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "uOh" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side, @@ -125273,7 +109297,6 @@ /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uOA" = ( @@ -125281,10 +109304,6 @@ /turf/open/floor/iron, /area/station/science/ordnance/office) "uOB" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/chair/pew/left{ dir = 8 }, @@ -125334,7 +109353,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) "uPp" = ( @@ -125360,12 +109379,8 @@ /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125392,9 +109407,7 @@ /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) "uQb" = ( @@ -125432,12 +109445,8 @@ /turf/open/floor/engine/vacuum, /area/station/maintenance/department/engineering/atmos_aux_port) "uQp" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/courtroom) "uQq" = ( @@ -125446,12 +109455,8 @@ /area/station/command/secure_bunker) "uQv" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -125487,9 +109492,7 @@ }, /area/station/maintenance/port/upper) "uQM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Arcade" }, @@ -125499,9 +109502,7 @@ /turf/open/floor/wood, /area/station/common/arcade) "uQQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/railing/corner{ dir = 8 }, @@ -125534,10 +109535,8 @@ /area/station/maintenance/starboard/fore) "uRs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ dir = 1; name = "Hydroponics Junction"; @@ -125562,12 +109561,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -125575,20 +109570,12 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/common/night_club) -"uRy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "uRA" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) "uRL" = ( @@ -125596,7 +109583,6 @@ /obj/structure/window/spawner/directional/east, /obj/item/clothing/neck/stethoscope, /obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uRM" = ( @@ -125604,12 +109590,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) @@ -125640,8 +109622,8 @@ /area/station/cargo/drone_bay) "uSe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/library) @@ -125673,7 +109655,6 @@ /obj/structure/table/reinforced/rglass, /obj/item/clipboard, /obj/item/toy/figure/md, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uSl" = ( @@ -125691,9 +109672,6 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "uSA" = ( @@ -125744,12 +109722,8 @@ /turf/open/floor/grass, /area/station/service/cafeteria) "uSU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, /area/station/science/ordnance) "uSX" = ( /obj/structure/chair/wood{ @@ -125820,7 +109794,6 @@ /area/station/maintenance/abandon_exam/cat) "uTu" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/box, /obj/machinery/modular_computer/preset/engineering{ dir = 8 }, @@ -125864,8 +109837,10 @@ /area/station/medical/medbay/central) "uTT" = ( /obj/machinery/chem_master, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "uTU" = ( @@ -125918,7 +109893,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/atmos_aux_port) "uUA" = ( -/obj/effect/turf_decal/stripes/corner, /obj/structure/trash_pile, /obj/structure/disposalpipe/segment{ dir = 10 @@ -125929,12 +109903,8 @@ /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "uUH" = ( @@ -125962,8 +109932,8 @@ dir = 6; name = "engineering camera" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -125978,19 +109948,12 @@ /turf/open/floor/eighties/red, /area/station/common/arcade) "uVe" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "uVf" = ( @@ -126004,8 +109967,8 @@ /area/station/science/xenobiology/control) "uVg" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/upper) @@ -126052,23 +110015,10 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"uVC" = ( -/obj/structure/cable, -/obj/effect/landmark/start/security_officer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/office) "uVL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/storage/art) @@ -126106,12 +110056,8 @@ /area/station/medical/chemistry) "uWf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) "uWi" = ( @@ -126164,7 +110110,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -126178,22 +110124,7 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"uWT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "uWV" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/machinery/pipedispenser, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 6 @@ -126221,15 +110152,12 @@ /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) "uXj" = ( -/obj/effect/turf_decal/box/corners, /obj/machinery/byteforge, /turf/open/floor/circuit/green, /area/station/bitrunning/den) "uXl" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/station/service/library/abandoned) "uXm" = ( @@ -126290,20 +110218,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "uXJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/common/wrestling/locker) "uXP" = ( -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "uXY" = ( /obj/structure/railing, -/obj/effect/turf_decal/stripes, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "uYa" = ( @@ -126388,12 +110312,8 @@ /turf/open/floor/iron/dark, /area/station/security/power_station) "uYL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel) "uYQ" = ( @@ -126409,10 +110329,8 @@ /area/station/common/locker_room_shower) "uYS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -126430,8 +110348,8 @@ /area/station/commons/dorms/room3) "uZe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -126454,12 +110372,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -126515,12 +110429,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "uZK" = ( @@ -126555,34 +110465,15 @@ /area/station/hallway/primary/central) "vaE" = ( /obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/security/prison/upper) -"vaJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "vaK" = ( /obj/structure/closet/secure_closet/security, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint) "vaL" = ( @@ -126604,12 +110495,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -126619,12 +110506,8 @@ /turf/open/space/basic, /area/space/nearstation) "vaP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -126644,23 +110527,10 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vaZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "vbd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -126673,12 +110543,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -126686,7 +110552,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "vbk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/mineral/plastitanium, /area/station/maintenance/cult_chapel_maint) "vbn" = ( @@ -126722,37 +110587,21 @@ /area/station/science/ordnance/office) "vcc" = ( /obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/bar/atrium) -"vcd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "vce" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) "vcr" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs{ dir = 4 }, @@ -126773,14 +110622,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"vcF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "vcG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -126793,12 +110634,8 @@ name = "E.V.A. Storage Shutter" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "vcQ" = ( @@ -126878,14 +110715,9 @@ /area/station/maintenance/thruster_room/central) "vdX" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) "vdZ" = ( @@ -126897,11 +110729,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) +"ved" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "veg" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) @@ -126920,12 +110757,8 @@ }, /obj/machinery/light/directional/east, /obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) "vet" = ( @@ -126933,12 +110766,8 @@ name = "Bitrunning Den" }, /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/bitrunning/den) @@ -126946,8 +110775,8 @@ /obj/structure/bed/dogbed/ian, /mob/living/basic/pet/dog/corgi/ian, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "veC" = ( @@ -126982,7 +110811,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/cargo/sorting) "veS" = ( @@ -127029,8 +110858,8 @@ /area/station/medical/break_room) "vfk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/explab) "vfB" = ( @@ -127067,8 +110896,8 @@ }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/engine, @@ -127107,9 +110936,7 @@ /turf/open/floor/engine, /area/station/command/secure_bunker) "vgi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/patients_rooms) @@ -127132,35 +110959,20 @@ /area/station/security/prison/mess) "vgp" = ( /obj/machinery/porta_turret/lasertag/blue, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vgx" = ( /turf/open/floor/wood, /area/station/service/theater) "vgD" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) "vgE" = ( @@ -127192,15 +111004,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"vgK" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science) "vgM" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -127219,45 +111022,20 @@ /area/station/hallway/primary/central) "vgP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron, /area/station/command/teleporter) -"vgU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/robotics) "vgV" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "vgW" = ( /obj/machinery/navbeacon{ @@ -127269,7 +111047,7 @@ }, /area/station/hallway/secondary/command) "vgY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/lawoffice) "vha" = ( @@ -127290,12 +111068,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -127344,16 +111118,6 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) -"vhW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "vif" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 6 @@ -127390,9 +111154,6 @@ name = "E.V.A. External Shutters"; req_access = list("command") }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/door/poddoor/shutters{ id = "evashutters3"; name = "E.V.A. Storage Shutters" @@ -127420,9 +111181,7 @@ }, /area/station/security/range) "viv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/red, /area/station/science/robotics/mechbay) "viy" = ( @@ -127430,16 +111189,14 @@ /area/station/common/wrestling/lobby) "viz" = ( /obj/machinery/light/directional/east, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "viC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) @@ -127458,9 +111215,6 @@ desc = "Used to grind things up into raw materials and liquids."; pixel_y = 5 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/item/radio/intercom/directional/north, /obj/structure/cable, /turf/open/floor/iron, @@ -127476,8 +111230,8 @@ }, /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/storage) "viS" = ( @@ -127485,12 +111239,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "viT" = ( @@ -127517,9 +111267,7 @@ /area/station/service/theater) "viW" = ( /obj/structure/transit_tube/diagonal, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "viX" = ( /obj/structure/chair/office{ @@ -127550,8 +111298,8 @@ id_tag = "HoSdoor"; name = "Head Of Security's Office" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/security/hos, /obj/machinery/duct, /turf/open/floor/iron, @@ -127587,9 +111335,6 @@ /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/gloves/color/yellow, /obj/item/storage/medkit/fire, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/break_room) @@ -127674,12 +111419,8 @@ "vks" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -127705,23 +111446,6 @@ /obj/item/storage/photo_album/library, /turf/open/floor/carpet, /area/station/service/library) -"vkv" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/tank/internals/oxygen, -/obj/item/radio, -/obj/item/clothing/mask/breath, -/turf/open/floor/iron/dark, -/area/station/maintenance/aux_eva) -"vkA" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "vkC" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -127732,12 +111456,8 @@ }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/transit_tube) @@ -127747,19 +111467,6 @@ }, /turf/open/floor/plating, /area/station/security/range) -"vkJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "vkM" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -127782,9 +111489,7 @@ /area/station/cargo/miningdock) "vkX" = ( /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/airless{ - icon_state = "textured_white_large" - }, +/turf/open/floor/iron/white/textured_large/airless, /area/space/nearstation) "vlc" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -127796,8 +111501,8 @@ name = "RnD Junction"; sortType = 12 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "vlf" = ( @@ -127842,35 +111547,22 @@ /turf/open/floor/iron/dark, /area/station/common/gaskiosk) "vlv" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "vly" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "vlA" = ( @@ -127909,29 +111601,20 @@ }, /area/station/science/explab) "vlO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool) "vlQ" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 5 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "vlR" = ( @@ -127958,13 +111641,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "vmg" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vmj" = ( @@ -127987,12 +111666,8 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, @@ -128015,8 +111690,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "vmy" = ( @@ -128044,16 +111719,6 @@ }, /turf/open/floor/iron, /area/station/science/research/abandoned) -"vmN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium/red, -/area/station/maintenance/cult_chapel_maint) "vmO" = ( /obj/machinery/door/poddoor/preopen{ id = "BarBlastDoor"; @@ -128063,7 +111728,7 @@ /turf/open/floor/plating, /area/station/service/bar) "vmP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/door/directional/west{ id = "Capoffice2"; name = "Door lock"; @@ -128095,12 +111760,8 @@ /area/station/maintenance/starboard/fore) "vns" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "vnC" = ( @@ -128108,21 +111769,15 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "vnK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall3"; location = "hall2" @@ -128214,8 +111869,8 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/chemistry) @@ -128223,12 +111878,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -128241,10 +111892,6 @@ /turf/open/floor/wood, /area/station/service/theater) "voH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128291,18 +111938,14 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "vpa" = ( -/obj/effect/turf_decal/bot, /obj/machinery/deepfryer, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "vpe" = ( -/obj/structure/trash_pile, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "vpn" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side{ @@ -128325,20 +111968,10 @@ /area/station/common/night_club/back_stage) "vpx" = ( /obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) -"vpy" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/test_chambers) "vpD" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/wood{ @@ -128347,19 +111980,13 @@ /turf/open/floor/wood, /area/station/service/chapel/funeral) "vpF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) "vpK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -128387,12 +112014,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/upper) "vqm" = ( @@ -128417,18 +112040,8 @@ /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) "vqv" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) "vqH" = ( @@ -128476,19 +112089,6 @@ }, /turf/open/floor/plating, /area/station/security/prison/safe) -"vqV" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "vqW" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -128545,8 +112145,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "vry" = ( @@ -128582,12 +112182,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "vrY" = ( @@ -128622,12 +112218,8 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "vsl" = ( @@ -128639,12 +112231,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128674,23 +112262,12 @@ /obj/structure/railing/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "vsN" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -128740,15 +112317,15 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/common/night_club) "vti" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) "vtk" = ( @@ -128757,9 +112334,7 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "XenoOffice"; name = "Xenobiology Controll Room Shutters" @@ -128775,7 +112350,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "vtp" = ( @@ -128785,7 +112360,7 @@ /turf/open/floor/grass, /area/station/command/heads_quarters/captain) "vts" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "vtt" = ( @@ -128826,12 +112401,8 @@ /area/station/hallway/secondary/service) "vtN" = ( /obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 4 }, @@ -128851,8 +112422,8 @@ }, /obj/structure/barricade/wooden, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron, @@ -128920,9 +112491,7 @@ dir = 8 }, /obj/effect/landmark/start/chemist, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128936,9 +112505,7 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/binary/valve/on/layer4{ dir = 4 }, @@ -128949,13 +112516,6 @@ "vus" = ( /turf/open/floor/wood, /area/station/security/courtroom) -"vut" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "vuz" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance_hatch, @@ -128967,12 +112527,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -129026,12 +112582,8 @@ /area/station/medical/psychology) "vuX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/gravity_generator) @@ -129057,8 +112609,8 @@ /obj/structure/chair/office{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) @@ -129073,23 +112625,20 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "vvJ" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "vvP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/transit_tube) "vvR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "vvS" = ( @@ -129145,9 +112694,7 @@ /turf/open/floor/iron/dark, /area/station/common/wrestling/beverage) "vwd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair, /obj/effect/landmark/start/assistant, /turf/open/floor/wood, @@ -129167,9 +112714,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -129186,12 +112731,8 @@ name = "Cell 5"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/five, /turf/open/floor/iron/dark/side{ dir = 4 @@ -129200,8 +112741,8 @@ "vwE" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -129210,13 +112751,6 @@ "vwF" = ( /turf/closed/wall/r_wall, /area/station/security/corrections_officer) -"vwJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/dorms) "vwN" = ( /turf/open/floor/iron/dark/side{ dir = 4 @@ -129246,9 +112780,7 @@ /turf/open/floor/engine, /area/station/science/tele_sci) "vwY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "vxa" = ( @@ -129271,12 +112803,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) "vxi" = ( @@ -129287,12 +112815,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -129307,12 +112831,6 @@ }, /area/station/security/prison) "vxk" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/structure/rack/shelf, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, @@ -129332,12 +112850,8 @@ /area/station/security/brig) "vxB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 2 }, @@ -129350,8 +112864,8 @@ /obj/machinery/door/airlock/security{ name = "Private Interrogation" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/detective, /turf/open/floor/iron/dark, /area/station/security/detectives_office) @@ -129359,9 +112873,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "vxH" = ( @@ -129377,9 +112889,7 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery) @@ -129389,12 +112899,8 @@ }, /obj/structure/sink/directional/south, /obj/structure/window/reinforced/tinted/frosted/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) "vxT" = ( @@ -129407,9 +112913,7 @@ /area/station/security/checkpoint/customs/auxiliary) "vxX" = ( /obj/effect/landmark/start/medical_doctor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/carpet/blue, /area/station/medical/break_room) @@ -129495,7 +112999,6 @@ /turf/open/floor/iron, /area/station/engineering/main) "vyB" = ( -/obj/effect/turf_decal/bot, /obj/machinery/deepfryer, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -129604,12 +113107,8 @@ /area/station/science/xenobiology) "vyR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -129618,8 +113117,8 @@ /area/station/maintenance/port/upper) "vyT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -129636,12 +113135,10 @@ /area/station/maintenance/fore/upper) "vyY" = ( /obj/item/kirbyplants/organic/plant21, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/warden) "vza" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -129675,12 +113172,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) @@ -129717,12 +113210,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/engineering/main) "vzD" = ( @@ -129749,9 +113238,7 @@ /turf/open/floor/plating, /area/station/science/research/abandoned) "vzJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/command/gateway) @@ -129790,26 +113277,6 @@ }, /turf/open/floor/iron/smooth, /area/station/command/secure_bunker) -"vAe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) -"vAf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "vAi" = ( /obj/machinery/light/small/broken/directional/south, /turf/open/floor/grass, @@ -129817,32 +113284,12 @@ "vAm" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/effect/landmark/start/chief_engineer, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) -"vAo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"vAw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/blueshield) "vAC" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -129903,42 +113350,10 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) -"vBj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/central) -"vBk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "vBn" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -129970,12 +113385,6 @@ /area/station/science/ordnance/storage) "vBP" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) "vBX" = ( @@ -129997,12 +113406,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -130019,10 +113424,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "vCl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -130031,9 +113433,7 @@ /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) "vCp" = ( @@ -130086,7 +113486,7 @@ /area/station/maintenance/department/science/lower) "vCP" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -130144,8 +113544,8 @@ /area/station/maintenance/abandon_diner) "vDA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "vDJ" = ( @@ -130160,24 +113560,13 @@ /area/station/common/cryopods) "vDP" = ( /obj/structure/chair/sofa/bench/left, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "vDR" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) "vDU" = ( @@ -130191,12 +113580,6 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "vDX" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) @@ -130214,18 +113597,12 @@ "vEk" = ( /obj/effect/turf_decal/bot, /obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) "vEl" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -130273,9 +113650,6 @@ /turf/open/floor/iron/white, /area/station/science/research) "vEx" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/structure/easel, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -130299,8 +113673,8 @@ /area/station/tcommsat/computer) "vEF" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/ce) @@ -130311,16 +113685,10 @@ /turf/open/floor/iron/white, /area/station/science/research) "vEL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/genetics) "vES" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/newscaster/directional/west, /obj/structure/disposalpipe/segment{ dir = 5 @@ -130367,11 +113735,7 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "vFr" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/light/floor, -/obj/effect/turf_decal/trimline/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "vFx" = ( @@ -130383,7 +113747,6 @@ /obj/item/soap/nanotrasen{ pixel_y = -6 }, -/obj/effect/turf_decal/bot, /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/siding/purple/corner{ dir = 1 @@ -130429,8 +113792,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -130475,38 +113838,22 @@ "vGu" = ( /obj/structure/closet/secure_closet/security/sec, /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/blue/line{ - dir = 5 - }, /turf/open/floor/iron/dark, /area/station/security/lockers) "vGv" = ( /obj/machinery/computer/security{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red, -/obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "vGy" = ( /obj/machinery/air_sensor/oxygen_tank, /turf/open/floor/engine/o2, /area/station/engineering/atmos) -"vGF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "vGH" = ( /obj/machinery/defibrillator_mount/directional/north, /obj/machinery/light/directional/north, @@ -130514,10 +113861,8 @@ /turf/open/floor/iron, /area/station/medical/surgery) "vGI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) "vGL" = ( @@ -130526,12 +113871,8 @@ /area/station/maintenance/department/security/lower) "vGR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes{ dir = 1 }, @@ -130539,14 +113880,11 @@ /area/station/science/explab) "vGZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/power_station) "vHe" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass{ pixel_x = -1; @@ -130559,6 +113897,7 @@ /obj/item/reagent_containers/cup/rag{ pixel_y = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "vHg" = ( @@ -130569,13 +113908,10 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-west" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/command/bridge) "vHk" = ( @@ -130585,18 +113921,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"vHu" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/fore/upper) "vHy" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -130714,9 +114038,7 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) "vIh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -130724,12 +114046,8 @@ /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -130755,12 +114073,8 @@ /area/station/service/lawoffice) "vIs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/miningdock) @@ -130842,12 +114156,9 @@ /area/station/common/night_club) "vJa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -130875,18 +114186,15 @@ /obj/structure/chair/wood{ dir = 8 }, -/obj/effect/landmark/start/bouncer, /turf/open/floor/wood, /area/station/service/bar/atrium) "vJv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) "vJx" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "vJz" = ( @@ -130939,10 +114247,6 @@ /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/security/prison/mess) "vKh" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, @@ -130978,10 +114282,8 @@ sortType = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) "vKN" = ( @@ -130998,7 +114300,6 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "vKR" = ( -/obj/effect/turf_decal/stripes/white/line, /obj/structure/weightmachine, /turf/open/floor/iron/dark, /area/station/commons/fitness) @@ -131006,15 +114307,12 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 6 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vLa" = ( /obj/effect/turf_decal/vg_decals/atmos/air{ dir = 8 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/air, /area/station/engineering/atmos) "vLe" = ( @@ -131046,12 +114344,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/carpet, /area/station/commons/dorms/vacantroom) @@ -131061,19 +114355,12 @@ "vLx" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "vLD" = ( /obj/item/kirbyplants/organic/plant10, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 4 - }, /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 }, @@ -131103,9 +114390,7 @@ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/station/solars/starboard/aft) "vLL" = ( /obj/effect/spawner/random/trash/moisture_trap, @@ -131122,7 +114407,6 @@ /obj/structure/closet/secure_closet/chemical{ anchored = 1 }, -/obj/effect/turf_decal/delivery, /obj/item/radio/headset/headset_med, /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -131139,22 +114423,15 @@ /area/station/service/barber) "vMe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/duct, +/obj/effect/turf_decal/tile/green/tram{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics) "vMi" = ( @@ -131235,10 +114512,7 @@ }, /obj/structure/closet/crate/internals, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/primary) "vMj" = ( @@ -131259,7 +114533,6 @@ /area/station/science/research) "vMy" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes, /obj/effect/spawner/random/trash/garbage, /obj/machinery/camera{ c_tag = "Disposal Driver"; @@ -131271,9 +114544,6 @@ /area/station/maintenance/disposal) "vMA" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/item/book/manual/wiki/engineering_hacking{ pixel_x = 6; pixel_y = 6 @@ -131290,12 +114560,8 @@ /area/station/engineering/main) "vMM" = ( /obj/structure/chair/office, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) @@ -131318,12 +114584,15 @@ /obj/machinery/airalarm/directional/west, /obj/machinery/light_switch/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "vNd" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -131334,27 +114603,13 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "vNg" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "vNh" = ( /obj/structure/rack/shelf, @@ -131389,12 +114644,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) -"vNv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/carpet, -/area/station/service/chapel) "vNx" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/dirt{ @@ -131448,10 +114697,6 @@ /obj/machinery/door/airlock/medical{ name = "Surgery Theater" }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, @@ -131459,33 +114704,14 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"vOi" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/closet/secure_closet/brig{ - id = "Cell 3"; - name = "Cell 3 Locker" - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "vOk" = ( /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -131496,9 +114722,7 @@ /area/station/maintenance/abandon_wrestle) "vOt" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -131516,7 +114740,7 @@ }, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -131525,14 +114749,13 @@ /area/station/medical/morgue) "vOy" = ( /obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/barber) "vOz" = ( @@ -131605,6 +114828,9 @@ /area/space/nearstation) "vPn" = ( /obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -131627,9 +114853,7 @@ "vPz" = ( /obj/structure/cable, /obj/machinery/status_display/ai/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) "vPM" = ( @@ -131646,18 +114870,6 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) -"vQj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "vQk" = ( /obj/machinery/computer/teleporter{ dir = 1 @@ -131694,10 +114906,7 @@ /area/station/common/night_club/back_stage) "vQA" = ( /obj/effect/turf_decal/vg_decals/numbers/eight, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "vQC" = ( /obj/structure/chair/sofa/left/brown{ @@ -131728,9 +114937,7 @@ /area/station/science/research/abandoned) "vQQ" = ( /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -131793,15 +115000,15 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/port) "vRO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) "vRS" = ( @@ -131828,13 +115035,10 @@ /turf/open/floor/iron, /area/station/science/ordnance) "vSn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/sorting) "vSt" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/loading_area, /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, @@ -131911,12 +115115,8 @@ /area/station/maintenance/abandon_art_studio) "vTs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) "vTy" = ( @@ -131928,37 +115128,23 @@ id = "custodialshutters"; name = "Custodial Closet Shutters" }, -/obj/effect/turf_decal/delivery, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/service/janitor) "vTC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "vTD" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "vTH" = ( @@ -131994,12 +115180,10 @@ }, /area/station/security/prison/workout) "vTN" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "vTQ" = ( @@ -132013,9 +115197,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "vUe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "vUf" = ( @@ -132053,12 +115234,8 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132083,12 +115260,8 @@ /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/captain/private) "vUC" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) "vUH" = ( @@ -132099,17 +115272,14 @@ /area/station/maintenance/port/aft) "vUK" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /turf/open/floor/iron/dark, /area/station/engineering/main) "vUM" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/old, /area/station/cargo/office) "vUW" = ( @@ -132162,9 +115332,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 5 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vVu" = ( /obj/effect/turf_decal/tile/neutral{ @@ -132172,12 +115340,8 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132188,19 +115352,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) "vVA" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "vVB" = ( @@ -132226,12 +115386,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/science/ordnance_storage, /turf/open/floor/iron/white/side{ dir = 4 @@ -132258,9 +115414,7 @@ dir = 1 }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/cytology) @@ -132299,20 +115453,16 @@ /area/station/engineering/supermatter/room) "vWk" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/security/prison/upper) "vWp" = ( /obj/item/trash/syndi_cakes, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -132335,13 +115485,6 @@ "vWO" = ( /turf/closed/wall, /area/station/common/wrestling/concessions) -"vWU" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "vWW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -132366,10 +115509,8 @@ /area/station/maintenance/department/security/greater) "vXe" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -132405,12 +115546,8 @@ /turf/open/floor/iron, /area/station/maintenance/central) "vXP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -132418,18 +115555,12 @@ /area/station/science/robotics) "vXQ" = ( /obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "vXS" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "vXV" = ( @@ -132455,10 +115586,9 @@ }, /obj/effect/turf_decal/delivery/red, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/upper) "vYi" = ( @@ -132472,7 +115602,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/lawoffice) "vYq" = ( @@ -132503,12 +115633,8 @@ /turf/open/floor/iron/freezer, /area/station/common/locker_room_shower) "vYX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured, /area/station/medical/aslyum) "vZa" = ( @@ -132527,8 +115653,8 @@ }, /obj/item/chair, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/plating, @@ -132545,8 +115671,8 @@ /area/station/service/library/printer) "vZv" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ name = "Central Hallway" }, @@ -132569,8 +115695,8 @@ /area/station/hallway/primary/upper) "vZK" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -132580,33 +115706,23 @@ /obj/structure/chair/office/light{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green, /obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /obj/machinery/duct, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, /turf/open/floor/iron/white, /area/station/medical/virology) "vZR" = ( /obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/structure/closet/crate/trashcart/laundry, /obj/item/soap/nanotrasen, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "vZW" = ( @@ -132626,12 +115742,8 @@ /area/station/ai_monitored/command/storage/eva) "waa" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel) "wae" = ( @@ -132653,9 +115765,6 @@ "was" = ( /obj/machinery/computer/pandemic, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/cable, /turf/open/floor/iron, /area/station/medical/virology) @@ -132663,12 +115772,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "waD" = ( @@ -132676,12 +115781,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) "waF" = ( @@ -132724,13 +115825,11 @@ /obj/structure/disposaloutlet{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/trunk{ dir = 1 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "waZ" = ( /obj/machinery/disposal/bin, @@ -132741,12 +115840,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "wba" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/hydroponics) @@ -132789,15 +115884,8 @@ dir = 8; id = "Luggagebelt" }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/checkpoint) "wbh" = ( @@ -132815,8 +115903,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, @@ -132842,16 +115930,14 @@ /area/station/common/cryopods) "wbJ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/range) "wbM" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/railing/corner/end{ +/obj/structure/railing/corner/end/flip{ dir = 4 }, /turf/open/floor/iron, @@ -132860,26 +115946,19 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "wbQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/stone, /area/station/common/wrestling/arena) "wbV" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science) "wbW" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -132895,12 +115974,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/aux_eva) @@ -132932,8 +116007,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133018,15 +116093,11 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ dir = 4 }, -/obj/machinery/air_sensor{ - chamber_id = "ordnancegas2" - }, +/obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/engine, /area/station/science/ordnance/freezerchamber) "wcJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "wcO" = ( @@ -133037,6 +116108,10 @@ }, /turf/open/floor/grass, /area/station/science/research) +"wcZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit, +/area/station/security/mechbay) "wdb" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -133071,8 +116146,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "wdn" = ( @@ -133080,13 +116155,6 @@ /area/station/hallway/primary/central) "wdo" = ( /obj/structure/closet/secure_closet/security/sec, -/obj/effect/turf_decal/bot_blue, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/blue/end{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/lockers) "wdr" = ( @@ -133109,12 +116177,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -133160,24 +116224,16 @@ /area/station/hallway/primary/central) "wdI" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "wdL" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133219,15 +116275,6 @@ }, /turf/open/floor/carpet, /area/station/hallway/primary/port) -"wdX" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "wel" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible/layer4, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -133291,7 +116338,6 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "weB" = ( /obj/structure/window/spawner/directional/west, -/obj/effect/landmark/start/assistant, /obj/structure/chair/sofa/corp/right{ color = "#DE3A3A"; dir = 4 @@ -133312,31 +116358,16 @@ /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/hallway/secondary/service) "weK" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "weL" = ( /obj/structure/rack/shelf, @@ -133351,13 +116382,13 @@ /area/station/science/research/abandoned) "weT" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) "weV" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/security/courtroom) "weW" = ( @@ -133375,10 +116406,8 @@ /turf/open/floor/iron/dark, /area/station/science/robotics) "weZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/ordnance/office) @@ -133407,8 +116436,8 @@ }, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, /obj/machinery/button/door/directional/north{ id = "Starboardbowmaints"; @@ -133439,7 +116468,6 @@ /area/station/engineering/gravity_generator) "wfu" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/storage/box/lights/mixed{ pixel_x = 6; pixel_y = 11 @@ -133482,12 +116510,8 @@ /area/station/command/heads_quarters/rd) "wfE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -133545,10 +116569,6 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "wgp" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/machinery/pipedispenser/disposal, /turf/open/floor/iron/dark, /area/station/engineering/atmos) @@ -133586,16 +116606,8 @@ /obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/common/cryopods) "wgA" = ( @@ -133617,8 +116629,8 @@ /turf/closed/wall/r_wall, /area/station/maintenance/abandon_psych) "wgY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -133664,7 +116676,6 @@ /area/station/security/detectives_office/private_investigators_office) "who" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, /obj/item/clipboard, /obj/item/toy/figure/atmos, /obj/item/analyzer{ @@ -133697,20 +116708,14 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/upper) "whz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/gateway) "whB" = ( /obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) @@ -133720,12 +116725,8 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -133742,8 +116743,8 @@ /area/station/security/lockers) "whW" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ dir = 10 @@ -133760,7 +116761,7 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "wie" = ( @@ -133771,8 +116772,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) @@ -133783,17 +116784,6 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/auxiliary) -"wig" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "wij" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ color = "#DE3A3A" @@ -133832,10 +116822,6 @@ "wiI" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/stripes{ dir = 8 }, @@ -133855,23 +116841,7 @@ }, /turf/open/floor/material/meat, /area/station/maintenance/department/science/xenobiology) -"wiP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "wiQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ @@ -133899,12 +116869,8 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) "wjv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/south, /obj/structure/cable, /obj/machinery/camera{ @@ -133933,9 +116899,6 @@ /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "wjF" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/structure/bed{ dir = 1 }, @@ -133972,9 +116935,7 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -133998,8 +116959,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "wkv" = ( @@ -134011,12 +116972,8 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) "wkC" = ( @@ -134044,7 +117001,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "wkR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -134059,13 +117016,9 @@ "wkY" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /turf/open/floor/iron/dark, /area/station/security/interrogation) "wkZ" = ( @@ -134088,25 +117041,12 @@ name = "Seperating Blast Doors" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) "wlb" = ( /obj/structure/closet/toolcloset, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) @@ -134136,7 +117076,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wlo" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/closet/crate/goldcrate, /obj/item/stack/spacecash/c500, /obj/item/stack/spacecash/c500, @@ -134158,9 +117097,7 @@ /area/station/maintenance/solars/port/fore) "wlu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) "wlF" = ( @@ -134189,17 +117126,12 @@ /area/station/security/prison/shower) "wlL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) "wlM" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -134223,9 +117155,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "wlT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ name = "Cargo Bay" @@ -134239,32 +117168,19 @@ /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) "wlW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "wlY" = ( /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "wmh" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/iron/white, /area/station/medical/surgery) "wmr" = ( @@ -134275,17 +117191,12 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "wmC" = ( /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/field/generator, /obj/effect/turf_decal/stripes{ dir = 9 @@ -134295,15 +117206,9 @@ }, /area/station/engineering/storage) "wmD" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, /area/station/security/brig) "wmH" = ( /obj/effect/decal/cleanable/dirt{ @@ -134325,8 +117230,8 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/science) @@ -134348,7 +117253,7 @@ }, /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) @@ -134408,6 +117313,16 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/circuit/telecomms, /area/station/science/server) +"wnk" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "wno" = ( /obj/item/stack/sheet/cardboard, /obj/effect/decal/cleanable/dirt{ @@ -134424,9 +117339,6 @@ /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) "wnr" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -134434,8 +117346,8 @@ /area/station/maintenance/aux_eva) "wnt" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) "wnv" = ( @@ -134452,7 +117364,7 @@ /turf/open/floor/iron/stairs/left, /area/station/hallway/primary/port) "wnF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) @@ -134481,12 +117393,8 @@ "wnU" = ( /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wnW" = ( @@ -134542,12 +117450,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) "wpg" = ( @@ -134580,8 +117484,8 @@ /obj/machinery/door/airlock/bathroom{ name = "Restroom" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) @@ -134627,7 +117531,6 @@ name = "E.V.A. Shutters"; req_access = list("command") }, -/obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ id = "evashutters2"; name = "E.V.A. Storage Shutters" @@ -134640,25 +117543,13 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/pool_maintenance) -"wpV" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "wpY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing, /obj/structure/railing{ dir = 1 @@ -134678,19 +117569,12 @@ /area/station/medical/virology) "wqf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/contraband/pwr_game/directional/south, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wqk" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -134793,7 +117677,7 @@ /obj/machinery/door/airlock/security{ name = "Isolation Cell 2" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark, /area/station/security/prison/safe) @@ -134816,12 +117700,8 @@ }, /obj/machinery/newscaster/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "wrI" = ( @@ -134832,12 +117712,8 @@ "wrJ" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -134849,24 +117725,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wrN" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) -"wrP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron, -/area/station/medical/cryo) "wrR" = ( /obj/effect/decal/cleanable/glass, /obj/structure/grille/broken, @@ -134935,8 +117797,8 @@ "wsu" = ( /obj/machinery/door/airlock/wood, /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "wsv" = ( @@ -134973,48 +117835,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) -"wsA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"wsB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "wsF" = ( /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wsG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, -/obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/box/white{ color = "#52B4E9" }, @@ -135082,9 +117910,7 @@ /area/station/command/heads_quarters/qm) "wtk" = ( /obj/machinery/light/floor, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wto" = ( /obj/machinery/door/airlock/engineering{ @@ -135094,8 +117920,8 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "wtq" = ( @@ -135106,7 +117932,6 @@ /turf/open/floor/iron/white/smooth_half, /area/station/science/explab) "wtu" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /obj/machinery/newscaster/directional/north, /obj/machinery/light/directional/north, @@ -135184,8 +118009,8 @@ /area/station/service/chapel) "wup" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/cafeteria) @@ -135204,12 +118029,8 @@ }, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_starboard) "wuy" = ( @@ -135221,12 +118042,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -135243,12 +118060,8 @@ /obj/effect/turf_decal/siding/purple{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -135256,12 +118069,8 @@ /area/station/command/heads_quarters/rd) "wuE" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/upper) "wuI" = ( @@ -135279,8 +118088,8 @@ /area/station/science/cytology) "wuM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) @@ -135306,13 +118115,6 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"wuY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "wvd" = ( /obj/structure/railing, /turf/open/floor/carpet, @@ -135325,7 +118127,6 @@ /turf/open/floor/wood, /area/station/service/chapel/funeral) "wvg" = ( -/obj/effect/turf_decal/bot_white, /obj/structure/closet/crate/goldcrate, /obj/item/stack/spacecash/c500, /obj/item/stack/spacecash/c500, @@ -135339,9 +118140,7 @@ /area/station/science/xenobiology) "wvk" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) @@ -135359,8 +118158,8 @@ /turf/open/floor/grass, /area/station/hallway/primary/port) "wvo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) "wvt" = ( @@ -135392,14 +118191,6 @@ /obj/item/clothing/suit/hazardvest, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"wvM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/service/barber) "wvN" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -135455,8 +118246,8 @@ /area/station/maintenance/department/security/lesser) "wwx" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/window/left{ name = "Coroner's Office"; req_access = list("morgue") @@ -135472,25 +118263,20 @@ name = "Primary Tool Storage" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/commons/storage/primary) "wwR" = ( -/obj/effect/turf_decal/tile/red{ - color = "#ff0000"; +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/red/real_red/half/contrasted{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - color = "#ff0000" - }, -/obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/common/laser_tag) "wxd" = ( @@ -135511,29 +118297,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"wxh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/research) -"wxi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/prison/upper) "wxk" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -135541,32 +118304,6 @@ /obj/structure/chair/office/light, /turf/open/floor/iron, /area/station/science/xenobiology) -"wxm" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/station/maintenance/port/upper) -"wxr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "wxt" = ( /obj/structure/cable, /obj/machinery/computer/cryopod/directional/north, @@ -135574,10 +118311,7 @@ /area/station/common/cryopods) "wxu" = ( /obj/structure/transit_tube/curved/flipped, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "wxw" = ( /obj/machinery/computer/mecha, @@ -135592,7 +118326,7 @@ dir = 8 }, /obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/railing/corner/end/flip{ +/obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/iron, @@ -135606,20 +118340,13 @@ /obj/item/paper_bin{ pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "wxW" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/item/clothing/head/cone, /obj/item/clothing/head/cone, /obj/item/clothing/head/cone, @@ -135641,9 +118368,6 @@ /area/station/service/chapel/funeral) "wyf" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, /obj/machinery/camera{ c_tag = "Security - Brig Cell 4"; dir = 6 @@ -135667,9 +118391,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "wyi" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/effect/turf_decal/stripes/red/line{ dir = 5 }, @@ -135705,12 +118426,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) "wyz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/security/prison/safe) "wyA" = ( @@ -135726,12 +118443,8 @@ name = "Auxiliary E.V.A. Storage" }, /obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/all/command/eva, /obj/structure/cable, /turf/open/floor/plating, @@ -135744,9 +118457,7 @@ "wyJ" = ( /obj/effect/turf_decal/trimline/white, /obj/structure/marker_beacon/burgundy, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wyK" = ( /obj/structure/table, @@ -135767,12 +118478,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -135797,8 +118504,8 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) "wyX" = ( @@ -135834,12 +118541,8 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/medical{ name = "Recovery Ward" }, @@ -135959,7 +118662,7 @@ /area/station/hallway/primary/central) "wAh" = ( /obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/small, +/turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "wAk" = ( /obj/machinery/door/airlock{ @@ -135993,38 +118696,25 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"wAJ" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "wAN" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) "wAS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_edge{ dir = 8 }, /area/station/engineering/atmos/hfr_room) "wAU" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash, /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ @@ -136041,13 +118731,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"wBh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/research) "wBn" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Filter" @@ -136060,12 +118743,8 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) "wBv" = ( @@ -136101,8 +118780,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -136154,46 +118833,26 @@ /obj/machinery/holopad, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) "wCi" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/iron/white, /area/station/science/research) -"wCp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "wCw" = ( /obj/machinery/camera/directional/south{ c_tag = "Courtroom - Holding Cell" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) "wCG" = ( @@ -136274,19 +118933,6 @@ /turf/open/floor/iron/dark, /area/station/engineering/lobby) "wCS" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/structure/closet/crate/wooden/toy, /obj/machinery/light/small/directional/north, /turf/open/floor/iron, @@ -136353,24 +118999,16 @@ /turf/open/floor/iron/dark/herringbone, /area/station/bitrunning/den) "wDh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/carpet, /area/station/service/lawoffice) "wDi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 4 @@ -136401,7 +119039,7 @@ /turf/open/floor/iron/white, /area/station/science) "wDr" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/cable, /obj/machinery/light/directional/east, /obj/machinery/camera{ @@ -136409,28 +119047,21 @@ dir = 6; name = "command camera" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "wDt" = ( /obj/structure/railing/corner, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/warehouse) "wDy" = ( /obj/structure/bed, /obj/item/bedsheet, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "wDB" = ( @@ -136473,17 +119104,12 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/detectives_office/private_investigators_office) "wDM" = ( /obj/machinery/disposal/bin, -/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, @@ -136507,18 +119133,12 @@ /obj/effect/turf_decal/stripes/white/corner{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "wEl" = ( /obj/structure/sign/poster/official/love_ian/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "wEn" = ( @@ -136529,26 +119149,12 @@ /obj/machinery/atmospherics/components/binary/valve/digital/on/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wEr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "wEw" = ( /obj/structure/chair{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) @@ -136567,7 +119173,6 @@ /obj/structure/chair/sofa/bench{ dir = 4 }, -/obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -136581,8 +119186,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /obj/effect/landmark/start/hangover, @@ -136659,15 +119264,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/command/secure_bunker) -"wFi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "wFl" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ @@ -136682,13 +119278,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"wFr" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "wFA" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ @@ -136698,22 +119287,14 @@ /area/station/service/hydroponics) "wFH" = ( /obj/effect/spawner/random/structure/steam_vent, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) "wFN" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) "wFW" = ( @@ -136729,7 +119310,6 @@ "wGe" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) @@ -136739,12 +119319,8 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/aft) "wGm" = ( @@ -136775,29 +119351,6 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plating/airless, /area/space/nearstation) -"wGr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wGx" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -136809,11 +119362,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "wGD" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar/atrium) +"wGE" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, -/obj/structure/chair/stool/bar/directional/north, /turf/open/floor/iron, /area/station/service/bar/atrium) "wGO" = ( @@ -136828,9 +119385,7 @@ "wGR" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -136845,13 +119400,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/side, /area/station/cargo/drone_bay) -"wHa" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "wHf" = ( /obj/structure/table, /obj/item/clothing/shoes/russian, @@ -136887,9 +119435,6 @@ /area/station/security/prison/shower) "wHw" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) "wHA" = ( @@ -136948,8 +119493,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) @@ -136965,25 +119510,11 @@ /turf/open/floor/iron, /area/station/security/prison/workout) "wIx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/security/brig) "wIE" = ( /turf/open/floor/iron, @@ -137054,13 +119585,6 @@ name = "Labor Camp Shuttle Lockdown"; req_access = list("brig") }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/chair/sofa/bench/right{ dir = 4; pixel_x = -5 @@ -137082,12 +119606,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) "wJl" = ( @@ -137144,28 +119664,14 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"wJI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/checkpoint) "wJQ" = ( /obj/structure/chair/office{ dir = 8 }, /obj/effect/landmark/start/head_of_personnel, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"wJY" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "wJZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/violet/visible{ @@ -137173,6 +119679,12 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"wKa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "wKd" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -137195,18 +119707,12 @@ /area/station/command/heads_quarters/nt_rep) "wKi" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/port) -"wKj" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wKx" = ( /obj/structure/chair/office{ dir = 1 @@ -137216,17 +119722,14 @@ /area/station/medical/psychology) "wKQ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos/office) "wLc" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "wLn" = ( /turf/open/floor/iron, @@ -137240,9 +119743,6 @@ /turf/open/floor/plating, /area/station/security/prison/workout) "wLD" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/structure/table/reinforced, /obj/effect/spawner/random/techstorage/arcade_boards, /obj/item/radio/intercom/directional/north, @@ -137255,11 +119755,6 @@ /obj/machinery/duct, /turf/open/floor/carpet/orange, /area/station/commons/dorms/room1) -"wLG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/service/theater) "wLH" = ( /obj/effect/landmark/start/botanist, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -137273,12 +119768,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -137297,12 +119788,8 @@ /area/station/hallway/primary/central) "wLS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; name = "Law Junction"; @@ -137316,12 +119803,8 @@ }, /obj/effect/spawner/random/trash/mess, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -137335,9 +119818,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "wMa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/ordnance/testlab) "wMb" = ( @@ -137365,9 +119846,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "wMj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -137415,26 +119894,12 @@ dir = 1 }, /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white, /area/station/medical/storage) -"wMw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wMx" = ( /turf/closed/wall/rust, /area/station/maintenance/port/upper) @@ -137479,7 +119944,7 @@ }, /area/station/hallway/primary/central/aft) "wMT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/theater) "wMU" = ( @@ -137510,7 +119975,6 @@ }, /area/station/science/research) "wNu" = ( -/obj/effect/turf_decal/tile/green/fourcorners, /obj/structure/table/glass, /obj/structure/microscope{ pixel_x = -16; @@ -137544,10 +120008,8 @@ /area/station/science/lab) "wNA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "wNF" = ( @@ -137561,8 +120023,8 @@ }, /area/station/hallway/secondary/entry) "wNU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/stairs, /area/station/common/wrestling/arena) @@ -137573,12 +120035,8 @@ /obj/machinery/door/firedoor, /obj/machinery/firealarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ name = "Central Upper Hallway" }, @@ -137590,12 +120048,8 @@ "wOc" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -137652,10 +120106,6 @@ /obj/item/pen{ pixel_x = 7 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment, /obj/machinery/button/polarizer{ id = "interro"; @@ -137666,14 +120116,13 @@ /area/station/security/interrogation) "wPc" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/steam_vent, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) @@ -137688,9 +120137,7 @@ network = list("ss13","medbay") }, /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "wPg" = ( @@ -137731,12 +120178,8 @@ /obj/structure/cable, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/solars/port/fore) "wPS" = ( @@ -137750,12 +120193,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "wPZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) "wQf" = ( @@ -137830,12 +120269,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/upper) @@ -137852,9 +120287,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/hydroponics/garden/abandoned) "wQH" = ( @@ -137900,27 +120333,15 @@ "wQO" = ( /obj/effect/turf_decal/bot, /obj/machinery/power/emitter, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, /turf/open/floor/iron, /area/station/engineering/storage) "wQP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, /area/station/security/brig) "wQS" = ( /obj/effect/decal/cleanable/dirt{ @@ -137942,12 +120363,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"wRb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "wRj" = ( /obj/structure/railing{ dir = 8 @@ -137963,8 +120378,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "rnd-enterance" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/general, /obj/machinery/duct, @@ -137981,7 +120396,7 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/xenobio_disposals) "wRI" = ( @@ -137989,12 +120404,8 @@ /obj/structure/flora/bush/lavendergrass, /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/chapel) "wRL" = ( @@ -138003,26 +120414,19 @@ /area/station/cargo/miningdock) "wRM" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/medium{ dir = 8 }, /area/station/hallway/secondary/command) "wRQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/primary/port) "wRR" = ( /obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/corner{ @@ -138064,9 +120468,7 @@ /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) "wSh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/bitrunning/den) "wSi" = ( @@ -138091,12 +120493,8 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "wSE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit) @@ -138142,12 +120540,8 @@ /turf/open/floor/iron/dark, /area/station/science/server) "wTh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) @@ -138162,12 +120556,8 @@ /area/station/command/heads_quarters/ce) "wTl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -138179,30 +120569,18 @@ /obj/effect/turf_decal/stripes{ dir = 1 }, -/obj/effect/turf_decal/stripes, /obj/machinery/door/poddoor/preopen{ id = "shuttleblast1"; name = "Shuttle Bay Blast Door" }, /turf/open/floor/plating, /area/station/cargo/power_station/upper) -"wTp" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/law) "wTq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/turf/open/floor/iron, /area/station/science/ordnance) "wTr" = ( /obj/machinery/camera/directional/east{ @@ -138210,9 +120588,6 @@ name = "hallway camera" }, /obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -138225,12 +120600,8 @@ name = "Public Gym" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/sign/gym/right{ pixel_y = 32 @@ -138240,9 +120611,6 @@ /area/station/commons/fitness) "wTB" = ( /obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -138254,9 +120622,7 @@ /obj/effect/turf_decal/tile/blue/half{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "wTF" = ( /turf/open/floor/wood, @@ -138299,8 +120665,8 @@ "wTW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engineering/atmos_aux_port) "wUb" = ( @@ -138377,8 +120743,8 @@ name = "Mech Bay"; req_access = list("robotics") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "wVe" = ( @@ -138390,22 +120756,17 @@ /turf/open/floor/grass, /area/station/hallway/primary/central) "wVn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "wVs" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -138416,12 +120777,8 @@ /area/station/maintenance/port/fore) "wVD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -138440,17 +120797,12 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wVS" = ( -/obj/machinery/suit_storage_unit/open, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) "wVT" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/airalarm/directional/west, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "wVW" = ( @@ -138478,31 +120830,17 @@ /turf/open/floor/plating, /area/station/maintenance/aft/upper) "wWj" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/railing{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "wWk" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "wWq" = ( @@ -138514,8 +120852,8 @@ "wWy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/storage) "wWz" = ( @@ -138530,9 +120868,7 @@ "wWB" = ( /obj/effect/turf_decal/bot_red, /obj/item/robot_suit, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "wWH" = ( @@ -138545,12 +120881,8 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark/side, /area/station/maintenance/department/engineering/engine_aft_starboard) @@ -138570,12 +120902,8 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "bridge-enterance-west" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -138611,18 +120939,6 @@ /obj/effect/landmark/start/coroner, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) -"wXq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "wXt" = ( /obj/machinery/door/window/left{ dir = 4; @@ -138640,12 +120956,8 @@ /area/station/science/ordnance/testlab) "wXw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -138654,10 +120966,7 @@ /area/station/hallway/secondary/service) "wXy" = ( /obj/machinery/computer/rdconsole, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "wXK" = ( @@ -138671,24 +120980,20 @@ /obj/effect/turf_decal/stripes{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/command/gateway) "wYd" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/security/detectives_office) "wYe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner{ dir = 4 }, @@ -138800,31 +121105,14 @@ /area/station/security/detectives_office) "wYV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/optable, /turf/open/floor/iron, /area/station/medical/surgery/theatre) -"wYY" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "wZc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/office) "wZd" = ( @@ -138847,9 +121135,6 @@ /obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "wZr" = ( @@ -138925,25 +121210,22 @@ /turf/open/floor/iron/white/telecomms, /area/station/tcommsat/server) "wZT" = ( -/obj/effect/spawner/random/structure/chair_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"wZU" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"wZW" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ dir = 4 }, +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "SecMech"; + req_access = list("security") + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"wZW" = ( /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -138974,16 +121256,15 @@ /area/station/maintenance/department/science/lower) "xas" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison/mess) "xaw" = ( @@ -139030,9 +121311,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "xaN" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/structure/decorative/shelf/crates, /turf/open/floor/iron/smooth_edge{ dir = 1 @@ -139040,12 +121318,8 @@ /area/station/cargo/miningdock) "xaU" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -139060,14 +121334,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/ordnance) -"xbf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "xbi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -139076,7 +121342,6 @@ /obj/effect/turf_decal/vg_decals/atmos/mix{ dir = 8 }, -/obj/effect/turf_decal/bot_white, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) "xbm" = ( @@ -139098,24 +121363,16 @@ /turf/open/floor/wood, /area/station/commons/dorms/vacantroom) "xbG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ dir = 4 }, /area/station/medical/medbay/lobby) "xbH" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup17"; @@ -139128,9 +121385,6 @@ id = "Cell 6"; name = "Cell 6 Locker" }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -139153,32 +121407,17 @@ }, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "xcn" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"xcy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "xcz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/service/chapel) @@ -139225,9 +121464,6 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical) "xcO" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, /obj/machinery/atmospherics/components/tank/plasma{ initialize_directions = 1 }, @@ -139240,7 +121476,7 @@ "xcP" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/test_chambers) "xcT" = ( @@ -139254,23 +121490,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"xcY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/dorms) "xda" = ( /obj/structure/closet/crate/freezer{ name = "limb storage" @@ -139296,7 +121515,7 @@ /area/station/hallway/primary/upper) "xdl" = ( /obj/machinery/photocopier, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -139347,16 +121566,11 @@ /area/station/maintenance/solars/starboard/fore) "xdL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction/flip{ dir = 2 }, -/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xdQ" = ( @@ -139399,9 +121613,7 @@ "xep" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -139412,14 +121624,6 @@ dir = 8 }, /area/station/engineering/atmos/hfr_room) -"xev" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/brig) "xey" = ( /obj/machinery/light/directional/south, /obj/item/radio/intercom/directional/south, @@ -139469,12 +121673,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/access/any/command/general, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron/dark, @@ -139508,8 +121708,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "xfj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/science/research) @@ -139617,8 +121817,8 @@ /area/station/service/cafeteria) "xgr" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/effect/landmark/start/assistant, /turf/open/floor/iron, @@ -139635,12 +121835,8 @@ "xgv" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -139648,12 +121844,6 @@ /obj/structure/fans/tiny/forcefield{ dir = 8 }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) @@ -139661,10 +121851,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -139692,19 +121880,12 @@ }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/command/minisat, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/transit_tube) "xgS" = ( /obj/machinery/computer/records/security, -/obj/effect/turf_decal/stripes{ - dir = 10 - }, /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, /obj/effect/turf_decal/stripes/blue/line{ @@ -139722,8 +121903,8 @@ /obj/machinery/newscaster/directional/west, /obj/structure/cable, /obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -139743,12 +121924,8 @@ "xhe" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -139760,9 +121937,7 @@ /area/station/commons/dorms) "xhm" = ( /obj/effect/decal/cleanable/oil/streak, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) "xhn" = ( @@ -139792,8 +121967,8 @@ /area/station/maintenance/starboard/fore) "xhw" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "xhE" = ( @@ -139806,8 +121981,8 @@ /area/station/maintenance/department/medical/central) "xhZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) @@ -139850,30 +122025,10 @@ /obj/item/storage/box/drinkingglasses, /turf/open/floor/iron, /area/station/service/bar/backroom) -"xiy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/command/bridge) -"xiA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/captain_dining) "xiB" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) @@ -139897,8 +122052,8 @@ /obj/effect/decal/cleanable/glass, /obj/item/shard, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/upper) "xiF" = ( @@ -139918,12 +122073,8 @@ name = "Cell 2"; req_access = list("security") }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron/dark/side{ dir = 8 @@ -139946,20 +122097,9 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "xjl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/medical/psychology) -"xjr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/duct, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/prison/workout) "xjt" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -139975,7 +122115,7 @@ /obj/item/wirecutters, /obj/item/wirecutters, /obj/item/wirecutters, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva/upper) "xjw" = ( @@ -140009,12 +122149,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/service/barber) "xjY" = ( @@ -140031,20 +122167,24 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Security Maintenance" - }, /obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/airlock/security{ + name = "Security Mechbay" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/maintenance/port/fore) +/area/station/security/mechbay) "xkf" = ( /obj/machinery/door/airlock/wood{ name = "Sauna" }, /obj/structure/fans/tiny, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/common/pool/sauna) "xkm" = ( @@ -140093,11 +122233,8 @@ /obj/effect/turf_decal/stripes{ dir = 8 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -140123,32 +122260,17 @@ /area/station/service/lawoffice) "xkG" = ( /obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, /obj/structure/cable/layer1, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"xkI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/upper) "xkR" = ( /obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/engine_smes) "xkU" = ( @@ -140167,8 +122289,8 @@ name = "Atmospherics Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/engineering/lesser) "xkZ" = ( @@ -140199,9 +122321,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "xlq" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /obj/structure/chair/stool/directional/west, /obj/machinery/light/small/red/dim/directional/west, /obj/structure/cable, @@ -140218,23 +122337,18 @@ /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/office/light, /turf/open/floor/iron/white, /area/station/medical/virology) "xlI" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) "xlK" = ( @@ -140262,19 +122376,15 @@ /turf/open/floor/wood, /area/station/service/bar/atrium) "xmj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/engineering_guard, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) "xml" = ( /obj/item/trash/pistachios, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/carpet, /area/station/maintenance/abandon_office) @@ -140306,7 +122416,6 @@ /turf/open/floor/plating/airless, /area/station/maintenance/fore/upper) "xmD" = ( -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -140323,12 +122432,8 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/hos) "xmO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -140361,26 +122466,11 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "xnj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/security/lockers) -"xnl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "xnp" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -140406,7 +122496,7 @@ /obj/machinery/light/small/directional/east, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "xnC" = ( @@ -140421,10 +122511,6 @@ pixel_y = 4 }, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side{ dir = 8 @@ -140435,22 +122521,19 @@ /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) "xnK" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, /mob/living/carbon/human/species/monkey/punpun, /obj/machinery/holopad, +/obj/effect/turf_decal/tile/bar/opposingcorners{ + dir = 1 + }, /turf/open/floor/iron, /area/station/service/bar) "xnM" = ( /obj/structure/railing{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -140479,12 +122562,8 @@ dir = 4 }, /obj/machinery/light/small/broken/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) "xos" = ( @@ -140495,10 +122574,8 @@ /turf/open/floor/iron, /area/station/engineering/engine_smes) "xot" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -140516,8 +122593,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -140529,9 +122606,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/barber) "xoK" = ( @@ -140570,7 +122645,6 @@ /turf/open/floor/iron/white, /area/station/science/tele_sci) "xph" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, @@ -140586,8 +122660,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "xpr" = ( @@ -140605,7 +122679,6 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/landmark/start/assistant, /turf/open/floor/carpet, /area/station/common/wrestling/lobby) "xpv" = ( @@ -140656,10 +122729,6 @@ /turf/open/floor/iron, /area/station/science/explab) "xpC" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, /obj/machinery/conveyor{ dir = 4; id = "garbage" @@ -140696,16 +122765,12 @@ /turf/open/floor/circuit/telecomms, /area/station/science/server) "xpZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/upper) "xqc" = ( @@ -140717,8 +122782,8 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/tcommsat/computer) "xqe" = ( @@ -140742,9 +122807,7 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -140754,7 +122817,7 @@ /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) "xqu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/science/genetics) @@ -140767,7 +122830,7 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "xqJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/courtroom) "xqK" = ( @@ -140780,14 +122843,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"xqR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness) "xqS" = ( /obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/line{ @@ -140796,35 +122851,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"xqY" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/openspace, -/area/station/maintenance/aft/upper) "xqZ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "xrk" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -140834,8 +122865,8 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xrl" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/structure/cable, @@ -140877,10 +122908,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) "xrJ" = ( @@ -140932,12 +122961,8 @@ }, /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -140954,12 +122979,8 @@ network = list("ss13","prison") }, /obj/effect/landmark/start/prisoner, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/safe) "xsn" = ( @@ -141038,17 +123059,7 @@ /obj/structure/sign/departments/chemistry/pharmacy/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xsT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "xsV" = ( -/obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white/smooth_half{ dir = 8 }, @@ -141091,8 +123102,8 @@ /obj/machinery/door/airlock/grunge{ name = "Funeral Hall" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/service/chapel/funeral) @@ -141138,20 +123149,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) "xtQ" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) @@ -141198,8 +123203,8 @@ icon_state = "dirt-flat-1" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, @@ -141207,8 +123212,8 @@ "xuh" = ( /obj/item/kirbyplants/random, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -141288,30 +123293,24 @@ "xuN" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/brig) "xuR" = ( /obj/structure/filingcabinet/security, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, /obj/machinery/camera/directional/east{ c_tag = "Security - Departures Starboard" }, /obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "xuV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/execution/transfer) "xuX" = ( @@ -141324,8 +123323,8 @@ /area/station/command/bridge) "xva" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hallup1"; location = "hallup40" @@ -141359,8 +123358,8 @@ /area/station/hallway/primary/central) "xvf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/bridge) @@ -141386,12 +123385,8 @@ /area/station/maintenance/starboard/fore) "xvo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/dark/side{ dir = 9 @@ -141399,8 +123394,8 @@ /area/station/security/prison/upper) "xvy" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "xvC" = ( @@ -141441,21 +123436,16 @@ /obj/structure/transit_tube/curved/flipped{ dir = 8 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "xvQ" = ( /obj/item/crowbar, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/research/abandoned) "xvR" = ( /obj/effect/turf_decal/stripes/white/corner, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "xwa" = ( /turf/open/floor/carpet, @@ -141491,19 +123481,14 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) "xwJ" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) @@ -141526,10 +123511,6 @@ /obj/structure/billboard/azik, /turf/open/space/openspace, /area/space/nearstation) -"xxa" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "xxf" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/machinery/door/poddoor/shutters/preopen{ @@ -141587,12 +123568,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) @@ -141638,16 +123615,10 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/break_room) "xxW" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -141657,17 +123628,14 @@ id = "Psychward1"; name = "Cell Door 1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) "xya" = ( /obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'; - icon_state = "floor1" - }, +/turf/open/floor/iron/shuttle/arrivals/airless, /area/space/nearstation) "xyf" = ( /obj/structure/table, @@ -141723,12 +123691,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"xzi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "xzt" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/plumbed, @@ -141756,7 +123718,6 @@ }, /area/station/hallway/secondary/exit) "xzA" = ( -/obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 }, @@ -141777,9 +123738,7 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "xzH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -141822,18 +123781,14 @@ /area/station/command/gateway) "xAl" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/research) "xAz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -141853,12 +123808,8 @@ }, /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, @@ -141905,16 +123856,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) -"xBo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xBs" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -141969,8 +123910,8 @@ /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/any/medical/cmo, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/power_station) "xBL" = ( @@ -141999,24 +123940,7 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/dorms/room3) -"xBS" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Central Upper Hallway" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "xBX" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, /obj/structure/table/reinforced, /obj/item/stock_parts/matter_bin/adv, /obj/item/stock_parts/matter_bin/adv, @@ -142074,12 +123998,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "xCo" = ( /obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) @@ -142107,15 +124027,6 @@ dir = 4 }, /area/station/hallway/secondary/exit) -"xCJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "xCP" = ( /obj/structure/chair/office{ dir = 4 @@ -142144,9 +124055,6 @@ /turf/open/floor/iron/grimy, /area/station/maintenance/starboard/fore) "xDb" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, /obj/structure/table/reinforced, /obj/item/pai_card, /obj/machinery/status_display/ai/directional/north, @@ -142161,9 +124069,7 @@ id = "hopline"; name = "Queue Shutters" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "xDl" = ( @@ -142188,9 +124094,7 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "xDq" = ( /obj/machinery/holopad, @@ -142198,33 +124102,19 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) "xDx" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/junction{ dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/brig) "xDy" = ( /obj/effect/turf_decal/siding/blue, @@ -142289,12 +124179,8 @@ }, /obj/machinery/light_switch/directional/south, /obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "xEg" = ( @@ -142337,12 +124223,8 @@ network = list("ss13","prison") }, /obj/machinery/status_display/evac/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/visit) "xEB" = ( @@ -142352,12 +124234,8 @@ /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) "xEE" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/railing/corner/end, /turf/open/floor/iron/dark/side, @@ -142369,7 +124247,6 @@ /turf/open/floor/iron/kitchen, /area/station/security/prison/mess) "xEN" = ( -/obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/freezer/fridge, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -142385,9 +124262,8 @@ "xEQ" = ( /obj/machinery/door/firedoor, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xEV" = ( @@ -142445,11 +124321,8 @@ /turf/open/floor/grass, /area/station/service/chapel) "xFG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "xFJ" = ( @@ -142466,7 +124339,7 @@ /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) "xFO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/interrogation) "xFQ" = ( @@ -142488,8 +124361,8 @@ color = "#DE3A3A" }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron, /area/station/command/heads_quarters/hos) @@ -142514,12 +124387,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) "xGq" = ( @@ -142537,12 +124406,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"xGC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/hallway/primary/port) "xGF" = ( /obj/structure/table/wood/poker, /obj/effect/decal/cleanable/dirt{ @@ -142550,21 +124413,10 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"xGI" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xGL" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/mineral/plastitanium, /area/station/science/robotics/lab) "xGO" = ( @@ -142631,8 +124483,8 @@ name = "Changing Room" }, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -142644,8 +124496,8 @@ /obj/effect/turf_decal/tile/neutral, /obj/machinery/status_display/evac/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) @@ -142658,7 +124510,6 @@ }, /area/station/hallway/primary/port) "xHN" = ( -/obj/effect/turf_decal/stripes, /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/computer/order_console/mining, /turf/open/floor/iron/dark/small, @@ -142683,9 +124534,7 @@ pixel_x = -2; pixel_y = -2 }, -/turf/open/floor/engine{ - icon_state = "darkfull" - }, +/turf/open/floor/iron/dark, /area/station/science/ordnance) "xHT" = ( /turf/closed/wall, @@ -142732,16 +124581,6 @@ /obj/structure/railing/corner, /turf/open/floor/wood, /area/station/service/cafeteria) -"xIs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "xIt" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/junction, @@ -142808,10 +124647,6 @@ }, /area/station/hallway/primary/upper) "xJi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/camera{ c_tag = "Leisure Hallway - Lower Center"; dir = 10; @@ -142844,24 +124679,10 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/research) "xJs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) -"xJt" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "xJv" = ( /obj/item/cigbutt, /obj/machinery/portable_atmospherics/scrubber, @@ -142875,7 +124696,6 @@ "xJN" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes, /obj/machinery/camera{ c_tag = "Engineering - Gravgen Airlock"; dir = 6; @@ -142894,9 +124714,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/turf/open/floor/iron/airless{ - icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' - }, +/turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) "xJY" = ( /obj/effect/turf_decal/siding/wood{ @@ -142916,13 +124734,10 @@ dir = 8 }, /obj/structure/rack/gunrack, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/brig) "xKe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -142933,12 +124748,8 @@ /area/station/maintenance/department/engineering/atmos_aux_port) "xKf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint) "xKh" = ( @@ -142950,12 +124761,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) "xKj" = ( @@ -143001,12 +124808,8 @@ /obj/machinery/door/airlock/service{ name = "Kitchen" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination, /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /obj/machinery/duct, @@ -143036,12 +124839,8 @@ /turf/open/floor/iron/white, /area/station/science) "xKP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/wood, @@ -143051,12 +124850,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "xKR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -143078,12 +124873,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "xLf" = ( @@ -143136,9 +124927,7 @@ /obj/structure/sign/painting/large/library{ pixel_y = -36 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) "xLp" = ( @@ -143178,16 +124967,11 @@ /turf/open/floor/wood, /area/station/common/pool) "xMr" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple/opposingcorners{ + dir = 1 }, /turf/open/floor/iron, /area/station/service/barber) @@ -143235,10 +125019,7 @@ "xMM" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/computer/rdservercontrol, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, +/obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) "xMP" = ( @@ -143265,12 +125046,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/upper) "xMY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) @@ -143283,12 +125060,8 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner{ dir = 8 }, @@ -143327,16 +125100,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"xNo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/upper) "xNy" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -143349,7 +125112,7 @@ /turf/open/floor/iron/pool/cobble, /area/station/maintenance/department/engineering/engine_aft_port) "xNA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "xNB" = ( @@ -143387,8 +125150,8 @@ /obj/machinery/door/airlock/freezer{ name = "Freezer" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/abandon_kitchen_upper) @@ -143416,10 +125179,8 @@ dir = 5; name = "chapel camera" }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) "xOi" = ( @@ -143460,8 +125221,8 @@ /turf/open/space/basic, /area/space/nearstation) "xOw" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -143479,8 +125240,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/office) "xOE" = ( @@ -143515,12 +125276,8 @@ /area/station/command/heads_quarters/hop) "xPb" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/ordnance) @@ -143599,7 +125356,7 @@ dir = 5 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/tcommsat/computer) "xQa" = ( @@ -143608,8 +125365,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/random/directional/east, /obj/machinery/duct, @@ -143618,18 +125375,14 @@ "xQq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/warehouse) "xQu" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -143650,9 +125403,6 @@ /turf/open/floor/wood, /area/station/hallway/primary/central) "xQR" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -143666,7 +125416,6 @@ /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) "xQY" = ( -/obj/effect/turf_decal/stripes, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -143712,14 +125461,13 @@ /area/station/commons/dorms/room5) "xRO" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xRR" = ( /obj/machinery/teleport/station, -/obj/effect/turf_decal/stripes, /obj/effect/turf_decal/stripes/blue/line, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -143848,24 +125596,17 @@ id = "Biohazard"; name = "Biohazard Containment Door" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/research) "xTr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "xTt" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -143884,21 +125625,15 @@ /area/station/ai_monitored/security/armory) "xTA" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/wood, /area/station/medical/exam_room) "xTE" = ( /obj/machinery/newscaster/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/commons/toilet/restrooms) @@ -143914,9 +125649,6 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/decal/cleanable/oil/streak, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -143967,15 +125699,6 @@ /obj/item/binoculars, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"xUD" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/wood/parquet, -/area/station/common/gaskiosk) "xUF" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/siding/thinplating_new{ @@ -143985,12 +125708,8 @@ /area/station/medical/patients_rooms) "xUL" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ dir = 1 }, @@ -144005,22 +125724,10 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/prison/mess) -"xUO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/upper) "xUR" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, @@ -144037,24 +125744,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/service/cafeteria) -"xUW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "xUX" = ( /turf/closed/wall, /area/station/maintenance/abandon_office) "xUY" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) "xUZ" = ( @@ -144077,12 +125771,8 @@ }, /obj/item/trash/energybar, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "xVo" = ( @@ -144091,15 +125781,6 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "xVt" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, /obj/structure/chair/plastic, /obj/structure/cable, /turf/open/floor/iron/dark, @@ -144150,12 +125831,8 @@ /area/station/common/laser_tag) "xVT" = ( /obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -144163,12 +125840,8 @@ /area/station/command/bridge) "xVV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -144208,16 +125881,14 @@ /area/station/maintenance/abandon_wrestle) "xWq" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) "xWt" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/duct, /turf/open/floor/iron, @@ -144266,18 +125937,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/medical/surgery/theatre) -"xWR" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/maintenance/aft/upper) "xWT" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -144293,7 +125952,6 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -144306,7 +125964,6 @@ "xXl" = ( /obj/structure/disposalpipe/segment, /obj/structure/table, -/obj/effect/turf_decal/tile/yellow/fourcorners, /obj/item/stack/cable_coil{ pixel_x = 3; pixel_y = 3 @@ -144318,12 +125975,14 @@ /obj/item/screwdriver{ pixel_y = -8 }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "xXm" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) "xXo" = ( @@ -144331,10 +125990,8 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -144481,12 +126138,8 @@ /turf/open/floor/iron, /area/station/engineering/main) "xYH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -144522,12 +126175,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -144570,14 +126219,11 @@ /turf/open/floor/iron, /area/station/cargo/miningoffice) "xZi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical) "xZo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/structure/table/reinforced, /obj/item/mmi, /obj/item/mmi, @@ -144625,23 +126271,15 @@ "xZO" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) "xZR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) @@ -144685,21 +126323,13 @@ /obj/effect/turf_decal/bot, /obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) "yal" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "yap" = ( @@ -144735,12 +126365,8 @@ dir = 9 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) "yau" = ( @@ -144834,15 +126460,13 @@ icon_state = "dirt-flat-1" }, /obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ybd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) "ybh" = ( @@ -144941,9 +126565,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, /obj/machinery/recharger, -/obj/effect/turf_decal/siding/thinplating_new/end{ - dir = 4 - }, /turf/open/floor/iron/dark, /area/station/security/checkpoint) "ybY" = ( @@ -145001,8 +126622,8 @@ /area/station/ai_monitored/command/storage/eva) "ycs" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) "ycv" = ( @@ -145010,12 +126631,8 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) "ycA" = ( @@ -145023,9 +126640,6 @@ input_dir = 1 }, /obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -145044,12 +126658,8 @@ dir = 4 }, /obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) "ycW" = ( @@ -145098,12 +126708,8 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -145111,10 +126717,6 @@ /obj/structure/frame/computer{ dir = 8 }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, /obj/item/radio/intercom/directional/east, /obj/machinery/light/broken/directional/east, /obj/effect/decal/cleanable/dirt{ @@ -145149,13 +126751,10 @@ /turf/open/floor/carpet/purple, /area/station/common/night_club) "ydD" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/light_switch/directional/south, /obj/machinery/light/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) "ydE" = ( @@ -145181,12 +126780,8 @@ "ydH" = ( /obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) "ydI" = ( @@ -145198,9 +126793,6 @@ /turf/open/misc/asteroid/airless, /area/space/nearstation) "ydK" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -145246,12 +126838,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/abandon_art_studio) "ydW" = ( @@ -145334,8 +126922,8 @@ dir = 4 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/stairs/right, /area/station/hallway/primary/central) "yeN" = ( @@ -145361,18 +126949,14 @@ icon_state = "dirt-flat-1" }, /obj/structure/trash_pile, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, /turf/open/floor/iron/dark/small, /area/station/cargo/storage) "yfw" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "yfy" = ( @@ -145396,12 +126980,12 @@ "yfF" = ( /obj/effect/turf_decal/bot_white, /obj/machinery/scanner_gate, -/obj/effect/turf_decal/loading_area/white{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/arrows/white{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "yfG" = ( @@ -145411,9 +126995,6 @@ /turf/open/floor/plating, /area/station/security/range) "yfK" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 10 - }, /turf/open/floor/plating, /area/station/hallway/primary/port) "yfR" = ( @@ -145423,24 +127004,10 @@ /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) "yfU" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/station/security/execution/transfer) "yfV" = ( /obj/structure/railing{ @@ -145463,29 +127030,16 @@ /obj/item/chair/stool/bar{ pixel_y = -8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - color = "#DE3A3A" - }, /obj/effect/decal/cleanable/vomit/old, /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/turf/open/floor/iron, +/turf/open/floor/iron/cafeteria, /area/station/maintenance/abandon_diner) "yga" = ( /obj/structure/curtain/bounty, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/stairs, /area/station/common/night_club) @@ -145503,23 +127057,18 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "ygl" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Security - Brig Starboard"; dir = 10 }, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/security/brig) "ygn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ygo" = ( @@ -145532,9 +127081,6 @@ /area/station/security/prison/garden) "ygq" = ( /obj/structure/table, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, /obj/item/storage/toolbox/electrical{ pixel_y = 12 }, @@ -145583,7 +127129,6 @@ /area/station/command/gateway) "ygI" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery/white, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "ArrivalsEntry"; name = "Free Acces Shutters" @@ -145600,7 +127145,7 @@ /turf/open/floor/iron, /area/station/maintenance/port/aft) "ygS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) "ygT" = ( @@ -145635,7 +127180,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/power_station/upper) "yhf" = ( @@ -145663,8 +127208,8 @@ /turf/open/floor/iron, /area/station/commons/fitness) "yht" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron/dark, @@ -145686,9 +127231,7 @@ /area/station/command/bridge) "yhv" = ( /obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) "yhA" = ( @@ -145722,10 +127265,7 @@ /obj/structure/chair/sofa/corp/left{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, /turf/open/floor/iron/dark, @@ -145748,9 +127288,7 @@ "yhW" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/caution/stand_clear/white, -/turf/open/floor/iron/airless{ - icon_state = "dark_large" - }, +/turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) "yhY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -145776,8 +127314,8 @@ /turf/open/floor/iron/cafeteria, /area/station/maintenance/department/medical/central) "yij" = ( -/obj/effect/turf_decal/tile/yellow, /obj/machinery/photocopier, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/dark/side{ dir = 9 }, @@ -145800,9 +127338,7 @@ "yiy" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/duct, /turf/open/floor/iron, @@ -145817,43 +127353,29 @@ pixel_y = 2 }, /obj/item/pen, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) "yiD" = ( -/obj/effect/turf_decal/tile/green/fourcorners, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) "yiE" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/power_station) "yiI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/captain_dining) "yiJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /turf/open/floor/iron/dark/corner{ dir = 8 }, @@ -145912,9 +127434,6 @@ "yiV" = ( /obj/effect/turf_decal/delivery, /obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -145935,17 +127454,20 @@ /area/station/maintenance/fore/upper) "yjD" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, -/turf/open/floor/engine{ - icon_state = "floor" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/science/ordnance) "yjE" = ( /turf/closed/wall, /area/station/maintenance/thruster_room/central) +"yjN" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "yjO" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -145981,17 +127503,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"ykv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical) "yky" = ( /obj/item/assembly/shock_kit, /obj/structure/rack, @@ -146017,9 +127528,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, /obj/structure/closet/secure_closet/brig{ id = "Cell 3"; name = "Cell 3 Locker" @@ -146063,9 +127571,6 @@ /obj/machinery/door/airlock/external/glass{ name = "Turbine Airlock" }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) @@ -146117,8 +127622,9 @@ /obj/structure/chair/office{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/interrogation) "ylw" = ( @@ -146135,9 +127641,6 @@ "ylQ" = ( /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -146147,12 +127650,8 @@ dir = 1 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) "ylY" = ( @@ -146175,9 +127674,6 @@ name = "Mix Outlet Pump" }, /obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -164096,9 +145592,9 @@ xHT hTS xHT lZm -dkW -dkW -dkW +ojX +ojX +ojX iBx ojX fZI @@ -164353,9 +145849,9 @@ xHT nXP bbz uKU -atN -atN -atN +ojX +ojX +ojX kSt ojX fZI @@ -164534,14 +146030,14 @@ cuH mSI ifq jPR -uAu +lSI xgr fIF lSI mSI cuH lrs -kEh +lUD rZO oUA peh @@ -164799,11 +146295,11 @@ pmP oIJ rkL siD -ueV +dEa oUA kcI cNU -qtR +mzP lAY eCb ivB @@ -164869,8 +146365,8 @@ oHL mqQ lxj qEt -rST -sAp +vPM +jtq tfY ojX fZI @@ -165056,7 +146552,7 @@ pGQ cDu pCR gGB -ueV +dEa rRk eCb tlr @@ -165313,7 +146809,7 @@ vQr vQr pCR rkL -ueV +dEa vdG eCb eCb @@ -165354,7 +146850,7 @@ eAV cFU knN oyX -nNF +rNY hCU nFN sCB @@ -165381,10 +146877,10 @@ uiy jNH qCN mqQ -wKj -wKj -wKj -nnz +vPM +vPM +vPM +xDN rus ojX fZI @@ -165570,7 +147066,7 @@ uyC uyC nMN aAU -ueV +dEa uVc ewE xoK @@ -165611,13 +147107,13 @@ eYl cFU pSC avX -buL +rNY lif rqn rNY sTg dTd -pha +hKt kIB aqO muU @@ -165628,7 +147124,7 @@ jMZ lls psQ aiU -coa +qDn qDn oOG szo @@ -165827,11 +147323,11 @@ uyC uyC nMN aAU -kcK +jJJ iXJ -fFy dEa -ieF +dEa +uEt bQL luT ihY @@ -165840,10 +147336,10 @@ aUf tdQ jcj pBo -gOR -goa +gZF +sQS hIV -pld +gZF sQS pBo wGR @@ -165895,9 +147391,9 @@ oxL fJf fJf pVz -oGE -oGE -oGE +fJf +fJf +fJf fjA pVz pVz @@ -166121,7 +147617,7 @@ rqa upX ufV exX -wvM +gct xoD cFU lcj @@ -166131,7 +147627,7 @@ gDF bfA dTd idW -pha +hKt kIB wBy muU @@ -166345,19 +147841,19 @@ siD hMu jJJ siD -hWY -kEh -cGi +lUD +lUD +lUD lUD pCR oib xWq xWq xWq -xqR xWq -kZh -eHg +xWq +hIV +pZJ pZJ dwx tnj @@ -166388,11 +147884,11 @@ lpe mLd gVW wPU -pha +hKt kfF mZA vZK -oYG +iFx iFx ckH prL @@ -166408,10 +147904,10 @@ oxL ufs pRk mVI -dOR +wnr wqk esc -oFD +gmr qSd oeB usR @@ -166605,7 +148101,7 @@ siD fUU nZq fWB -rBt +lUD pCR sAG sKq @@ -166647,7 +148143,7 @@ dTd hyx xYH oil -ulS +psQ fdW gXL met @@ -166883,7 +148379,7 @@ dku pXP eJY edQ -nwB +foV tyh tyh tyh @@ -166921,12 +148417,12 @@ wcz pVz tfO pRk -vkv +oeB itv ajc dgN ezC -hGe +wnr koc jfa iSC @@ -167189,7 +148685,7 @@ usR oxL pYM awQ -lDz +htQ htQ oMg dlp @@ -167355,7 +148851,7 @@ lRB krK fuK dVs -oDr +sbQ pMR uyC uyC @@ -167376,9 +148872,9 @@ wtM oZQ cRV oWc -lAw +rNy wRQ -eKO +rNy rNy cRV hgC @@ -167418,7 +148914,7 @@ oDK xKQ rii gXL -vkJ +tRC jiF qcc xKQ @@ -167574,7 +149070,7 @@ inc rUv euE hLH -aSi +chC mjE ylg frJ @@ -167593,7 +149089,7 @@ laf laf uMr rYT -pRF +rYT ctM kbK kKZ @@ -168208,7 +149704,7 @@ glt pOJ sVC vTs -eKA +buC jpx pZt uRA @@ -168425,26 +149921,26 @@ oYg loR vES pWc -cLO +xil cPK -cLO -cLO -cLO -cLO +xil +xil +xil +xil iel -cLO +xil iHj -cLO +xil qSy ylQ -cLO -cLO -cLO +xil +xil +xil rvy wTB mWt jrB -cLO +xil phI oXz feR @@ -168475,7 +149971,7 @@ oxL dFt qMb jEU -cCr +cEy xko jRz whn @@ -168646,7 +150142,7 @@ sQw lmQ nfL vmp -hvC +hdY bog rAA bgA @@ -168654,9 +150150,9 @@ gtx fKP qYv eIV -lEZ -gLh -bDq +unv +unv +cGH jEg jEg jEg @@ -168664,13 +150160,13 @@ qku qku lmV qku -bMk +qku qku iuy qku qku qku -koL +gve gve qku qku @@ -168688,13 +150184,13 @@ bTP bTP bTP wKi -eGN -dlH -dlH -dlH +fhU +fhU +fhU +fhU vxB -dlH -dlH +fhU +fhU eHi fhU bTP @@ -168878,7 +150374,7 @@ dfG sMM kKC cSK -qqC +kTw kTw dCQ dPl @@ -168909,9 +150405,9 @@ uTd bgA gtx sNd -bfa +kxO bcG -fEt +etL gSi jZP etL @@ -168919,46 +150415,46 @@ etL etL leg oke -hBH +gve rAN -cPV -cPV -lpx -cPV -cPV -cPV +kxO +kxO +hjV +kxO +kxO +kxO aNO eCK -cPV -cPV -cPV -cPV -cPV +kxO +kxO +kxO +kxO +kxO cHn uhs -cPV -cPV -bfa -bfa +kxO +kxO +kxO +kxO hjV cvn srJ ieG bvM -bfa +kxO hgM -bfa -bfa +kxO +kxO wTr -bfa +kxO bwY jYb kSS -bfa +kxO fhl hHJ rxv -bfa +kxO qYv oXz qYv @@ -169131,16 +150627,16 @@ bbm bbm bbm aXM -jhI +ctM mWp lqH gnb tcI kJs vti -hak +lJg iiE -hak +lJg lJg aEX dCQ @@ -169156,7 +150652,7 @@ unK wdW jLy iVe -gHQ +glX glX sLx axy @@ -169176,8 +150672,8 @@ ndg kdl aUy rje -hBH -ucJ +gve +edY ffH nCh wYH @@ -169221,9 +150717,9 @@ oXz feR bzM vHF -asW +dCV fmG -rUM +yfK tKM uDf tFG @@ -169368,8 +150864,8 @@ fZI mjE mjE kzx -aJI -aJI +doG +doG eTH iNB feJ @@ -169410,8 +150906,8 @@ hrl hrl hXO oWc -jrZ -nxO +rNy +rNy oZQ oZQ oZQ @@ -169434,7 +150930,7 @@ cXf qqu ctA qbj -ucJ +edY iCw irA rfP @@ -169474,13 +150970,13 @@ fTz fTz eVf gPk -dcM +iDM feR iLN yaR xwF jWL -gwj +yfK tKX uDf sNP @@ -169492,7 +150988,7 @@ tyB gwf uDf pLD -mIG +kTo exp nhQ qBc @@ -169624,7 +151120,7 @@ fZI fZI oql rGh -rRb +jHK aIF iFX smY @@ -169637,7 +151133,7 @@ wOH odg dVC iHC -vut +glU euE euE euE @@ -169667,7 +151163,7 @@ lct uvu uvu oZQ -kxs +wRQ oZQ xIV oZQ @@ -169690,8 +151186,8 @@ rJZ rJZ iWe sci -xGC -ucJ +qbj +edY iCw bUD rfP @@ -169749,7 +151245,7 @@ gwf gwf uDf pLD -mIG +kTo duq nhQ vUj @@ -169881,7 +151377,7 @@ fZI fZI oql qIZ -ccM +jHK miw sRx mIY @@ -169894,7 +151390,7 @@ ixK uqK hZI mfE -vut +glU euE euE euE @@ -169948,7 +151444,7 @@ fVX wYk ctA qbj -ucJ +edY iCw sLQ rfP @@ -170006,7 +151502,7 @@ gwf rUD uDf pLD -mIG +kTo exp dNC ofE @@ -170028,7 +151524,7 @@ jOi dPP qBS csv -hSP +hDr hDr eVv eVv @@ -170167,7 +151663,7 @@ rKn rKn rKn rKn -nTP +kbf dCQ hsZ hsZ @@ -170204,7 +151700,7 @@ aUy aUy aUy voH -xBo +qku ufk aKq aKq @@ -170245,7 +151741,7 @@ wRI tHz iEz phI -vBk +oXz tej gcU lmf @@ -170408,7 +151904,7 @@ euE hce mKJ euE -rVS +sBh mhN mhN mhN @@ -170665,7 +152161,7 @@ euE euE mKJ euE -rVS +sBh mhN jYd dQz @@ -170756,7 +152252,7 @@ wuC nUG hBP bxf -wsA +uYL iEz phI oXz @@ -170936,16 +152432,16 @@ lCn rKn war nbK -rKn -rKn -ttc -rKn -rKn -rKn -rKn +tNz +tNz +tNz +tNz +tNz +tNz +tNz aQk fbq -wZU +fbq laf fbq fbq @@ -170980,7 +152476,7 @@ qTT aKq dkP dfe -wTp +lBH lBH jtm uEi @@ -171034,7 +152530,7 @@ mIR mIR vVX fOr -iMd +kfm exp ofE grm @@ -171055,7 +152551,7 @@ bNr ani jOi hDr -hSP +hDr lHh hDr eVv @@ -171193,13 +152689,13 @@ rKn rKn plI nWK -rKn -ufv -mjK -rKn +tNz +mBw +geL +jEw rZq tUd -rKn +tNz ggF wMc mWp @@ -171291,12 +152787,12 @@ mIR mIR vVX pLD -emq +vaX jjt xqc oqU xPO -awW +nud nud xuI xxh @@ -171436,7 +152932,7 @@ euE cgu mKJ euE -rVS +sBh hZI aSZ reQ @@ -171450,13 +152946,13 @@ etj rKn xrJ ejO -rKn -ttc -rKn -rKn -kbf -kbf tNz +yjN +vpe +tUj +uut +eGr +cZT fAw fAw fAw @@ -171470,12 +152966,12 @@ oNl lEA iGF wCw -ccc +dhS vGI pPO dhS spB -uql +uQp arQ ocx aXX @@ -171489,7 +152985,7 @@ uGZ cXk rKn vUs -oyj +qku uFT aKq aKq @@ -171707,13 +153203,13 @@ rKn rKn rKn rKn -rKn -tcI -rKn -vpe -kbf -wZT tNz +mmu +tUj +vpe +wcZ +hpF +cZT bbn dqw eBG @@ -171727,7 +153223,7 @@ rtp lWz iGF kZZ -jqZ +vGI jUk uDg ozQ @@ -171746,7 +153242,7 @@ uDg uDg uDg cRg -rlD +gve jwJ kro mUP @@ -171940,9 +153436,9 @@ gBn ebG dwK mgt -tlh +iHC mhN -bcR +vUC mhN iHC xYh @@ -171964,12 +153460,12 @@ mjK kbf ttc ttc -kbf +tNz bop dTy -ttc -kbf -mjK +fYr +kxe +dyS xkc aey gTF @@ -171984,7 +153480,7 @@ wfQ hXY iGF jQu -cxe +pPO jQu uDg aJG @@ -172003,7 +153499,7 @@ jBr dJL jQu dGz -vcd +qku jwJ kro eAm @@ -172037,9 +153533,9 @@ xNW tvB waa uYL -cvi -sGN dty +sGN +cvi ckv lKd vDU @@ -172221,13 +153717,13 @@ rKn kif tPT ufv -mjK +tNz wZT -rKn -hHH +bAo +bAo bAo lHT -tNz +cZT lSs qDO uro @@ -172241,7 +153737,7 @@ laf laf swt hel -jqZ +vGI tle gxg fcP @@ -172260,7 +153756,7 @@ vus uQp pEq vRE -aAg +qku jwJ kro wrV @@ -172281,7 +153777,7 @@ oBv qlY amB qYC -gJv +mQI rWB pzF snu @@ -172467,9 +153963,9 @@ bDB hxO tMz mjE -sDz -rFt -quE +sum +cVu +sXy hGf rYT mjK @@ -172479,12 +153975,12 @@ tNz tNz cue tNz -tNz -tNz -tNz -tNz -tNz -tNz +cZT +hAz +nDO +hAz +fAw +fAw fAw bnX fAw @@ -172507,7 +154003,7 @@ cFj oZa fcP sXv -kim +tGb dsW qqZ fPr @@ -172517,7 +154013,7 @@ iYl hgY jQu dGz -vcd +qku jwJ kro boE @@ -172538,7 +154034,7 @@ gyX qlY tbS oMk -gJv +mQI pmD bhb snu @@ -172551,14 +154047,14 @@ kvW tvB iXl imm -ufD hfI -iNs +hfI +ckv bTk dnG eAB mHa -oMy +oXz feR lkU xWd @@ -172725,7 +154221,7 @@ lMR oUI mjE dsA -pnn +cVu pAF hGf rYT @@ -172737,13 +154233,13 @@ kcW cAi bVB yiK -wYY -wYY -tbW +eSi +eSi +qgJ fAw uNk pre -gAz +qDO xQR wkY fAw @@ -172764,7 +154260,7 @@ onO rQp fcP fcP -kim +tGb gvb lHb quo @@ -172774,7 +154270,7 @@ rAr vpx uDg dGz -vcd +qku jwJ kro bGM @@ -172815,7 +154311,7 @@ seh kLj vDU phI -vBk +oXz qJo eMM mEf @@ -172968,22 +154464,22 @@ iuU lzN akv qby -eoS -eoS -eFM +jvQ +qnt +jvQ iuT jvQ qnt xuV bPE -emz +aCT hef rdj srD mhN -kzp -pnn -quE +sum +cVu +sXy hGf rYT kbf @@ -173021,7 +154517,7 @@ vus scO fcP fcP -kim +tGb bJz vus vus @@ -173031,7 +154527,7 @@ ccx pgK uDg dRK -vcd +qku cST lAZ lAZ @@ -173104,7 +154600,7 @@ qBS rXP rXP uVZ -sQo +uVZ mxa rUl hDr @@ -173113,7 +154609,7 @@ bbj pLo uVZ oBa -hSP +hDr hDr xuJ hDr @@ -173234,13 +154730,13 @@ eLF fgg mhN fHM -eoK +qlC qlC mXO pKX wQP -qnB -quE +asc +sXy hGf uTp hGf @@ -173251,7 +154747,7 @@ wJB aiV ewr yiK -eeQ +sum qTW sXy fAw @@ -173285,10 +154781,10 @@ aTD uDg gIc obS -nFq +pgK uDg dGz -vcd +qku ofm lAZ tiZ @@ -173496,8 +154992,8 @@ mjE mjE mjE kts -dRY -quE +asc +sXy hGf mZP hGf @@ -173534,8 +155030,8 @@ jNN kMy vgM fcP -tFV -iGo +tGb +tGb gOI kMy vfC @@ -173545,7 +155041,7 @@ uDg nyW uDg qkm -vcd +qku jwJ fgv wrV @@ -173594,11 +155090,11 @@ vPM xBz vVX wlb -iXW +hey qsW -iXW -iXW -iXW +hey +hey +hey sWo hey ook @@ -173751,23 +155247,23 @@ aCu oUh dQI aVB -jtY -kzp -dRY +oqw +sum +asc oci euj -oZO +svX mrc -wYY -wYY +tbW +tbW ckZ -wYY -wYY +tbW +tbW qZQ nqK -kzp +sum qTW -oci +sXy tTp pfl fmC @@ -173802,7 +155298,7 @@ uEl gma pjw dGz -uoG +qku sLT fgv amb @@ -173813,7 +155309,7 @@ nRk gEu uuF aKE -cqj +ckT egd uif kty @@ -173848,17 +155344,17 @@ mqO eqS eqS eqS -xxa +vPM vVX pVA jyG -qrM +xTr xTr wkR xTr -wuY pbb -qMq +pbb +jyG oqn pLD kfm @@ -174004,14 +155500,14 @@ ilg thr lKw wbJ -tkE +qyT qyT qyT hkb crY asc -bQW -cIu +asc +asc tEl asc asc @@ -174020,7 +155516,7 @@ asc xqZ asc asc -cWq +gny rDT gny uJc @@ -174059,7 +155555,7 @@ bnr bnr rkc cKH -vcd +qku jwJ fgv nwS @@ -174072,7 +155568,7 @@ uuF nHh nHh nHh -pBq +uif kPr hfR gqp @@ -174086,15 +155582,15 @@ uuF bdW bdW hXp -mlQ -cbU -cbU -cbU +gva +gva +gva +gva cgS sYe -qcD +mJD nSk -vNv +gxY gEE gEE rcY @@ -174126,7 +155622,7 @@ oeL xmj srs vvf -ixZ +aiC jCu rtN mQU @@ -174265,22 +155761,22 @@ nyf aua mdj aVB -esH -esH +sum +sum jCZ -esH +sum nUM -esH -rJD -rJD +sum +sum +sum elg nlg ksV -rJD +sum oqw nqK -eeQ -wGr +sum +pvr sXy tTp fYK @@ -174316,7 +155812,7 @@ bnr eUb pjw jVP -vcd +qku wGx lAZ fnY @@ -174329,7 +155825,7 @@ uuF oFJ lAP imH -pBq +uif svR vku tME @@ -174536,9 +156032,9 @@ gdj lBJ lBJ gdj -kuR -wGr -nBZ +sum +pvr +sXy fAw fAw fAw @@ -174568,7 +156064,7 @@ uDg uDg qpK nxc -aNj +gma xTU nTM pjw @@ -174586,7 +156082,7 @@ uuF qbW qbW qbW -pBq +uif aaK fwc vXe @@ -174793,9 +156289,9 @@ wdo aAF rHI gdj -kzp -wGr -nBZ +sum +pvr +sXy myC vFi vFi @@ -174819,7 +156315,7 @@ xCP trQ qAW hur -ssp +uQp aGF grq uDg @@ -174843,7 +156339,7 @@ uuF mMu lAP imH -pBq +uif kMG hfR bpC @@ -174874,26 +156370,26 @@ sdU lvT iUK ylX -cSV +kTo ujB -cSV -cSV -cSV -tgB -prw -prw -prw -prw +kTo +kTo +kTo +qnR +qnR +qnR +qnR +qnR uvF -mVn -cSV +qnR +kTo ujB qnR -xCJ +hHI wEZ fik lVP -nYT +hxd iLS wCR owf @@ -174902,7 +156398,7 @@ cHc gcY spI pxT -jSf +rCC lzd amk arJ @@ -175052,7 +156548,7 @@ rqR sCR izc bAw -qEW +wnk hGf hGf hGf @@ -175066,7 +156562,7 @@ ucP viG hcf ffy -hwA +oeN bbE oeN vxD @@ -175100,10 +156596,10 @@ uuF hXi hXi hXi -pBq +uif kMG hfR -gQA +vXe sSv kMG gZm @@ -175154,7 +156650,7 @@ iji syJ ioW owf -wVS +nzi jzj fmM lBB @@ -175174,9 +156670,9 @@ bYN aJv lzd hIe -qEm uOU -sLS +uOU +uOU bgi dmu jrA @@ -175296,20 +156792,20 @@ qYP fyD csH bZh -tvG +krt rhk csH whU cxv -sRv -uxC +vGu +vGu vGu dMX yiP lBJ xuN -wGr -oci +pvr +sXy nqK lqx unA @@ -175333,7 +156829,7 @@ xJP trQ jst rOx -ssp +uQp scO tle hEI @@ -175379,7 +156875,7 @@ nQA hCi bRE fqx -bln +ego qEQ xwd nzB @@ -175431,9 +156927,9 @@ oxs hvn lzd xkR -xJt ujF -sSN +ujF +ujF lel eeo jrA @@ -175553,22 +157049,22 @@ mfw umJ csH kgk -tvG +krt mMA csH eec rhV -rak -khZ +nLC +nLC nLC bCL wIN lBJ ljh -qYw +pvr qmI lRZ -jFe +vqv pvj hGf ssK @@ -175636,7 +157132,7 @@ oOJ pUX bRE uqr -cBF +hfI ukE wzl nzB @@ -175689,7 +157185,7 @@ oxs lzd gDp gBb -sEE +tQJ tQJ bFX ulF @@ -175810,19 +157306,19 @@ uzX voW csH smA -tvG +krt jQR csH lYE veg cdY xnj -aME +bCL tvI ddx lBJ fuZ -wGr +pvr sXy nqK eQu @@ -175846,7 +157342,7 @@ trQ trQ trQ qAE -mjz +cqn bFO raF uMX @@ -175917,7 +157413,7 @@ pwR eIm uWx uqE -lpg +hHI cZx nEN nyP @@ -175939,7 +157435,7 @@ pzm ewO iGA xYB -bxc +ttV mFy pCQ nkV @@ -176174,22 +157670,22 @@ ujn nvv lzy uqE -sMU +kTo hHI osZ jGw olg dgq gAW -dmf +iGe oQI vKL yaj -dmf +iGe iGe oQI eeX -jYD +bcy bcy fGR hdE @@ -176330,13 +157826,13 @@ jIn nKm gdj thV -lAD +xnj pHS gdj ctK jDU uxA -wGr +pvr msQ hlp vxA @@ -176360,24 +157856,24 @@ ryK ryK ryK vnK -jTC +lUG tyX fDD oUd yeH lcJ -pDN -uCx -uCx -uCx -uCx +tyX +tyX +tyX +tyX +tyX kpz tyX dLI iPj -efZ -efZ -efZ +vce +vce +vce wLS gpM gpM @@ -176385,7 +157881,7 @@ gpM gpM gpM gpM -rWa +gpM gpM fMq ggl @@ -176420,9 +157916,9 @@ baQ rMr wLD sDx -ulh +fiN htq -kHW +kXm sDx twp rMr @@ -176450,7 +157946,7 @@ gWC axH tmB pzm -tWX +dXb dXb mFy fVb @@ -176654,13 +158150,13 @@ lpi gpM iuq rpn -liS +rpn fPo -aEU +elO +rpn rpn rpn rpn -ooA rpn tUS elO @@ -176668,7 +158164,7 @@ iWu tzE ejt tzE -vaZ +tzE tzE tyE uXF @@ -176710,7 +158206,7 @@ oJg sVS kgO uTy -lXD +fVb iEm xCQ xCQ @@ -176847,7 +158343,7 @@ nkY ueq vwE rTc -kwm +sKo xDx vTC bhN @@ -176941,8 +158437,8 @@ sDx eeY rMr eBZ -wra -wra +tWE +tWE uzo czR eIS @@ -177187,13 +158683,13 @@ owZ lTo puc wHI -upJ +pBp rMr xNh sDx -mAv +flR lmH -ina +kXl sDx isJ rMr @@ -177202,10 +158698,10 @@ vMj pBp uzo aFW -igG nvM nvM -cBH +nvM +wKQ wKQ mMT npj @@ -177364,7 +158860,7 @@ hVN aGj bmV blx -oci +sum nqK eXN mHF @@ -177459,7 +158955,7 @@ iCD qAu tBw gFX -mcd +nvM sLm sWO nqT @@ -177615,7 +159111,7 @@ jnd bap hVo bap -uVC +cJI tkN oSr gBr @@ -177686,7 +159182,7 @@ bJS vSB dkN hNX -gGq +fAB nZe hVH sCX @@ -177740,9 +159236,9 @@ rua nCP eTU jxk -mjr +fwE ngI -mjr +fwE xZO vMM fBH @@ -177752,7 +159248,7 @@ jbe nxi tBq kQu -qax +hlw mdF qax pTu @@ -177878,7 +159374,7 @@ hVN eFi pzl blx -sXy +sum nqK ceV oPK @@ -178134,7 +159630,7 @@ gkm gkm abJ fcw -fuv +blx coR nqK hGf @@ -178215,7 +159711,7 @@ kDx xzv ooN wHI -bmd +qAu wHI fZI ojJ @@ -178391,12 +159887,12 @@ vLE jwR ayM fcw -jkJ -oci +eOS +tbW svX ygl tbW -hqz +eeQ rsG wkP xfg @@ -178515,7 +160011,7 @@ cpf xCQ hqC xZR -fcs +fwE jMm vwi pTG @@ -178648,7 +160144,7 @@ iem faI vgD qRI -czJ +jVv jVv jVv jVv @@ -178716,7 +160212,7 @@ sKc vDA vDA vDA -nzz +vDA vDA oBI sWF @@ -178724,7 +160220,7 @@ vDA bNm wyU fYJ -oNA +fpD fpD tGu lKx @@ -178739,7 +160235,7 @@ dvB dvB xJH liN -rvG +eBZ cqk buG kYe @@ -178905,10 +160401,10 @@ krl jwR ayM cIf -esH -esH -esH -esH +sum +sum +sum +sum cFp iAj rsG @@ -178925,13 +160421,13 @@ rWQ bdf rWQ qqb -gQM +tyX ryK ryK ryK kQp -jTC -eGt +lUG +tyX nwr cnU dmC @@ -179020,8 +160516,8 @@ qvM sBt qkW sBt -xzi -wJY +dXb +dXb mFy vzC xZH @@ -179161,12 +160657,12 @@ xTz wne gkm eIM -nzt +cIf bqq xKd uGd rpA -cCP +cFp cEo hGf vdZ @@ -179253,7 +160749,7 @@ xJH fZI wHI wHI -vBj +qmP qhe vKJ eWR @@ -179281,8 +160777,8 @@ iwq jVp jVp ttV -bTA -bTA +xQu +xQu xQu bcV oZK @@ -179418,12 +160914,12 @@ aQr bMr kXe cwS -ucp +cIf oIz mMN sum dsF -cCP +cFp jUO wrN nha @@ -179497,10 +160993,10 @@ fvE dGH uwm kyD -fIt +pEc uGo cHT -muA +joN pZb wHI wHI @@ -179537,7 +161033,7 @@ sBt hPQ cDQ mFy -sOe +xQu mFy jdg aMJ @@ -179682,9 +161178,9 @@ ykW ykW rvL pbC -uja +sum dMw -vOi +ykG ucm rfX lRG @@ -179987,10 +161483,10 @@ ohH nge qIv dSV -aWA -hET +llz +lky qcm -hET +lky nKI jsX jRe @@ -180195,9 +161691,9 @@ ovE esl sRd ykW -eSV +qak cVu -eSV +qak iEG xiJ vPo @@ -180242,16 +161738,16 @@ qxg xAz bQF mzh -qIv +olk dSV nIX -nIX +nKI fsa dTP vHe jKM lme -wGD +wGE rpj wEf fRV @@ -180445,20 +161941,20 @@ aLr nbW tZD qpZ -nKY +vye mVF fWt ksn pSY ljt byV -dlX -knD +qak +qak qak wvo qak chT -eco +qak gQp qub kgl @@ -180496,7 +161992,7 @@ gpA gpA tIy dos -dTX +xAz jED nge sVk @@ -180568,7 +162064,7 @@ sqT qKA fhD gpz -iuY +ikn eWt eWt eWt @@ -180709,9 +162205,9 @@ mDz esl mUr ykW -aOm +wvo cVu -eSV +qak rcC vww vPo @@ -180765,7 +162261,7 @@ ccK jeT gMj oli -wGD +wGE kYW utK pgb @@ -180819,8 +162315,8 @@ boH aPt mro gpz -mRG -ira +pIn +pIn pIn vDR uoF @@ -181039,7 +162535,7 @@ eKB eKB uwm jvZ -xnl +pEc cwD iWN uAV @@ -181082,7 +162578,7 @@ nWi dKQ ana gpz -uvr +ikn uJz cgE tkn @@ -181222,9 +162718,9 @@ iLK ykW ykW ykW -hCC +sum vqv -pUY +sum ien pJB rXk @@ -181235,7 +162731,7 @@ hGf sfn tHq mrV -lTJ +ocl dVy mHE uZA @@ -181477,11 +162973,11 @@ bIY fbI iLK cPw -oZO -hZQ -xev -nDT -uja +rvL +sum +vqv +pbC +sum wyf abl hGf @@ -181521,7 +163017,7 @@ icG jdO gpX oaG -qQr +bZN cTZ wEw nGi @@ -181566,7 +163062,7 @@ nIZ nIZ iWN wHI -bmd +qAu tHY wst sBt @@ -181735,8 +163231,8 @@ tif iLK bUG oaq -aWq -wMw +wvo +qak qEW hGf hGf @@ -181758,7 +163254,7 @@ yad fUV aIS ofT -lPC +kUO geY tHQ mHE @@ -181992,7 +163488,7 @@ koJ iLK ukv sKo -gso +ncn aea ncn hco @@ -182002,7 +163498,7 @@ oAv whX xny iYx -xGI +udI udI cAL dVy @@ -182013,10 +163509,10 @@ gzI mDj sND glD -vAo +mqN mqN wHi -tem +qPh uZe pmr alt @@ -182040,7 +163536,7 @@ cTZ nGY nGi prV -hJa +jAZ ftj eSN aUO @@ -182069,15 +163565,15 @@ rtj fsk wkB iJV -gqC -gqC -gqC -gqC htV -mcP +htV +htV +htV +htV +jXA jXA sov -iRM +fsk qXp wHI ybS @@ -182102,7 +163598,7 @@ sCF sZd bXY xkY -jqu +mro gpz nRx jgd @@ -182546,7 +164042,7 @@ lkJ wZQ lJa kMu -brE +blB mBt gpA gpA @@ -182580,11 +164076,11 @@ vqa vqa cVz oRP -qNL -qNL +gnP +gnP qcC -qNL -qNL +gnP +gnP oRP cVz cVz @@ -182753,8 +164249,8 @@ jfR rVN lBj mHx -lAQ -gMv +mHx +mHx cLP juD mYn @@ -182875,11 +164371,11 @@ wSf vLv fkL qmT -sYR +onq isg jXB qeW -sxn +onq hZm cnV sQQ @@ -183022,7 +164518,7 @@ tMc tax aoI chV -fQh +kas qwc ltK fBz @@ -183032,7 +164528,7 @@ qzO bxx bzC lnJ -spL +xhw xhw rpJ aKh @@ -183043,7 +164539,7 @@ hQP dVy jRi jRl -slF +lZC bma afi dVy @@ -183131,7 +164627,7 @@ sdV akL vLv fZH -avO +puT mTU cuE vhR @@ -183140,8 +164636,8 @@ wlM sQQ cnV sQQ -qXu -fsu +fnb +fnb fnb xgs lmd @@ -183389,18 +164885,18 @@ wSf oCM gzG hYS -nMI -auh +onq +dbE sQQ dbE -maD +onq sQQ cnV sQQ -bJE -rft -hqe -hqe +fnb +vFr +sQQ +sQQ eeE vFr lmd @@ -183546,10 +165042,10 @@ jte lnJ jte jte -hxv +bJg mrV hxZ -gTN +aKh dVy dVy tdK @@ -183569,12 +165065,12 @@ whW xWt mjy cdM -uxH -uxH -uxH +uly +uly +uly cdM -uxH -sqD +uly +uly uoP tRc jPQ @@ -183644,8 +165140,8 @@ urM dLw wSf gkT -iEh -bia +puX +nBu qQi qQi qQi @@ -183653,13 +165149,13 @@ qQi qQi nBu xcP -qeo +puT fnb nyl xyi epH fLS -hsn +sQQ lmd sQQ sQQ @@ -183790,7 +165286,7 @@ uVj lmI lmI lmI -oPg +mHx mHx ojW udR @@ -183878,8 +165374,8 @@ kyD pEc lzF wHI -bmd -bmd +qAu +qAu tHY xJH ssj @@ -183912,11 +165408,11 @@ biL cnV sjQ qhu -kgs +qeJ sQQ wpg pET -ptR +vhR hAJ qeJ sQQ @@ -184082,7 +165578,7 @@ ikD lqT aCf hMP -eAP +hAd nYM qIW ooc @@ -184116,7 +165612,7 @@ czQ rXx xOy lPf -eWB +usq eBf pnN xPn @@ -184161,13 +165657,13 @@ gkT lez teA jiZ -gay -gay -gay -gay -gay +puX +puX +puX +puX +puX bPS -gay +puX cPg tKQ oki @@ -184283,9 +165779,9 @@ irb caC eZn xas -aoF -aoF -aoF +sSP +sSI +sSP tRe eZn caC @@ -184339,7 +165835,7 @@ pdU pdU pdU pdU -eAP +hAd nYM qIW ooc @@ -184425,12 +165921,12 @@ sQQ sQQ kfT sQQ -iKb -gCa -vpy -vpy -vpy -efp +cPg +vFr +sQQ +sQQ +sQQ +vFr lmd sQQ sQQ @@ -184541,8 +166037,8 @@ caC iRq gRe fgj -aoF -aoF +sSP +sSI uOB fdU caC @@ -184561,8 +166057,8 @@ uVj lmI lmI dUF -trK -aPA +mHx +mHx pir jxr tNa @@ -184596,7 +166092,7 @@ dcL tVI tVI pdU -eAP +hAd nYM qIW vLe @@ -184682,8 +166178,8 @@ sQQ sQQ hYG sQQ -iYo -kVY +cPg +cPg cPg lfK lmd @@ -184796,11 +166292,11 @@ fZI gOy caC yeN -aoF +sSI dtJ pMb txW -sSP +sSI sSP qvK bCQ @@ -184853,7 +166349,7 @@ mrV ugS tVI pdU -eAP +hAd nWm pdU pdU @@ -184934,7 +166430,7 @@ veU biL ygq eof -bpa +wlM sQQ sQQ kfT @@ -185067,7 +166563,7 @@ wDK wDK hZE dwO -wxi +sUe pRI fLW fLW @@ -185399,7 +166895,7 @@ psw ipg sAs aIY -rSr +oTl kPg mgM vhe @@ -185570,8 +167066,8 @@ xEM iIy ruF jLG -qSs -bHY +aUg +rFN ojS hZE aiu @@ -185626,7 +167122,7 @@ rGn pdU gEJ nYM -mqb +vpS vTA hDA adt @@ -185655,11 +167151,11 @@ pkD llc oTl dod -nSx -rSr +aIY +oTl bLW -bOm -bOm +kPg +kPg grb sdi xdQ @@ -185674,7 +167170,7 @@ phX jqg seM lrj -cYt +pEc sNz wHI wra @@ -185883,7 +167379,7 @@ pdU pdU nyj dcY -mjY +hZB bCg pqP gYo @@ -185919,7 +167415,7 @@ qpy owq ilS gsx -mSs +iBc orx rWM osS @@ -186140,13 +167636,13 @@ ekr pdU mFT nYM -mqb +vpS mKz hWs hDA kNV sWA -tRO +dyT fZg etc mTp @@ -186154,7 +167650,7 @@ dUA eFn iCf azF -uwb +xQq xQq qsD mPa @@ -186170,7 +167666,7 @@ nCZ nCZ nCZ cUZ -mUz +rNv nsv htF jDE @@ -186337,7 +167833,7 @@ fZI iDa caC fZT -pgy +wnF xqy hwT xUM @@ -186357,7 +167853,7 @@ rtH hCF lIC jYJ -cqO +kIH lkS qgb sof @@ -186393,9 +167889,9 @@ dek rtr dUW uKG -qth +mFT kws -xcy +mFT vtM sWA sWA @@ -186407,7 +167903,7 @@ aAf jUp uUA uMY -wpV +fAl eWl dIK eFn @@ -186427,10 +167923,10 @@ ipg ipg mXK gsY -rSr +oTl jWJ -pmt -oKc +sdF +mgL ktY aOT qLQ @@ -186594,12 +168090,12 @@ fZI ksM caC ucK -lgL +wnF wnF wVn hss aef -oCy +nUH jcg hZE luD @@ -186623,16 +168119,16 @@ lSv lSv sqS fsn -sHP -dEI -cVh -dEI +acS +acS +eWi +acS hfm -dEI -cVh -dEI -dEI -dEI +acS +eWi +acS +acS +acS eWi pwW blR @@ -186652,7 +168148,7 @@ dij gbC kcZ pdU -gtr +hAd wuM mGW onG @@ -186687,7 +168183,7 @@ fkA asX ilS xaN -aaO +mgL gXZ auv faG @@ -186880,7 +168376,7 @@ grD dBq jbr eid -chZ +acS jRc ixe lrG @@ -186892,7 +168388,7 @@ jxo qUF ixe qvR -lWL +rba wru eOY rGF @@ -186944,7 +168440,7 @@ oTl uSr kGC naT -oKc +mgL ktY ktY ktY @@ -187127,17 +168623,17 @@ yiy auR auR auR -bSA +vbd jBC auR -jvJ vbd -mFc +vbd +auR auR jBC rbq wyz -omR +acS vKl bAO bAO @@ -187367,15 +168863,15 @@ eAw fhV vKf tKm -eSj +mJa mJa dda fOj -kVi -kVi +kmG +kmG qgZ -kVi -kVi +kmG +kmG kmG fdu wdA @@ -187388,13 +168884,13 @@ iQi jJA kVN iQi -lXT +sof fdm kVN jJA tHo jZq -nrw +eWi hSG oAM dbb @@ -187406,13 +168902,13 @@ jxo qyr oAM aFw -lWL +rba jHd rlA imR cLX guu -ieJ +baE nuu xrl lNR @@ -187473,7 +168969,7 @@ rGN djJ leG kyD -rkO +pEc twc wHI wHI @@ -187651,16 +169147,16 @@ lSv lSv noo dyM -vGF -piA -wFi -piA -piA -piA -wFi -piA +eWi +eWi +eWi +eWi +eWi +eWi +eWi +eWi sKb -piA +eWi acS rba snh @@ -187685,7 +169181,7 @@ vpS dsK jUp jUp -hcl +jUp jUp mou jUp @@ -187881,7 +169377,7 @@ eAw tKm tKm tKm -gpy +mJa lWC raG nTK @@ -187926,7 +169422,7 @@ qgy hRu dVy fhg -tIQ +baE dzs rtr ddd @@ -188138,7 +169634,7 @@ jnr mZZ fnG lWC -gpy +mJa lWC fKw nOf @@ -188151,7 +169647,7 @@ pRs bns sUs gWf -xUO +hYo rtH nes arP @@ -188227,7 +169723,7 @@ dXR dXR dXR tol -jbW +xAg mUi vIs ktY @@ -188484,12 +169980,12 @@ gfF gfF gfF smi -jbW +xAg eQc jPu -fmx -jOt -jOt +mgL +mgL +mgL mgL oFI ouO @@ -188514,7 +170010,7 @@ xwK vaK iij cWd -wJI +xKf xKf nSl uFN @@ -188677,7 +170173,7 @@ iUB qpd vaM nes -rHc +yht qBT cLX cLX @@ -188762,7 +170258,7 @@ pEc aUW rSz xwK -rHt +cPf fkJ fbV xRH @@ -188772,7 +170268,7 @@ mPQ viX fXr iPX -hqD +xKf nDV wbe aCz @@ -188934,7 +170430,7 @@ uAI anR qTD nes -rHc +yht qBT ehw rFR @@ -189194,7 +170690,7 @@ vwF nRc yht yht -xjr +rsO kmj cgQ wIs @@ -189278,13 +170774,13 @@ djF jXG qGm yfF -wFr +fZv vVA -wFr +fZv aUX -wFr +fZv vVA -wFr +fZv yfF fZv qEY @@ -189423,7 +170919,7 @@ lSv aoU wuE ucn -hjD +nBh dzS dzS dzS @@ -189459,8 +170955,8 @@ rsO xHD ruG ibr -plq -plq +uNt +uNt uNt agB bhW @@ -189692,12 +171188,12 @@ wUP sgi sgi jGp -fcH +pWt ita qCI gzE -jRd -jRd +fYU +fYU fYU qkw xxz @@ -190050,7 +171546,7 @@ ygI xHy aqq rJo -uIj +mdA hcw tHG fkv @@ -190251,7 +171747,7 @@ qte qte lNh jZl -pal +esx lQN esx dJW @@ -190564,7 +172060,7 @@ uSK ilJ aqq rGa -oGI +kRF xqK bgw wNF @@ -191585,8 +173081,8 @@ soz qsY moZ qsY -pDm -dyb +ifS +mWW qsY soz rMe @@ -192613,7 +174109,7 @@ soz qsY moZ qsY -pDm +ifS qsY qsY fZI @@ -228837,15 +210333,15 @@ ulx ulx ulx nvJ -dhz +wgK nvJ -dhz +wgK nvJ ulx ulx ulx nvJ -dhz +wgK ott gqr ott @@ -229094,15 +210590,15 @@ ulx ulx ulx nvJ -dhz +wgK nvJ -dhz +wgK nvJ -dhz -dhz -dhz +wgK +wgK +wgK nvJ -dhz +wgK ott gqr ott @@ -229331,13 +210827,13 @@ uCa uCa jPU nvJ -vKW -krj -krj -krj -krj -krj -krj +soz +soz +soz +soz +soz +soz +soz xbi vLZ gwS @@ -229351,15 +210847,15 @@ nvJ nvJ nvJ nvJ -dhz +wgK nvJ -dhz +wgK nvJ -dhz -dhz -dhz +wgK +wgK +wgK nvJ -dhz +wgK ott gqr ott @@ -229587,12 +211083,12 @@ wjY bTs uCa krj -krj -aSB -shy +soz +soz +gLc +gLc gLc gLc -fvY xbi xbi nKd @@ -229601,35 +211097,35 @@ cov wDY lJw xbi -krj -krj -krj -krj -krj -krj -fEc soz -krj soz -krj -krj -krj -krj -krj +soz +soz +soz +soz +iZT +soz +soz +soz +soz +soz +soz +soz +soz soz pFg jLT pFg -krj -krj -krj -krj -krj -krj +soz +soz +soz +soz +soz +soz uAj dzW akU -ewi +uMO jvz mzF qyy @@ -229847,7 +211343,7 @@ gLc gLc gLc gLc -qSH +oNc gLc xbi xbi @@ -230064,7 +211560,7 @@ nvJ nvJ soz qsv -oNc +kRw hRi gLc gLc @@ -230118,7 +211614,8 @@ nwt nwt nwt gLc -qSH +oNc +gLc gLc gLc gLc @@ -230126,9 +211623,8 @@ gLc gLc gLc gLc -fvY soz -shy +gLc gLc gLc ott @@ -230143,7 +211639,7 @@ gLc uAj lfw vsm -ewi +uMO rbn nGh wpF @@ -230345,7 +211841,7 @@ brn aIe aIe aIe -pVj +uEh uEh cop vlO @@ -230381,20 +211877,20 @@ iVF iVF iVF iVF -qSH +oNc gLc gLc iZT gLc gLc -qSH +oNc ott oRT ott gLc gLc gLc -qSH +oNc gLc iVF dMs @@ -230879,7 +212375,7 @@ xla wTS oRn ilW -amU +asH kOo bVN jGA @@ -231314,12 +212810,12 @@ esE cjG dQc ulI -eiR -kNM +hrJ +jhw eqw tCt tCt -pKm +jhw aNm npP jdJ @@ -231369,8 +212865,8 @@ aNm aNm wxY fhc -bEH -bEH +iHI +iHI iHI slU fQk @@ -231576,10 +213072,10 @@ aNm aNm aNm gKy -lpV +hrJ fGA -kNM -bgo +jhw +hrJ aNm wMx ulI @@ -231628,8 +213124,8 @@ qhW qhW cXy dAB -txF -erE +aSf +aSf bOY vNd khN @@ -231871,7 +213367,7 @@ lEO lxt hZy oIe -gyh +nMo gyh jyY mqj @@ -231942,7 +213438,7 @@ vka keY tcq vsE -mKE +tfJ lHV lbA iLH @@ -232080,12 +213576,12 @@ aNm nFk uwn wMx -kxv -kNM -kNM -kNM -kNM -lHk +jhw +jhw +jhw +jhw +jhw +hrJ eYE fEC nsI @@ -232131,7 +213627,7 @@ aPq eje uFD fyr -qly +gNf ddk jLC ePn @@ -232334,7 +213830,7 @@ kwk fXE qmx aNm -kgJ +jQY jQY jQY czF @@ -232376,7 +213872,7 @@ cdB cdB xQw jVI -vaJ +jhw kTV kBa ktQ @@ -232388,7 +213884,7 @@ kmq eCV qtm cbZ -qly +mqj nIB jLC cyX @@ -232645,7 +214141,7 @@ bTH cbZ bTH elV -isu +gNf ujq jLC jpQ @@ -232656,7 +214152,7 @@ kDM fCo dmH qjs -xcY +qjs qjs xhc ngm @@ -232718,9 +214214,9 @@ uDC tpk wln sXD -mVf +gVx jmn -eRl +gVx rfn tcq tpk @@ -232968,16 +214464,16 @@ piL cct tpk lbA -mVf -fQS +gVx +gVx gAo -kZL -wRb -wRb +wnU +gVx +gVx iuD -vAf +gVx xYP -ugm +gVx hsh aXn lbA @@ -233121,9 +214617,9 @@ okY cMY soz xsa -joG -kNM -nip +jhw +jhw +jQY aNm aNm ybT @@ -233237,7 +214733,7 @@ aDV tGh tGh wnU -eRl +gVx ylY iLH iLH @@ -233361,7 +214857,7 @@ tQj btu btu exy -lmC +fqs wlt rKN soz @@ -233479,11 +214975,11 @@ rrt oTg avb piL -xqY +iol lhd nCX epx -wRb +gVx iOR pyb bJr @@ -233658,7 +215154,7 @@ dEf jQY fnc dEf -dcA +hrJ eul cXM kTV @@ -233671,7 +215167,7 @@ jhg mzj kMY fDW -kuS +htK htK wds gTo @@ -233692,15 +215188,15 @@ hgG xoC qhg xoC -gye +bcK rCV hmQ rCV -gye +bcK rCV cKb pMQ -gye +bcK rCV fjj rCV @@ -233905,8 +215401,8 @@ jYy jYy aNm xZB -kgJ -fhY +jQY +jQY qGL qGL qGL @@ -233917,7 +215413,7 @@ lXI mLk mLk cgN -rIR +cXM cmY kTV xfK @@ -234162,7 +215658,7 @@ jYy rxY aNm wMx -swE +jQY qGL qGL nSP @@ -234234,11 +215730,11 @@ psd vfk ijl ltt -bft +bdx pEL mKQ myB -kiI +bdx iHv glr uCf @@ -234381,11 +215877,11 @@ rTF rTF rTF rTF -oHn -pOE +qmx +qmx aNv -pOE -wxm +qmx +kwk rKN xCU tLM @@ -234413,7 +215909,7 @@ aNm wMx eej aNm -smU +vmv vmv vmv vmv @@ -234491,7 +215987,7 @@ bxy pPs umn qzj -fvn +vly jYX bda jYX @@ -234499,14 +215995,14 @@ bTz aBW hJR pyG -wxr +tBF cvh cvh cvh dqd cvh -btk -oJK +tfJ +tfJ nsV nQG mxp @@ -234522,7 +216018,7 @@ eXj hSm soH aDV -bMw +caB lbA lbA tcq @@ -234670,7 +216166,7 @@ jQY lCo jQY jQY -fhY +jQY aNm aNm aNm @@ -234680,9 +216176,9 @@ oIw qGL vMm jjg -mSA gIN -kfq +gIN +qrU tdy wTW qrU @@ -234750,8 +216246,8 @@ avF hJR qsz wks -kkh -baB +ixy +bTz pxK hJR hJR @@ -234763,7 +216259,7 @@ pzS pzS pzS pzS -jKJ +tfJ xgI xgI xgI @@ -235007,7 +216503,7 @@ ttN avF avF juT -vAe +rxR ecF hJR hJR @@ -235020,7 +216516,7 @@ tCf bdS fLw pzS -jKJ +tfJ mSG emg uBS @@ -235029,7 +216525,7 @@ mSG qho aDV anF -lfB +awA awA lec bqc @@ -235190,9 +216686,9 @@ ybT ybT eYE azj -eGm +dEf hXS -uiJ +kCe hHt jrA jrA @@ -235264,7 +216760,7 @@ mEi ufH dHd dur -sIr +rxR sso jOk hJR @@ -235283,10 +216779,10 @@ lQt kHP gOx xgI -hVn +qho jLp -jSL -nIP +awA +awA wXj aDV aDV @@ -235476,7 +216972,7 @@ hiO lPl jdm kfA -pdl +gQW aoo xEX tFc @@ -235521,14 +217017,14 @@ nQI dLW dHd dur -sIr +rxR sso hQd hJR uXm pzS qsI -pDo +fJL sNc tXD pzS @@ -235778,7 +217274,7 @@ hAB aDb giB wpy -wxh +xAl xPx tbm hJR @@ -235977,7 +217473,7 @@ aAw jop iGt yaI -rMC +lvS wsu pNb eJf @@ -236035,7 +217531,7 @@ jnN avF avF sBX -uRy +ixy qOt hJR hJR @@ -236067,8 +217563,8 @@ icQ bDx kZB gCk -jJT -lKi +lRV +lRV lRV kgo tcq @@ -236234,7 +217730,7 @@ aUI mNM ePv cEl -ohJ +lvS hHa iVh hEi @@ -236292,7 +217788,7 @@ avF avF dBO dlY -oYH +rxR apt jsl qci @@ -236729,10 +218225,10 @@ scc dMb rZJ iUY -xsT +whz ciB ciB -uxN +whz whz uWI knB @@ -236797,14 +218293,14 @@ dBj bLD ltt ixy -eES -jMq -jMq -cLq +ixy +rxR +rxR +rxR nTe ixy tMF -kJK +ixy cbl wcO leA @@ -236843,7 +218339,7 @@ bIQ uKq cJw caB -ojC +naj grJ cvh cvh @@ -237061,7 +218557,7 @@ bac pik bac hvK -taG +wks jYX xrL jYX @@ -237230,9 +218726,9 @@ oIL ulI ulI ulI -dXY -aWl -aWl +gsd +gsd +gsd pov isQ emO @@ -237267,8 +218763,8 @@ qUH ide quA jnk -aoM -mif +adQ +scr jmT eWG sZp @@ -237320,7 +218816,7 @@ ujk uor rFA vly -jkF +rxR kMK khx dBJ @@ -237511,7 +219007,7 @@ rZJ cpE qFa edv -tIf +dUu edv qFa cpE @@ -237577,7 +219073,7 @@ aHi uor uor xyS -xbf +rxR tHR dBJ dBJ @@ -237593,7 +219089,7 @@ iAG cYM tby omn -tby +omn fpn pyb sXD @@ -237744,7 +219240,7 @@ bER oDA kNf qYH -swE +jQY hni xsa gLc @@ -237800,7 +219296,7 @@ cRb mQo mqh aOv -vwJ +hhF xWy vhM gpu @@ -237834,7 +219330,7 @@ xej djt kOu dur -sIr +rxR tHR dBJ jFE @@ -238001,7 +219497,7 @@ fhW wJu kNf pFJ -swE +jQY duI xsa gLc @@ -238091,7 +219587,7 @@ plS evb kOu dur -sIr +rxR tHR dBJ tJS @@ -238125,7 +219621,7 @@ icQ hnZ euV icQ -xWR +moj wqf kCj euq @@ -238258,7 +219754,7 @@ fFR eLv kNf dMn -swE +jQY eFI xsa gLc @@ -238275,15 +219771,15 @@ pti rRh gFM bAL -wsB -moC +agL +qVs cYv -kuj -juz -juz -juz -gJm -juz +rpk +bnq +bnq +bnq +bnq +bnq pGt hSQ fKQ @@ -238343,12 +219839,12 @@ alE reb nTU mve -vgU +rVU fBL jRF kOu dur -sIr +rxR tHR dBJ wxw @@ -238360,7 +219856,7 @@ adx bKc pzS mGb -kIX +nBN tDH nfB xSa @@ -238515,7 +220011,7 @@ iNr cvj pyO jwi -swE +jQY ulI xQw xQw @@ -238585,7 +220081,7 @@ tsQ ijc tRz dIR -wLG +sYY qFQ sYY oDt @@ -238600,12 +220096,12 @@ tUp gme uor tpV -vgU +rVU mve uor uor ibl -rTO +ixy eoV dBJ dBJ @@ -238618,7 +220114,7 @@ bmT pzS lLq qyu -eWS +tDH adY nNZ dBm @@ -238649,7 +220145,7 @@ hOk hOk oPy dfW -mzm +cvh tpk xaz owA @@ -238772,7 +220268,7 @@ cPH pyO kNf aNm -swE +jQY bZe ulI xQw @@ -238862,7 +220358,7 @@ aqb uor jHu dlY -cLq +rxR cig wCi dBJ @@ -239025,11 +220521,11 @@ xND sdC mnI mnI -dyl +tBi tBi tBi kkf -fhY +jQY wMx ulI xQw @@ -239068,7 +220564,7 @@ lsn cGu pRa kAU -vAw +dJx mTw sZp ycn @@ -239109,7 +220605,7 @@ quF hOA olF mgJ -qmO +odu odu vLx gCg @@ -239163,7 +220659,7 @@ syY ydY hoQ tpk -mzm +cvh tpk dZv akA @@ -239299,7 +220795,7 @@ xRc dpw ukJ rWk -mFf +nWe tYJ fil gZk @@ -239312,7 +220808,7 @@ gLc gLc asd ydi -nOc +nnS jYp poi ide @@ -239383,10 +220879,10 @@ lgw sXH cby sXH -kFC sXH sXH -ueN +sXH +sXH sXH sXH aKI @@ -239424,15 +220920,15 @@ iLw cvh ldt lYg -ciu -ciu -ciu jaI -rQA -rQA -rQA -rQA -rQA +jaI +jaI +jaI +cSI +cSI +cSI +cSI +cSI cSI soz soz @@ -239586,7 +221082,7 @@ gwW qsP qsP neN -aYH +hcL mIq fAY vIA @@ -239628,7 +221124,7 @@ wVc mpe gCg hbU -mdU +eJw hbU ahz tqu @@ -239643,7 +221139,7 @@ eAS lmj dno fRM -pOF +aKI kMK eAS hJF @@ -239684,13 +221180,13 @@ iVF gLc gLc gLc -dko +jaI ojX ojX ojX gLc gLc -dUd +cSI soz soz soz @@ -239827,18 +221323,18 @@ soz gRC mdb qVs -iJm -rDs -juz -juz -juz -juz -juz +jPP +rpk +bnq +bnq +bnq +bnq +bnq dip -rDs -kuj -juz -juz +rpk +rpk +bnq +bnq rpk bnq cYv @@ -239846,11 +221342,11 @@ hdx mcT cJU cJU -odn -dpG +cJU +tPn uGf -dpG -aKY +tPn +tPn gDu fKf arc @@ -239885,7 +221381,7 @@ sdw iaT uor jcn -ovN +eJw lxF uor teL @@ -239900,7 +221396,7 @@ hJR hJR hJR uIq -pOF +aKI fQu hJR roU @@ -239922,10 +221418,10 @@ lqt miB sWX thv -cQz -cQz +bDn +bDn oKA -cQz +bDn bDn xoO qgS @@ -239941,13 +221437,13 @@ gLc gLc gLc gLc -dko +jaI gLc gLc gLc gLc gLc -dUd +cSI gLc soz soz @@ -240157,7 +221653,7 @@ dgA smw hJR nnj -pOF +aKI fyK xLf byn @@ -240183,7 +221679,7 @@ eRv tMs iHQ ult -leW +bDn vyI dSe sHy @@ -240198,13 +221694,13 @@ gLc gLc gLc gLc -dko +jaI gLc gLc gLc opP gLc -dUd +cSI gLc soz soz @@ -240325,11 +221821,11 @@ soz xRc uRR isR -fTg -fTg +vJx +vJx aUF -qFP -rtW +whz +qzm osz xXu xRc @@ -240414,7 +221910,7 @@ uJL nLy yaJ uIq -pOF +aKI etB uvi jYX @@ -240436,7 +221932,7 @@ lqt uxR wvi wHw -vkA +bSd bSd fDT mBc @@ -240455,13 +221951,13 @@ gLc gLc gLc gLc -dko +jaI gLc opP gLc opP gLc -dUd +cSI gLc soz soz @@ -240562,21 +222058,21 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz gLc gLc gLc fbb loJ -hEZ -hEZ -hEZ +qFa +qFa +qFa loJ -hEZ +qFa loJ soz xRc @@ -240617,7 +222113,7 @@ xai hCo sIz xFd -wEr +cJU aWU mDA cfl @@ -240651,7 +222147,7 @@ nrx nrx eDn viv -bby +kky ciQ mjB sXt @@ -240671,7 +222167,7 @@ uJL xwD hJR ahY -jtX +aKI fNT eOQ gVD @@ -240694,10 +222190,10 @@ kpH cWg iAk rYe -udS +bSd fDT kru -leW +bDn udG clZ rkq @@ -240712,13 +222208,13 @@ gLc gLc gLc gLc -dko +jaI gLc opP gLc opP gLc -dUd +cSI gLc soz soz @@ -240819,10 +222315,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz avR gLc @@ -240928,7 +222424,7 @@ lZX nLy hJR uIq -rIg +sXH etB vtz jYX @@ -240949,12 +222445,12 @@ uSJ wyX tAc ekI -wHa +wHw pwo -mNF +bSd fDT spq -glZ +bDn xoO icO fDT @@ -240968,14 +222464,14 @@ gLc gLc gLc gLc -lAb -izF +jaI +jaI gLc opP gLc gLc gLc -dUd +cSI gLc gLc gLc @@ -241099,7 +222595,7 @@ nmi mLZ ohv ckz -oAg +uWf nXd aZM mrZ @@ -241131,7 +222627,7 @@ njk cyR lRs gzF -wEr +cJU aWU fSN cfl @@ -241185,7 +222681,7 @@ hbA fqF hJR vVV -rIg +sXH ekQ pnk aPu @@ -241223,9 +222719,9 @@ fDT fDT gLc gLc -lAb -ciu -izF +jaI +jaI +jaI gLc gLc gLc @@ -241355,8 +222851,8 @@ rBP kyr lMo pJq -nnM -qmt +wFN +uWf tyK wFN bXx @@ -241368,7 +222864,7 @@ nBC gME djv gIe -ues +gwW gSE kgQ oKD @@ -241402,7 +222898,7 @@ mqh mqh mqh xcT -aYH +hcL jBQ rpQ rpQ @@ -241477,10 +222973,10 @@ fDT foZ vvP sOT -ciu -ciu -ciu -izF +jaI +jaI +jaI +jaI gLc gLc gLc @@ -241618,14 +223114,14 @@ dep uWf vHg lOz -rTQ +leJ uNL leJ -uOc +leJ leJ jRh wVs -idD +gwW bMx xai agT @@ -241645,7 +223141,7 @@ jYP sIz dND byO -ofc +tPn djC xTW esu @@ -241693,13 +223189,13 @@ wbV wmN hOY xfj -eQh +wgY wgY wRu whJ iBb jyE -rIg +sXH tHR pdJ rSM @@ -241731,7 +223227,7 @@ lLv euU pCC fDT -idM +sOT sGP uZC uZC @@ -241846,12 +223342,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc fin @@ -241899,30 +223395,30 @@ tGq cGC jMf jYP -saI -ftv +xcn +xcn hjd xbH fTV cJU cJU -mSo -pTn -pTn -pTn -xBS cJU -nXU +pTn +pTn +pTn +pid cJU -dpG +tPn +cJU +tPn gbM quC xva -oJf +tPn oHh pTn pTn -xNo +tPn cJU cJU cJU @@ -241930,8 +223426,8 @@ cJU cJU cJU pid -dpG -odn +tPn +cJU tPn cJU cJU @@ -241956,7 +223452,7 @@ nVz xTq qcQ bdx -wBh +sXH tHR aTW rSM @@ -241988,8 +223484,8 @@ jcw dNw dNw fDT -dNf -rxP +ldA +ldA qKW uZC gLc @@ -242103,12 +223599,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc soz @@ -242119,8 +223615,8 @@ gLc gLc gLc gLc -hEZ -hEZ +qFa +qFa rBP rBP xMM @@ -242128,7 +223624,7 @@ cAY xmO bCk fon -hLf +uWf tWu mrZ gLc @@ -242139,7 +223635,7 @@ gLc gLc gRC gIe -uea +gwW rfh xai kqL @@ -242213,9 +223709,9 @@ snK idP ydU fRM -uWT +sXH irK -ksp +tbm rSM soz gLc @@ -242241,12 +223737,12 @@ lcM bOU mya pWp -sFT +mBe tyf tyf fDT uJk -tNT +ldA rjt uZC gLc @@ -242359,9 +223855,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK nvJ nvJ nvJ @@ -242385,7 +223881,7 @@ dSm xVT jmb syx -ozj +wFN iig jiu jiu @@ -242454,7 +223950,7 @@ lDl hCo xcK mhL -vgK +aBX aBX czf tMn @@ -242470,7 +223966,7 @@ xFq xFq xFq gnw -kFC +sXH pqB fno fno @@ -242616,9 +224112,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK soz soz soz @@ -242626,12 +224122,12 @@ soz soz gLc gLc -upN +iZT soz soz gLc -dhz -dhz +wgK +wgK gLc soz rBP @@ -242702,7 +224198,7 @@ coT gST lcX ixW -enj +tQr eSO obM ctE @@ -242748,8 +224244,8 @@ rPB ttS beQ dfM -gZp -gZp +dNw +dNw gUs rJh dfF @@ -242760,7 +224256,7 @@ dNw dNw fDT pRN -tNT +ldA sEV ppC tUz @@ -242775,7 +224271,7 @@ fge fge owK cgB -wCp +sFZ dlw qBE ayy @@ -242873,10 +224369,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz soz gLc @@ -242886,10 +224382,10 @@ gLc gLc gLc gLc -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP qyf @@ -242901,7 +224397,7 @@ gjF cZC mdM jiu -gBh +hiZ wlj ckV gJh @@ -242959,8 +224455,8 @@ cfl cfl gyk gJN -xUD -pgQ +tQr +tQr tQr wgA gyk @@ -243005,19 +224501,19 @@ tKz sLJ wrJ mbV -ivd +tvg lAF jkr -iai +lAF lAF tvg ono -sFT +mBe tyf tyf fDT pEi -lGT +ldA nJy jgo tUz @@ -243025,9 +224521,9 @@ jzy dYs sny tUz -hcy -hcy -hcy +gLc +gLc +gLc qyl ohL aAo @@ -243132,8 +224628,8 @@ ulx ulx jxv uDZ -dhz -dhz +wgK +wgK soz iZT gLc @@ -243143,10 +224639,10 @@ soz soz soz soz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP cDt @@ -243166,7 +224662,7 @@ oBp efz jnR iLs -hJQ +hzH osc rON jQe @@ -243176,11 +224672,11 @@ hTF mdb qsL eFT -cDb +ihg wnt -rTg +ihg mey -rTg +ihg ihg fqc vZv @@ -243242,7 +224738,7 @@ suN sfX vlc igN -rDG +sFG iqZ mah mah @@ -243282,9 +224778,9 @@ ldA tgW pnv tUz -qsv +gLc oNc -hRi +gLc qyl xRR aAo @@ -243301,7 +224797,7 @@ qnM qLW iRC vfQ -uqQ +ksu qxY ksu nsJ @@ -243387,10 +224883,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz soz gLc @@ -243400,10 +224896,10 @@ gLc gLc gLc gLc -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz rBP qyf @@ -243539,9 +225035,9 @@ duL jFw fJJ tUz -hcy -hcy -hcy +gLc +gLc +gLc qyl ooY aAo @@ -243644,9 +225140,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK soz soz soz @@ -243654,12 +225150,12 @@ soz soz gLc gLc -upN +iZT soz soz gLc -dhz -dhz +wgK +wgK gLc soz rBP @@ -243752,7 +225248,7 @@ pHs oVP xup ugk -sLX +gTU gxG wJj kSl @@ -243776,8 +225272,8 @@ rPB ajP xep dfM -mBe -mBe +tyf +tyf jQj lRC bgt @@ -243788,7 +225284,7 @@ tyf tyf fDT qST -tNT +ldA pSp jgo tUz @@ -243801,16 +225297,16 @@ gLc gLc fge fge -evX +owK tne -fFS +iRC jSa gvt dLj hoy sFZ uAN -xUW +iRC pKp kvY evy @@ -243901,9 +225397,9 @@ ulx ulx ulx ulx -dhz -dhz -dhz +wgK +wgK +wgK nvJ nvJ nvJ @@ -243922,12 +225418,12 @@ soz rBP rBP axB -tbF +eZi teQ rXO lBg fwu -ozj +wFN uPf jiu jiu @@ -244159,12 +225655,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc soz @@ -244175,8 +225671,8 @@ gLc gLc gLc gLc -hEZ -hEZ +qFa +qFa rBP rBP puZ @@ -244184,7 +225680,7 @@ nca xmO dEJ idB -oTe +wFN maG mrZ gLc @@ -244195,8 +225691,8 @@ gLc gLc gRC gIe -uea -eIy +gwW +rfh iPE rJn sOn @@ -244251,7 +225747,7 @@ qIS yhf yhf nMW -rkr +pqp giV lPG rED @@ -244269,7 +225765,7 @@ rkh aXc gxG igE -oqK +ixy sEZ uNG rSM @@ -244416,12 +225912,12 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK +wgK +wgK soz gLc aIC @@ -244453,7 +225949,7 @@ vXQ gRC wZW gwW -iUR +xUY iPE pBT fUf @@ -244474,35 +225970,35 @@ iGa mme tPn cJU -okL cJU -dWc +cJU +cJU pTn pTn pTn -hJY -dpG -hjy -dpG -dpG -odn -dpG -dpG -mdf +pid +tPn +tPn +tPn +tPn +cJU +tPn +tPn +cJU pTn pTn pTn -ooZ -dpG -dpG -dpG -dpG -dpG -dpG +uVg +tPn +tPn +tPn +tPn +tPn +tPn ghu -dpG -dpG -vcF +tPn +tPn +tPn cJU hcL aZh @@ -244526,7 +226022,7 @@ weq wNy gxG uIq -sIr +rxR sEZ pgN rSM @@ -244549,7 +226045,7 @@ tzR gDN tyf tyf -lpP +jQj plv eUV kzI @@ -244699,18 +226195,18 @@ xmO dep vHW xoQ -jYZ +wFN pnd dsr -nas +cFq tHC cFq rez cFq pio -phM -idD -iUR +wVs +gwW +xUY iPE ydE nKV @@ -244740,11 +226236,11 @@ bcA mvK afh eTA -pEn -fAG +xTW +jWi xcn -lBE -pEn +sDG +xTW cwQ qFr bcA @@ -244765,7 +226261,7 @@ esu kXv sIz dFm -wAJ +mtF sea uHE lpC @@ -244783,7 +226279,7 @@ lsu drm gxG uIq -sIr +rxR sEZ qsf rSM @@ -244953,8 +226449,8 @@ rBP vBa lMo gzL -xiy -sVq +xvf +xvf xvf azB xGQ @@ -245211,7 +226707,7 @@ vJj sVD tVq axU -oAg +uWf tPG dkg mrZ @@ -245223,7 +226719,7 @@ duP duP gRC cVe -eVz +nnS wlW iPE teI @@ -245297,7 +226793,7 @@ pOU chb rxm aoh -sIr +rxR hDB emr rKw @@ -245445,10 +226941,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz avR gLc @@ -245521,7 +227017,7 @@ bst frF hJz tEU -ckr +vUe vUe vUe eaO @@ -245554,7 +227050,7 @@ uEk uwH kdm tXX -qoR +pJO pJO tyG nkN @@ -245702,10 +227198,10 @@ ulx ulx ulx ulx -dhz -dhz -dhz -dhz +wgK +wgK +wgK +wgK soz gLc gLc @@ -245778,7 +227274,7 @@ bst kHv lcN bWy -fGC +vUe pjH cTD pih @@ -245803,7 +227299,7 @@ oHf spO aKb xqu -apY +vEL nav diD aEY @@ -245970,10 +227466,10 @@ gLc fbb loJ loJ -hEZ -hEZ +qFa +qFa loJ -hEZ +qFa loJ soz abG @@ -245981,7 +227477,7 @@ vsp mpq dec aqV -gJb +atk xgb dec egS @@ -246034,8 +227530,8 @@ vqm xMH aIz evg -lgm -nOG +vUe +spp spp spp qBA @@ -246232,7 +227728,7 @@ fKg gLc soz loJ -hEZ +qFa abG qnj qlM @@ -246284,7 +227780,7 @@ pLR hnf wPf kAu -fSE +xpq xpq lma ctg @@ -246294,7 +227790,7 @@ nYF bjc oFo owP -iuS +wKa qxt iuS vLT @@ -246489,13 +227985,13 @@ fKg fKg gLc gLc -hEZ +qFa kaj kaj tZy dec xWE -gJb +atk bnS qsb uJv @@ -246590,8 +228086,8 @@ uBn cZE bFu tnr -iqE -olG +wTq +yjD mBC iyH nTd @@ -246746,7 +228242,7 @@ pcy fKg gLc gLc -hEZ +qFa soz abG eRC @@ -246774,7 +228270,7 @@ tSe uWC kdU gfL -rVY +vnC vnC vHK puV @@ -246782,7 +228278,7 @@ cDl uwh dun rhO -hYA +jNv jnG pbe wXn @@ -247106,7 +228602,7 @@ csY tdG jND lDr -cmu +yjD nEn srR ffo @@ -247288,7 +228784,7 @@ aXS aXS dgw gfL -fKy +vnC isF isF tBy @@ -247502,7 +228998,7 @@ syf hJH pSM pNA -okV +eiB gHz aJr aJr @@ -247616,11 +229112,11 @@ fLb pvV pvV sFE -elM +csY bRu jND jYs -cmu +yjD rpv xlU mdr @@ -247768,7 +229264,7 @@ nSh aJr oXG aJr -okV +eiB fKg fKg gLc @@ -247811,11 +229307,11 @@ oqi mzN wdj lJu -ocp idY -jan +idY +idY unX -eRF +idY idY idY xdL @@ -247823,16 +229319,16 @@ idY idY iDX tQQ -qhP -lbe -fyV +omQ +omQ +omQ gZL -jGL -uMn -qhP -kHC +omQ +uxy +omQ +omQ xEQ -oUU +uxy qtF lsM wMu @@ -248059,7 +229555,7 @@ blS nZk uvP gfL -cbq +vnC isF xRw tcL @@ -248134,7 +229630,7 @@ kHp aCA wsk evv -cmu +yjD kUp gga dEY @@ -248265,7 +229761,7 @@ eiB wSP eiB wLW -ich +wLW mrA pKq pKq @@ -248316,7 +229812,7 @@ blS nBf ngY gfL -cbq +vnC isF isF tCr @@ -248378,7 +229874,7 @@ hFR jQk nSL jHY -lZf +skC aCA hIi prQ @@ -248391,7 +229887,7 @@ fOM aCA hDu eoz -cmu +yjD hJE lrX leC @@ -248551,7 +230047,7 @@ soz kaj bsa qsb -gJb +atk qsb fXi cGW @@ -248604,7 +230100,7 @@ iuW gwk atX yca -gsn +omQ qdq ggp ayg @@ -248648,7 +230144,7 @@ aCA aCA bKE huy -cmu +yjD vFy gTW wcn @@ -248845,7 +230341,7 @@ yal xwP uUd xWL -jYB +qao fuM rYU fFE @@ -248887,7 +230383,7 @@ dRf bwO qoe leE -iyq +vYX vYX hSq kwi @@ -248905,16 +230401,16 @@ qts ohB lDr lDr -oXx +yjD hBJ -olG -olG -kuV +yjD +yjD +kba piZ -fJi -olG -olG -olG +yjD +yjD +yjD +yjD yjD aIv tTT @@ -249083,7 +230579,7 @@ sdM klB nZt gvN -fGO +nly nly mzp gTZ @@ -249102,7 +230598,7 @@ nzH xwP uUd rtZ -pgM +qao pbJ emk tVt @@ -249135,7 +230631,7 @@ aMt aMt aMt wlm -mnW +jFt xwa jul aQY @@ -249145,7 +230641,7 @@ bqL yio sGF hFR -jtN +vYX jHY jHY jHY @@ -249179,7 +230675,7 @@ hXo hXo hXo gXa -sqU +hXo hXo hXo ojM @@ -249331,11 +230827,11 @@ rmT yiI bJJ ies -exc +mkf exc hRO wlJ -mRg +geH iMq sLv nPE @@ -249402,7 +230898,7 @@ bqL bqL jHY hFR -jtN +vYX laT dLs fOk @@ -249553,7 +231049,7 @@ cGV mww hJH hJH -gjO +dTx mww mww rHG @@ -249565,7 +231061,7 @@ mSk dRQ pus dRQ -rqB +dRQ dRQ mgz hJH @@ -249616,9 +231112,9 @@ nzH xwP uUd fcb -hmC +qao cPW -vWU +qao tnz vEr pdp @@ -249632,7 +231128,7 @@ gKQ fNF tRa gBg -vQj +ved qdq xcL tFj @@ -249659,7 +231155,7 @@ mpE jsj aQY xIX -jtN +vYX pUQ pUQ pUQ @@ -249869,7 +231365,7 @@ cqK lII svy iaa -ekN +nzH xwP uUd sXo @@ -249889,7 +231385,7 @@ xzG qhl atX hTf -vQj +ved qdq pVw ogu @@ -249916,7 +231412,7 @@ jpY hBc jsj hFR -jtN +vYX pUQ gUG rId @@ -250099,7 +231595,7 @@ uhZ uhZ hIx nUl -xiA +iWw tiy oEl peD @@ -250146,11 +231642,11 @@ nmT bpj atX evr -wiP +ved ptq pVw vGH -rAL +wmh pQu aSt aXk @@ -250165,7 +231661,7 @@ kTc jGS iXR chU -mGj +pSd xOw oJJ hTY @@ -250196,11 +231692,11 @@ fjW xMP xNA pvU -hSF +sMY sMY rGl -iAO -pNj +pnK +pnK oqM cpq weZ @@ -250328,21 +231824,21 @@ fwU xqo fKg soz -xvR -xJW -xJW -xJW -xJW -xJW -xJW -xJW -cMY +soz +soz +soz +soz +soz +soz +soz +soz +soz rCS fKg fKg nss ctL -clg +dRQ qFt qIh uhZ @@ -250403,11 +231899,11 @@ atX atX atX cvB -vQj +ved qdq pVw cyz -rAL +wmh aXk aSt pQu @@ -250415,7 +231911,7 @@ wmh kVa pVw sJA -mrp +nGK mHp kfe tHA @@ -250430,14 +231926,14 @@ lUV hCI jsj vZi -jtN +vYX pUQ oSf cUY pUQ psl ukR -qcU +ukR psl gRh psl @@ -250445,7 +231941,7 @@ psl lww gDq ryB -guB +pLg oHI nqG tIM @@ -250584,8 +232080,8 @@ ikG kqU jfV soz -xvR -fDB +soz +soz eXk asL asL @@ -250593,8 +232089,8 @@ eXk eXk asL asL -okY -cMY +soz +soz soz lyw tzm @@ -250646,7 +232142,7 @@ rlt lXy uhD ljx -mXo +ebF mvo qWK vTH @@ -250655,7 +232151,7 @@ fta jLv qux kGx -dyW +hUg vOB wrc vOB @@ -250672,7 +232168,7 @@ gyd gyd pVw quO -mrp +nGK mHp kfe kfe @@ -250687,7 +232183,7 @@ aJt jsj aQY aBK -jtN +vYX pUQ pUQ pUQ @@ -250702,7 +232198,7 @@ sbR sbR sHo gVE -guB +pLg sKv nqG txg @@ -250841,7 +232337,7 @@ lTQ xHU jfV soz -ohj +soz gLc asL eXk @@ -250851,7 +232347,7 @@ asL eXk eXk gLc -gTp +soz soz lyw avP @@ -250903,33 +232399,33 @@ dtD ckQ uhD vxk -hLp +kPK pZl bVT aHV hiP -ifs +bDr eau ewI eDi hUg ksJ -lvW +tvL cMK fJF -vQj +cnk fVn oLt mbt mbt -sqh +uCR tcp uCR elE iiq pqX vNe -mrp +nGK dPQ tvL tvL @@ -250944,7 +232440,7 @@ xOl pDr jHY vZi -jtN +vYX pUQ wEG rId @@ -250959,7 +232455,7 @@ qcb psl khb pLg -oZX +pLg wUK nqG elb @@ -251097,8 +232593,8 @@ eKo mPL xqo xqo -xvR -fDB +soz +soz gLc gLc gLc @@ -251108,8 +232604,8 @@ gLc gLc gLc gLc -okY -cMY +soz +soz fKg fKg yjr @@ -251157,7 +232653,7 @@ lCH vzh vzh vzh -cQI +rlt uhD mmL abk @@ -251177,19 +232673,19 @@ bqx iac cnk tsh -cnk -cnk -cnk +ved +ved +ved dTH -cnk +ved owS tVH -pTz -pTz +vJa +vJa key -pTz -pTz -pTz +vJa +vJa +vJa vJa eyN eyN @@ -251197,7 +232693,7 @@ kYB fJK eBW qWU -dSo +ctk ctk boA foT @@ -251354,7 +232850,7 @@ gmU bgx xqo soz -ohj +soz eXk eXk asL @@ -251366,7 +232862,7 @@ asL asL eXk eXk -gTp +soz soz fKg eiB @@ -251417,18 +232913,18 @@ qir rHV uhD she -rIi +kPK gVw bVT -aQU -qOD -wrP +aHV +hiP +bDr iIk sUV eDi hUg rXC -qTB +qCh iNy uTQ gJd @@ -251437,7 +232933,7 @@ oOt alq alq ajB -tcp +msV wlY tZV vTN @@ -251611,7 +233107,7 @@ kDP xqo xqo xqo -fDB +soz asL eXk eXk @@ -251623,7 +233119,7 @@ asL asL asL eXk -gTp +soz soz fKg mgz @@ -251683,7 +233179,7 @@ vHM oiL svg riX -eeP +hUg rNG wrc uzm @@ -251721,7 +233217,7 @@ pUQ pUQ pUQ psl -mko +qwm ukR psl mLX @@ -251858,10 +233354,10 @@ lyK lyK lyK spD -skU -skU -skU -vHu +hNu +hNu +hNu +lNk jfV eXf ogD @@ -251880,7 +233376,7 @@ ojX ojX ojX ojX -gTp +soz soz fKg vTd @@ -252125,7 +233621,7 @@ xhm xqo xqo xqo -vVt +soz eXk asL asL @@ -252137,7 +233633,7 @@ eXk eXk asL asL -gTp +soz soz fKg uks @@ -252197,7 +233693,7 @@ vqq lNi nNB fem -bOV +hTD hTD iOb gzR @@ -252213,7 +233709,7 @@ orB jVz ior pxd -iye +mUH mUH eGS dhI @@ -252229,7 +233725,7 @@ dHA tyV djW rlK -ssS +hFJ xxW jBZ dhT @@ -252382,7 +233878,7 @@ cUJ xcb xqo soz -ohj +soz asL eXk eXk @@ -252394,7 +233890,7 @@ asL eXk eXk asL -gTp +soz soz fKg dRQ @@ -252452,7 +233948,7 @@ oQY puL oQY pFi -bOV +hTD glz gVu fmw @@ -252639,8 +234135,8 @@ ofy gYl xqo xqo -wEk -vVt +soz +soz gLc gLc gLc @@ -252650,8 +234146,8 @@ gLc gLc gLc gLc -vKW -aSB +soz +soz fKg fKg pus @@ -252716,7 +234212,7 @@ wdc vpY uzK cLN -wXq +ved juW bAc xTA @@ -252893,11 +234389,11 @@ hxE ygY ygY eVS -meF +gSQ gOl jfV soz -ohj +soz gLc uig eXk @@ -252907,7 +234403,7 @@ asL eXk eXk gLc -gTp +soz soz lyw neJ @@ -252947,7 +234443,7 @@ mtR nEr pWn mQc -goc +wie wie rki xhE @@ -252973,7 +234469,7 @@ rbs rbs rbs cLN -tZH +owS qWR bkM jaZ @@ -252981,23 +234477,23 @@ feb kMb tRS oVJ -gov -ces +dbM +dbM fNj -ces -bZv +dbM +dbM lXQ sdE aXW bcQ dpS -pqv +jhU psu kME mWm xZi jhU -pqv +jhU aDi lUf uBf @@ -253006,10 +234502,10 @@ mlH aYj cob cLR -bVw +kPf kPf qzz -pMg +gyV gyV rjO jHG @@ -253150,12 +234646,12 @@ rts hNu jfV xdH -cup +gSQ gSQ jfV soz -wEk -vVt +soz +soz eXk asL asL @@ -253163,8 +234659,8 @@ eXk eXk eXk asL -vKW -aSB +soz +soz soz lyw ctL @@ -253230,7 +234726,7 @@ rZu lKQ biN cLN -tZH +owS mHp jcB qfm @@ -253247,7 +234743,7 @@ xCf eeW sEy bcQ -xIs +kPf sbR psl kKQ @@ -253260,7 +234756,7 @@ uHQ qHh gtJ sbR -ykv +aYj gUp iOG ydH @@ -253271,7 +234767,7 @@ mFi bkA rCA tEA -pgG +qzi qzi tiN gAJ @@ -253412,15 +234908,15 @@ bWZ xqo fKg soz -wEk -krj -krj -krj -krj -krj -krj -krj -aSB +soz +soz +soz +soz +soz +soz +soz +soz +soz soz fKg fKg @@ -253487,7 +234983,7 @@ lKN sik pLa cLN -tZH +owS mHp ajI jwF @@ -253666,7 +235162,7 @@ lNk sjs hJH jUj -wig +sxp fKg fKg fKg @@ -253695,7 +235191,7 @@ sZu tEr uhZ uhZ -dXz +pIs ikp wMd ncV @@ -253744,7 +235240,7 @@ qWG ezo wVW pKZ -fBc +owS mHp bkM bkM @@ -253761,7 +235257,7 @@ bcQ bcQ bcQ bcQ -xIs +kPf sbR sbR qRS @@ -253801,7 +235297,7 @@ oYm oYm qCE otv -vmN +mSe fwj aWh fwj @@ -253923,9 +235419,9 @@ lNk isY mww wAe -hjE +cVS pFA -mnV +rUd tnm tnm hfN @@ -253938,7 +235434,7 @@ tnm bPe hJH eKf -vqV +rHT esg ugo mww @@ -254001,7 +235497,7 @@ rAE ezp svt cLN -sxK +owS xRO kQo uzV @@ -254058,7 +235554,7 @@ lzq kHt doH mSe -syD +mSe mMz mMz idd @@ -254182,7 +235678,7 @@ hJH ngp mww hJH -ogl +ugo wqE jxl xSZ @@ -254197,7 +235693,7 @@ hJH mww sDg hJH -sgF +rHT rIB hJH bLs @@ -254258,7 +235754,7 @@ rbs cEN cEN cLN -vQj +ved mHp dTD kAp @@ -254275,10 +235771,10 @@ hFX cFK nrV xBK -tMK +kPf fOk eDm -qcU +ukR wkF uHQ gRD @@ -254452,11 +235948,11 @@ xUX pay pay eiB -ogl +ugo hJH sKe nao -llP +rHT cKJ rHT wfp @@ -254515,7 +236011,7 @@ dMV tAd cEN cLN -vQj +ved mHp dTD dTD @@ -254993,11 +236489,11 @@ gLc xbB jBN pPl -goc +wie mQc mmN qSJ -olz +mQc sLF qWg eDF @@ -255211,7 +236707,7 @@ qIh mww jPq lBC -xkI +cVS nyw fzx oWE @@ -255293,17 +236789,17 @@ eDq cjz fOk psl -vhW +psu pbi kzb -wdX -wdX +vTD +vTD wbr -wdX +vTD nlO sbR sbR -xIs +kPf sbR kgc dbA @@ -255478,8 +236974,8 @@ tnm tnm klX skz -xkI -tKO +cVS +ugo dhZ jUW qrm @@ -255557,7 +237053,7 @@ dNT dul kwa epX -nig +vTD qgV dAr rCh @@ -255800,7 +237296,7 @@ rbs kYP cmP oPH -lSr +cEu aBi cmP amG @@ -256278,7 +237774,7 @@ nvJ nvJ soz qsv -oNc +kRw hRi gLc gLc @@ -256314,7 +237810,7 @@ ben wMb tuO qQA -koW +cEu eSa soz pxb @@ -256813,18 +238309,18 @@ cJv bkQ bec hFk -poo +jDy iwV biz -pqw +cEu sxF blr kIp egB lLg -srh +vlQ soi -srh +vlQ hpu vlQ mPG diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 04f34649852..188d6cf2b4b 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -346,6 +346,11 @@ /obj/item/flashlight/flare/candle, /turf/open/floor/carpet/orange, /area/station/service/chapel/office) +"adE" = ( +/obj/structure/secure_safe/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "adL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/tank, @@ -1600,9 +1605,9 @@ dir = 8 }, /obj/machinery/atmospherics/components/unary/outlet_injector/on{ - volume_rate = 200; dir = 8; - initialize_directions = 8 + initialize_directions = 8; + volume_rate = 200 }, /turf/open/floor/engine, /area/station/science/cytology) @@ -3259,6 +3264,9 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"aRU" = ( +/turf/closed/wall, +/area/station/security/mechbay) "aRX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7558,14 +7566,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) -"bSJ" = ( -/obj/structure/rack, -/obj/item/storage/secure/safe/directional/east, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/spawner/random/armory/bulletproof_armor, -/obj/effect/spawner/random/armory/bulletproof_helmet, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "bSR" = ( /obj/structure/closet/crate/freezer, /obj/effect/spawner/random/medical/memeorgans, @@ -13011,15 +13011,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, /obj/machinery/duct, /turf/open/floor/catwalk_floor, -/area/station/maintenance/floor4/port) +/area/station/security/mechbay) "dqB" = ( /obj/item/clothing/mask/breath{ pixel_x = -4 @@ -18416,13 +18410,8 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/aft) "eNj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/pod/light, -/area/station/maintenance/floor4/port) +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "eNk" = ( /obj/machinery/door/firedoor/heavy, /obj/effect/turf_decal/stripes/line{ @@ -19317,6 +19306,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron, /area/station/cargo/lobby) +"fbT" = ( +/obj/structure/rack, +/obj/structure/secure_safe/directional/east, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/spawner/random/armory/bulletproof_armor, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "fbV" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -20470,6 +20467,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/hydroponics) +"ftt" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/spawner/random/engineering/tool{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "ftu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -23358,12 +23370,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/hallway/floor3/aft) -"ghQ" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/carpet, -/area/station/commons/vacant_room/office) "ghZ" = ( /obj/structure/table, /obj/item/inspector{ @@ -26036,8 +26042,6 @@ /area/station/medical/treatment_center) "gSd" = ( /obj/effect/baseturf_helper/reinforced_plating/ceiling, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/engine_access, /turf/open/floor/engine, /area/station/engineering/supermatter) "gSj" = ( @@ -28165,6 +28169,14 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/fore) +"hvb" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/obj/effect/turf_decal/tile/red/anticorner, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "hvc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28188,7 +28200,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/command/minisat, /obj/effect/mapping_helpers/airlock/access/any/command/general, @@ -29729,10 +29740,11 @@ /obj/machinery/door/airlock/hatch{ name = "MiniSat Access" }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) "hQl" = ( @@ -34766,8 +34778,8 @@ /obj/structure/table/glass, /obj/item/radio/intercom/directional/south, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/medkit/regular, /turf/open/floor/iron/white, @@ -35048,6 +35060,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor2/starboard) +"jlK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jlS" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -35539,6 +35562,10 @@ dir = 1 }, /area/station/security/brig) +"jsL" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "jsP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -35638,6 +35665,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/plating, /area/station/engineering/supermatter) +"jun" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "juq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38218,6 +38253,19 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) +"kcw" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "kcy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42052,16 +42100,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) -"kZi" = ( -/obj/structure/rack, -/obj/item/storage/secure/briefcase, -/obj/item/restraints/handcuffs, -/obj/machinery/light/small/directional/south, -/obj/machinery/camera/directional/east{ - c_tag = "Detective's Backroom" - }, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "kZl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -42961,7 +42999,12 @@ /obj/machinery/computer/department_orders/security{ dir = 8 }, -/obj/item/radio/intercom/directional/south, +/obj/item/radio/intercom/directional/east, +/obj/machinery/button/door/directional/south{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, /turf/open/floor/iron, /area/station/security/office) "lkB" = ( @@ -43415,8 +43458,8 @@ "lqD" = ( /obj/structure/table, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/box/donkpockets{ pixel_x = 6 @@ -44376,6 +44419,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "lFa" = ( @@ -44999,8 +45043,12 @@ }, /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance/testlab) "lNA" = ( /obj/effect/turf_decal/trimline/green/warning{ dir = 8 @@ -47940,6 +47988,13 @@ dir = 4 }, /area/station/hallway/secondary/exit/departure_lounge) +"myp" = ( +/obj/effect/turf_decal/tile/red/anticorner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "myr" = ( /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) @@ -52868,6 +52923,11 @@ dir = 4 }, /area/station/hallway/floor3/aft) +"nIU" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "nJb" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 1; @@ -53605,6 +53665,23 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) +"nUl" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/clothing/glasses/sunglasses, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/lawoffice) "nUp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54080,7 +54157,6 @@ "oad" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/portable_atmospherics/pump, -/obj/machinery/portable_atmospherics/pump, /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) "oar" = ( @@ -54300,6 +54376,13 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"odH" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "odJ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -57063,6 +57146,15 @@ dir = 8 }, /area/station/security/brig) +"oQu" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "oQv" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/machinery/light/directional/west, @@ -57353,11 +57445,6 @@ /obj/structure/cable/multilayer/connected, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"oTF" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "oTG" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box{ @@ -57978,6 +58065,11 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port/fore) +"pdN" = ( +/obj/structure/secure_safe/caps_spare/directional/south, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "pdO" = ( /obj/effect/turf_decal/siding/wood/end{ dir = 4 @@ -59233,7 +59325,6 @@ /turf/open/floor/iron/dark/corner, /area/station/commons/storage/primary) "pvO" = ( -/obj/item/kirbyplants/organic/plant10, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, @@ -60146,8 +60237,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, +/obj/machinery/door/airlock/hatch{ + name = "Maintenance Bulkhead" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/catwalk_floor, -/area/station/maintenance/floor4/port) +/area/station/security/mechbay) "pIS" = ( /obj/machinery/requests_console/directional/east{ department = "Captain's Desk"; @@ -60892,8 +60987,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance/testlab) "pSV" = ( /obj/machinery/griddle, /turf/open/floor/iron/kitchen, @@ -64056,6 +64155,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port/fore) +"qIP" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/carpet, +/area/station/commons/vacant_room/office) "qIT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64891,7 +64996,8 @@ /obj/machinery/door/airlock/hatch{ name = "MiniSat Access" }, -/obj/effect/mapping_helpers/airlock/access/any/science/robotics, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) "qVv" = ( @@ -66899,23 +67005,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) -"rxd" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/clothing/glasses/sunglasses, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/lawoffice) "rxe" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair{ @@ -69024,9 +69113,6 @@ "scn" = ( /obj/machinery/netpod, /obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/machinery/airalarm/directional/east, /turf/open/floor/catwalk_floor/iron_dark, /area/station/bitrunning/den) "sct" = ( @@ -72352,11 +72438,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/apartment2) -"sXl" = ( -/obj/item/storage/secure/safe/caps_spare/directional/south, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "sXp" = ( /obj/structure/rack, /obj/item/radio/off{ @@ -73290,6 +73371,10 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/pod/dark, /area/station/maintenance/floor1/starboard/aft) +"tjB" = ( +/obj/structure/secure_safe/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "tjC" = ( /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/dark/textured, @@ -73478,16 +73563,18 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/fore) "tlx" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/brig, /obj/structure/cable, -/obj/machinery/door/airlock/hatch{ - name = "Maintenance Access" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/floor4/port) +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) "tlJ" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/space/openspace, @@ -74655,11 +74742,6 @@ /obj/effect/mob_spawn/corpse/human/charredskeleton, /turf/open/floor/iron, /area/station/maintenance/floor4/starboard) -"tBe" = ( -/obj/structure/table, -/obj/item/storage/secure/briefcase, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "tBh" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -76123,6 +76205,16 @@ /obj/structure/cable, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) +"tVx" = ( +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/restraints/handcuffs, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/east{ + c_tag = "Detective's Backroom" + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "tVz" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/north, @@ -76777,6 +76869,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/kirbyplants/organic/plant10, /turf/open/floor/iron/dark, /area/station/security/office) "ufL" = ( @@ -79141,9 +79234,9 @@ /area/station/maintenance/floor2/port/aft) "uLB" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ - volume_rate = 200; dir = 8; - initialize_directions = 8 + initialize_directions = 8; + volume_rate = 200 }, /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2{ dir = 8 @@ -82177,10 +82270,6 @@ /obj/machinery/duct, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain/private) -"vyv" = ( -/obj/item/storage/secure/safe/directional/south, -/turf/open/floor/mineral/plastitanium, -/area/station/maintenance/floor2/starboard/aft) "vyz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -83530,6 +83619,10 @@ /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/plating, /area/station/maintenance/floor3/port/fore) +"vRF" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "vRO" = ( /turf/open/openspace, /area/station/hallway/floor4/aft) @@ -92218,10 +92311,6 @@ }, /turf/open/misc/beach/sand, /area/station/hallway/floor2/fore) -"yaY" = ( -/obj/item/storage/secure/safe/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "yba" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -92702,6 +92791,10 @@ "yhZ" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/service/library/printer) +"yij" = ( +/obj/structure/secure_safe/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/station/maintenance/floor2/starboard/aft) "yil" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -138330,7 +138423,7 @@ oqA wlP klY klY -klY +jlK nHv cAf klY @@ -202051,7 +202144,7 @@ mPw sQa spr aOa -vyv +yij spr pxw edO @@ -263758,7 +263851,7 @@ oRz pfC nqr lRY -ghQ +qIP kux joL tmq @@ -307959,7 +308052,7 @@ rrX shu hwM ukK -sXl +pdN uIx oad uxW @@ -313072,7 +313165,7 @@ mSG mSG doC mSG -mSG +sJm sJm sJm nPE @@ -313363,7 +313456,7 @@ uqc rZV pld gLb -tBe +nIU wvq uWl gIl @@ -315122,7 +315215,7 @@ ucA ucA ucA ucA -lYx +sJm lNx koC oOA @@ -315417,7 +315510,7 @@ cSF aEm oAe mxO -kZi +tVx mau eae mGT @@ -315673,7 +315766,7 @@ iUT nyL xSQ dzE -oTF +adE mau mau mau @@ -317740,10 +317833,10 @@ lnl uYM eOy cgv -vEa -jbV -jbV -jbV +eNj +ftt +eNj +eNj eNj fPD jbV @@ -317999,7 +318092,7 @@ mbx rVS tlx dqs -dqs +jun dqs pIP hOs @@ -318254,11 +318347,11 @@ mBg dPf rDw pse -vEa -fXs -fXs -fXs -fXs +oQu +odH +jsL +myp +eNj jjh fXs fXs @@ -318511,11 +318604,11 @@ fNA ebz vuQ lku -vEa -owb -owb -owb -fXs +eNj +kcw +hvb +vRF +eNj mgx kHx fXs @@ -318738,7 +318831,7 @@ tlZ oaU nPE qPv -yaY +tjB wqP iNA obK @@ -318768,11 +318861,11 @@ fNA ufI dnU dnU -fXs -vEa -vEa -owb -fXs +aRU +eNj +eNj +eNj +eNj xGh vPu fXs @@ -322619,7 +322712,7 @@ dPH vuf jjA gSD -bSJ +fbT iaO gMo jOc @@ -324909,7 +325002,7 @@ hre shW ofD vxy -rxd +nUl oWC rbR ciU diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index 706a9c71528..6d159c3afc7 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -2144,10 +2144,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 }, -/obj/machinery/button/door/directional/south{ - id = "genetics_shutters"; - name = "Genetics Shutters" - }, /obj/item/storage/box/monkeycubes{ pixel_x = 6; pixel_y = 9 @@ -7164,7 +7160,7 @@ /turf/closed/wall, /area/station/maintenance/port/greater) "chg" = ( -/obj/item/storage/secure/safe/caps_spare{ +/obj/structure/secure_safe/caps_spare{ pixel_x = -24 }, /obj/structure/table/reinforced/rglass, @@ -8361,7 +8357,7 @@ "cAH" = ( /obj/structure/bed/double, /obj/item/bedsheet/centcom/double, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/machinery/newscaster/directional/south, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) @@ -13312,7 +13308,7 @@ /turf/open/floor/iron/white, /area/station/science/explab) "dTw" = ( -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/structure/table/wood/fancy/purple, /obj/item/folder/syndicate{ desc = "A folder stamped \"Top Secret - Property of Nanotrasen.\""; @@ -16605,7 +16601,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/machinery/firealarm/directional/east, /obj/structure/bed/dogbed{ anchored = 1; name = "Markus's bed" @@ -17126,7 +17121,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/item/storage/secure/safe/directional/south, +/obj/structure/secure_safe/directional/south, /obj/structure/extinguisher_cabinet/directional/south{ pixel_x = 16 }, @@ -22712,7 +22707,7 @@ /area/station/security/detectives_office) "gDz" = ( /obj/structure/table/reinforced/rglass, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/radio/headset/headset_com{ pixel_x = -16 }, @@ -24341,6 +24336,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, /area/station/engineering/supermatter) "haq" = ( @@ -25797,7 +25793,7 @@ "hwG" = ( /obj/structure/bed/double, /obj/item/bedsheet/cmo/double, -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "hwL" = ( @@ -27228,7 +27224,7 @@ }, /area/station/hallway/primary/aft) "hRn" = ( -/obj/item/storage/secure/safe/directional/west, +/obj/structure/secure_safe/directional/west, /obj/structure/dresser, /obj/item/toy/figure/ce{ pixel_y = 14 @@ -29483,7 +29479,7 @@ pixel_x = -5 }, /obj/structure/table/wood, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/item/lighter{ color = "#d4af37"; desc = "Cap's Lucky Lighter. Given to him by NT staff for being the most capable person to secure the disk."; @@ -31278,7 +31274,7 @@ /obj/effect/turf_decal/tile/dark_red/half{ dir = 4 }, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/armory/bulletproof_armor, /turf/open/floor/engine, @@ -33525,6 +33521,10 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) "jCA" = ( @@ -34478,10 +34478,14 @@ /obj/effect/turf_decal/trimline/dark_red/filled/line{ dir = 4 }, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/smooth_edge{ dir = 8 }, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "jOG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -41624,7 +41628,7 @@ /area/station/commons/storage/primary) "lKw" = ( /obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_y = 4 }, /obj/item/taperecorder{ @@ -47444,7 +47448,7 @@ /obj/item/megaphone{ name = "The Judge's Megaphone" }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/wood/large, /area/station/security/courtroom) @@ -47554,7 +47558,7 @@ c_tag = "Bridge - Head of Personnel's Office"; name = "command camera" }, -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/effect/landmark/start/head_of_personnel, /obj/machinery/button/door/directional/east{ id = "hopdoor"; @@ -51429,7 +51433,7 @@ "ovo" = ( /obj/structure/closet/secure_closet/nanotrasen_consultant/station, /obj/item/clothing/accessory/medal/gold/ordom, -/obj/item/storage/secure/briefcase/white, +/obj/item/storage/briefcase/secure/white, /obj/item/clothing/gloves/combat/naval, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ @@ -53420,7 +53424,7 @@ /turf/closed/wall, /area/station/cargo/miningdock) "oXL" = ( -/obj/item/storage/secure/safe/directional/east, +/obj/structure/secure_safe/directional/east, /obj/structure/dresser, /obj/item/toy/figure/captain{ pixel_y = 12 @@ -62875,7 +62879,7 @@ pixel_x = -3; pixel_y = 2 }, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 2; pixel_y = -2 }, @@ -68743,7 +68747,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/item/storage/secure/safe/hos{ +/obj/structure/secure_safe/hos{ pixel_x = 32 }, /obj/effect/landmark/start/head_of_security, @@ -78680,7 +78684,7 @@ "vOd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/grenade/smokebomb, /obj/effect/turf_decal/siding/wood/end{ dir = 8 @@ -79758,7 +79762,7 @@ /turf/closed/wall, /area/station/commons/fitness/recreation/entertainment) "wcq" = ( -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 1; pixel_y = 4 }, @@ -80157,6 +80161,10 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter) "wjk" = ( @@ -82830,7 +82838,7 @@ dir = 10 }, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = 5; pixel_y = 5 }, diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 5e96a1d0076..b4a4e5b71fd 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -2425,6 +2425,7 @@ "SN" = ( /obj/structure/table/reinforced, /obj/machinery/light/directional/south, +/obj/item/bitrunning_debug, /turf/open/floor/iron, /area/station/bitrunning/den) "Td" = ( @@ -3108,12 +3109,12 @@ aa aa aa aa -uI -uI -uI -uI -uI -uI +aa +aa +aa +aa +aa +aa aa aa aa @@ -3201,10 +3202,10 @@ aa aa aa uI -hU -hU -jR -Oq +uI +uI +uI +uI uI aa aa diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 3e7621f0287..7698a0f8dea 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -183,6 +183,17 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) +"aR" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv, +/obj/structure/secure_safe{ + pixel_x = 32; + pixel_y = 24 + }, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "aS" = ( /obj/item/kirbyplants/organic/plant22, /obj/machinery/power/apc/auto_name/directional/south, @@ -249,6 +260,28 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/centcom/central_command_areas/fore) +"bf" = ( +/obj/structure/closet/secure_closet/freezer/meat/open, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/bear, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/meat/slab/xeno, +/obj/item/food/spaghetti/boiledspaghetti, +/obj/item/food/spaghetti/boiledspaghetti, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/rawcutlet, +/obj/item/food/meat/rawcutlet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/tdome/observation) "bg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -421,18 +454,6 @@ /obj/effect/light_emitter/thunderdome, /turf/open/floor/iron, /area/centcom/tdome/arena) -"cb" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "cd" = ( /obj/structure/sink/directional/east, /obj/structure/mirror/directional/west, @@ -1386,17 +1407,6 @@ }, /turf/open/floor/iron/white, /area/centcom/tdome/observation) -"gA" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/courtroom) "gC" = ( /obj/machinery/door/window/brigdoor{ base_state = "rightsecure"; @@ -3231,19 +3241,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supply) -"oV" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/lockbox/medal, -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "oW" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -3359,6 +3356,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) +"pA" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "pB" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -3645,6 +3648,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/ert) +"qH" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/courtroom) "qI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -6501,6 +6514,16 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"De" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/tdome/administration) "Dg" = ( /obj/machinery/light/floor, /turf/open/floor/iron/white, @@ -6998,6 +7021,19 @@ /obj/effect/light_emitter/thunderdome, /turf/closed/indestructible/fakeglass, /area/centcom/tdome/observation) +"Gc" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/lockbox/medal, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "Gf" = ( /obj/machinery/firealarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -7291,6 +7327,18 @@ /obj/structure/closet/secure_closet/quartermaster, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supply) +"HX" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "HY" = ( /obj/machinery/photocopier, /obj/machinery/button/door/indestructible{ @@ -7529,12 +7577,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"JW" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "Kd" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -8028,6 +8070,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/central_command_areas/prison) +"MB" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "MC" = ( /obj/structure/flora/grass/jungle/b, /obj/effect/decal/cleanable/garbage{ @@ -9272,16 +9324,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/two) -"Sg" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/tdome/administration) "Sh" = ( /obj/structure/table/reinforced, /obj/item/mod/control/pre_equipped/corporate{ @@ -9337,28 +9379,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/armory) -"St" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/bear, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/goliath, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/meat/slab/xeno, -/obj/item/food/spaghetti/boiledspaghetti, -/obj/item/food/spaghetti/boiledspaghetti, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/rawcutlet, -/obj/item/food/meat/rawcutlet, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/tdome/observation) "Su" = ( /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod) @@ -9490,16 +9510,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"Tg" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "Tj" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/cup/glass/bottle/whiskey{ @@ -9724,17 +9734,6 @@ }, /turf/open/floor/wood, /area/centcom/central_command_areas/admin) -"Ui" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/wooden_tv, -/obj/item/storage/secure/safe{ - pixel_x = 32; - pixel_y = 24 - }, -/obj/machinery/status_display/ai/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "Ul" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -10182,16 +10181,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/tdome/administration) -"Wp" = ( -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/courtroom) "Ws" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/yellow/corner{ @@ -10694,6 +10683,17 @@ }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) +"YR" = ( +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/structure/table/wood, +/obj/structure/noticeboard/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/courtroom) "YT" = ( /obj/structure/table/wood, /obj/structure/plaque/static_plaque/thunderdome{ @@ -47385,7 +47385,7 @@ wv mD yL WN -cb +HX Bu tb aV @@ -47625,7 +47625,7 @@ aa aa On oo -Tg +MB Bl Wl Qb @@ -48670,7 +48670,7 @@ wB yr RH RH -JW +pA eE rB RH @@ -49684,7 +49684,7 @@ yO To nk Gf -oV +Gc On JO Vz @@ -50708,7 +50708,7 @@ mH nm TO On -Ui +aR JC py oB @@ -52541,7 +52541,7 @@ gE FZ kv QC -St +bf eI ch ck @@ -55388,7 +55388,7 @@ uE Xn Sz Sz -Sg +De Wn ga uf @@ -59705,7 +59705,7 @@ rw qh ps ps -Wp +qH Hv qz qy @@ -63290,7 +63290,7 @@ aa aa aa Hv -Wp +qH xX QX pc @@ -63302,7 +63302,7 @@ dp gC ps Ha -gA +YR bC Hv cg diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm index 658ed7e840d..67bdf4f43e9 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_1.dmm @@ -277,7 +277,7 @@ M M "} (11,1,1) = {" -w +a w w s @@ -292,7 +292,7 @@ a a "} (12,1,1) = {" -w +a w w s @@ -307,7 +307,7 @@ a a "} (13,1,1) = {" -w +a w w s @@ -322,7 +322,7 @@ a a "} (14,1,1) = {" -w +a w w s @@ -337,7 +337,7 @@ a a "} (15,1,1) = {" -w +a w w s diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm index ee5e2a4a694..ed00e590e9d 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_2.dmm @@ -256,7 +256,7 @@ R R "} (11,1,1) = {" -T +a T t j @@ -271,7 +271,7 @@ a a "} (12,1,1) = {" -T +a T t d @@ -286,7 +286,7 @@ a a "} (13,1,1) = {" -T +a T t s @@ -301,7 +301,7 @@ a a "} (14,1,1) = {" -T +a T t N @@ -316,7 +316,7 @@ a a "} (15,1,1) = {" -T +a T t I diff --git a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm index 21be0b689bd..6f7e4019e12 100644 --- a/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/arrivalsecupper_3.dmm @@ -56,6 +56,16 @@ /obj/item/stack/ore/glass, /turf/open/misc/asteroid/dug, /area/station/asteroid) +"x" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Security Maintenance Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/eva) +"y" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/eva) "E" = ( /turf/open/misc/asteroid, /area/station/asteroid) @@ -276,7 +286,7 @@ N N "} (11,1,1) = {" -t +y t L t @@ -291,7 +301,7 @@ a a "} (12,1,1) = {" -t +y r k t @@ -306,7 +316,7 @@ a a "} (13,1,1) = {" -t +y d d t @@ -321,7 +331,7 @@ a a "} (14,1,1) = {" -t +x e e K @@ -336,7 +346,7 @@ a a "} (15,1,1) = {" -t +y Y e t diff --git a/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm b/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm index 1451e2d90e0..c709ff93285 100644 --- a/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/secbarupper_attachment_a_1.dmm @@ -27,11 +27,11 @@ "n" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/secure/briefcase{ +/obj/item/storage/briefcase/secure{ pixel_x = -2; pixel_y = 6 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /turf/open/floor/iron/smooth, /area/station/maintenance/department/security) "o" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 8ffdf89bfba..8b19e237ac4 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -3302,6 +3302,10 @@ /obj/structure/sign/warning/no_smoking, /turf/closed/wall, /area/station/engineering/atmos) +"asT" = ( +/obj/machinery/air_sensor/engine_chamber, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "asY" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -3731,13 +3735,6 @@ }, /turf/open/floor/iron/white, /area/station/science/lower) -"awY" = ( -/obj/item/storage/secure/safe/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/commons/vacant_room/commissary) "axe" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/neutral/filled/corner, @@ -4064,6 +4061,8 @@ /area/station/commons/vacant_room) "aBK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) "aBL" = ( @@ -4226,14 +4225,14 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit) "aCM" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "aCR" = ( @@ -5658,6 +5657,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) +"aOW" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "aPe" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Library Maintenance Hatch" @@ -6468,7 +6471,7 @@ /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor, /area/station/medical/virology) "bfa" = ( /obj/effect/turf_decal/trimline/red/filled/line, @@ -6632,6 +6635,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"biB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) "biS" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -7256,6 +7264,13 @@ /obj/structure/cable, /turf/open/space/basic, /area/station/solars/starboard/fore) +"bwu" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "bwz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -7896,6 +7911,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"bIz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "bIC" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -9214,7 +9237,7 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor, /area/station/medical/virology) "cdr" = ( /obj/effect/turf_decal/trimline/red/filled/line{ @@ -10263,6 +10286,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"cyb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "cye" = ( /obj/structure/chair/stool/bar/directional/west, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -10613,16 +10644,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) -"cDX" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/command/bridge) "cDZ" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/freezer, @@ -11121,6 +11142,16 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"cMY" = ( +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/bridge) "cNc" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -13037,7 +13068,12 @@ /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/turf/closed/wall, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "dvc" = ( /obj/effect/decal/cleanable/dirt, @@ -13460,20 +13496,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/storage) -"dDN" = ( -/obj/structure/rack, -/obj/item/storage/briefcase{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/security/courtroom) "dEc" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -13588,6 +13610,18 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"dFN" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/mechbay) "dFP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -14621,6 +14655,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"dXH" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/cargo/sorting) "dXM" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 5 @@ -15200,16 +15238,6 @@ "ekB" = ( /turf/closed/wall, /area/station/service/janitor) -"ekE" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/storage/lockbox/medal, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "ekL" = ( /obj/machinery/conveyor{ dir = 1; @@ -15662,6 +15690,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"evc" = ( +/obj/structure/displaycase/captain{ + pixel_y = 5 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/secure_safe/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "evd" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -16714,6 +16750,14 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"eQO" = ( +/obj/structure/closet{ + name = "Evidence Closet 1" + }, +/obj/structure/secure_safe/directional/east, +/obj/effect/spawner/random/contraband/cannabis, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "eQR" = ( /obj/structure/railing/corner{ dir = 8 @@ -18477,6 +18521,15 @@ /obj/effect/turf_decal/trimline/purple/filled/corner, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"fyA" = ( +/obj/structure/table/reinforced, +/obj/structure/secure_safe/caps_spare/directional/east, +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/item/stock_parts/cell/high, +/turf/open/floor/iron, +/area/station/command/bridge) "fyF" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19159,6 +19212,15 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) +"fLY" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating, +/area/station/security/mechbay) "fMm" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -20623,7 +20685,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 }, -/obj/machinery/firealarm/directional/north, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit) @@ -23906,6 +23967,13 @@ /obj/machinery/light/floor, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) +"hCO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "hDj" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Testing Room" @@ -24112,14 +24180,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"hGG" = ( -/obj/structure/closet/secure_closet/hos, -/obj/item/storage/secure/safe/hos{ - pixel_x = 35 - }, -/obj/structure/sign/poster/official/space_cops/directional/north, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "hGI" = ( /obj/structure/railing/corner{ dir = 1 @@ -24268,11 +24328,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/tram/right) -"hKL" = ( -/obj/item/storage/secure/safe/directional/east, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "hKM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/structure/cable/layer1, @@ -24712,6 +24767,7 @@ /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) "hRK" = ( @@ -24925,6 +24981,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"hWu" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/courtroom) "hWI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25426,6 +25496,13 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"ifI" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "ifN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26088,6 +26165,12 @@ }, /turf/open/misc/asteroid, /area/station/asteroid) +"itH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "itN" = ( /obj/effect/turf_decal/stripes/white/corner{ dir = 1 @@ -27660,6 +27743,15 @@ /obj/structure/cable, /turf/open/openspace, /area/station/solars/starboard/fore) +"iXr" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "iXx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /obj/structure/lattice, @@ -28812,6 +28904,13 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"jqE" = ( +/obj/structure/secure_safe/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) "jqK" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -29176,6 +29275,13 @@ }, /turf/open/floor/plating, /area/station/medical/storage) +"jwV" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) "jwX" = ( /obj/structure/railing{ dir = 1 @@ -29937,6 +30043,10 @@ id = "cargoupperbelt" }, /obj/structure/plasticflaps, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plating, /area/station/cargo/sorting) "jKg" = ( @@ -30480,6 +30590,17 @@ "jWs" = ( /turf/closed/wall/r_wall, /area/station/security/execution/transfer) +"jWy" = ( +/obj/machinery/button/door/directional/east{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "jXc" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 8 @@ -30916,15 +31037,6 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/monastery) -"kcb" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/briefcase{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "kcm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -31018,6 +31130,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"kcV" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil{ + amount = 15; + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "kcZ" = ( /obj/item/kirbyplants/random, /turf/open/floor/carpet, @@ -31153,6 +31276,13 @@ /obj/machinery/light/dim/directional/west, /turf/open/floor/iron, /area/station/science/lower) +"kft" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/brig) "kfD" = ( /obj/effect/turf_decal/sand, /obj/machinery/door/airlock/external{ @@ -31934,8 +32064,8 @@ dir = 6 }, /obj/item/storage/box/donkpockets/donkpocketberry{ - pixel_y = 10; - pixel_x = -6 + pixel_x = -6; + pixel_y = 10 }, /turf/open/floor/iron, /area/station/engineering/break_room) @@ -32761,6 +32891,15 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"kIA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/stack/rods/two, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "kIE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -32865,6 +33004,18 @@ }, /turf/open/floor/iron/white, /area/station/science/explab) +"kKw" = ( +/obj/structure/table, +/obj/item/storage/fancy/cigarettes{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/station/security/office) "kKB" = ( /obj/machinery/door/airlock{ name = "Law Office" @@ -33250,6 +33401,7 @@ /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) "kRL" = ( @@ -34683,9 +34835,9 @@ "lqu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -35331,8 +35483,12 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, /turf/open/floor/iron/white, -/area/station/science/ordnance/freezerchamber) +/area/station/science/ordnance) "lBP" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -36369,7 +36525,8 @@ /obj/structure/disposalpipe/sorting/wrap/flip{ dir = 1 }, -/turf/closed/wall, +/obj/structure/falsewall, +/turf/open/floor/plating, /area/station/cargo/sorting) "lTc" = ( /obj/effect/turf_decal/stripes/line, @@ -37105,6 +37262,12 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"mez" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "meA" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -38699,10 +38862,12 @@ /turf/open/floor/iron/checker, /area/station/commons/lounge) "mJQ" = ( -/obj/structure/closet/secure_closet/brig, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) "mKe" = ( @@ -39107,12 +39272,6 @@ /obj/item/extinguisher, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"mTX" = ( -/obj/structure/closet/secure_closet/hop, -/obj/structure/sign/clock/directional/west, -/obj/item/storage/secure/safe/directional/north, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hop) "mUd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ dir = 1 @@ -40573,15 +40732,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"nug" = ( -/obj/structure/table/reinforced, -/obj/item/storage/secure/safe/caps_spare/directional/east, -/obj/machinery/cell_charger{ - pixel_y = 4 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/command/bridge) "nuj" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -41794,6 +41944,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/tram/left) +"nQF" = ( +/obj/structure/closet/secure_closet/hos, +/obj/structure/secure_safe/hos{ + pixel_x = 35 + }, +/obj/structure/sign/poster/official/space_cops/directional/north, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "nQG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -44568,6 +44726,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"oXx" = ( +/obj/structure/table/glass, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "oXz" = ( /obj/machinery/iv_drip, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -45441,9 +45606,9 @@ "pob" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /obj/machinery/door/firedoor, /turf/open/floor/plating, @@ -47436,6 +47601,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) +"pWO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) "pWP" = ( /obj/structure/railing{ dir = 8 @@ -48058,8 +48229,8 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = -6 + pixel_x = -6; + pixel_y = 6 }, /obj/item/storage/box/bodybags{ pixel_x = 3; @@ -48450,6 +48621,12 @@ }, /turf/open/floor/iron, /area/station/science/explab) +"qnC" = ( +/obj/structure/closet/secure_closet/hop, +/obj/structure/sign/clock/directional/west, +/obj/structure/secure_safe/directional/north, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hop) "qnL" = ( /obj/machinery/light/directional/east, /turf/open/floor/noslip/tram, @@ -49185,12 +49362,17 @@ "qCG" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, -/obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/trimline/yellow/arrow_ccw, /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 1 }, /obj/structure/cable/layer1, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "qCJ" = ( @@ -50333,6 +50515,27 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"qXK" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/stock_parts/cell/crap/empty{ + pixel_y = -2; + pixel_x = -2 + }, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "qXS" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -50736,6 +50939,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"rdN" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "rdO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/closed/wall/r_wall, @@ -52250,10 +52460,9 @@ }, /obj/effect/turf_decal/trimline/yellow/arrow_cw, /obj/structure/cable/layer1, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/machinery/firealarm/directional/south, /turf/open/floor/engine, -/area/station/engineering/supermatter) +/area/station/engineering/supermatter/room) "rJE" = ( /obj/machinery/door/airlock/medical/glass{ name = "Medical Freezer" @@ -54418,6 +54627,17 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"sub" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + name = "Security Mech Garage Door Controls"; + id = "secmechbay"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/brig) "sud" = ( /obj/structure/table, /obj/item/food/cakeslice/birthday, @@ -54667,6 +54887,11 @@ "syv" = ( /turf/closed/wall/r_wall, /area/station/security/checkpoint/science) +"syB" = ( +/obj/structure/secure_safe/directional/east, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "syE" = ( /obj/machinery/rnd/production/circuit_imprinter/department/science, /obj/effect/turf_decal/stripes/line{ @@ -56996,14 +57221,6 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/space/nearstation) -"tqS" = ( -/obj/structure/displaycase/captain{ - pixel_y = 5 - }, -/obj/machinery/status_display/evac/directional/north, -/obj/item/storage/secure/safe/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "tqT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel{ @@ -57875,13 +58092,8 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "tFk" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/security/brig) +/turf/closed/wall/r_wall, +/area/station/security/mechbay) "tFB" = ( /obj/structure/cable, /turf/open/floor/iron/white, @@ -58949,14 +59161,6 @@ /obj/item/paper/monitorkey, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"tYg" = ( -/obj/structure/closet{ - name = "Evidence Closet 1" - }, -/obj/item/storage/secure/safe/directional/east, -/obj/effect/spawner/random/contraband/cannabis, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "tYp" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) @@ -61059,6 +61263,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"uGn" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) "uGo" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -61577,6 +61788,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"uNJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "uNK" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -61740,18 +61958,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/engine_smes) -"uQq" = ( -/obj/structure/table, -/obj/item/storage/fancy/cigarettes{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/iron, -/area/station/security/office) "uQS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61947,13 +62153,6 @@ "uVo" = ( /turf/open/floor/carpet, /area/station/command/meeting_room) -"uVB" = ( -/obj/structure/table/glass, -/obj/item/storage/secure/briefcase, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "uVO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -62044,8 +62243,12 @@ /obj/machinery/airalarm/directional/south, /obj/effect/mapping_helpers/airalarm/mixingchamber_access, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, /turf/open/floor/iron/white, -/area/station/science/ordnance/burnchamber) +/area/station/science/ordnance) "uXv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -62067,6 +62270,12 @@ }, /turf/open/space/openspace, /area/station/solars/port) +"uXN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/cargo/sorting) "uYa" = ( /obj/machinery/skill_station, /turf/open/floor/iron/grimy, @@ -63612,6 +63821,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"vyO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/security/mechbay) "vyR" = ( /obj/effect/spawner/random/structure/closet_private, /turf/open/floor/carpet, @@ -65922,8 +66135,8 @@ /area/station/hallway/secondary/service) "wrJ" = ( /obj/structure/railing{ - layer = 3.1; - dir = 4 + dir = 4; + layer = 3.1 }, /obj/machinery/netpod, /turf/open/floor/catwalk_floor/iron_dark, @@ -67650,9 +67863,9 @@ pixel_x = -7 }, /obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters"; - dir = 4 + name = "Pharmacy Shutters" }, /obj/machinery/door/firedoor, /obj/machinery/door/window/left/directional/south{ @@ -68421,6 +68634,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"xsg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "xsh" = ( /obj/machinery/door/airlock/medical{ name = "Surgery" @@ -68467,6 +68684,16 @@ /obj/effect/turf_decal/trimline/white/filled/line, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"xsV" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/storage/lockbox/medal, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "xsW" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -69520,6 +69747,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"xNL" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/crowbar, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "xNP" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/eighties, @@ -98951,7 +99186,7 @@ aaa hFr nMu hFr -dDN +hWu abZ ycB jyA @@ -101345,7 +101580,7 @@ svA jBn bKt gqf -bKt +asT dQn bKt frN @@ -149067,11 +149302,11 @@ aac aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +tFk +tFk +tFk +tFk +tFk aaa aaa abM @@ -149321,14 +149556,14 @@ aac aac aac aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +tFk +tFk +tFk +biB +rdN +bwu +tFk aaa aaa abM @@ -149578,14 +149813,14 @@ aac aac aac aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +mez +kIA +aOW +xsg +vyO +cyb +tFk aaa aaa abM @@ -149835,14 +150070,14 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +tFk +bIz +hCO +jWy +hCO +uNJ +itH +tFk aaa aaa abM @@ -150092,14 +150327,14 @@ aaa aaa aaa yji -yji -yji -yji -yji -aaa -aaa -aaa -aaa +tFk +dFN +fLY +tFk +kcV +xNL +qXK +tFk aaa aaa abM @@ -150349,9 +150584,9 @@ aaa aaa aaa yji -tFk +wOb mJQ -dTL +sub yji run run @@ -150606,8 +150841,8 @@ aaa aaa aaa yji -nDj -dkO +kft +aBK rGN dTL mjM @@ -150636,7 +150871,7 @@ aBV aBV aBV wHT -mTX +qnC kcw ruV wHT @@ -151378,7 +151613,7 @@ qhI kDS mOZ wvG -gvQ +pWO kEc ntp mjM @@ -151670,7 +151905,7 @@ umf qjW dCk iDR -kcb +iXr wHT omH jKZ @@ -151892,7 +152127,7 @@ avA xSX xDQ iko -gvQ +pWO iGJ gki nca @@ -152149,7 +152384,7 @@ avB jPx xDQ rOh -iBO +jwV pNI gki nca @@ -152663,7 +152898,7 @@ avD hYT xSX rOh -rco +uGn awp hWL vgl @@ -155522,7 +155757,7 @@ uvu aCC ukE hhc -cDX +cMY lPY eaT kiU @@ -155776,7 +156011,7 @@ aQO rup wzm rAh -nug +fyA eUy mgq nhV @@ -157276,7 +157511,7 @@ aaa aaa aaa rmB -hGG +nQF bWb toY wpM @@ -157287,7 +157522,7 @@ avl fBk myB vhl -uQq +kKw vhl gnL lvm @@ -157568,9 +157803,9 @@ ltw pbx pyA ltw -tqS +evc vjq -ekE +xsV ktl mjd mjI @@ -158603,7 +158838,7 @@ phl sSx xJH xEo -hKL +syB ixO urP kOE @@ -159340,7 +159575,7 @@ aaa abM abM tFJ -tYg +eQO fsQ jil fsQ @@ -166357,7 +166592,7 @@ aOF wdj wao cHU -uVB +oXx wdj oGJ oGJ @@ -184574,7 +184809,7 @@ ebY aGn brm nSI -awY +jqE vDI nSd rMB @@ -185071,8 +185306,8 @@ skX fpU fpU jKb -fpU -eos +dXH +uXN lSQ duO goC @@ -185332,7 +185567,7 @@ uno uno uno lCy -vPB +ifI uCO aDK bMb diff --git a/_maps/modular_generic/beach_l_ribs.dmm b/_maps/modular_generic/beach_l_ribs.dmm new file mode 100644 index 00000000000..ea0a2a9abd0 --- /dev/null +++ b/_maps/modular_generic/beach_l_ribs.dmm @@ -0,0 +1,828 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"av" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/structure/flora/ash/leaf_shroom{ + icon_state = "s_mushroom4" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 10 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"aJ" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"bT" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"bV" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"fi" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/oil, +/turf/open/misc/beach/sand, +/area/template_noop) +"fw" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 8 + }, +/mob/living/basic/mining/goldgrub/baby, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"gP" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"gR" = ( +/obj/item/fuel_pellet{ + pixel_x = 10; + pixel_y = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"ic" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/item/stack/sheet/mineral/sandbags, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"iD" = ( +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"jT" = ( +/obj/item/fish/boned, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"ky" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 10 + }, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid11" + }, +/area/template_noop) +"ml" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/structure/frame/machine/secured, +/obj/item/stack/cable_coil/cut, +/turf/open/misc/beach/sand, +/area/template_noop) +"mP" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"oX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/toolbox{ + pixel_x = 5; + pixel_y = -14 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"ph" = ( +/obj/item/knife/combat/bone, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"pk" = ( +/obj/structure/flora/rock/pile/style_3, +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"pr" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"pZ" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"qD" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"tr" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/structure/flora/ash/cap_shroom{ + icon_state = "l_mushroom2p" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"tA" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/turf_decal/trimline/dark/warning, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"uf" = ( +/obj/structure/flora/rock/pile/style_2, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"uy" = ( +/obj/item/stack/sheet/bone, +/mob/living/basic/mining/goldgrub/baby, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"uS" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/beach/sand, +/area/template_noop) +"wf" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus3p" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"wy" = ( +/obj/item/chair/wood, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid6" + }, +/area/template_noop) +"wI" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xA" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/item/modular_computer/laptop{ + icon_state = "laptop"; + pixel_y = 16; + pixel_x = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"xG" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xS" = ( +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"xU" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"zh" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus2" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"zH" = ( +/turf/open/misc/asteroid{ + icon_state = "asteroid2" + }, +/area/template_noop) +"Cv" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/machinery/exoscanner, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Ds" = ( +/obj/structure/flora/ash/cacti, +/obj/effect/turf_decal/trimline/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"DX" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"Eo" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/structure/water_source/puddle, +/obj/structure/flora/bush/reed/style_random{ + pixel_y = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"ED" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Ff" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/structure/holosign/barrier/engineering, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Fi" = ( +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor4" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid3" + }, +/area/template_noop) +"Ft" = ( +/obj/structure/rack, +/obj/item/shovel, +/obj/item/shovel{ + pixel_y = 3 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"FD" = ( +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/sand, +/area/template_noop) +"Gh" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid11" + }, +/area/template_noop) +"Go" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Iw" = ( +/obj/item/fishing_hook/bone, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"Jy" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"JM" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 9 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid_dug" + }, +/area/template_noop) +"La" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_y = 24 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"LD" = ( +/obj/effect/turf_decal/trimline/dark/corner, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"LK" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Mg" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"NO" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lantern{ + icon_state = "floodlight" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid9" + }, +/area/template_noop) +"Oi" = ( +/obj/structure/table_frame, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 5 + }, +/obj/item/binoculars, +/turf/open/misc/asteroid{ + icon_state = "asteroid5" + }, +/area/template_noop) +"OJ" = ( +/obj/structure/statue/bone/rib, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor5" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"OM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"OW" = ( +/obj/effect/turf_decal/weather/sand, +/obj/vehicle/ridden/atv, +/turf/open/misc/beach/sand, +/area/template_noop) +"PS" = ( +/obj/structure/statue/bone/rib, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor7" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 1 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid8" + }, +/area/template_noop) +"Rs" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"RG" = ( +/obj/structure/firepit{ + icon_state = "firepit" + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 11; + pixel_x = 11 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 16 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = -9 + }, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/ash{ + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/asteroid{ + icon_state = "asteroid7" + }, +/area/template_noop) +"SE" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/item/key/atv{ + pixel_y = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Tt" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus_fruit"; + pixel_x = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/asteroid{ + icon_state = "asteroid9" + }, +/area/template_noop) +"TL" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/beach/sand, +/area/template_noop) +"Ua" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"UJ" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/mob/living/basic/mining/goldgrub, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Vw" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus4" + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"Wd" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"WA" = ( +/obj/effect/turf_decal/trimline/dark/corner, +/turf/open/misc/asteroid{ + icon_state = "asteroid8" + }, +/area/template_noop) +"YD" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"YK" = ( +/obj/item/chair/wood{ + dir = 4 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 1 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid10" + }, +/area/template_noop) +"YQ" = ( +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/xenoblood{ + icon_state = "xfloor5" + }, +/obj/effect/turf_decal/trimline/dark/warning{ + dir = 6 + }, +/turf/open/misc/asteroid{ + icon_state = "asteroid0" + }, +/area/template_noop) +"ZO" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +aJ +"} +(2,1,1) = {" +ZO +Ua +gR +bT +Go +Jy +oX +mP +Ua +Ua +ZO +"} +(3,1,1) = {" +ZO +fi +SE +NO +ED +av +ml +xG +bV +TL +ZO +"} +(4,1,1) = {" +ZO +Wd +wI +PS +jT +fw +La +ph +ky +gP +ZO +"} +(5,1,1) = {" +ZO +DX +UJ +YK +zh +zH +OJ +Vw +pk +YD +ZO +"} +(6,1,1) = {" +ZO +OW +JM +xS +Eo +RG +uy +WA +LK +xA +ZO +"} +(7,1,1) = {" +ZO +Wd +tr +pr +Fi +xU +wf +tA +Cv +Ua +ZO +"} +(8,1,1) = {" +ZO +OM +uS +Gh +Ds +Iw +LD +YQ +wy +Rs +ZO +"} +(9,1,1) = {" +ZO +FD +uf +Ff +Oi +Ft +ic +qD +Tt +YD +ZO +"} +(10,1,1) = {" +ZO +Ua +pZ +iD +Mg +pZ +Mg +Ua +pZ +Ua +ZO +"} +(11,1,1) = {" +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +ZO +"} diff --git a/_maps/modular_generic/beach_m_oasis.dmm b/_maps/modular_generic/beach_m_oasis.dmm new file mode 100644 index 00000000000..80d9b7dae57 --- /dev/null +++ b/_maps/modular_generic/beach_m_oasis.dmm @@ -0,0 +1,341 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/flora/bush/sparsegrass{ + pixel_y = 9; + pixel_x = -3 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"b" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/template_noop) +"c" = ( +/obj/structure/flora/tree/palm, +/obj/structure/flora/bush/fullgrass/style_3, +/turf/open/misc/beach/sand, +/area/template_noop) +"d" = ( +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock, +/turf/open/misc/beach/sand, +/area/template_noop) +"f" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_x = 6; + pixel_y = -14 + }, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"g" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"h" = ( +/obj/structure/flora/tree/palm, +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/template_noop) +"j" = ( +/obj/structure/flora/rock/pile, +/turf/open/misc/beach/sand, +/area/template_noop) +"k" = ( +/obj/structure/flora/rock/style_2, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"l" = ( +/obj/structure/flora/bush/grassy, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"m" = ( +/obj/structure/flora/bush/sparsegrass/style_3{ + pixel_y = -6; + pixel_x = -6 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"n" = ( +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"p" = ( +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/template_noop) +"q" = ( +/obj/structure/flora/bush/stalky/style_random{ + pixel_x = -7 + }, +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"s" = ( +/obj/structure/flora/bush/grassy/style_4{ + pixel_y = 11; + pixel_x = 5 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"t" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"u" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 3; + pixel_x = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"w" = ( +/turf/open/water/beach, +/area/template_noop) +"y" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"z" = ( +/obj/structure/flora/bush/reed/style_random{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/misc/beach/coast{ + dir = 10 + }, +/area/template_noop) +"C" = ( +/obj/item/toy/beach_ball, +/turf/open/water/beach, +/area/template_noop) +"D" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"E" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"F" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"G" = ( +/obj/structure/flora/bush/stalky/style_random{ + pixel_y = 6 + }, +/turf/open/misc/beach/coast, +/area/template_noop) +"H" = ( +/obj/structure/flora/bush/sparsegrass{ + pixel_x = 12; + pixel_y = -4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"I" = ( +/obj/structure/fluff/beach_umbrella, +/turf/open/misc/beach/sand, +/area/template_noop) +"J" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/template_noop) +"K" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"M" = ( +/obj/structure/flora/bush/sparsegrass/style_3{ + pixel_y = 1; + pixel_x = 1 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"N" = ( +/obj/item/pillow{ + pixel_y = 7; + pixel_x = -2 + }, +/obj/item/binoculars{ + pixel_x = -6; + pixel_y = -12 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"O" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 9; + pixel_x = -4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"P" = ( +/obj/structure/flora/tree/palm/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"Q" = ( +/obj/structure/flora/bush/fullgrass/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"R" = ( +/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ + pixel_y = 2; + pixel_x = 16 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 6 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"T" = ( +/obj/structure/flora/bush/reed/style_random{ + pixel_y = 8 + }, +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/template_noop) +"U" = ( +/obj/structure/flora/bush/sparsegrass/style_2, +/turf/open/misc/beach/sand, +/area/template_noop) +"W" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile, +/turf/open/misc/beach/sand, +/area/template_noop) +"X" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_x = -5 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"Y" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"Z" = ( +/obj/structure/flora/bush/sparsegrass/style_2{ + pixel_y = 2 + }, +/turf/open/misc/beach/sand, +/area/template_noop) + +(1,1,1) = {" +d +d +d +d +d +d +d +d +g +"} +(2,1,1) = {" +d +k +F +E +K +F +U +u +d +"} +(3,1,1) = {" +d +F +P +n +l +s +X +a +d +"} +(4,1,1) = {" +d +N +R +G +p +Y +D +E +d +"} +(5,1,1) = {" +d +I +n +J +w +T +f +j +d +"} +(6,1,1) = {" +d +E +b +z +C +y +c +Q +d +"} +(7,1,1) = {" +d +H +K +b +q +t +m +M +d +"} +(8,1,1) = {" +d +F +Z +O +h +e +W +F +d +"} +(9,1,1) = {" +d +d +d +d +d +d +d +d +d +"} diff --git a/_maps/modular_generic/beach_m_shipping.dmm b/_maps/modular_generic/beach_m_shipping.dmm new file mode 100644 index 00000000000..a05aa53fec7 --- /dev/null +++ b/_maps/modular_generic/beach_m_shipping.dmm @@ -0,0 +1,440 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/random/structure/shipping_container, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"b" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/spawner/random/trash/box, +/turf/open/misc/beach/sand, +/area/template_noop) +"c" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/obj/item/reagent_containers/spray/chemsprayer/party, +/turf/open/misc/beach/sand, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/coast, +/area/template_noop) +"f" = ( +/turf/open/misc/beach/coast, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"h" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_y = 6; + pixel_x = 18 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"i" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_y = 11; + pixel_x = 18 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"j" = ( +/obj/structure/fluff/beach_umbrella/engine, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"k" = ( +/obj/effect/spawner/random/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"l" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/sand, +/area/template_noop) +"m" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/template_noop) +"n" = ( +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"q" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/structure/flora/ash/cacti{ + icon_state = "cactus3p" + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"t" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"u" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/beach, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/structure/flora/ash/cacti{ + icon_state = "cactus2" + }, +/turf/open/misc/beach/sand, +/area/template_noop) +"w" = ( +/obj/item/toy/beach_ball, +/turf/open/water/beach, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/obj/item/chair/stool/bar, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"z" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/obj/item/clothing/head/costume/party/festive, +/turf/open/misc/beach/sand, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"C" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/template_noop) +"D" = ( +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 8 + }, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"G" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/water/beach, +/area/template_noop) +"H" = ( +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/template_noop) +"I" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/template_noop) +"J" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/obj/item/clothing/mask/party_horn, +/turf/open/misc/beach/sand, +/area/template_noop) +"K" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/template_noop) +"L" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"M" = ( +/turf/template_noop, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"O" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/structure/rack, +/obj/item/circuitboard/machine/sleeper/party, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4; + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/weather/sand{ + dir = 4 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/beach/sand, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 1 + }, +/turf/open/misc/beach/coast/corner, +/area/template_noop) +"S" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"T" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/template_noop) +"U" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/water/beach, +/area/template_noop) +"V" = ( +/turf/open/misc/beach/sand, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/weather/sand{ + dir = 10 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 5 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/misc/sandy_dirt, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/weather/sand, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/weather/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/beach/sand, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/structure/shipping_container, +/turf/open/misc/beach/sand, +/area/template_noop) + +(1,1,1) = {" +M +M +M +M +M +M +M +M +z +"} +(2,1,1) = {" +M +k +W +c +b +i +v +d +M +"} +(3,1,1) = {" +M +Z +h +n +T +E +I +Q +M +"} +(4,1,1) = {" +M +Y +N +e +w +G +X +S +M +"} +(5,1,1) = {" +M +p +j +f +u +D +C +a +M +"} +(6,1,1) = {" +M +P +R +m +U +q +t +V +M +"} +(7,1,1) = {" +M +x +K +H +B +C +g +p +M +"} +(8,1,1) = {" +M +J +s +A +F +L +l +O +M +"} +(9,1,1) = {" +M +M +M +M +M +M +M +M +M +"} diff --git a/_maps/modular_generic/ice_l_storage.dmm b/_maps/modular_generic/ice_l_storage.dmm new file mode 100644 index 00000000000..321e5026642 --- /dev/null +++ b/_maps/modular_generic/ice_l_storage.dmm @@ -0,0 +1,458 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/bot/right, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/template_noop) +"f" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"g" = ( +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"h" = ( +/obj/item/key/atv{ + pixel_x = -8; + pixel_y = -5 + }, +/obj/item/key/atv{ + pixel_y = -9 + }, +/obj/item/key/atv{ + pixel_y = -4; + pixel_x = 8 + }, +/turf/closed/wall/ice, +/area/template_noop) +"i" = ( +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/space_heater, +/turf/open/floor/plastic, +/area/template_noop) +"j" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"k" = ( +/turf/open/floor/plating, +/area/template_noop) +"l" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/box, +/turf/open/floor/plating, +/area/template_noop) +"m" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/template_noop) +"q" = ( +/obj/machinery/door/poddoor/shutters{ + id = "modular_room_1"; + name = "Garage Door" + }, +/turf/open/floor/plating, +/area/template_noop) +"r" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/obj/machinery/button/door/directional/north{ + id = "modular_room_1" + }, +/turf/open/floor/plastic, +/area/template_noop) +"t" = ( +/obj/structure/table, +/obj/item/pizzabox/meat{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/plastic, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/template_noop) +"v" = ( +/turf/closed/wall, +/area/template_noop) +"w" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/obj/item/trash/boritos/red{ + pixel_y = 9; + pixel_x = -17 + }, +/obj/item/trash/can, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + layer = 4 + }, +/turf/open/floor/plastic, +/area/template_noop) +"y" = ( +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + layer = 4 + }, +/turf/open/floor/plastic, +/area/template_noop) +"z" = ( +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"A" = ( +/obj/structure/rack, +/obj/item/weldingtool/hugetank, +/turf/open/floor/plating, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/turf/closed/wall/ice, +/area/template_noop) +"H" = ( +/obj/structure/closet{ + name = "Fuel Tank Closet" + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/obj/item/clothing/shoes/winterboots{ + pixel_y = -10 + }, +/turf/open/floor/plastic, +/area/template_noop) +"J" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/obj/structure/railing{ + layer = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_loot, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plastic, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/bot/right, +/obj/structure/closet/crate/large, +/obj/item/crowbar/large/heavy, +/turf/open/floor/plating, +/area/template_noop) +"N" = ( +/obj/structure/rack, +/obj/item/fuel_pellet, +/obj/item/fuel_pellet{ + pixel_y = -7; + pixel_x = 7 + }, +/obj/item/fuel_pellet{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/sign/warning/directional/north, +/turf/template_noop, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/bot/left, +/obj/structure/closet/crate/large, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/bot/left, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_empty, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"U" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/template_noop) +"V" = ( +/obj/structure/noticeboard/directional/north, +/obj/structure/broken_flooring/singular/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"W" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"X" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/glass/bottle/beer/almost_empty{ + pixel_x = 11; + pixel_y = 4 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/plastic, +/area/template_noop) +"Y" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/box, +/obj/vehicle/ridden/atv{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +j +"} +(2,1,1) = {" +a +G +v +v +G +G +v +v +G +G +a +"} +(3,1,1) = {" +a +G +X +i +M +n +K +p +d +G +a +"} +(4,1,1) = {" +a +v +t +J +P +n +n +u +R +G +O +"} +(5,1,1) = {" +a +v +s +x +Z +w +w +f +Z +q +a +"} +(6,1,1) = {" +a +C +L +U +T +k +r +r +Q +q +a +"} +(7,1,1) = {" +a +h +V +b +z +k +r +W +m +q +a +"} +(8,1,1) = {" +a +G +g +D +l +k +k +k +k +v +O +"} +(9,1,1) = {" +a +v +H +y +A +N +Y +B +F +G +a +"} +(10,1,1) = {" +a +v +G +G +G +v +v +v +G +G +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/ice_l_trophyroom.dmm b/_maps/modular_generic/ice_l_trophyroom.dmm new file mode 100644 index 00000000000..39aed5bddfe --- /dev/null +++ b/_maps/modular_generic/ice_l_trophyroom.dmm @@ -0,0 +1,602 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"fI" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"gr" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/chair/office/light, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"gS" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/misc/snow, +/area/template_noop) +"hA" = ( +/turf/closed/wall, +/area/template_noop) +"jO" = ( +/turf/template_noop, +/area/template_noop) +"jV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"kM" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/spawner/random/decoration/flower, +/turf/open/misc/snow, +/area/template_noop) +"ng" = ( +/obj/structure/flora/rock/pile/icy/style_3, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/tree/dead/style_random{ + pixel_y = 12 + }, +/turf/open/misc/snow, +/area/template_noop) +"pV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip2" + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"qH" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/misc/snow, +/area/template_noop) +"rS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip1" + }, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip4" + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"tl" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/snow, +/area/template_noop) +"tN" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/item/hatchet/wooden, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"ul" = ( +/turf/open/floor/holofloor/stairs/medium{ + dir = 8 + }, +/area/template_noop) +"vs" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/spawner/random/decoration/flower, +/turf/open/misc/snow, +/area/template_noop) +"vv" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 1 + }, +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"wW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 1 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"yc" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"yg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/hedge, +/obj/structure/sign/poster/random/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"yk" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/decal/cleanable/plastic, +/turf/open/misc/snow, +/area/template_noop) +"yK" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/hedge, +/obj/structure/sign/poster/random/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"yS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"zJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Bo" = ( +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "floor7" + }, +/turf/open/misc/snow, +/area/template_noop) +"Bp" = ( +/obj/structure/flora/rock/icy/style_2, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/west, +/turf/open/misc/snow, +/area/template_noop) +"BX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/blue, +/area/template_noop) +"Eb" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/filingcabinet, +/turf/open/misc/snow, +/area/template_noop) +"FS" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/carpet/blue, +/area/template_noop) +"HL" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"IF" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/snow, +/area/template_noop) +"JF" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/clock/directional/south, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/misc/snow, +/area/template_noop) +"Kb" = ( +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "floor4" + }, +/turf/open/misc/snow, +/area/template_noop) +"Lj" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/north, +/turf/open/misc/snow, +/area/template_noop) +"Lo" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Ml" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Mr" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"MO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Nf" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Nk" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/hedge, +/turf/open/misc/snow, +/area/template_noop) +"NJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Pk" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/flora/bush/snow/style_random, +/obj/structure/sign/poster/random/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"RA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Tq" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/displaycase/trophy, +/turf/open/floor/carpet/blue, +/area/template_noop) +"Uo" = ( +/obj/effect/decal/cleanable/plastic, +/turf/open/misc/snow, +/area/template_noop) +"UO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/rock/pile/icy/style_2, +/turf/open/misc/snow, +/area/template_noop) +"VA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"VD" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/decoration/ornament, +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Xc" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/rock/icy/style_3, +/turf/open/misc/snow, +/area/template_noop) +"XH" = ( +/obj/structure/flora/grass/green/style_random, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/flora/tree/dead/style_random, +/obj/structure/sign/poster/random/directional/west, +/turf/open/misc/snow, +/area/template_noop) +"XX" = ( +/turf/open/floor/holofloor/stairs/medium{ + dir = 4 + }, +/area/template_noop) +"Yn" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/machinery/door/airlock/wood, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"ZR" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +yc +"} +(2,1,1) = {" +jO +hA +hA +hA +hA +Yn +hA +hA +hA +hA +jO +"} +(3,1,1) = {" +jO +hA +yS +Bp +vs +XX +wW +XH +UO +hA +jO +"} +(4,1,1) = {" +jO +hA +Lj +VD +RA +pV +NJ +qH +ah +ZR +jO +"} +(5,1,1) = {" +jO +hA +ng +gS +rS +FS +Kb +Uo +Nk +ZR +jO +"} +(6,1,1) = {" +jO +hA +tN +yk +BX +Tq +Bo +zJ +JF +hA +jO +"} +(7,1,1) = {" +jO +hA +yg +Eb +HL +BX +gr +MO +tl +ZR +jO +"} +(8,1,1) = {" +jO +hA +Mr +Nf +Lo +Ml +VA +fI +kM +ZR +jO +"} +(9,1,1) = {" +jO +hA +Xc +IF +yK +ul +vv +Pk +jV +hA +jO +"} +(10,1,1) = {" +jO +hA +hA +hA +hA +Yn +hA +hA +hA +hA +jO +"} +(11,1,1) = {" +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +jO +"} diff --git a/_maps/modular_generic/ice_m_comms.dmm b/_maps/modular_generic/ice_m_comms.dmm new file mode 100644 index 00000000000..34c4ed8864f --- /dev/null +++ b/_maps/modular_generic/ice_m_comms.dmm @@ -0,0 +1,330 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall, +/area/template_noop) +"b" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"c" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "vdomsnow" + }, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"f" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"i" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"j" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/machinery/door/airlock/wood, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/hedge, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/directional/east{ + pixel_x = -6 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/machinery/exoscanner, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"t" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/misc/snow, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/hedge, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/flora/grass/green/style_random, +/obj/structure/flora/bush/snow/style_random, +/turf/open/misc/snow, +/area/template_noop) +"w" = ( +/obj/machinery/computer/terminal/derelict{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/misc/snow, +/area/template_noop) +"y" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/recharger, +/turf/open/misc/snow, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"D" = ( +/turf/template_noop, +/area/template_noop) +"F" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/noticeboard/directional/north, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"K" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/turf/open/floor/carpet/blue, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/filingcabinet, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"O" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters{ + dir = 1; + id = "vdomsnow" + }, +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/template_noop) +"R" = ( +/obj/structure/flora/grass/brown, +/obj/structure/flora/bush/snow/style_2, +/turf/open/misc/snow, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "bloodyhands_left" + }, +/obj/effect/decal/cleanable/blood/drip{ + icon_state = "drip1" + }, +/turf/open/misc/snow, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/structure/chair/office/light, +/turf/open/floor/carpet/blue, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/table/reinforced, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/bureaucracy/stamp, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/tile/dark_blue/diagonal_centre, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/crayon, +/obj/machinery/button/door/directional/south{ + id = "vdomsnow" + }, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) + +(1,1,1) = {" +D +D +D +D +D +D +D +D +f +"} +(2,1,1) = {" +D +a +a +a +j +c +a +a +D +"} +(3,1,1) = {" +D +a +N +n +P +i +V +a +D +"} +(4,1,1) = {" +D +a +e +v +o +T +Z +a +D +"} +(5,1,1) = {" +D +a +F +S +R +p +M +j +D +"} +(6,1,1) = {" +D +a +K +L +t +A +b +O +D +"} +(7,1,1) = {" +D +a +u +r +w +y +l +a +D +"} +(8,1,1) = {" +D +a +a +a +a +a +a +a +D +"} +(9,1,1) = {" +D +D +D +D +D +D +D +D +D +"} diff --git a/_maps/modular_generic/ice_s_freezer.dmm b/_maps/modular_generic/ice_s_freezer.dmm new file mode 100644 index 00000000000..b150be62220 --- /dev/null +++ b/_maps/modular_generic/ice_s_freezer.dmm @@ -0,0 +1,190 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/rack, +/obj/item/food/meat/slab/monkey, +/turf/open/floor/plating/snowed, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/obj/item/food/meat/slab/xeno{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/snowed, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/snowed, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/snowed, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/template_noop, +/area/template_noop) +"j" = ( +/obj/machinery/door/airlock/freezer, +/turf/open/floor/plating/snowed, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/item/food/meat/slab/bear{ + pixel_x = -7; + pixel_y = -3 + }, +/turf/open/floor/plating/snowed, +/area/template_noop) +"q" = ( +/obj/structure/table, +/obj/item/food/meat/slab/goliath, +/obj/item/food/meat/slab/pig{ + pixel_y = 4 + }, +/turf/open/floor/fake_snow, +/area/template_noop) +"t" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/structure/barricade/wooden/crude/snow, +/turf/open/floor/plating/snowed, +/area/template_noop) +"w" = ( +/obj/structure/closet/secure_closet/freezer/empty/open, +/obj/item/food/meat/slab/spider, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/rawcrab, +/turf/open/floor/fake_snow, +/area/template_noop) +"G" = ( +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"M" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/item/food/meat/slab/meatproduct{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/food/meat/slab/meatwheat{ + pixel_x = -9; + pixel_y = -8 + }, +/turf/open/floor/fake_snow, +/area/template_noop) +"N" = ( +/turf/closed/wall/ice, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/template_noop, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/turf/open/floor/plating/snowed, +/area/template_noop) +"W" = ( +/turf/closed/wall, +/area/template_noop) + +(1,1,1) = {" +G +G +G +G +G +G +L +"} +(2,1,1) = {" +G +N +N +W +W +W +G +"} +(3,1,1) = {" +G +W +w +c +d +t +O +"} +(4,1,1) = {" +h +j +e +R +o +W +G +"} +(5,1,1) = {" +G +W +a +M +q +N +G +"} +(6,1,1) = {" +G +W +W +W +N +N +G +"} +(7,1,1) = {" +G +G +G +G +G +G +G +"} diff --git a/_maps/modular_generic/jungle_l_dock.dmm b/_maps/modular_generic/jungle_l_dock.dmm new file mode 100644 index 00000000000..e29f1fbec28 --- /dev/null +++ b/_maps/modular_generic/jungle_l_dock.dmm @@ -0,0 +1,707 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"bz" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"cg" = ( +/obj/structure/flora/rock/style_3, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + pixel_y = 15; + pixel_x = -2 + }, +/turf/open/water/jungle, +/area/template_noop) +"cF" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"de" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = 16; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = -4; + pixel_y = 16 + }, +/obj/structure/railing, +/turf/open/floor/wood/large, +/area/template_noop) +"ez" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/syringe/blowgun, +/turf/open/floor/wood/large, +/area/template_noop) +"eI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/exotic/syndie, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"fE" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/effect/turf_decal/weather/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"ge" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gj" = ( +/obj/structure/flora/bush/reed/style_random, +/turf/open/water/jungle, +/area/template_noop) +"gq" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gI" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"gL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"is" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water/jungle, +/area/template_noop) +"iL" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/contraband/armory, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"iW" = ( +/obj/structure/flora/rock, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/template_noop) +"ja" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/template_noop) +"jk" = ( +/obj/structure/flora/bush/ferny/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"kb" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/rock/pile/style_2, +/turf/open/misc/grass/jungle, +/area/template_noop) +"ll" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"mF" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/template_noop) +"mV" = ( +/obj/structure/flora/rock/style_2, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/template_noop) +"nl" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"nF" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/fishing_line/reinforced{ + pixel_y = 9 + }, +/obj/item/fishing_hook{ + pixel_x = 11 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/large, +/area/template_noop) +"nY" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"pE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"qx" = ( +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor7-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"qS" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/item/poster/random_contraband, +/obj/effect/spawner/random/clothing/pirate_or_bandana, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"qT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"rJ" = ( +/turf/template_noop, +/area/template_noop) +"sE" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/misc/grass/jungle, +/area/template_noop) +"tD" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/closet/crate/wooden, +/obj/item/shovel, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/wood/large, +/area/template_noop) +"ul" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/grass/jungle, +/area/template_noop) +"vl" = ( +/obj/structure/flora/bush/reed/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water/jungle, +/area/template_noop) +"vG" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"vY" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/water/jungle, +/area/template_noop) +"xR" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor6-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"yN" = ( +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"yO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"zP" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"AG" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"AK" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water/jungle, +/area/template_noop) +"Er" = ( +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"EQ" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"GK" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water/jungle, +/area/template_noop) +"Hd" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"HW" = ( +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Ij" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Jf" = ( +/obj/structure/flora/rock/style_3, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + pixel_y = 15; + pixel_x = -2 + }, +/turf/open/water/jungle, +/area/template_noop) +"JB" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/water/jungle, +/area/template_noop) +"JC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"JF" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/rock/pile/style_2, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Kz" = ( +/obj/structure/flora/bush/grassy/style_random, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"KW" = ( +/turf/open/water/jungle, +/area/template_noop) +"LL" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/obj/effect/decal/cleanable/vomit/old/black_bile, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/misc/grass/jungle, +/area/template_noop) +"LW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/frog, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"Mv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"NG" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/grave/filled, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"Pb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Qk" = ( +/obj/item/fishing_rod, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Rn" = ( +/obj/structure/flora/rock/style_4, +/turf/open/water/jungle, +/area/template_noop) +"RX" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/jungle, +/area/template_noop) +"Sb" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/punji_sticks/spikes{ + icon_state = "punji" + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor4-old" + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"TU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"Uw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"UE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing, +/obj/item/chair/plastic{ + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = 5; + pixel_y = 15 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/item/bait_can{ + pixel_y = 16; + pixel_x = -8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"VC" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/grass/jungle, +/area/template_noop) +"WZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt/jungle/dark, +/area/template_noop) +"Xn" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/jungle, +/area/template_noop) +"Yf" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Yt" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/grass/jungle, +/area/template_noop) +"Zl" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/jungle, +/area/template_noop) + +(1,1,1) = {" +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +vG +"} +(2,1,1) = {" +rJ +zP +xR +gI +jk +Pb +gL +Ij +JF +jk +rJ +"} +(3,1,1) = {" +rJ +qT +Mv +iL +iW +AK +WZ +AG +Uw +EQ +rJ +"} +(4,1,1) = {" +rJ +nY +qS +GK +KW +JB +vl +ja +NG +ll +rJ +"} +(5,1,1) = {" +rJ +nl +Er +cg +Zl +KW +de +KW +yN +Sb +rJ +"} +(6,1,1) = {" +rJ +fE +pE +ez +LW +TU +nF +Jf +vY +ul +rJ +"} +(7,1,1) = {" +rJ +Hd +Rn +gj +UE +Qk +tD +Yf +mF +aC +rJ +"} +(8,1,1) = {" +rJ +qx +gq +is +JB +KW +KW +Xn +Kz +cF +rJ +"} +(9,1,1) = {" +rJ +EQ +HW +JC +RX +vY +bz +mV +eI +ge +rJ +"} +(10,1,1) = {" +rJ +kb +zP +Yt +VC +sE +LL +yO +Pb +zP +rJ +"} +(11,1,1) = {" +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +rJ +"} diff --git a/_maps/modular_generic/jungle_m_armory.dmm b/_maps/modular_generic/jungle_m_armory.dmm new file mode 100644 index 00000000000..a99a173cc8a --- /dev/null +++ b/_maps/modular_generic/jungle_m_armory.dmm @@ -0,0 +1,445 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/structure/sign/poster/contraband/calada_jelly/directional/south, +/turf/open/floor/wood, +/area/template_noop) +"e" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"g" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water/jungle, +/area/template_noop) +"h" = ( +/obj/structure/closet/crate/wooden, +/obj/item/gun/ballistic/rifle/boltaction, +/turf/open/water/jungle, +/area/template_noop) +"i" = ( +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/item/hatchet/wooden, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/wood, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 7 + }, +/turf/open/floor/wood, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/floor/wood, +/area/template_noop) +"n" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/firepit, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -11 + }, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/misc/dirt, +/area/template_noop) +"q" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = -8; + pixel_y = 9 + }, +/turf/open/floor/wood, +/area/template_noop) +"r" = ( +/obj/structure/flora/rock/style_random, +/turf/open/water/jungle, +/area/template_noop) +"s" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/decal/cleanable/dirt, +/turf/open/misc/dirt, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/decal/cleanable/xenoblood, +/obj/effect/decal/remains/xeno, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 21 + }, +/turf/open/floor/wood, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/rock/pile/jungle/large/style_random{ + pixel_x = 0; + pixel_y = 0 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/template_noop) +"y" = ( +/turf/closed/wall/mineral/wood, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9 + }, +/turf/open/floor/wood, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/wooden, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/contraband/free_tonto/directional/west, +/obj/effect/spawner/random/medical/medkit_rare, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/floor/wood, +/area/template_noop) +"B" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/wooden, +/turf/open/misc/dirt, +/area/template_noop) +"C" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/c/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"D" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/dirt, +/area/template_noop) +"G" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/turf/open/misc/dirt, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/rock/style_2, +/obj/structure/railing, +/turf/open/floor/wood, +/area/template_noop) +"K" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/water/jungle, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/ammo_box/strilka310, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = 6; + pixel_y = -3 + }, +/turf/open/floor/wood, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -3 + }, +/turf/open/misc/grass/jungle, +/area/template_noop) +"O" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/dirt, +/area/template_noop) +"P" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/water/jungle, +/area/template_noop) +"Q" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/misc/dirt, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/rock/style_3, +/turf/open/floor/wood, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/misc/dirt, +/area/template_noop) +"U" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/grass/jungle/a/style_random, +/turf/open/floor/wood, +/area/template_noop) +"W" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/grass/jungle, +/area/template_noop) +"X" = ( +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/water/jungle, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 7 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/turf/open/floor/wood, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +n +"} +(2,1,1) = {" +a +y +y +y +W +s +y +y +a +"} +(3,1,1) = {" +a +y +A +x +Y +U +M +y +a +"} +(4,1,1) = {" +a +y +v +T +P +q +d +y +a +"} +(5,1,1) = {" +a +G +k +g +r +p +m +O +a +"} +(6,1,1) = {" +a +u +J +h +K +X +j +C +a +"} +(7,1,1) = {" +a +B +L +R +Q +e +z +y +a +"} +(8,1,1) = {" +a +y +y +y +i +D +y +y +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_bathroom.dmm b/_maps/modular_generic/station_l_bathroom.dmm new file mode 100644 index 00000000000..19d54e2a849 --- /dev/null +++ b/_maps/modular_generic/station_l_bathroom.dmm @@ -0,0 +1,617 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/structure/broken_flooring/pile/directional/east, +/obj/structure/sign/poster/random/directional/east, +/obj/structure/fluff/paper{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"d" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/mop_bucket, +/obj/item/mop, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"f" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/structure/fluff/paper/corner, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/iron/small, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron/small, +/area/template_noop) +"h" = ( +/obj/structure/chair/stool/directional/east{ + pixel_x = -6 + }, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"i" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/spawner/random/engineering/toolbox, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/small, +/area/template_noop) +"j" = ( +/obj/effect/spawner/random/clothing/costume, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/structure/fluff/paper{ + dir = 6; + plane = -9 + }, +/obj/structure/table, +/turf/open/floor/iron/small, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 13 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/vomit, +/obj/machinery/light/small/dim/directional/north, +/obj/item/trash/semki/healthy, +/turf/open/floor/iron/small, +/area/template_noop) +"m" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron/small, +/area/template_noop) +"o" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/structure/fluff/paper{ + dir = 10 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"p" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/armory/shotgun, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/freezer, +/area/template_noop) +"q" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/machinery/light/small/dim/directional/east, +/obj/item/cigbutt, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"r" = ( +/obj/item/chair/stool{ + pixel_x = -3; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/freezer, +/area/template_noop) +"t" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"u" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/mob/living/basic/blankbody, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/trash/soap, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor5-old" + }, +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/machinery/light/small/red/dim/directional/west, +/turf/open/floor/iron/freezer, +/area/template_noop) +"v" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/iron/small, +/area/template_noop) +"w" = ( +/obj/structure/sink/directional/west, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"x" = ( +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/structure/fluff/paper/corner, +/turf/open/floor/iron/small, +/area/template_noop) +"y" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cigbutt{ + pixel_y = 7 + }, +/obj/structure/fluff/paper{ + dir = 4 + }, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/small, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/clothing/wardrobe_closet_colored, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/structure/sign/poster/random/directional/south, +/obj/structure/fluff/paper/corner, +/turf/open/floor/iron/small, +/area/template_noop) +"A" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"C" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/item/trash/boritos/purple{ + pixel_x = -11; + pixel_y = 6 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"H" = ( +/turf/closed/wall, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/structure/sign/clock/directional/west, +/obj/machinery/light/warm/dim/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/fluff/paper{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/dirt, +/obj/item/cigbutt{ + pixel_y = 7 + }, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"K" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/boritos{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/structure/fluff/paper/corner{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/effect/decal/cleanable/ants, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"O" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"P" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/broken/directional/east, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor3-old" + }, +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"Q" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/stool/directional/south{ + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/small, +/area/template_noop) +"R" = ( +/obj/structure/hedge, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/small, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/template_noop) +"T" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"U" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/paper/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/dark/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/diagonal, +/area/template_noop) +"W" = ( +/obj/machinery/door/airlock, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/freezer, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "tracks" + }, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6 + }, +/turf/open/floor/iron/small, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cigbutt, +/obj/item/cigbutt{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron/small, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/structure/fluff/paper/corner{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +T +"} +(2,1,1) = {" +a +H +H +H +H +H +H +H +H +H +a +"} +(3,1,1) = {" +a +H +u +W +X +I +K +s +p +H +a +"} +(4,1,1) = {" +a +H +H +H +Q +d +v +H +H +H +a +"} +(5,1,1) = {" +a +H +i +g +F +t +Y +e +o +H +a +"} +(6,1,1) = {" +a +H +l +c +P +q +w +G +Z +H +a +"} +(7,1,1) = {" +a +C +E +J +H +R +H +L +O +H +a +"} +(8,1,1) = {" +a +H +m +V +r +N +h +A +z +H +a +"} +(9,1,1) = {" +a +H +x +b +U +S +f +y +j +H +a +"} +(10,1,1) = {" +a +H +H +H +H +C +H +H +H +H +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_crates.dmm b/_maps/modular_generic/station_l_crates.dmm new file mode 100644 index 00000000000..cc81a16ae12 --- /dev/null +++ b/_maps/modular_generic/station_l_crates.dmm @@ -0,0 +1,552 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating/rust, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/poster/random_contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"h" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Warehouse Maintenance" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"i" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"j" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating/rust, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/template_noop) +"m" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/template_noop) +"o" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/closed/wall, +/area/template_noop) +"p" = ( +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"q" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"s" = ( +/turf/closed/wall/rust, +/area/template_noop) +"t" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"u" = ( +/obj/machinery/door/airlock/mining{ + name = "Warehouse" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"w" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/rods/ten, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"y" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/box, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/material_rare, +/obj/effect/turf_decal/bot_red, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"B" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"D" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grime, +/obj/item/poster/random_contraband, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"E" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/material_rare, +/turf/open/floor/plating, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/template_noop) +"H" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/template_noop) +"I" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"J" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"M" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/vending_restock, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/turf/closed/wall, +/area/template_noop) +"U" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/bin, +/obj/effect/turf_decal/siding/wideplating_new/dark, +/turf/open/floor/iron/dark, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/rust, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_empty, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) + +(1,1,1) = {" +e +e +e +e +e +e +e +e +e +e +j +"} +(2,1,1) = {" +e +e +T +T +T +s +s +s +T +e +e +"} +(3,1,1) = {" +e +e +T +l +X +H +W +k +T +e +e +"} +(4,1,1) = {" +e +T +s +V +H +n +q +E +o +T +e +"} +(5,1,1) = {" +e +o +I +m +N +p +D +y +R +u +e +"} +(6,1,1) = {" +e +T +Z +g +M +w +Q +z +U +s +e +"} +(7,1,1) = {" +e +h +t +B +v +O +J +i +a +u +e +"} +(8,1,1) = {" +e +T +T +K +d +G +Y +L +T +T +e +"} +(9,1,1) = {" +e +e +T +c +F +P +S +r +T +e +e +"} +(10,1,1) = {" +e +e +T +s +o +T +s +s +T +e +e +"} +(11,1,1) = {" +e +e +e +e +e +e +e +e +e +e +e +"} diff --git a/_maps/modular_generic/station_l_kilojan.dmm b/_maps/modular_generic/station_l_kilojan.dmm new file mode 100644 index 00000000000..9183b617f54 --- /dev/null +++ b/_maps/modular_generic/station_l_kilojan.dmm @@ -0,0 +1,644 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"c" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"d" = ( +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"f" = ( +/obj/structure/closet/l3closet/janitor, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"g" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/obj/machinery/door/airlock/grunge{ + name = "Custodial Closet" + }, +/turf/open/floor/iron, +/area/template_noop) +"j" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"k" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/delivery, +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/turf_decal/tile/blue, +/obj/structure/disposalpipe/segment, +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = 64 + }, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/machinery/door/airlock/grunge{ + name = "Custodial Closet" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"r" = ( +/obj/structure/sink/directional/west, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/loading_area, +/obj/machinery/door/window/right/directional/south{ + name = "Trash Chute"; + req_access = list("janitor") + }, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Trash Chute"; + req_access = list("janitor") + }, +/obj/machinery/conveyor_switch/oneway{ + dir = 4; + id = "garbage"; + name = "trash chute" + }, +/obj/effect/turf_decal/loading_area, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"t" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/broken_flooring/side/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"v" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"w" = ( +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/turf/closed/wall, +/area/template_noop) +"y" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/broken_flooring/side/directional/south, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"z" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/recycler{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"A" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/disposal/delivery_chute{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/deathsposal/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"D" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"E" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"F" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 2 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"I" = ( +/turf/closed/wall/rust, +/area/template_noop) +"J" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/random/directional/south, +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"K" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/broken_flooring/singular, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/template_noop) +"L" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"M" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage"; + name = "trash belt" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"O" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/reagent_containers/cup/bucket, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"Q" = ( +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/item/flashlight{ + pixel_y = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "custodialwagon"; + name = "Custodial Bay Toggle"; + pixel_x = 8; + req_access = list("janitor") + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"T" = ( +/obj/vehicle/ridden/janicart{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/turf_decal/tile/blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"W" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"X" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "custodialwagon" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"Z" = ( +/obj/structure/table, +/obj/item/toy/figure/janitor{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/restraints/legcuffs/beartrap{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +D +"} +(2,1,1) = {" +a +v +v +v +v +v +v +v +v +v +a +"} +(3,1,1) = {" +a +v +Z +u +W +N +f +p +L +v +a +"} +(4,1,1) = {" +a +i +u +A +g +F +C +s +E +v +a +"} +(5,1,1) = {" +a +v +Q +c +e +Y +G +r +b +v +a +"} +(6,1,1) = {" +a +X +T +w +k +j +J +x +z +v +a +"} +(7,1,1) = {" +a +X +S +U +U +K +h +x +l +v +a +"} +(8,1,1) = {" +a +X +m +d +t +y +n +H +M +v +a +"} +(9,1,1) = {" +a +v +O +e +R +u +V +I +B +v +a +"} +(10,1,1) = {" +a +v +v +o +o +v +v +v +v +v +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_kitchen.dmm b/_maps/modular_generic/station_l_kitchen.dmm new file mode 100644 index 00000000000..68b5bb36998 --- /dev/null +++ b/_maps/modular_generic/station_l_kitchen.dmm @@ -0,0 +1,908 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/grill, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"d" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"f" = ( +/turf/open/floor/iron/kitchen, +/area/template_noop) +"g" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"h" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"i" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/grill, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"l" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"o" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen" + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/griddle, +/obj/item/food/raw_patty{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"q" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donuts{ + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"r" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"s" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 5 + }, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"t" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/spawner/random/entertainment/deck, +/obj/effect/spawner/random/entertainment/gambling, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"u" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"v" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/donuts{ + pixel_x = 11 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"w" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/item/radio{ + desc = "An old handheld radio. Tuned to the outpost's hit radio station."; + frequency = 1475; + icon_state = "radio"; + name = "old radio" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"x" = ( +/turf/closed/wall, +/area/template_noop) +"y" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/closet/secure_closet/freezer/fridge{ + locked = 0 + }, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/obj/item/storage/box/ingredients/wildcard, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"A" = ( +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 8; + pixel_x = 16 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/chef_wardrobe, +/obj/machinery/light/cold/no_nightlight/directional/east, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"C" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"D" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"E" = ( +/obj/machinery/deepfryer, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"F" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/item/clothing/suit/apron/chef, +/obj/item/clothing/head/utility/chefhat, +/obj/item/clothing/mask/fakemoustache/italian, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"K" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"L" = ( +/obj/machinery/button/door/directional/west{ + id = "kitchen"; + name = "Counter Shutters Control" + }, +/obj/structure/sink/kitchen/directional/east{ + pixel_y = 3 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"M" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/spawner/random/entertainment/dice, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/processor{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"O" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/item/storage/bag/tray{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"P" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_x = -10; + pixel_y = 4 + }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Q" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"S" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/cold/no_nightlight/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"T" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters"; + dir = 1 + }, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"W" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/effect/spawner/random/food_or_drink/salad{ + pixel_x = 7 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/storage/box/ingredients/wildcard{ + pixel_y = 5 + }, +/obj/item/stack/sheet/mineral/coal/ten, +/turf/open/floor/iron/dark/textured, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +D +"} +(2,1,1) = {" +a +x +o +h +t +M +w +l +x +x +a +"} +(3,1,1) = {" +a +b +f +f +f +f +f +f +L +K +a +"} +(4,1,1) = {" +a +T +f +P +C +F +C +s +f +O +a +"} +(5,1,1) = {" +a +d +f +N +G +Y +G +y +f +g +a +"} +(6,1,1) = {" +a +i +f +p +G +c +G +r +f +W +a +"} +(7,1,1) = {" +a +Q +f +e +J +k +J +E +f +v +a +"} +(8,1,1) = {" +a +S +f +f +f +f +f +f +f +q +a +"} +(9,1,1) = {" +a +x +z +n +A +f +f +I +B +x +a +"} +(10,1,1) = {" +a +x +x +x +x +u +o +u +x +x +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_l_morgue.dmm b/_maps/modular_generic/station_l_morgue.dmm new file mode 100644 index 00000000000..4b4eb63458d --- /dev/null +++ b/_maps/modular_generic/station_l_morgue.dmm @@ -0,0 +1,540 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"b" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/corpse/human/damaged, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"c" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"d" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" + }, +/obj/effect/spawner/random/structure/barricade, +/turf/open/floor/plating, +/area/template_noop) +"e" = ( +/turf/closed/wall, +/area/template_noop) +"f" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/dark, +/area/template_noop) +"i" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"m" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/structure/rack, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/medical/memeorgans{ + spawn_loot_count = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"o" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"p" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"q" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/medical/patient_stretcher, +/obj/machinery/iv_drip, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/spawner/random/medical/memeorgans, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"t" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"v" = ( +/obj/item/stack/tile/iron/dark{ + pixel_x = 12; + pixel_y = -3 + }, +/turf/open/floor/plating, +/area/template_noop) +"w" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"x" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"y" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/computer/operating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/structure/barricade, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/iron/dark, +/area/template_noop) +"B" = ( +/obj/item/stack/tile/iron/dark/textured_half{ + pixel_x = -7; + pixel_y = -9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/item/stack/tile/iron/dark{ + pixel_x = -11; + pixel_y = 8 + }, +/obj/effect/spawner/random/trash/grime, +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/item/stack/rods{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"E" = ( +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/template_noop) +"F" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"H" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/mob_spawn/corpse/human/assistant, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/dark, +/area/template_noop) +"I" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/template_noop) +"M" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/rods{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/effect/mapping_helpers/dead_body_placer{ + bodycount = 9 + }, +/turf/open/floor/plating, +/area/template_noop) +"N" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Morgue Maintenance" + }, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/gibspawner/human/bodypartless, +/turf/open/floor/plating, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"R" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/spawner/random/medical/surgery_tool_advanced, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"S" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/surgery_tray/full/morgue, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/item/stack/sheet/iron/ten{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"W" = ( +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/template_noop) +"X" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half, +/area/template_noop) +"Z" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/effect/mapping_helpers/damaged_window{ + integrity_damage_min = 0.6; + integrity_damage_max = 0.9 + }, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +U +U +K +"} +(2,1,1) = {" +U +e +e +e +d +e +e +e +e +e +U +"} +(3,1,1) = {" +U +e +w +Q +R +x +u +y +f +e +U +"} +(4,1,1) = {" +U +e +w +W +t +p +p +p +o +e +U +"} +(5,1,1) = {" +U +e +z +j +C +V +s +s +l +e +U +"} +(6,1,1) = {" +U +e +b +L +J +M +B +c +X +e +U +"} +(7,1,1) = {" +U +e +T +r +I +P +O +k +a +h +U +"} +(8,1,1) = {" +U +e +F +W +m +v +G +i +D +Z +U +"} +(9,1,1) = {" +U +e +F +S +H +E +n +q +g +A +U +"} +(10,1,1) = {" +U +e +e +e +N +e +e +e +e +e +U +"} +(11,1,1) = {" +U +U +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_l_security.dmm b/_maps/modular_generic/station_l_security.dmm new file mode 100644 index 00000000000..0b629f3f388 --- /dev/null +++ b/_maps/modular_generic/station_l_security.dmm @@ -0,0 +1,543 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Security Desk"; + dir = 4 + }, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen, +/turf/open/floor/plating, +/area/template_noop) +"aP" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/template_noop) +"aU" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"aY" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"bf" = ( +/turf/template_noop, +/area/template_noop) +"bh" = ( +/obj/structure/guncase/shotgun, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/item/gun/ballistic/shotgun/riot, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/floor/iron/dark, +/area/template_noop) +"bO" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"ds" = ( +/obj/structure/closet/secure_closet/contraband/armory, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"es" = ( +/obj/effect/spawner/random/trash/food_packaging{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"fA" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"fC" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"gy" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair/sofa/right/maroon{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"hj" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/effect/spawner/random/contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"iP" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/sign/warning/yes_smoking/circle/directional/south, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/template_noop) +"lG" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"lW" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Security Desk"; + dir = 4 + }, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/template_noop) +"ma" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/template_noop) +"mI" = ( +/obj/structure/closet/secure_closet/brig{ + name = "Prisoner Locker" + }, +/obj/effect/spawner/random/contraband, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"mQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/effect/spawner/random/bureaucracy/briefcase{ + pixel_y = 10; + pixel_x = -2 + }, +/obj/item/radio{ + desc = "An old handheld radio. Tuned to the outpost's hit radio station."; + frequency = 1475; + icon_state = "radio"; + name = "old radio" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"nh" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"nu" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"nB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron/dark, +/area/template_noop) +"nR" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"oJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/dark, +/area/template_noop) +"pz" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"sV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"vv" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/donut_corp/directional/south, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/dark, +/area/template_noop) +"vJ" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Outpost" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"ys" = ( +/obj/structure/sign/departments/security/directional/east, +/turf/template_noop, +/area/template_noop) +"zf" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"zy" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Bn" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/template_noop) +"BA" = ( +/obj/structure/sign/departments/security/directional/south, +/turf/template_noop, +/area/template_noop) +"Dj" = ( +/obj/effect/spawner/random/trash/crushed_can{ + pixel_y = 4; + pixel_x = -11 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"DJ" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ + id = "cell-2"; + name = "Holding Cell" + }, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Ee" = ( +/turf/open/floor/iron/dark, +/area/template_noop) +"FR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"GC" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Hl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/template_noop) +"IF" = ( +/obj/effect/turf_decal/trimline/red/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"LN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"MP" = ( +/obj/structure/chair/stool/bar/directional/east{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"NS" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/chair/sofa/left/maroon{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"QW" = ( +/obj/structure/guncase/wt550, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/item/gun/ballistic/automatic/wt550, +/turf/open/floor/iron/dark, +/area/template_noop) +"TA" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"TI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"TT" = ( +/obj/structure/chair/stool/bar/directional/east{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Uc" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/textured, +/area/template_noop) +"Vo" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/civilian, +/obj/machinery/coffeemaker, +/obj/structure/sign/poster/contraband/fun_police/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"Wn" = ( +/obj/effect/mapping_helpers/airlock/access/any/security/brig, +/turf/open/floor/iron/dark, +/area/template_noop) +"WI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/dark, +/area/template_noop) +"XZ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark, +/area/template_noop) +"ZU" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/floor/iron/dark/textured, +/area/template_noop) + +(1,1,1) = {" +bf +bf +bf +bf +ys +bf +ys +bf +bf +bf +bO +"} +(2,1,1) = {" +bf +fA +fA +fA +fA +vJ +fA +fA +fA +fA +bf +"} +(3,1,1) = {" +bf +fA +ZU +zy +fC +TI +ma +sV +XZ +fA +bf +"} +(4,1,1) = {" +bf +fA +TA +nR +DJ +LN +Ee +lG +oJ +fA +bf +"} +(5,1,1) = {" +bf +fA +Uc +nh +nu +nB +Ee +Ee +NS +fA +bf +"} +(6,1,1) = {" +bf +fA +fA +aP +Bn +Vo +mQ +Ee +gy +fA +bf +"} +(7,1,1) = {" +BA +fA +mI +hj +aY +TT +MP +es +iP +fA +bf +"} +(8,1,1) = {" +bf +Wn +IF +FR +FR +pz +Ee +Dj +vv +fA +bf +"} +(9,1,1) = {" +BA +fA +QW +bh +ds +GC +zf +Hl +WI +fA +bf +"} +(10,1,1) = {" +bf +fA +fA +aU +aU +fA +aJ +lW +fA +fA +bf +"} +(11,1,1) = {" +bf +bf +bf +bf +bf +bf +bf +bf +bf +bf +bf +"} diff --git a/_maps/modular_generic/station_l_webs.dmm b/_maps/modular_generic/station_l_webs.dmm new file mode 100644 index 00000000000..4f2470d71b5 --- /dev/null +++ b/_maps/modular_generic/station_l_webs.dmm @@ -0,0 +1,583 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bq" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy, +/obj/effect/spawner/random/medical/supplies, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"cP" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"dy" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"es" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/sofa/bench{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"fN" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"fS" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"gu" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/template_noop) +"gW" = ( +/turf/closed/wall, +/area/template_noop) +"hL" = ( +/obj/structure/broken_flooring/singular/directional/north, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 13 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"ik" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/structure/flora/bush/jungle/b/style_random, +/obj/effect/spawner/random/trash/bin, +/obj/item/fireaxe, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/template_noop) +"iB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/tile/iron/dark, +/turf/open/floor/iron/dark, +/area/template_noop) +"jd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"kF" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/template_noop) +"mK" = ( +/turf/template_noop, +/area/template_noop) +"qH" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"qU" = ( +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/template_noop) +"rS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/broken_flooring/side/directional/west, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/plating, +/area/template_noop) +"sc" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"uC" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"vI" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/template_noop) +"vX" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/broken_flooring/side/directional/north, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = 9; + pixel_y = 13 + }, +/turf/open/floor/plating, +/area/template_noop) +"wA" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/template_noop) +"xD" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"xF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/light/warm/dim/directional/west, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/template_noop) +"xW" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/warm/dim/directional/north, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"yf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/obj/structure/spider/stickyweb{ + plane = -7 + }, +/obj/item/multitool, +/turf/open/floor/iron/dark, +/area/template_noop) +"zM" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/stack/tile/iron/dark, +/turf/open/floor/plating, +/area/template_noop) +"Bi" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/template_noop) +"BB" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"Cd" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"Dp" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"Ec" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/table, +/obj/effect/spawner/random/contraband/armory, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"Gf" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/b/style_2, +/turf/open/floor/plating, +/area/template_noop) +"Gy" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/dark/diagonal, +/area/template_noop) +"GW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/template_noop) +"If" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/obj/structure/barricade/sandbags{ + color = "#737373" + }, +/turf/open/floor/iron, +/area/template_noop) +"KL" = ( +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/template_noop) +"Lp" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"Mi" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"Nr" = ( +/obj/effect/decal/cleanable/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/template_noop) +"NW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/flora/bush/jungle/c/style_2, +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/template_noop) +"PB" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron/dark, +/area/template_noop) +"Ql" = ( +/obj/structure/broken_flooring/pile/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/template_noop) +"RW" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/template_noop) +"RY" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/chair/sofa/bench/left{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"Te" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1; + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"Tf" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/guncase/wt550, +/obj/structure/fireaxecabinet/empty/directional/south, +/obj/item/gun/ballistic/automatic/wt550, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"Uf" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/structure/flora/bush/jungle/c/style_2, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/template_noop) +"UW" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/structure/sign/clock/directional/east, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"Vf" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/stack/tile/iron/dark, +/turf/open/floor/plating, +/area/template_noop) +"VU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"ZE" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/emptysandbag, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) + +(1,1,1) = {" +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +qH +"} +(2,1,1) = {" +mK +gW +gW +gW +gW +qU +gW +gW +gW +gW +mK +"} +(3,1,1) = {" +mK +gW +gu +jd +Ql +Vf +BB +xF +NW +gW +mK +"} +(4,1,1) = {" +mK +gW +PB +Vf +RY +wA +cP +xD +Gf +gW +mK +"} +(5,1,1) = {" +mK +gW +hL +Nr +es +Cd +vI +fN +Ec +gW +mK +"} +(6,1,1) = {" +mK +gW +xW +zM +Te +rS +xD +sc +Tf +gW +mK +"} +(7,1,1) = {" +mK +KL +VU +RW +If +Dp +GW +Gy +ZE +gW +mK +"} +(8,1,1) = {" +mK +gW +iB +bq +Mi +dy +uC +fN +vX +gW +mK +"} +(9,1,1) = {" +mK +gW +kF +fS +yf +Uf +UW +Bi +ik +gW +mK +"} +(10,1,1) = {" +mK +gW +gW +Lp +Lp +Lp +gW +gW +gW +gW +mK +"} +(11,1,1) = {" +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +mK +"} diff --git a/_maps/modular_generic/station_m_arcade.dmm b/_maps/modular_generic/station_m_arcade.dmm new file mode 100644 index 00000000000..2891605f780 --- /dev/null +++ b/_maps/modular_generic/station_m_arcade.dmm @@ -0,0 +1,297 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall, +/area/template_noop) +"b" = ( +/obj/structure/chair/stool/bar/directional/north{ + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/template_noop) +"d" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark, +/area/template_noop) +"e" = ( +/obj/machinery/light/small/directional/west, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/melee/baseball_bat/ablative{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"l" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/dark, +/area/template_noop) +"m" = ( +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"n" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"q" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/melee/baseball_bat{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"r" = ( +/obj/effect/spawner/random/structure/table_fancy, +/obj/effect/spawner/random/food_or_drink/dinner{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/structure/window/spawner/directional/east, +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"y" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/structure/crate, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"B" = ( +/obj/effect/spawner/random/food_or_drink, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/machinery/light/small/directional/east, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/chair/stool/bar/directional/north{ + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/template_noop) +"F" = ( +/obj/effect/spawner/random/food_or_drink, +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"J" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/melee/baseball_bat/homerun, +/turf/open/floor/iron/dark, +/area/template_noop) +"L" = ( +/turf/open/floor/iron/dark/herringbone, +/area/template_noop) +"M" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/effect/spawner/random/food_or_drink, +/turf/open/floor/iron/dark, +/area/template_noop) +"O" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/pinata{ + pixel_y = 4 + }, +/obj/item/pinata/syndie, +/turf/open/floor/iron/dark, +/area/template_noop) +"S" = ( +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron/dark, +/area/template_noop) +"T" = ( +/turf/template_noop, +/area/template_noop) +"U" = ( +/obj/structure/pinata, +/obj/effect/turf_decal/box/white, +/turf/open/floor/iron/dark, +/area/template_noop) +"V" = ( +/obj/effect/decal/cleanable/wrapping/pinata, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/template_noop) +"W" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/template_noop) +"X" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/template_noop) +"Y" = ( +/obj/structure/hedge, +/obj/machinery/digital_clock/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) + +(1,1,1) = {" +T +T +C +T +T +T +T +T +n +"} +(2,1,1) = {" +T +a +a +y +l +y +a +a +T +"} +(3,1,1) = {" +T +a +v +K +L +d +F +a +T +"} +(4,1,1) = {" +T +a +S +D +o +N +q +y +T +"} +(5,1,1) = {" +T +a +Y +X +r +U +V +a +T +"} +(6,1,1) = {" +T +a +M +b +g +m +B +y +T +"} +(7,1,1) = {" +T +a +W +J +L +O +A +a +T +"} +(8,1,1) = {" +T +a +a +y +l +y +a +a +T +"} +(9,1,1) = {" +T +T +T +T +T +T +e +T +T +"} diff --git a/_maps/modular_generic/station_m_breakroom.dmm b/_maps/modular_generic/station_m_breakroom.dmm new file mode 100644 index 00000000000..15580aaa6fd --- /dev/null +++ b/_maps/modular_generic/station_m_breakroom.dmm @@ -0,0 +1,220 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/iron, +/area/template_noop) +"c" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"j" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"r" = ( +/turf/closed/wall, +/area/template_noop) +"w" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"z" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"B" = ( +/obj/machinery/light/small/blacklight/directional/north, +/turf/template_noop, +/area/template_noop) +"C" = ( +/obj/effect/spawner/random/trash/bin, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/iron, +/area/template_noop) +"G" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"I" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/machinery/light/small/blacklight/directional/south, +/turf/template_noop, +/area/template_noop) +"N" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"P" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"Q" = ( +/obj/effect/spawner/random/structure/crate, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/template_noop) +"W" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/template_noop) +"Y" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +w +"} +(2,1,1) = {" +a +r +r +r +N +r +r +r +a +"} +(3,1,1) = {" +a +r +C +I +c +b +P +r +a +"} +(4,1,1) = {" +M +r +G +R +S +S +P +r +a +"} +(5,1,1) = {" +a +Y +j +V +S +S +S +Y +a +"} +(6,1,1) = {" +a +r +W +o +A +i +O +r +B +"} +(7,1,1) = {" +a +r +Q +o +z +T +U +r +a +"} +(8,1,1) = {" +a +r +r +r +N +r +r +r +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_evidence.dmm b/_maps/modular_generic/station_m_evidence.dmm new file mode 100644 index 00000000000..9d1c5a8a5be --- /dev/null +++ b/_maps/modular_generic/station_m_evidence.dmm @@ -0,0 +1,281 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/structure/noticeboard/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"j" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/engineering/tool_advanced, +/obj/effect/spawner/random/engineering/material_cheap, +/obj/effect/spawner/random/mod/maint, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"m" = ( +/turf/closed/wall, +/area/template_noop) +"n" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron/dark, +/area/template_noop) +"q" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/effect/spawner/random/sakhno/ammo, +/obj/effect/spawner/random/medical/injector, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"r" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/spawner/random/contraband/cannabis, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/light/small/red/directional/west, +/turf/open/floor/iron/dark, +/area/template_noop) +"v" = ( +/obj/effect/spawner/random/structure/crate_abandoned{ + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"x" = ( +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/decoration/statue{ + spawn_loot_chance = 35 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"z" = ( +/obj/machinery/door/window/brigdoor{ + name = "Secure Evidence Lockup"; + req_one_access = list("armory","detective") + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/security{ + name = "Evidence Lockup" + }, +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron/dark, +/area/template_noop) +"C" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"F" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/effect/spawner/random/contraband/narcotics, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/spawner/random/contraband/permabrig_weapon, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/entertainment/money_large, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"G" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"J" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"K" = ( +/obj/effect/spawner/random/structure/crate{ + spawn_loot_chance = 80 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/turf/open/floor/iron/dark, +/area/template_noop) +"R" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"T" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"U" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"V" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/template_noop) +"Z" = ( +/obj/structure/closet{ + name = "evidence closet" + }, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/decal/cleanable/dirt, +/obj/item/poster/random_contraband, +/turf/open/floor/iron/dark/textured_large, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +R +"} +(2,1,1) = {" +a +G +G +G +G +m +m +m +a +"} +(3,1,1) = {" +a +G +d +s +z +h +K +m +a +"} +(4,1,1) = {" +a +G +F +q +J +X +j +m +a +"} +(5,1,1) = {" +a +m +x +r +D +T +n +m +a +"} +(6,1,1) = {" +a +A +n +n +n +n +n +A +a +"} +(7,1,1) = {" +a +m +U +v +L +V +Z +m +a +"} +(8,1,1) = {" +a +m +C +C +m +C +C +m +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_kitchen.dmm b/_maps/modular_generic/station_m_kitchen.dmm new file mode 100644 index 00000000000..4f29d4193dd --- /dev/null +++ b/_maps/modular_generic/station_m_kitchen.dmm @@ -0,0 +1,289 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"b" = ( +/obj/effect/decal/remains/human, +/obj/item/clothing/head/utility/chefhat{ + pixel_y = 6; + pixel_x = 1 + }, +/obj/item/clothing/suit/apron/chef{ + pixel_y = -15; + pixel_x = -6 + }, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"d" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/salad, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"e" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"f" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/pizzaparty, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/turf/closed/wall, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/item/knife/kitchen, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"m" = ( +/obj/machinery/computer/arcade/amputation, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) +"n" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"q" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/trash/bacteria, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"s" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Cafeteria" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/template_noop) +"v" = ( +/obj/item/chair/stool/bar, +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/wood/large, +/area/template_noop) +"w" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"y" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Cafeteria" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"z" = ( +/turf/open/floor/wood/large, +/area/template_noop) +"A" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"B" = ( +/obj/item/food/deadmouse/moldy, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"D" = ( +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/template_noop) +"I" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/item/food/fishmeat/carp, +/obj/item/food/meat/slab/gorilla, +/obj/item/food/grown/tomato, +/obj/item/food/grown/corn, +/obj/effect/spawner/random/trash/bacteria, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"K" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/wood/large, +/area/template_noop) +"L" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/wood/large, +/area/template_noop) +"M" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/large, +/area/template_noop) +"R" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/dinner, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/template_noop) +"S" = ( +/obj/machinery/griddle, +/obj/item/food/meat/steak/chicken{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/food/meat/steak/plain{ + pixel_x = 3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/machinery/oven/range, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/template_noop) +"Y" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +f +"} +(2,1,1) = {" +U +k +a +a +k +a +a +k +D +"} +(3,1,1) = {" +U +k +l +I +q +Y +n +y +U +"} +(4,1,1) = {" +U +k +w +p +R +L +z +o +U +"} +(5,1,1) = {" +U +e +b +A +d +M +K +a +U +"} +(6,1,1) = {" +U +k +B +w +g +v +n +s +U +"} +(7,1,1) = {" +U +k +X +S +k +m +n +o +U +"} +(8,1,1) = {" +U +k +k +k +k +a +a +k +D +"} +(9,1,1) = {" +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_m_shipping.dmm b/_maps/modular_generic/station_m_shipping.dmm new file mode 100644 index 00000000000..0fbfc3f7ddd --- /dev/null +++ b/_maps/modular_generic/station_m_shipping.dmm @@ -0,0 +1,309 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/multi_tile{ + dir = 8; + name = "Cargo Hold" + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/iron/smooth, +/area/template_noop) +"b" = ( +/obj/effect/turf_decal/bot, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"d" = ( +/obj/machinery/light/small/directional/north, +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/machinery/light/broken/directional/north, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/template_noop) +"f" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/structure/table, +/obj/item/food/ready_donk/donkhiladas{ + pixel_y = 19 + }, +/turf/open/floor/iron/smooth, +/area/template_noop) +"g" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"h" = ( +/turf/template_noop, +/area/template_noop) +"j" = ( +/obj/structure/rack, +/obj/item/paper_bin/carbon, +/obj/item/stamp/denied{ + pixel_y = 7; + pixel_x = 9 + }, +/obj/item/stamp/granted{ + pixel_y = 2; + pixel_x = -9 + }, +/obj/item/folder/yellow{ + name = "Order Collection" + }, +/obj/item/pen, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"o" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/shipping_container, +/turf/open/floor/plating, +/area/template_noop) +"p" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"q" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/smooth, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/official/here_for_your_safety/directional/north, +/turf/open/floor/plating, +/area/template_noop) +"t" = ( +/turf/closed/wall, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"w" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth, +/area/template_noop) +"x" = ( +/obj/structure/window/fulltile, +/turf/open/floor/plating, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"B" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/oil/streak{ + pixel_x = 1 + }, +/turf/open/floor/iron/smooth, +/area/template_noop) +"H" = ( +/obj/structure/closet{ + name = "Equipment Locker" + }, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/head/utility/hardhat{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/clothing/gloves/cargo_gauntlet, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"J" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Hold" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) +"K" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/iron/smooth, +/area/template_noop) +"L" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/smooth, +/area/template_noop) +"O" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth, +/area/template_noop) +"V" = ( +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/official/moth_hardhat/directional/east, +/obj/item/clothing/head/utility/hardhat{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron, +/area/template_noop) +"X" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/iron/smooth, +/area/template_noop) +"Z" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/template_noop) + +(1,1,1) = {" +h +h +h +h +h +h +h +h +g +"} +(2,1,1) = {" +h +t +t +t +t +t +t +t +h +"} +(3,1,1) = {" +h +t +b +X +r +o +l +x +h +"} +(4,1,1) = {" +h +t +e +O +r +r +c +J +h +"} +(5,1,1) = {" +h +t +s +O +z +z +L +t +d +"} +(6,1,1) = {" +h +t +f +B +u +K +p +t +h +"} +(7,1,1) = {" +h +t +j +V +w +q +H +t +h +"} +(8,1,1) = {" +h +t +t +t +Z +a +t +t +h +"} +(9,1,1) = {" +h +h +h +h +h +h +h +h +h +"} diff --git a/_maps/modular_generic/station_m_showroom.dmm b/_maps/modular_generic/station_m_showroom.dmm new file mode 100644 index 00000000000..dc073e94656 --- /dev/null +++ b/_maps/modular_generic/station_m_showroom.dmm @@ -0,0 +1,322 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/template_noop) +"b" = ( +/obj/structure/chair/sofa/bench/tram/left{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/template_noop) +"c" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/template_noop) +"d" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/template_noop) +"i" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/plating, +/area/template_noop) +"j" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/iron/dark/side, +/area/template_noop) +"k" = ( +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron, +/area/template_noop) +"l" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/moisture, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"m" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/template_noop) +"n" = ( +/obj/machinery/light/small/directional/west, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/iron, +/area/template_noop) +"q" = ( +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"u" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/corner, +/area/template_noop) +"v" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"w" = ( +/obj/structure/chair/sofa/bench/tram/right{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"y" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/template_noop) +"z" = ( +/turf/template_noop, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/command{ + name = "Corporate Showroom" + }, +/turf/open/floor/iron, +/area/template_noop) +"B" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/structure/broken_flooring/corner/directional/west, +/obj/effect/spawner/random/trash/cigbutt, +/obj/structure/railing, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"D" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/broken_flooring/pile/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/obj/structure/table_frame, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/template_noop) +"K" = ( +/turf/closed/wall, +/area/template_noop) +"L" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/rack, +/obj/effect/turf_decal/box, +/obj/effect/spawner/random/exotic/antag_gear, +/obj/machinery/light/directional/north, +/obj/structure/sign/flag/terragov/directional/north, +/turf/open/floor/iron/dark, +/area/template_noop) +"N" = ( +/obj/structure/chair/stool/directional/west{ + pixel_x = 5 + }, +/obj/structure/sign/warning/yes_smoking/circle/directional/east, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/template_noop) +"O" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/effect/spawner/random/trash/garbage, +/obj/structure/sign/calendar/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/obj/effect/spawner/random/trash/bin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/command{ + name = "Corporate Showroom" + }, +/turf/open/floor/iron, +/area/template_noop) +"V" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/kirbyplants/random/dead, +/obj/effect/decal/remains/human, +/turf/open/floor/iron, +/area/template_noop) +"Y" = ( +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +z +z +z +z +z +z +z +z +v +"} +(2,1,1) = {" +z +K +K +K +K +T +K +K +z +"} +(3,1,1) = {" +z +K +Y +B +u +c +R +K +z +"} +(4,1,1) = {" +z +K +H +q +j +m +b +K +z +"} +(5,1,1) = {" +z +K +L +k +i +D +w +K +z +"} +(6,1,1) = {" +z +K +y +o +C +l +E +K +z +"} +(7,1,1) = {" +z +K +V +O +a +N +d +K +z +"} +(8,1,1) = {" +z +K +K +K +A +K +K +K +z +"} +(9,1,1) = {" +z +z +z +n +z +z +z +z +z +"} diff --git a/_maps/modular_generic/station_m_shuttle.dmm b/_maps/modular_generic/station_m_shuttle.dmm new file mode 100644 index 00000000000..4f1a2ebc98d --- /dev/null +++ b/_maps/modular_generic/station_m_shuttle.dmm @@ -0,0 +1,306 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/template_noop) +"e" = ( +/obj/machinery/computer{ + dir = 8; + name = "shuttle console"; + icon_screen = "shuttle" + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"f" = ( +/turf/open/floor/plating/rust, +/area/template_noop) +"h" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/ore/gold, +/turf/open/floor/iron/white/textured_edge{ + dir = 1 + }, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/glass/titanium, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/ore/titanium, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"k" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"l" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating/rust, +/area/template_noop) +"m" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/template_noop) +"n" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron, +/area/template_noop) +"o" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/crowbar/red, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"q" = ( +/obj/structure/broken_flooring/corner/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/effect/turf_decal/trimline/brown, +/obj/effect/turf_decal/trimline/brown/mid_joiner, +/obj/effect/turf_decal/trimline/brown/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"t" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) +"u" = ( +/turf/closed/wall/mineral/titanium, +/area/template_noop) +"v" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"x" = ( +/turf/open/floor/iron, +/area/template_noop) +"z" = ( +/obj/structure/table/reinforced, +/obj/item/climbing_hook/emergency, +/obj/item/pickaxe/emergency, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"A" = ( +/obj/machinery/door/airlock/shuttle/glass, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"C" = ( +/obj/structure/grille, +/obj/item/shard/titanium, +/turf/open/floor/plating, +/area/template_noop) +"G" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/template_noop) +"H" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/mob_spawn/corpse/human/miner, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/template_noop) +"K" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_half, +/area/template_noop) +"N" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/ore_box, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/template_noop) +"T" = ( +/obj/machinery/computer{ + dir = 1; + name = "shuttle console"; + icon_screen = "shuttle" + }, +/obj/structure/broken_flooring/corner/directional/south, +/turf/open/floor/plating, +/area/template_noop) +"V" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/template_noop) +"W" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/item/stack/ore/plasma, +/turf/open/floor/iron/white/textured_half{ + dir = 1 + }, +/area/template_noop) +"X" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/glowstick, +/obj/item/flashlight/glowstick{ + pixel_y = 3; + pixel_x = 3 + }, +/turf/open/floor/iron/white/textured_large, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +k +"} +(2,1,1) = {" +a +O +u +G +K +G +u +x +a +"} +(3,1,1) = {" +a +f +P +v +N +v +P +q +a +"} +(4,1,1) = {" +a +T +P +h +W +V +K +f +a +"} +(5,1,1) = {" +a +d +A +M +s +o +C +f +a +"} +(6,1,1) = {" +a +Y +P +I +H +i +m +t +a +"} +(7,1,1) = {" +a +l +P +z +e +X +P +n +a +"} +(8,1,1) = {" +a +n +u +K +K +K +u +f +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_m_tools.dmm b/_maps/modular_generic/station_m_tools.dmm new file mode 100644 index 00000000000..08c60a632f7 --- /dev/null +++ b/_maps/modular_generic/station_m_tools.dmm @@ -0,0 +1,323 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Auxiliary Tool Storage Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"c" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/template_noop) +"d" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 1 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/corner, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency{ + pixel_y = 2 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"g" = ( +/turf/closed/wall, +/area/template_noop) +"h" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/rods/ten, +/turf/open/floor/iron/edge{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/turf/open/floor/plating, +/area/template_noop) +"l" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"o" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"p" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/corner{ + dir = 1 + }, +/area/template_noop) +"t" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/corner{ + dir = 8 + }, +/area/template_noop) +"u" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/corner{ + dir = 4 + }, +/area/template_noop) +"w" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"y" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/engineering/flashlight, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/edge{ + dir = 2 + }, +/area/template_noop) +"z" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Auxiliary Tool Storage" + }, +/turf/open/floor/iron, +/area/template_noop) +"A" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/template_noop) +"E" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/fyellow{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/clothing/gloves/color/fyellow{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/template_noop) +"F" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"H" = ( +/obj/item/stack/tile/iron{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/plating, +/area/template_noop) +"J" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"N" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"Q" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"R" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/turf/open/floor/plating, +/area/template_noop) +"T" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Auxiliary Tool Storage" + }, +/obj/effect/decal/cleanable/fuel_pool, +/turf/open/floor/iron, +/area/template_noop) +"U" = ( +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +U +U +U +U +U +U +U +U +w +"} +(2,1,1) = {" +U +g +g +T +l +z +g +g +U +"} +(3,1,1) = {" +U +g +d +F +E +H +u +l +U +"} +(4,1,1) = {" +U +g +i +M +o +c +y +l +U +"} +(5,1,1) = {" +U +g +t +h +A +e +p +l +U +"} +(6,1,1) = {" +U +g +g +a +g +g +g +g +U +"} +(7,1,1) = {" +U +k +J +N +Q +O +V +R +U +"} +(8,1,1) = {" +U +g +g +g +g +g +g +g +U +"} +(9,1,1) = {" +U +U +U +U +U +U +U +U +U +"} diff --git a/_maps/modular_generic/station_s_chasm.dmm b/_maps/modular_generic/station_s_chasm.dmm new file mode 100644 index 00000000000..2865aca985b --- /dev/null +++ b/_maps/modular_generic/station_s_chasm.dmm @@ -0,0 +1,146 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/transfer_valve{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/structure/table_frame, +/turf/open/floor/iron, +/area/template_noop) +"b" = ( +/obj/structure/broken_flooring/side/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil{ + pixel_x = 5; + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/template_noop) +"d" = ( +/obj/structure/holosign/wetsign, +/turf/open/floor/plating/rust, +/area/template_noop) +"e" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/iron, +/area/template_noop) +"f" = ( +/obj/structure/holosign/barrier/engineering, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/rust, +/area/template_noop) +"j" = ( +/obj/structure/lattice, +/obj/structure/broken_flooring/plating/directional/east, +/turf/open/chasm/true, +/area/template_noop) +"n" = ( +/obj/structure/holosign/barrier/engineering, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/template_noop) +"o" = ( +/obj/structure/lattice, +/turf/open/chasm/true, +/area/template_noop) +"t" = ( +/obj/structure/broken_flooring/pile/directional/west, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plating, +/area/template_noop) +"C" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/broken_flooring/corner/directional/north, +/obj/item/tank/internals/plasma/empty, +/turf/open/floor/plating, +/area/template_noop) +"E" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron, +/area/template_noop) +"N" = ( +/turf/open/chasm/true, +/area/template_noop) +"P" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/iron, +/area/template_noop) +"T" = ( +/obj/structure/lattice, +/obj/structure/broken_flooring/plating/directional/south, +/turf/open/chasm/true, +/area/template_noop) +"V" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +V +V +V +V +V +V +C +"} +(2,1,1) = {" +V +P +N +n +D +e +V +"} +(3,1,1) = {" +V +b +N +N +j +E +V +"} +(4,1,1) = {" +V +N +N +N +o +d +V +"} +(5,1,1) = {" +V +N +T +N +N +N +V +"} +(6,1,1) = {" +V +f +t +N +N +a +V +"} +(7,1,1) = {" +V +V +V +V +V +V +V +"} diff --git a/_maps/modular_generic/station_s_garden.dmm b/_maps/modular_generic/station_s_garden.dmm new file mode 100644 index 00000000000..6944f7138e8 --- /dev/null +++ b/_maps/modular_generic/station_s_garden.dmm @@ -0,0 +1,193 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"f" = ( +/obj/structure/flora/bush/jungle/a/style_2{ + pixel_y = 10; + pixel_x = 4 + }, +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/template_noop) +"m" = ( +/obj/structure/flora/grass/jungle/a/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"n" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/station, +/area/template_noop) +"o" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/template_noop) +"p" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"u" = ( +/obj/structure/flora/tree/jungle/small{ + pixel_x = -25 + }, +/turf/open/floor/grass, +/area/template_noop) +"B" = ( +/obj/structure/flora/bush/flowers_br/style_2{ + pixel_x = 6 + }, +/obj/item/plant_analyzer{ + pixel_y = -2; + pixel_x = -3 + }, +/turf/open/floor/grass, +/area/template_noop) +"G" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/nutrient/ez{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) +"H" = ( +/obj/structure/flora/bush/jungle/b/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"I" = ( +/turf/closed/wall, +/area/template_noop) +"J" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/template_noop) +"O" = ( +/obj/structure/flora/rock/pile/jungle/style_2{ + pixel_y = -4 + }, +/obj/item/storage/bag/plants/portaseeder{ + pixel_y = 11 + }, +/turf/open/floor/grass, +/area/template_noop) +"P" = ( +/obj/structure/flora/grass/jungle/b/style_4{ + pixel_y = 8 + }, +/turf/open/misc/dirt/station, +/area/template_noop) +"Q" = ( +/obj/structure/flora/bush/flowers_br/style_3{ + pixel_x = 4 + }, +/turf/open/floor/grass, +/area/template_noop) +"R" = ( +/obj/structure/flora/rock/pile/jungle/style_5{ + pixel_y = -3 + }, +/turf/open/floor/grass, +/area/template_noop) +"U" = ( +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = -12; + pixel_y = -4 + }, +/obj/item/cultivator/rake{ + pixel_x = 6 + }, +/obj/structure/flora/bush/sparsegrass/style_2, +/turf/open/misc/dirt/station, +/area/template_noop) +"Y" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta/corner{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/effect/spawner/random/food_or_drink/seed{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/seed_rare{ + pixel_y = 7; + pixel_x = 2 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) +"Z" = ( +/obj/effect/turf_decal/siding/thinplating_new/terracotta{ + dir = 10 + }, +/turf/open/floor/iron/terracotta/small, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +p +"} +(2,1,1) = {" +a +u +o +o +I +I +a +"} +(3,1,1) = {" +a +m +R +B +n +J +a +"} +(4,1,1) = {" +a +H +P +f +U +J +a +"} +(5,1,1) = {" +a +I +G +Q +O +o +a +"} +(6,1,1) = {" +a +I +Y +Z +o +o +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_s_kitchen.dmm b/_maps/modular_generic/station_s_kitchen.dmm new file mode 100644 index 00000000000..95a65c1d4ab --- /dev/null +++ b/_maps/modular_generic/station_s_kitchen.dmm @@ -0,0 +1,204 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/knife/kitchen{ + pixel_y = 4; + pixel_x = 10 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"c" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"d" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"m" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/template_noop) +"q" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/template_noop) +"r" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/machinery/grill, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"u" = ( +/obj/effect/turf_decal/siding/dark, +/obj/item/storage/box/ingredients/random{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"w" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"y" = ( +/turf/closed/wall, +/area/template_noop) +"z" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/closet/secure_closet/freezer/fridge/all_access, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"C" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/kitchen/tongs{ + pixel_y = 6; + pixel_x = 6 + }, +/turf/open/floor/iron, +/area/template_noop) +"D" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 10 + }, +/turf/open/floor/iron, +/area/template_noop) +"F" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/closet/crate/bin{ + pixel_y = 2 + }, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"G" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"I" = ( +/obj/effect/turf_decal/trimline/green/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"L" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/ketchup{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/plate/small{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/template_noop) +"M" = ( +/obj/effect/turf_decal/trimline/green/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/template_noop) +"P" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/template_noop) +"S" = ( +/turf/open/floor/iron/kitchen, +/area/template_noop) +"U" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen, +/area/template_noop) +"V" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +V +V +V +V +V +V +G +"} +(2,1,1) = {" +V +y +m +m +m +y +V +"} +(3,1,1) = {" +V +q +z +a +u +C +V +"} +(4,1,1) = {" +V +P +c +S +U +L +V +"} +(5,1,1) = {" +V +D +F +d +r +y +V +"} +(6,1,1) = {" +V +I +w +M +w +D +V +"} +(7,1,1) = {" +V +V +V +V +V +V +V +"} diff --git a/_maps/modular_generic/station_s_mime.dmm b/_maps/modular_generic/station_s_mime.dmm new file mode 100644 index 00000000000..60d6e4ca7ea --- /dev/null +++ b/_maps/modular_generic/station_s_mime.dmm @@ -0,0 +1,138 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/structure/table/wood/fancy/royalblack, +/obj/item/toy/crayon/spraycan/mimecan{ + pixel_x = 6; + pixel_y = 17 + }, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/food/baguette, +/turf/open/floor/iron/checker, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/checker, +/area/template_noop) +"o" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/checker, +/area/template_noop) +"v" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/template_noop) +"A" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/effect/forcefield/mime/advanced{ + initial_duration = 0 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"K" = ( +/obj/structure/dresser, +/obj/item/toy/figure/mime{ + pixel_y = 13; + pixel_x = -5 + }, +/obj/item/stamp/mime{ + pixel_y = 13; + pixel_x = 7 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"L" = ( +/obj/structure/table/wood, +/obj/item/clothing/accessory/mime_fan_pin{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/effect/spawner/random/decoration/flower{ + pixel_y = 4; + pixel_x = 7 + }, +/turf/open/floor/iron/checker, +/area/template_noop) +"Q" = ( +/turf/open/floor/iron/checker, +/area/template_noop) +"Y" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + name = "mime's closet" + }, +/obj/item/clothing/mask/gas/mime, +/obj/item/book/granter/action/spell/mime/mimery, +/turf/open/floor/iron/checker, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +A +"} +(2,1,1) = {" +a +i +v +v +H +H +a +"} +(3,1,1) = {" +a +H +K +v +o +v +a +"} +(4,1,1) = {" +a +H +d +Q +L +H +a +"} +(5,1,1) = {" +a +v +Q +i +Y +H +a +"} +(6,1,1) = {" +a +v +v +H +H +H +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/modular_generic/station_s_vault.dmm b/_maps/modular_generic/station_s_vault.dmm new file mode 100644 index 00000000000..774d50d3152 --- /dev/null +++ b/_maps/modular_generic/station_s_vault.dmm @@ -0,0 +1,205 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"e" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/template_noop) +"k" = ( +/obj/effect/mob_spawn/corpse/human/generic_assistant, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 13; + pixel_x = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/template_noop) +"o" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half, +/area/template_noop) +"r" = ( +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes"; + pixel_x = -13; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning, +/turf/open/floor/iron/smooth_half, +/area/template_noop) +"t" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/template_noop) +"y" = ( +/obj/structure/safe, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/item/ammo_box/a357, +/obj/item/gun/ballistic/revolver/golden, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/template_noop) +"z" = ( +/obj/structure/closet/crate/preopen, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold{ + pixel_y = 2; + pixel_x = 7 + }, +/obj/item/coin/gold/doubloon{ + pixel_x = -8 + }, +/obj/item/stack/ore/gold, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/turf/open/floor/iron/smooth_corner, +/area/template_noop) +"J" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"M" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner, +/obj/effect/turf_decal/trimline/white, +/turf/open/floor/iron/smooth, +/area/template_noop) +"Q" = ( +/turf/closed/wall/r_wall, +/area/template_noop) +"U" = ( +/obj/effect/spawner/random/structure/barricade, +/obj/structure/door_assembly/door_assembly_vault, +/turf/open/floor/iron/smooth_large, +/area/template_noop) +"Z" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 8 + }, +/obj/machinery/light/small/red/dim/directional/south, +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/template_noop) + +(1,1,1) = {" +a +a +a +a +a +a +J +"} +(2,1,1) = {" +a +Q +t +Q +Q +Q +a +"} +(3,1,1) = {" +a +Q +z +d +k +Q +a +"} +(4,1,1) = {" +a +Q +o +M +r +U +a +"} +(5,1,1) = {" +a +Q +y +e +Z +Q +a +"} +(6,1,1) = {" +a +Q +Q +Q +t +Q +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +"} diff --git a/_maps/safehouses/TEMPLATES/TEMPLATE.dmm b/_maps/safehouses/TEMPLATES/TEMPLATE.dmm index c8e5059f0d0..03eaca12fb1 100644 --- a/_maps/safehouses/TEMPLATES/TEMPLATE.dmm +++ b/_maps/safehouses/TEMPLATES/TEMPLATE.dmm @@ -13,11 +13,11 @@ /turf/open/floor/plating, /area/virtual_domain/safehouse) "v" = ( -/obj/effect/bitrunning/exit_spawn, +/obj/effect/landmark/bitrunning/hololadder_spawn, /turf/open/floor/plating, /area/virtual_domain/safehouse) "N" = ( -/obj/effect/bitrunning/goal_turf, +/obj/effect/landmark/bitrunning/cache_goal_turf, /turf/open/floor/plating, /area/virtual_domain/safehouse) "R" = ( diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 0fca873aaa1..649c16bdcf4 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -242,7 +242,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/shuttle/arrival) diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index efe506d8f87..e4838e040e4 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -377,7 +377,7 @@ /turf/open/floor/pod/dark, /area/shuttle/pirate) "zm" = ( -/obj/item/storage/secure/safe/directional/north, +/obj/structure/secure_safe/directional/north, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/all_access, /obj/structure/bed/pod, diff --git a/_maps/shuttles/skyrat/emergency_skyrat.dmm b/_maps/shuttles/skyrat/emergency_skyrat.dmm index fee55c936e9..ead17d8442f 100644 --- a/_maps/shuttles/skyrat/emergency_skyrat.dmm +++ b/_maps/shuttles/skyrat/emergency_skyrat.dmm @@ -517,7 +517,6 @@ /obj/item/tank/internals/anesthetic{ pixel_y = 3 }, -/obj/item/clothing/mask/breath/anesthetic, /obj/effect/turf_decal/box/white/corners{ dir = 8 }, diff --git a/_maps/shuttles/skyrat/pirate_nri_raider.dmm b/_maps/shuttles/skyrat/pirate_nri_raider.dmm index 5c44bc377d4..932fe6348ba 100644 --- a/_maps/shuttles/skyrat/pirate_nri_raider.dmm +++ b/_maps/shuttles/skyrat/pirate_nri_raider.dmm @@ -17,12 +17,12 @@ /obj/item/storage/box/zipties{ pixel_x = 2 }, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser, /obj/item/melee/baton, /obj/item/melee/baton, /obj/item/melee/baton, +/obj/item/gun/energy/e_gun/advtaser/normal, +/obj/item/gun/energy/e_gun/advtaser/normal, +/obj/item/gun/energy/e_gun/advtaser/normal, /turf/open/floor/pod, /area/shuttle/pirate/nri) "be" = ( @@ -383,14 +383,12 @@ desc = "A secure crate to keep all your personal belongings in."; anchored = 1 }, -/obj/item/clothing/under/costume/nri/engineer, /obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, /obj/item/clothing/glasses/meson/engine, /obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, /obj/item/encryptionkey/heads/ce, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) @@ -469,8 +467,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/item/gun/ballistic/shotgun/riot, /obj/item/gun/ballistic/automatic/nri_smg, +/obj/item/gun/ballistic/shotgun/automatic/combat/compact, /turf/open/floor/pod, /area/shuttle/pirate/nri) "rp" = ( @@ -817,13 +815,11 @@ anchored = 1 }, /obj/item/clothing/glasses/hud/health, -/obj/item/clothing/under/costume/nri/medic, /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, /obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, /obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, /obj/item/encryptionkey/heads/cmo, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) @@ -943,13 +939,11 @@ desc = "A secure crate to keep all your personal belongings in."; anchored = 1 }, -/obj/item/clothing/under/costume/nri/captain, /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper, /obj/item/clothing/mask/balaclavaadjust, -/obj/item/clothing/under/syndicate/rus_army/cin_surplus/marine, /obj/item/storage/belt/military/cin_surplus/marine, -/obj/item/clothing/suit/armor/vest/cin_surplus_vest, -/obj/item/clothing/head/helmet/cin_surplus_helmet/marine, +/obj/item/clothing/head/helmet/nri_police, +/obj/item/clothing/suit/armor/vest/nri_police, /obj/item/encryptionkey/heads/hos, /turf/open/floor/pod/light, /area/shuttle/pirate/nri) diff --git a/_maps/shuttles/skyrat/whiteship_blueshift.dmm b/_maps/shuttles/skyrat/whiteship_blueshift.dmm index 187ae424c11..998e435d1d5 100644 --- a/_maps/shuttles/skyrat/whiteship_blueshift.dmm +++ b/_maps/shuttles/skyrat/whiteship_blueshift.dmm @@ -3261,7 +3261,6 @@ /obj/structure/alien/weeds/node, /obj/machinery/anesthetic_machine, /obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath/anesthetic, /turf/open/floor/iron/white/side, /area/shuttle/abandoned/medbay) "FB" = ( diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm index 4a632a01df2..170c3db24bd 100644 --- a/_maps/shuttles/whiteship_obelisk.dmm +++ b/_maps/shuttles/whiteship_obelisk.dmm @@ -122,7 +122,7 @@ /area/shuttle/abandoned/engine) "gw" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" @@ -134,7 +134,7 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/shuttle/abandoned/engine) "hg" = ( -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/blood/old, /obj/structure/cable, /turf/open/floor/mineral/titanium/white, @@ -166,7 +166,7 @@ /area/shuttle/abandoned/engine) "ji" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, @@ -438,7 +438,7 @@ /area/shuttle/abandoned/crew) "yo" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" @@ -616,7 +616,7 @@ /area/shuttle/abandoned) "IH" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/blood/gibs/core, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -781,7 +781,7 @@ /area/shuttle/abandoned/medbay) "SE" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/proteon/hostile, +/mob/living/basic/construct/proteon/hostile, /obj/effect/decal/cleanable/crayon{ icon_state = "rune4"; paint_colour = "#DC143C" diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm b/_maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm new file mode 100644 index 00000000000..903d69e1062 --- /dev/null +++ b/_maps/skyrat/automapper/templates/deltastation/deltastation_armory.dmm @@ -0,0 +1,149 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"j" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 3 + }, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/shotguns, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"k" = ( +/obj/structure/secure_safe/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/dish_drive/bullet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"l" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 3 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/microfusion, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"E" = ( +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/item/clothing/suit/armor/vest/alt/sec{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/suit/armor/vest/alt/sec, +/obj/item/clothing/suit/armor/vest/alt/sec{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet/sec{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/sec, +/obj/item/clothing/head/helmet/sec{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"L" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 3 + }, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/smg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"M" = ( +/obj/structure/rack, +/obj/item/gun/energy/ionrifle, +/obj/item/clothing/suit/hooded/ablative, +/obj/item/gun/energy/temperature/security, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"O" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/north, +/obj/item/storage/barricade{ + pixel_y = 10 + }, +/obj/item/storage/barricade{ + pixel_y = 5 + }, +/obj/item/storage/barricade, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"R" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/armory/riot_helmet, +/obj/effect/spawner/random/armory/riot_armor, +/obj/effect/spawner/random/armory/riot_shield, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"U" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/armory/bulletproof_armor, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"X" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 3 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/closet/secure_closet/armory_kiboko, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"Y" = ( +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +O +Y +X +L +j +l +"} +(2,1,1) = {" +Y +Y +E +U +R +M +"} +(3,1,1) = {" +Y +Y +Y +Y +Y +Y +"} +(4,1,1) = {" +Y +Y +Y +k +Y +Y +"} diff --git a/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm b/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm index 2ce018e9314..0cbab5e2916 100644 --- a/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm +++ b/_maps/skyrat/automapper/templates/deltastation/deltastation_ntrep_office.dmm @@ -41,6 +41,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/nt_rep) +"h" = ( +/obj/machinery/light/directional/west, +/turf/template_noop, +/area/template_noop) "i" = ( /turf/template_noop, /area/template_noop) @@ -190,6 +194,12 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) +"H" = ( +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "I" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -382,3 +392,12 @@ L w a "} +(11,1,1) = {" +i +i +i +i +H +i +h +"} diff --git a/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm b/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm index 236cd7e7831..d3035bcc07a 100644 --- a/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm +++ b/_maps/skyrat/automapper/templates/kilostation/kilostation_cryo.dmm @@ -107,7 +107,7 @@ /area/station/common/cryopods) "Q" = ( /obj/structure/table, -/obj/item/storage/secure/briefcase, +/obj/item/storage/briefcase/secure, /obj/item/taperecorder, /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/floor/iron/dark, diff --git a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm index 6fe9529fb52..e488cbeb684 100644 --- a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm +++ b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm @@ -687,7 +687,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "xo" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, +/mob/living/basic/mining/gutlunch/grub, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "xY" = ( @@ -943,7 +943,7 @@ /obj/structure/stone_tile/block{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, +/mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "Hf" = ( @@ -1185,7 +1185,7 @@ /turf/closed/indestructible/riveted/boss, /area/ruin/unpowered/ash_walkers) "QU" = ( -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, +/mob/living/basic/mining/gutlunch/milk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "Re" = ( diff --git a/_maps/skyrat/holodeck_wargame.dmm b/_maps/skyrat/holodeck_wargame.dmm index ad09edb2a45..bfdb99aace5 100644 --- a/_maps/skyrat/holodeck_wargame.dmm +++ b/_maps/skyrat/holodeck_wargame.dmm @@ -4,7 +4,7 @@ dir = 10 }, /obj/structure/table/wood, -/obj/item/storage/secure/briefcase/white/wargame_kit, +/obj/item/storage/briefcase/secure/white/wargame_kit, /turf/open/floor/holofloor/wood, /area/template_noop) "b" = ( diff --git a/_maps/templates/holodeck_medicalsim.dmm b/_maps/templates/holodeck_medicalsim.dmm index acc38d02c58..871e5461491 100644 --- a/_maps/templates/holodeck_medicalsim.dmm +++ b/_maps/templates/holodeck_medicalsim.dmm @@ -568,6 +568,8 @@ /obj/item/surgical_drapes, /obj/item/razor, /obj/item/hemostat, +/obj/item/bonesetter, +/obj/item/stack/medical/bone_gel, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, diff --git a/_maps/templates/lazy_templates/heretic_sacrifice.dmm b/_maps/templates/lazy_templates/heretic_sacrifice.dmm index 06ace91956c..44300c13735 100644 --- a/_maps/templates/lazy_templates/heretic_sacrifice.dmm +++ b/_maps/templates/lazy_templates/heretic_sacrifice.dmm @@ -44,7 +44,7 @@ /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "fO" = ( /turf/open/indestructible, /area/space) @@ -59,7 +59,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/storage/toolbox/mechanical/old, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "hZ" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/indestructible/necropolis/air, @@ -71,7 +71,7 @@ /area/centcom/heretic_sacrifice/rust) "jt" = ( /turf/closed/indestructible/reinforced, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "jB" = ( /obj/machinery/light/very_dim/directional/south, /turf/open/misc/asteroid, @@ -105,7 +105,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/spear, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "mZ" = ( /obj/effect/decal/fakelattice{ density = 0 @@ -176,7 +176,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/storage/toolbox/mechanical/old, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "qu" = ( /obj/effect/turf_decal/weather/dirt, /turf/open/misc/ashplanet/wateryrock{ @@ -234,7 +234,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/under/color/grey/ancient, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "uT" = ( /obj/structure/cable, /turf/open/floor/plating/rust, @@ -260,7 +260,7 @@ /area/centcom/heretic_sacrifice/ash) "wo" = ( /turf/closed/indestructible/grille, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "wt" = ( /obj/structure/stone_tile/block{ dir = 1 @@ -285,7 +285,7 @@ start_on = 1 }, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "wS" = ( /turf/open/misc/dirt/jungle/dark{ planetary_atmos = 0; @@ -326,7 +326,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/mask/gas, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "AH" = ( /obj/effect/turf_decal/trimline/brown/corner, /turf/open/floor/plating/rust, @@ -345,11 +345,11 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/mask/gas/tiki_mask/yalp_elor, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "AY" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Bv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/brown/line, @@ -405,7 +405,7 @@ /area/centcom/heretic_sacrifice/ash) "En" = ( /turf/closed/indestructible/fakedoor/maintenance, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "ER" = ( /turf/open/misc/ironsand, /area/centcom/heretic_sacrifice/rust) @@ -543,7 +543,7 @@ start_on = 1 }, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Nh" = ( /obj/effect/turf_decal/trimline/brown/line{ dir = 1 @@ -589,7 +589,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/under/color/grey/ancient, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "Pl" = ( /obj/effect/turf_decal/weather/dirt{ dir = 6 @@ -712,9 +712,9 @@ "Zw" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/heretic/knock, +/obj/effect/landmark/heretic/lock, /turf/open/indestructible/plating, -/area/centcom/heretic_sacrifice/knock) +/area/centcom/heretic_sacrifice/lock) "ZA" = ( /turf/closed/indestructible/riveted/boss, /area/centcom/heretic_sacrifice/ash) diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index d6e8dcfc607..ac3de4c4b26 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -320,6 +320,10 @@ "dI" = ( /obj/structure/dresser, /obj/structure/noticeboard/directional/south, +/obj/item/dyespray{ + pixel_x = -3; + pixel_y = 13 + }, /turf/open/floor/iron/smooth_half{ dir = 1 }, @@ -852,6 +856,10 @@ "jq" = ( /obj/structure/dresser, /obj/structure/noticeboard/directional/north, +/obj/item/dyespray{ + pixel_x = -2; + pixel_y = 15 + }, /turf/open/floor/iron/smooth_half{ dir = 1 }, diff --git a/_maps/virtual_domains/README.md b/_maps/virtual_domains/README.md index a02d43e1575..723af1b34c2 100644 --- a/_maps/virtual_domains/README.md +++ b/_maps/virtual_domains/README.md @@ -1,32 +1,33 @@ # Making new virtual domains -## From scratch - -1. Create a new map using TGM format. It can be any size, but please, consider limiting to 75x75 max. -2. Ensure that the map has ONE tile marked with the safehouse bottom left landmark. If you're using modular safehouses, it will need to be a 7x6 area. -4. Provide a way for players to enter your new map via the north door, which is 4th tile over. -5. Enclose your area with a single wall binary closed wall. - -## From an existing map +## REQUIRED: +1. One way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signable landmark if you have a points system. +2. Place a virtual domain baseturf helper in each area. +3. Ensure that the map has ONE tile marked with the safehouse bottom left landmark. If you're using modular safehouses, it will need an open 7x6 area. +4. Placing a safehouse area is redundant, but it will ensure there is power in the starting safehouse. +5. Create the dm file that defines the map qualities. You can use the existing ones as a template. +## Converting an existing map 1. Create a new map using the existing map's size - give yourself enough room to enclose it with a binary wall. There's no need for any space outside of it, so ensure that it fits and is enclosed, nothing outside of this. 2. Copy and paste the existing map into it. -3. Find an accessible area for a safehouse, 7x6 - or with a custom, just ensure the necessary landmarks are placed. +3. Find an accessible area for a safehouse, 7x6. 4. Place a bottom left safehouse landmark somewhere on the map to load the safehouse. -## BOTH. -1. You need to have one (1) way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signable landmark if you have a points system. -2. Make note of the size of the map. Make sure this is in the dm file. -3. Create the dm file that defines the map qualities. Examples are in the bitrunning file. - -### Notes - +## Notes You shouldn't need to fully enclose your map in 15 tiles of binary filler. Using one solid wall should do the trick. +For areas, ideally just one on the map and one for the safehouse. Vdoms should never last so long as to need individual area power and atmos unless you're specifically going for a gimmick. + +Use modular mob segments! Use modular map segments! Add some variety to your maps! Just make sure you've set your map to have "is_modular" afterwards. + Adding some open tile padding around the safehouse is a good touch. About 7 tiles West/East for the visual effect of a larger map. If you want to add prep gear, you can do so within the safehouse's area as long you don't overlap with goal turfs or exit spawners. The top left corner is a good spot for this, with respect for the walls, therefore [1, 1], [1, 2], [1, 3] -You can also create safehouses if you find yourself needing the same gear over and over again. There is a readme for that as well. +You can also create a specific safehouse if you find yourself needing the same gear over and over again. There is a readme for that as well. Boss zones should give players pretty ample space, I've been using a 23x23 minimum area. + +While it's not a hard set rule, 75x75 is the guideline for max size. The main issue is keeping them in the domain for too long. + +You have the option of baking in your own safehouse and ignoring the 7x6 guideline. To do this, you will still need a safehouse landmark and a file to load - even if it's empty. Ensure that you have the necessary landmarks placed that normally go in a safehouse on the map itself. diff --git a/_maps/virtual_domains/ash_drake.dmm b/_maps/virtual_domains/ash_drake.dmm index 50fbac8696a..6056136a278 100644 --- a/_maps/virtual_domains/ash_drake.dmm +++ b/_maps/virtual_domains/ash_drake.dmm @@ -21,7 +21,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "i" = ( /obj/structure/marker_beacon/jade, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -35,7 +35,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "q" = ( -/mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/dragon, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "s" = ( diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index 29fe04d8283..628265552f1 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -4,10 +4,10 @@ /obj/effect/turf_decal/sand, /obj/structure/sign/poster/contraband/have_a_puff/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ag" = ( /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "as" = ( /obj/structure/closet/crate/bin, /obj/item/tank/internals/emergency_oxygen, @@ -16,14 +16,14 @@ /obj/effect/turf_decal/sand, /obj/machinery/light/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aw" = ( /obj/machinery/grill, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aE" = ( /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "aZ" = ( /obj/machinery/light/small/directional/east, /obj/structure/closet/crate{ @@ -32,57 +32,57 @@ /obj/item/stack/sheet/mineral/coal/ten, /obj/item/stack/sheet/mineral/coal/ten, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bf" = ( /mob/living/basic/crab{ name = "Jonny" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bC" = ( /obj/effect/turf_decal/sand, /mob/living/basic/crab{ name = "James" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bM" = ( /mob/living/basic/crab{ name = "Jon" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bQ" = ( /obj/structure/fluff/beach_umbrella/cap, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bS" = ( /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo"; pixel_x = -4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cb" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/lsd, /obj/item/reagent_containers/pill/lsd, /obj/item/reagent_containers/pill/lsd, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cv" = ( /turf/open/floor/carpet/royalblue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cz" = ( /obj/effect/turf_decal/sand, /obj/machinery/jukebox, /obj/item/coin/gold, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cG" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "db" = ( /obj/item/reagent_containers/cup/glass/bottle/beer/light, /obj/item/reagent_containers/cup/glass/bottle/beer/light, @@ -113,7 +113,7 @@ /obj/item/reagent_containers/cup/glass/colocup, /obj/item/reagent_containers/cup/glass/colocup, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "di" = ( /obj/machinery/vending/boozeomat, /obj/effect/mapping_helpers/atom_injector/obj_flag{ @@ -121,37 +121,37 @@ target_type = /obj/machinery/vending/boozeomat }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dj" = ( /turf/open/misc/beach/coast{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dx" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dI" = ( /obj/machinery/light/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dZ" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ed" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "er" = ( /obj/structure/noticeboard/staff, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "fc" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/happy, @@ -159,22 +159,18 @@ pixel_x = -8; pixel_y = -1 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_y = 8; - pixel_x = 5 - }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "fr" = ( /obj/item/melee/skateboard/hoverboard, /obj/machinery/light/directional/west, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "gh" = ( /obj/structure/flora/bush/stalky/style_random, /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "gl" = ( /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) @@ -185,21 +181,21 @@ /turf/open/misc/beach/coast{ dir = 4 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hk" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hE" = ( /obj/structure/sign/departments/restroom/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hG" = ( /obj/machinery/door/airlock/sandstone{ name = "Surfer Shack 1" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "iz" = ( /turf/closed/indestructible/binary, /area/lavaland/surface/outdoors/virtual_domain) @@ -210,18 +206,18 @@ /obj/item/reagent_containers/cup/rag, /obj/machinery/light/small/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jc" = ( /turf/open/floor/iron/stairs/right, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jg" = ( /obj/machinery/vending/hydronutrients, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jl" = ( /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jy" = ( /obj/effect/turf_decal/sand{ density = 1 @@ -230,7 +226,7 @@ /turf/open/floor/pod/light{ density = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ke" = ( /obj/structure/marker_beacon/bronze, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -242,7 +238,7 @@ }, /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kv" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, @@ -251,45 +247,45 @@ /obj/structure/table, /obj/machinery/reagentgrinder, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kK" = ( /obj/structure/mirror/directional/west, /obj/structure/sink/kitchen/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kT" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lq" = ( /obj/item/melee/skateboard/hoverboard, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lB" = ( /obj/item/toy/seashell, /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "lS" = ( /turf/open/floor/light/colour_cycle/dancefloor_a, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ml" = ( /turf/template_noop, /area/virtual_domain/safehouse) "mq" = ( /obj/structure/closet/secure_closet/freezer/kitchen/all_access, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mG" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mP" = ( /turf/open/misc/beach/coast/corner{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mX" = ( /obj/structure/closet/secure_closet/freezer/meat/all_access, /obj/item/food/meat/rawbacon, @@ -299,12 +295,12 @@ /obj/item/food/meat/slab/rawcrab, /obj/item/food/meat/slab/rawcrab, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "nP" = ( /obj/item/stack/sheet/iron/fifty, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "oE" = ( /obj/structure/railing/corner{ dir = 1 @@ -313,57 +309,57 @@ /turf/open/misc/beach/coast/corner{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "oP" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pr" = ( /turf/template_noop, /area/template_noop) "pC" = ( /obj/machinery/computer/arcade/battle, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pT" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pZ" = ( /obj/machinery/light/directional/south, /turf/open/misc/beach/coast{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qc" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qg" = ( /obj/structure/sign/poster/contraband/space_up/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qR" = ( /obj/effect/spawner/structure/window, /obj/structure/curtain, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qW" = ( /obj/item/melee/skateboard/hoverboard, /mob/living/basic/chicken{ name = "Chicken Joe" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rc" = ( /obj/machinery/light/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ri" = ( /obj/structure/sign/poster/official/fruit_bowl, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rm" = ( /obj/item/storage/crayons, /obj/structure/closet/crate/wooden, @@ -371,11 +367,11 @@ /obj/item/canvas/twentythree_twentythree, /obj/item/canvas/twentythree_twentythree, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "rT" = ( /obj/item/toy/seashell, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "sT" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -385,20 +381,19 @@ name = "Resort Casino" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "tF" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "tZ" = ( /obj/structure/toilet, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uc" = ( /obj/machinery/light/small/directional/east, -/obj/machinery/light/small/directional/east, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ug" = ( /obj/structure/closet/secure_closet{ icon_state = "cabinet"; @@ -414,31 +409,33 @@ /obj/item/clothing/suit/costume/hawaiian, /obj/machinery/light/small/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uk" = ( /obj/structure/closet/crate/hydroponics, /obj/item/shovel/spade, /obj/item/reagent_containers/cup/bucket, /obj/item/cultivator, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_x = -4; - pixel_y = 8 +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = -7; + pixel_y = 5 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uU" = ( /obj/effect/turf_decal/sand, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uV" = ( /obj/structure/flora/coconuts, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ve" = ( /obj/item/toy/dodgeball, /obj/item/toy/dodgeball, @@ -446,33 +443,33 @@ /obj/item/toy/dodgeball, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vp" = ( /obj/machinery/light/directional/east, /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vq" = ( /obj/machinery/oven/range, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vv" = ( /obj/structure/chair/stool/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vN" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/morphine, /obj/item/reagent_containers/pill/morphine, /obj/item/reagent_containers/pill/morphine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "vT" = ( /obj/structure/railing{ dir = 8 }, /turf/open/misc/beach/coast/corner, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "wb" = ( /obj/structure/closet/crate/freezer{ name = "Cooler" @@ -496,10 +493,10 @@ /obj/item/reagent_containers/cup/glass/bottle/beer/light, /obj/item/reagent_containers/cup/glass/bottle/beer/light, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "wD" = ( /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xb" = ( /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) @@ -508,16 +505,16 @@ /obj/item/storage/dice, /obj/item/stack/spacecash/c1000, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xq" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/megaphone, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xw" = ( /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xJ" = ( /obj/structure/closet/cabinet, /obj/item/storage/backpack/duffelbag, @@ -529,7 +526,7 @@ /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/neck/beads, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xR" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north{ @@ -540,7 +537,7 @@ /obj/item/clothing/under/shorts/red, /obj/item/clothing/glasses/sunglasses, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xW" = ( /turf/open/space/basic, /area/space) @@ -550,14 +547,14 @@ /obj/item/reagent_containers/pill/zoom, /obj/item/reagent_containers/pill/zoom, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yi" = ( /obj/structure/sink/kitchen/directional/west{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yl" = ( /obj/item/reagent_containers/cup/glass/colocup{ pixel_x = -7; @@ -572,39 +569,39 @@ pixel_y = -3 }, /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ys" = ( /obj/effect/turf_decal/sand, /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yv" = ( /obj/effect/turf_decal/sand, /obj/machinery/food_cart, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yB" = ( /obj/item/instrument/guitar, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yU" = ( /obj/structure/sign/warning/gas_mask/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yX" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/carpet/red, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zn" = ( /obj/machinery/light/directional/east, /turf/open/misc/beach/coast{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zw" = ( /obj/structure/punching_bag, /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zI" = ( /obj/structure/marker_beacon/indigo, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -612,7 +609,7 @@ "zU" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Aa" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -620,11 +617,11 @@ }, /obj/machinery/light/directional/west, /turf/open/floor/sepia, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ae" = ( /obj/structure/chair, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Al" = ( /turf/closed/mineral/random/volcanic, /area/lavaland/surface/outdoors/virtual_domain) @@ -635,19 +632,19 @@ "Au" = ( /obj/structure/fluff/beach_umbrella/science, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "AI" = ( /obj/structure/table/reinforced, /obj/machinery/reagentgrinder, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "AP" = ( /obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ dir = 1 }, /obj/structure/table/wood, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Br" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck/cas{ @@ -658,73 +655,73 @@ pixel_y = 2 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Bu" = ( /turf/open/misc/beach/coast{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Bw" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BD" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/saltshaker, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BJ" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BM" = ( /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BQ" = ( /obj/machinery/seed_extractor, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Cb" = ( /obj/machinery/light/directional/north, /mob/living/basic/crab{ name = "Eddie" }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Cv" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "CA" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/mob_spawn/ghost_role/human/beach/lifeguard, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "CO" = ( /obj/machinery/vending/dinnerware, /obj/machinery/light/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Db" = ( /obj/machinery/barsign/all_access, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ds" = ( /obj/machinery/door/airlock/public/glass{ name = "Resort Lobby" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Dt" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "DL" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Em" = ( /obj/item/reagent_containers/condiment/enzyme{ layer = 5 @@ -734,28 +731,28 @@ }, /obj/structure/table, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Et" = ( /obj/machinery/light/small/directional/east, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ev" = ( /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "EC" = ( /obj/structure/sign/warning/gas_mask/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "EP" = ( /obj/machinery/light/directional/north, /obj/machinery/washing_machine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Fn" = ( /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FM" = ( /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/template_noop, @@ -765,26 +762,26 @@ /obj/item/secateurs, /obj/item/reagent_containers/cup/bottle/nutrient/ez, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FS" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/warning/no_smoking/circle/directional/east, /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FY" = ( /obj/structure/mineral_door/wood, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Gh" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/poster/contraband/starkist/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Gz" = ( /obj/structure/flora/tree/palm, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "GA" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -793,56 +790,56 @@ /obj/item/storage/medkit/regular, /obj/item/storage/medkit/brute, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Hs" = ( /obj/machinery/shower/directional/west, /turf/open/floor/iron/white, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "HF" = ( /obj/machinery/deepfryer, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ia" = ( /obj/structure/urinal/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ii" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/stairs/left, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ir" = ( /obj/machinery/vending/cola, /obj/effect/turf_decal/sand, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Iv" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/peppermill, /obj/item/reagent_containers/condiment/soysauce, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IH" = ( /obj/item/toy/beach_ball, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IM" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/light/directional/east, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IP" = ( /obj/machinery/vending/snack, /obj/effect/turf_decal/sand, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Jt" = ( /obj/item/reagent_containers/cup/glass/bottle/beer, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JC" = ( /obj/structure/fluff/beach_umbrella/engine, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JE" = ( /obj/structure/closet/secure_closet/freezer/kitchen/all_access, /obj/item/reagent_containers/condiment/milk, @@ -850,53 +847,53 @@ /obj/item/reagent_containers/condiment/flour, /obj/item/reagent_containers/condiment/flour, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JY" = ( /obj/structure/flora/rock/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Kd" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/mineral/sandstone, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KH" = ( /obj/structure/mineral_door/wood{ name = "Croupier's Booth" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KZ" = ( /obj/structure/flora/bush/stalky/style_random, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "LD" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "LW" = ( /obj/item/storage/cans/sixbeer, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mp" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain{ - pixel_y = 7; - pixel_x = 4 +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada{ + pixel_x = 8; + pixel_y = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mw" = ( /obj/structure/chair/sofa/right/brown, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mz" = ( /obj/structure/chair/sofa/left/brown, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nr" = ( /obj/machinery/light/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nw" = ( /obj/item/bedsheet/dorms{ dir = 4 @@ -905,7 +902,7 @@ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "NM" = ( /obj/structure/closet/crate/hydroponics, /obj/item/food/grown/ambrosia/vulgaris, @@ -919,32 +916,32 @@ /obj/item/food/grown/ambrosia/vulgaris, /obj/item/food/grown/ambrosia/vulgaris, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "NX" = ( /obj/effect/landmark/bitrunning/loot_signal, /turf/open/floor/light/colour_cycle/dancefloor_a, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OE" = ( /obj/effect/mob_spawn/ghost_role/human/beach{ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OK" = ( /obj/structure/sign/warning/gas_mask/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OR" = ( /obj/machinery/light/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OW" = ( /obj/structure/sink/kitchen/directional/east{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink" }, /turf/open/floor/pod/light, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "OZ" = ( /obj/structure/marker_beacon/teal, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -953,30 +950,30 @@ /obj/structure/chair/wood, /obj/machinery/light/directional/west, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Pg" = ( /obj/structure/sign/poster/official/high_class_martini/directional/west, /obj/effect/mob_spawn/ghost_role/human/bartender{ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "PM" = ( /obj/machinery/door/airlock/external/ruin, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Qb" = ( /obj/machinery/griddle, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Qu" = ( /obj/structure/curtain, /turf/open/floor/iron/white, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "QP" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "QX" = ( /obj/machinery/chem_dispenser/drinks/fullupgrade{ dir = 1 @@ -984,10 +981,10 @@ /obj/structure/table/wood, /obj/machinery/light/small/directional/east, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Rx" = ( /turf/open/floor/iron/stairs/medium, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "RL" = ( /obj/structure/closet/cabinet, /obj/item/storage/backpack/duffelbag, @@ -999,173 +996,173 @@ /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/neck/beads, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Sg" = ( /obj/structure/flora/coconuts, /obj/machinery/light/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SB" = ( /obj/machinery/door/airlock/sandstone{ name = "Resort Bathroom" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SD" = ( /obj/machinery/door/airlock/sandstone{ name = "Bar Access" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "SY" = ( /obj/machinery/door/airlock/sandstone{ name = "Surfer Shack 2" }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TG" = ( /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TJ" = ( /obj/structure/fluff/beach_umbrella/security, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TX" = ( /obj/structure/sign/poster/contraband/ambrosia_vulgaris/directional/north, /turf/open/floor/iron/grimy, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ud" = ( /obj/effect/turf_decal/sand, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Uh" = ( /turf/open/floor/iron/stairs/old, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Uq" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/pod/dark, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "UU" = ( /obj/structure/flora/bush/large/style_random, /obj/structure/flora/bush/jungle/a/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ve" = ( /obj/machinery/processor, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VA" = ( /obj/machinery/computer/slot_machine, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VH" = ( /obj/machinery/light/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VX" = ( /obj/structure/flora/bush/large/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "We" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/cooking_to_serve_man, /obj/item/clothing/suit/apron/chef, /obj/item/clothing/head/utility/chefhat, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Wg" = ( /obj/structure/dresser, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ww" = ( /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WL" = ( /obj/machinery/light/directional/north, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WO" = ( /obj/structure/flora/bush/jungle/a/style_random, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WW" = ( /obj/effect/turf_decal/sand, /obj/machinery/icecream_vat, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WX" = ( /obj/item/toy/plush/lizard_plushie/green{ name = "Soaks-The-Rays" }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Xt" = ( /turf/open/misc/beach/coast/corner{ dir = 4 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Xv" = ( /obj/structure/table/wood, /obj/structure/bedsheetbin, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XL" = ( /obj/machinery/light/directional/east, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XM" = ( /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XP" = ( /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "XT" = ( /obj/effect/turf_decal/sand, /obj/structure/sign/departments/botany/directional/south, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yi" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/item/toy/seashell, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yq" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YI" = ( /obj/machinery/door/airlock/maintenance{ name = "Supply Room" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YJ" = ( /turf/open/floor/carpet/purple, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "YN" = ( /obj/effect/turf_decal/sand, /obj/machinery/light/directional/west, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zb" = ( /obj/structure/sign/poster/official/cohiba_robusto_ad/directional/west, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zd" = ( /obj/structure/sign/poster/contraband/space_cola/directional/north, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zg" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zt" = ( /obj/structure/table/wood, /obj/item/reagent_containers/pill/morphine, /obj/item/storage/fancy/donut_box, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) (1,1,1) = {" pr diff --git a/_maps/virtual_domains/blood_drunk_miner.dmm b/_maps/virtual_domains/blood_drunk_miner.dmm index c3369a1c822..bf673bd6dfa 100644 --- a/_maps/virtual_domains/blood_drunk_miner.dmm +++ b/_maps/virtual_domains/blood_drunk_miner.dmm @@ -27,7 +27,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "i" = ( /obj/structure/stone_tile{ dir = 4 @@ -171,7 +171,7 @@ /obj/structure/stone_tile/surrounding/cracked{ dir = 6 }, -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) "T" = ( diff --git a/_maps/virtual_domains/breeze_bay.dmm b/_maps/virtual_domains/breeze_bay.dmm new file mode 100644 index 00000000000..eb305cb7788 --- /dev/null +++ b/_maps/virtual_domains/breeze_bay.dmm @@ -0,0 +1,854 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"c" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"d" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"e" = ( +/turf/open/floor/carpet/red, +/area/virtual_domain/fullbright) +"f" = ( +/obj/machinery/light/small/directional/west, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"g" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"i" = ( +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"k" = ( +/obj/effect/landmark/bitrunning/loot_signal, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"l" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"m" = ( +/obj/item/fishing_rod{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/fishing_rod, +/obj/item/fishing_rod{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/structure/table/wood, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"o" = ( +/obj/structure/flora/tree/jungle/style_5, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"p" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain/fullbright) +"s" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"t" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"v" = ( +/obj/effect/baseturf_helper/virtual_domain, +/obj/effect/landmark/bitrunning/safehouse_spawn, +/turf/template_noop, +/area/virtual_domain/safehouse) +"y" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"z" = ( +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"A" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"B" = ( +/obj/structure/flora/tree/jungle/style_6, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"C" = ( +/obj/structure/flora/tree/jungle/style_2, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"D" = ( +/turf/open/floor/carpet/green, +/area/virtual_domain/fullbright) +"F" = ( +/obj/structure/fluff/beach_umbrella/engine, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"G" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"H" = ( +/obj/structure/flora/tree/jungle/style_4, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"I" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"J" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"K" = ( +/obj/structure/flora/tree/jungle, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"L" = ( +/obj/item/fishing_line, +/obj/item/fishing_hook, +/obj/item/fishing_hook, +/obj/item/fishing_hook, +/obj/structure/closet/crate, +/obj/item/bait_can/worm, +/obj/item/bait_can/worm, +/obj/item/bait_can/worm, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"N" = ( +/obj/machinery/light/small/directional/east, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"O" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"P" = ( +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"Q" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"R" = ( +/obj/structure/closet/crate/freezer{ + name = "Cooler" + }, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/colocup, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Beer advertised to be the best in space."; + name = "Masterbrand Beer" + }, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/reagent_containers/cup/glass/bottle/beer/light, +/obj/item/clothing/head/soft/fishing_hat, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"S" = ( +/obj/structure/flora/tree/jungle/style_3, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"U" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"X" = ( +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"Z" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +"} +(2,1,1) = {" +a +K +G +y +A +N +A +A +A +A +N +z +P +i +i +i +i +i +i +i +Q +i +i +i +a +"} +(3,1,1) = {" +a +A +O +A +l +I +I +I +I +I +v +J +P +Q +i +i +i +i +i +i +i +i +i +i +a +"} +(4,1,1) = {" +a +A +C +A +A +I +I +I +I +I +I +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(5,1,1) = {" +a +A +y +A +A +I +I +I +I +I +I +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(6,1,1) = {" +a +S +A +A +A +I +I +I +I +I +I +y +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(7,1,1) = {" +a +G +G +A +A +I +I +I +I +I +I +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(8,1,1) = {" +a +A +H +g +A +I +I +I +I +I +I +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(9,1,1) = {" +a +G +y +A +l +I +I +I +I +I +I +J +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(10,1,1) = {" +a +o +A +A +A +f +A +A +A +A +f +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(11,1,1) = {" +a +A +A +A +A +A +A +A +A +A +A +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(12,1,1) = {" +a +A +B +y +A +A +A +U +c +A +A +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(13,1,1) = {" +a +A +A +A +A +s +A +A +A +A +k +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(14,1,1) = {" +a +K +y +A +A +p +p +A +A +A +m +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(15,1,1) = {" +a +A +A +A +A +t +A +A +A +A +L +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(16,1,1) = {" +a +A +C +A +A +e +e +A +A +A +A +A +P +i +i +i +i +X +X +i +i +i +i +i +a +"} +(17,1,1) = {" +a +G +A +A +A +F +A +A +A +A +A +A +P +i +i +i +i +X +X +i +i +i +i +i +a +"} +(18,1,1) = {" +a +S +G +A +A +D +D +A +A +A +A +A +X +X +X +X +X +X +X +X +X +X +i +i +a +"} +(19,1,1) = {" +a +A +A +A +A +R +A +A +A +A +A +A +X +X +X +X +X +X +X +X +d +X +i +i +a +"} +(20,1,1) = {" +a +A +H +A +A +A +A +A +A +A +A +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(21,1,1) = {" +a +A +O +A +A +A +A +A +A +c +A +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(22,1,1) = {" +a +o +A +y +A +A +A +A +A +U +A +A +P +i +i +i +i +i +i +i +i +i +i +i +a +"} +(23,1,1) = {" +a +A +G +A +A +A +A +A +A +y +A +A +P +i +i +i +i +i +i +i +i +i +Q +i +a +"} +(24,1,1) = {" +a +A +B +A +z +A +y +A +A +A +A +A +P +i +Q +i +i +i +i +i +i +i +i +i +a +"} +(25,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/virtual_domains/bubblegum.dmm b/_maps/virtual_domains/bubblegum.dmm index 3381b173539..a801fa49187 100644 --- a/_maps/virtual_domains/bubblegum.dmm +++ b/_maps/virtual_domains/bubblegum.dmm @@ -29,7 +29,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "x" = ( /obj/structure/marker_beacon/olive, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, @@ -43,7 +43,7 @@ /turf/template_noop, /area/virtual_domain/safehouse) "C" = ( -/mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/bubblegum, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "F" = ( @@ -134,6 +134,16 @@ F F F F +F +F +F +F +F +F +F +F +F +F R "} (2,1,1) = {" @@ -182,51 +192,71 @@ Z Z Z Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z F "} (3,1,1) = {" F Z -a -a Z Z Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z Z Z -a -a -a -a -a -a -a -a Z Z -a -a -a -a -a -a +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z Z Z Z @@ -235,6 +265,301 @@ F (4,1,1) = {" F Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(5,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(6,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(7,1,1) = {" +F +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(8,1,1) = {" +F +Z +Z +F +Z +Z +Z +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +Z +Z +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(9,1,1) = {" +F +Z +Z +F +Z +Z +Z a a a @@ -278,11 +603,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(5,1,1) = {" +(10,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -326,11 +661,21 @@ a a p Z +Z +Z +Z +F +Z F "} -(6,1,1) = {" +(11,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -374,11 +719,21 @@ a p p Z +Z +Z +Z +F +Z F "} -(7,1,1) = {" +(12,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -422,252 +777,312 @@ a a p Z -F -"} -(8,1,1) = {" -F -Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Z -Z -a -a -a -Z -Z -F -"} -(9,1,1) = {" -F -Z -a -a -a -a -a -a -p -p -p -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Z -Z -F -"} -(10,1,1) = {" -F -Z -Z -a -a -a -a -a Z Z Z -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z Z F "} -(11,1,1) = {" -F -Z -Z -a -a -a -a -a -Z -Z -Z -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Z -Z -a -a -a -a -a -a -a -a -p -p -a -a -a -a -a -Z -F -"} -(12,1,1) = {" -F -Z -Z -a -a -a -a -a -p -Z -p -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Z -Z -a -a -a -a -a -a -a -p -a -a -a -a -a -Z -F -"} (13,1,1) = {" F Z Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +a +a +a +Z +Z +Z +Z +Z +Z +Z +F +"} +(14,1,1) = {" +F +Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +p +p +p +p +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +Z +F +"} +(15,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +a +a +a +a +a +Z +Z +Z +p +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +Z +F +"} +(16,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +a +a +a +a +a +Z +Z +Z +p +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +a +a +a +a +a +a +a +a +p +p +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(17,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +a +a +a +a +a +p +Z +p +p +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +a +a +a +a +a +a +a +p +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(18,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z a a a @@ -710,59 +1125,79 @@ a a a Z -F -"} -(14,1,1) = {" -F -Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z Z Z -a -a -a -a -a -a -a -a -a -a -a -a -a +Z Z F "} -(15,1,1) = {" +(19,1,1) = {" F Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(20,1,1) = {" +F +Z +Z +Z +Z +Z +Z a a a @@ -806,11 +1241,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(16,1,1) = {" +(21,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -854,11 +1299,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(17,1,1) = {" +(22,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -902,59 +1357,21 @@ a a a Z -F -"} -(18,1,1) = {" -F Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z +Z +Z Z F "} -(19,1,1) = {" +(23,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -998,11 +1415,79 @@ a a a Z +Z +Z +Z +Z +Z F "} -(20,1,1) = {" +(24,1,1) = {" F Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(25,1,1) = {" +F +Z +Z +F +Z +Z +Z a a a @@ -1046,11 +1531,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(21,1,1) = {" +(26,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1094,11 +1589,21 @@ S T a Z +Z +Z +Z +Z +F F "} -(22,1,1) = {" +(27,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1142,11 +1647,21 @@ S S a Z +Z +Z +Z +Z +Z F "} -(23,1,1) = {" +(28,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1190,11 +1705,21 @@ S S a Z +Z +Z +Z +Z +Z F "} -(24,1,1) = {" +(29,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1238,59 +1763,21 @@ S S a Z -F -"} -(25,1,1) = {" -F Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -S -S -S -S -S -S -a +Z +Z +Z Z F "} -(26,1,1) = {" +(30,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1334,11 +1821,79 @@ S S a Z +Z +Z +Z +Z +Z F "} -(27,1,1) = {" +(31,1,1) = {" F Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +S +S +S +S +S +S +a +Z +Z +Z +Z +Z +Z +F +"} +(32,1,1) = {" +F +Z +Z +Z +Z +Z +Z a a a @@ -1382,11 +1937,21 @@ S A a Z +Z +Z +Z +Z +Z F "} -(28,1,1) = {" +(33,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1430,11 +1995,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(29,1,1) = {" +(34,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1478,59 +2053,21 @@ a a a Z -F -"} -(30,1,1) = {" -F -Z -a -a -a -a -a -a Z Z Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z Z F "} -(31,1,1) = {" +(35,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -1574,18 +2111,29 @@ a a a Z +Z +Z +Z +Z +Z F "} -(32,1,1) = {" +(36,1,1) = {" F Z +Z +Z +Z +Z +Z a a a a a a -a +Z +Z Z a a @@ -1620,13 +2168,80 @@ a a a a -a +Z +Z +Z +Z +Z Z F "} -(33,1,1) = {" +(37,1,1) = {" F Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(38,1,1) = {" +F +Z +Z +Z +Z +Z +Z a a a @@ -1670,60 +2285,80 @@ a a a Z -F -"} -(34,1,1) = {" -F Z Z -a -a -a -a Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z -a -a -a -a -a -a -a -a -a -a -a -a -a Z F "} -(35,1,1) = {" +(39,1,1) = {" F Z Z +Z +Z +Z +Z +Z +a +a +a +a +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(40,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z a a a @@ -1766,107 +2401,137 @@ a a a Z -F -"} -(36,1,1) = {" -F -Z -Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z Z Z -a -a -a -a -a -a -a -a -a -a -a -a -Z -F -"} -(37,1,1) = {" -F -Z -Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a Z Z F "} -(38,1,1) = {" +(41,1,1) = {" F Z +Z +Z +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(42,1,1) = {" +F +Z +Z +F +Z +Z +Z +Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +Z +F +"} +(43,1,1) = {" +F +Z +Z +Z +Z +Z +Z a a a @@ -1910,59 +2575,79 @@ a a Z Z -F -"} -(39,1,1) = {" -F -Z -a -a -a -p -p -a -a -a -a -a -a -a -a -a Z Z Z -a -a -a -a -a -p -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z Z F "} -(40,1,1) = {" +(44,1,1) = {" F Z +Z +Z +Z +Z +Z +a +a +a +p +p +a +a +a +a +a +a +a +a +a +Z +Z +Z +a +a +a +a +a +p +p +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +Z +Z +Z +Z +Z +Z +F +"} +(45,1,1) = {" +F +Z +Z +Z +Z +Z +Z a c a @@ -2006,11 +2691,21 @@ a a a Z +Z +Z +Z +Z +Z F "} -(41,1,1) = {" +(46,1,1) = {" F Z +Z +Z +Z +Z +Z a a a @@ -2054,76 +2749,16 @@ a a a Z -F -"} -(42,1,1) = {" -F Z -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a +Z +Z +Z Z F "} -(43,1,1) = {" +(47,1,1) = {" F Z -a -Z -Z -Z -Z -a -a -a -a -a -Z -Z -Z -Z -a -a -a Z Z Z @@ -2135,10 +2770,36 @@ a a a a -Z -Z -Z -Z +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a a a a @@ -2147,12 +2808,13 @@ a a Z Z -a -a +Z +Z +Z Z F "} -(44,1,1) = {" +(48,1,1) = {" F Z Z @@ -2160,6 +2822,132 @@ Z Z Z Z +a +Z +Z +Z +Z +a +a +a +a +a +Z +Z +Z +Z +a +a +a +Z +Z +Z +Z +Z +a +a +a +a +a +a +Z +Z +Z +Z +a +a +a +a +a +a +Z +Z +a +a +Z +Z +Z +Z +Z +Z +F +"} +(49,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +F +"} +(50,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z Z Z Z @@ -2200,7 +2988,249 @@ Z Z F "} -(45,1,1) = {" +(51,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(52,1,1) = {" +F +Z +Z +Z +Z +Z +Z +F +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(53,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +"} +(54,1,1) = {" +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +F +Z +Z +Z +Z +F +"} +(55,1,1) = {" +F +F +F +F +F +F +F +F +F +F F F F diff --git a/_maps/virtual_domains/clown_planet.dmm b/_maps/virtual_domains/clown_planet.dmm index 01d7b88a5ef..7dbeefe3043 100644 --- a/_maps/virtual_domains/clown_planet.dmm +++ b/_maps/virtual_domains/clown_planet.dmm @@ -7,15 +7,15 @@ /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "aI" = ( /obj/item/bikehorn/airhorn, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "aM" = ( /obj/item/bikehorn, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "aP" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -23,7 +23,7 @@ /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ba" = ( /obj/structure/mecha_wreckage/honker, /obj/structure/disposalpipe/segment{ @@ -31,7 +31,7 @@ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bi" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -39,19 +39,19 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "bp" = ( /turf/open/indestructible/light, -/area/virtual_domain/powered) +/area/virtual_domain) "bq" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "by" = ( /turf/closed/wall/r_wall, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "bQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -59,26 +59,26 @@ }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "bR" = ( /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/hope, /obj/effect/decal/cleanable/blood/old, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "bU" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "cw" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "cM" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -87,7 +87,7 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "cW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -95,21 +95,21 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ed" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /obj/machinery/light/small/directional/west, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "eE" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "fh" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, @@ -118,7 +118,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "gr" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -129,23 +129,23 @@ }, /obj/effect/baseturf_helper/virtual_domain, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gH" = ( /obj/item/bikehorn, /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "gK" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "hK" = ( /obj/item/clothing/head/cone, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "hY" = ( /turf/template_noop, /area/template_noop) @@ -157,24 +157,24 @@ dir = 4 }, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "ik" = ( /turf/open/lava/smooth, -/area/virtual_domain/powered) +/area/virtual_domain) "iR" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "ki" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kn" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -182,7 +182,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "lj" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -191,14 +191,14 @@ dir = 8 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "lm" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/machinery/light/small/directional/east, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "lr" = ( /obj/item/bikehorn, /obj/effect/decal/cleanable/dirt, @@ -207,60 +207,60 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "lx" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ly" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "lP" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "mD" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mE" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "mF" = ( /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "nE" = ( /obj/effect/mapping_helpers/no_lava, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "oA" = ( /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "oI" = ( /obj/structure/table/glass, /obj/item/grown/bananapeel/bluespace, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "pl" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "ps" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "qM" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 @@ -268,7 +268,7 @@ /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "rg" = ( /obj/item/coin/bananium, /obj/item/coin/bananium, @@ -276,19 +276,19 @@ /obj/item/coin/bananium, /obj/machinery/light/small/directional/west, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "rh" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "rr" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "rH" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1; @@ -297,46 +297,46 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "rT" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "sq" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "sT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1 }, /obj/effect/mapping_helpers/mail_sorting/supply/qm_office, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "tq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "tt" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/indestructible/light, -/area/virtual_domain/powered) +/area/virtual_domain) "tv" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "tF" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "tI" = ( /obj/item/coin/bananium, /obj/item/coin/bananium, @@ -344,15 +344,15 @@ /obj/item/coin/bananium, /obj/machinery/light/small/directional/east, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "uX" = ( /obj/effect/mapping_helpers/no_lava, /mob/living/basic/clown, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "uY" = ( /turf/closed/mineral/bananium, -/area/virtual_domain/powered) +/area/virtual_domain) "uZ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -362,13 +362,13 @@ /obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet/escape, /obj/item/pen/fourcolor, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "wz" = ( /obj/machinery/light/small/directional/south, /obj/effect/mapping_helpers/no_lava, /mob/living/basic/clown, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "xt" = ( /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/template_noop, @@ -377,17 +377,17 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "yz" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "yS" = ( /obj/structure/marker_beacon/yellow, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "yZ" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -395,16 +395,16 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "zm" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "zA" = ( /obj/structure/statue/bananium/clown, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "zF" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -413,14 +413,14 @@ dir = 8 }, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "Aa" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Bi" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -429,7 +429,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Cp" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -437,7 +437,7 @@ }, /obj/machinery/light/small/directional/west, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Cs" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -446,10 +446,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) -"Dh" = ( -/turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Do" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -457,7 +454,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "DL" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -465,35 +462,35 @@ /obj/item/bikehorn, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ex" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "FI" = ( /obj/item/reagent_containers/cup/glass/trophy/gold_cup, /obj/structure/table/glass, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Gg" = ( /obj/structure/table/glass, /obj/item/gun/magic/staff/honk, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Hq" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Hr" = ( /obj/structure/table/glass, /obj/item/clothing/shoes/clown_shoes/banana_shoes, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "HQ" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -501,10 +498,10 @@ /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ie" = ( /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Iz" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -512,20 +509,20 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "IN" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "IY" = ( /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "Jv" = ( /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "JB" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -534,28 +531,28 @@ /obj/machinery/light/small/directional/north, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ka" = ( /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Kh" = ( /obj/effect/mob_spawn/corpse/human/damaged, /obj/effect/decal/cleanable/blood/old, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "KG" = ( /obj/item/pickaxe, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "KI" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/closed/wall/r_wall, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Lv" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -563,18 +560,18 @@ }, /obj/machinery/light/small/directional/east, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Nv" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "NB" = ( /obj/machinery/disposal/delivery_chute, /obj/structure/disposalpipe/trunk{ dir = 1 }, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "NL" = ( /obj/machinery/disposal/delivery_chute{ desc = "The following is engraved upon the chute: A FATE WORSE THAN DEATH LIES WITHIN"; @@ -584,12 +581,12 @@ /obj/structure/disposalpipe/trunk, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "NW" = ( /obj/structure/table/glass, /obj/item/reagent_containers/spray/waterflower/superlube, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Ok" = ( /obj/item/bikehorn, /obj/structure/disposalpipe/segment{ @@ -597,7 +594,7 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Ov" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -605,7 +602,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "PJ" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -613,10 +610,10 @@ }, /obj/effect/mapping_helpers/no_lava, /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "PM" = ( /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "PQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -624,20 +621,20 @@ }, /obj/item/pickaxe, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "QP" = ( /turf/template_noop, /area/virtual_domain/safehouse) "QX" = ( /obj/structure/closet/crate/secure/bitrunning/encrypted, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "Rh" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Rx" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -646,13 +643,13 @@ /obj/structure/table, /obj/item/flashlight/lamp/bananalamp, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "RU" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "Sg" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -661,13 +658,13 @@ /obj/effect/decal/cleanable/food/pie_smudge, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Sm" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Tm" = ( /obj/effect/decal/cleanable/food/pie_smudge, /obj/structure/disposalpipe/segment{ @@ -675,13 +672,13 @@ }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "Tx" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TH" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -690,67 +687,60 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TK" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Ug" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/carpet, -/area/virtual_domain/powered) +/area/virtual_domain) "UL" = ( /obj/effect/decal/cleanable/oil, /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UN" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UQ" = ( /obj/structure/disposalpipe/segment{ invisibility = 101 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "UY" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) -"Vv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - invisibility = 101 - }, -/turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Vx" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "VI" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) "VQ" = ( /turf/open/floor/noslip, -/area/virtual_domain/powered) +/area/virtual_domain) "Ww" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -759,40 +749,40 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/indestructible/permalube, -/area/virtual_domain/powered) +/area/virtual_domain) "WB" = ( /obj/machinery/disposal/delivery_chute{ dir = 1 }, /obj/structure/disposalpipe/trunk, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "WT" = ( /obj/machinery/door/airlock/bananium, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "WX" = ( /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "Xp" = ( /obj/machinery/light/directional/south, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "XB" = ( /obj/machinery/light/directional/north, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "Yb" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/indestructible/honk, -/area/virtual_domain/powered) +/area/virtual_domain) "YP" = ( /obj/structure/disposalpipe/segment{ dir = 4; invisibility = 101 }, /turf/open/indestructible/white, -/area/virtual_domain/powered) +/area/virtual_domain) "ZR" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -801,7 +791,7 @@ dir = 4 }, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) +/area/virtual_domain) (1,1,1) = {" Ie @@ -904,13 +894,13 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by +by +by Ie Ie Ie @@ -918,11 +908,11 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Ie Ie Ie @@ -948,29 +938,29 @@ Vx Ie Ie Ie -Dh -Dh -Dh +by +by +by ik ik ik ik ik -Dh -Dh +by +by Ie Ie Ie Ie Ie -Dh -Dh +by +by ik ik ik -Dh -Dh -Dh +by +by +by Ie Ie Ie @@ -993,8 +983,8 @@ Ie Vx Ie Ie -Dh -Dh +by +by ik ik ik @@ -1003,21 +993,21 @@ Sm Hq Sm ik -Dh -Dh +by +by Ie Ie Ie -Dh -Dh +by +by ik ik tq mD ik ik -Dh -Dh +by +by Ie Ie Ie @@ -1038,8 +1028,8 @@ Ie Ie Vx Ie -Dh -Dh +by +by ik ik IN @@ -1050,11 +1040,11 @@ yZ aP Sm ik -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Nv IY tq @@ -1063,8 +1053,8 @@ ik ik ik ik -Dh -Dh +by +by Ie Ie Vx @@ -1084,23 +1074,23 @@ Ie Ie Vx Ie -Dh +by ik ik -Dh +by Bi cw UQ lr UQ UY -Vv +KI ik -Dh +by IY Jv IY -Dh +by IY Jv Kh @@ -1110,7 +1100,7 @@ ik tq ik ik -Dh +by Ie Ie Vx @@ -1129,8 +1119,8 @@ hY Ie Ie Vx -Dh -Dh +by +by ik IN Tm @@ -1139,9 +1129,9 @@ Ww cw UQ Sm -Vv -Vv -Dh +KI +KI +by zm oA IY @@ -1152,12 +1142,12 @@ Jv IY IY IY -Dh +by ik mD ik -Dh -Dh +by +by Ie Vx hY @@ -1175,27 +1165,27 @@ hY Ie Ie Vx -Dh +by ik ik UN UQ UY Ww -Vv +KI TH -Vv +KI YP Cp uY -Dh +by sq oA IY -Dh -Dh +by +by Jv -Dh +by IY IY IY @@ -1203,7 +1193,7 @@ tq ik ik ik -Dh +by Ie Vx Ie @@ -1221,7 +1211,7 @@ tF Ie Ie Vx -Dh +by ik IN UQ @@ -1229,14 +1219,14 @@ UQ yZ Do Do -Vv +KI YP YP YP KG uY -Dh -Dh +by +by oA IY IY @@ -1246,10 +1236,10 @@ IY gH Jv Xp -Dh +by ik ik -Dh +by by KI by @@ -1267,15 +1257,15 @@ Ie Ie Ie Vx -Dh +by ik yz fh UQ UY -Vv +KI Ww -Vv +KI YP YP tt @@ -1285,7 +1275,7 @@ oA oA oA IY -Dh +by IY IY Jv @@ -1295,7 +1285,7 @@ IY ik tq ik -Dh +by by iR PM @@ -1313,7 +1303,7 @@ Ie Ie Ie Vx -Dh +by ik Hq TK @@ -1321,18 +1311,18 @@ qM yZ Ww Ww -Vv +KI YP PQ tt bp uY -Dh +by oA oA IY IY -Dh +by IY IY IY @@ -1359,7 +1349,7 @@ Ie Ie Ie Vx -Dh +by ik UN UQ @@ -1368,20 +1358,20 @@ DL Ww yz lx -Vv +KI YP Lv WX -Dh -Dh +by +by oA IY IY -Dh -Dh +by +by IY IY -Dh +by IY Jv ik @@ -1403,8 +1393,8 @@ Ie "} (14,1,1) = {" Ie -Dh -Vv +by +KI nE nE mD @@ -1415,17 +1405,17 @@ Ex Tm UQ lx -Vv -Vv +KI +KI ps TK Sm -Dh -Dh -Dh +by +by +by zA rg -Dh +by XB IY Jv @@ -1449,11 +1439,11 @@ Ie "} (15,1,1) = {" Ie -Dh +by ij hK nE -Dh +by yz UQ UQ @@ -1466,13 +1456,13 @@ Do Iz kn Ww -Dh -Dh +by +by FI mF mF mF -Dh +by IY Jv Jv @@ -1495,7 +1485,7 @@ Ie "} (16,1,1) = {" Ie -Dh +by VQ uX NL @@ -1513,13 +1503,13 @@ pl Do Ex UY -Dh +by Ug oI NW mF -Dh -Dh +by +by Jv IY IY @@ -1541,11 +1531,11 @@ Ie "} (17,1,1) = {" Ie -Dh +by VQ bR wz -Dh +by Hq UQ Sm @@ -1568,7 +1558,7 @@ WT IY Jv IY -Dh +by ik tq ik @@ -1587,7 +1577,7 @@ Ie "} (18,1,1) = {" Ie -Dh +by VQ uX PJ @@ -1596,7 +1586,7 @@ sT kn Do Do -Vv +KI Do Ov UQ @@ -1605,12 +1595,12 @@ Ok mE rH pl -Dh +by mF Hr Gg mF -Dh +by IY IY IY @@ -1633,12 +1623,12 @@ Ie "} (19,1,1) = {" Ie -Dh +by zF uX nE -Dh -Dh +by +by Ww Ww Ww @@ -1649,14 +1639,14 @@ lP Ex UY Ka -Vv +KI tv -Dh +by FI mF mF QX -Dh +by IY IY IY @@ -1679,29 +1669,29 @@ Ie "} (20,1,1) = {" Ie -Dh -Vv +by +KI nE nE ik -Dh +by Ww Ww Cs Do Do -Vv -Dh -Dh +KI +by +by bQ -Dh +by ba -Dh +by IY -Dh +by zA tI -Dh +by XB IY Jv @@ -1727,26 +1717,26 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by Do Do Do Ww Do -Vv +KI rh ed gK -Dh +by UL Sm IY IY -Dh -Dh +by +by Kh IY IY @@ -1773,26 +1763,26 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by JB Sg -Vv +KI Ww -Vv +KI uZ YP bp bp uY -Dh +by bQ oA IY IY -Dh +by IY Jv IY @@ -1819,15 +1809,15 @@ Ie Ie Ie Vx -Dh +by ik cM eE lx -Vv +KI ki Ww -Vv +KI Rx YP bp @@ -1835,7 +1825,7 @@ bp WB TK Aa -Dh +by IY IY Jv @@ -1844,10 +1834,10 @@ Jv IY aM Xp -Dh +by tq ik -Dh +by by iR PM @@ -1865,10 +1855,10 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by lP Do Do @@ -1879,7 +1869,7 @@ bq Rh WX uY -Dh +by oA oA IY @@ -1888,12 +1878,12 @@ Jv Jv IY IY -Dh -Dh +by +by ik mD ik -Dh +by by KI by @@ -1911,20 +1901,20 @@ Ie Ie Ie Vx -Dh +by ik -Dh -Dh +by +by pl Do -Vv +KI Do -Vv -Vv +KI +KI rh lm uY -Dh +by sq oA IY @@ -1932,14 +1922,14 @@ IY IY IY IY -Dh +by IY IY ik mD ik ik -Dh +by Ie Vx Ie @@ -1957,19 +1947,19 @@ Ie Ie Ie Vx -Dh +by ik ik -Dh +by yd Do Do Do Ex lx -Vv -Dh -Dh +KI +by +by oA oA IY @@ -1980,12 +1970,12 @@ aM IY IY IY -Dh +by ik tq ik -Dh -Dh +by +by Ie Vx hY @@ -2003,34 +1993,34 @@ hY Ie Ie Vx -Dh -Dh +by +by ik -Dh -Dh +by +by Ex lx HQ UQ UQ bU -Dh +by ik -Dh +by Yb IY IY -Dh +by IY IY -Dh +by IY IY ik mD ik ik -Dh +by Ie Ie Vx @@ -2050,23 +2040,23 @@ Ie Ie Vx Ie -Dh -Dh +by +by ik ik -Dh +by mD -Dh +by Ka lP mD -Dh +by ik -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by IY IY IY @@ -2075,8 +2065,8 @@ ik ik ik ik -Dh -Dh +by +by Ie Ie Vx @@ -2097,31 +2087,31 @@ Ie Vx Ie Ie -Dh -Dh +by +by ik ik ik tq tq tq -Dh +by ik -Dh -Dh +by +by Ie Ie Ie -Dh -Dh +by +by ik ik mD tq ik ik -Dh -Dh +by +by Ie Ie Ie @@ -2144,29 +2134,29 @@ Vx Ie Ie Ie -Dh -Dh -Dh +by +by +by ik ik ik ik ik -Dh -Dh +by +by Ie Ie Ie Ie Ie -Dh -Dh +by +by ik ik ik -Dh -Dh -Dh +by +by +by Ie Ie Ie @@ -2192,13 +2182,13 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by +by +by Ie Ie Ie @@ -2206,11 +2196,11 @@ Ie Ie Ie Ie -Dh -Dh -Dh -Dh -Dh +by +by +by +by +by Ie Ie Ie diff --git a/_maps/virtual_domains/colossus.dmm b/_maps/virtual_domains/colossus.dmm index a9c3c6e6d79..fe97dcace42 100644 --- a/_maps/virtual_domains/colossus.dmm +++ b/_maps/virtual_domains/colossus.dmm @@ -30,7 +30,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "p" = ( -/mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/colossus, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/lavaland/surface/outdoors/virtual_domain) "q" = ( @@ -41,7 +41,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) +/area/virtual_domain) "s" = ( /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/virtual_domain) diff --git a/_maps/virtual_domains/hierophant.dmm b/_maps/virtual_domains/hierophant.dmm index 02b11ad4e1e..81f8a9f97a7 100644 --- a/_maps/virtual_domains/hierophant.dmm +++ b/_maps/virtual_domains/hierophant.dmm @@ -37,7 +37,7 @@ /turf/closed/indestructible/binary, /area/lavaland/surface/outdoors/virtual_domain) "E" = ( -/mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/hierophant, /turf/open/indestructible/hierophant/two, /area/lavaland/surface/outdoors/virtual_domain) "H" = ( @@ -51,7 +51,7 @@ /obj/machinery/light/small/blacklight/directional/south, /obj/effect/baseturf_helper/virtual_domain, /turf/open/indestructible/hierophant, -/area/virtual_domain/powered) +/area/virtual_domain) "S" = ( /obj/effect/mob_spawn/corpse/human/miner, /turf/open/indestructible/hierophant, diff --git a/_maps/virtual_domains/legion.dmm b/_maps/virtual_domains/legion.dmm deleted file mode 100644 index 55843177ad0..00000000000 --- a/_maps/virtual_domains/legion.dmm +++ /dev/null @@ -1,6370 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ah" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"ak" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"aI" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"aR" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"bd" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"be" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"bt" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"bu" = ( -/obj/structure/marker_beacon/bronze, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"ca" = ( -/obj/effect/mob_spawn/corpse/human/legioninfested, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"cf" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"cp" = ( -/turf/template_noop, -/area/template_noop) -"dm" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dn" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/effect/mob_spawn/corpse/human/legioninfested, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dr" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile/block/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dx" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dL" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"dQ" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"et" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ew" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"eJ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"fA" = ( -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"fG" = ( -/obj/structure/marker_beacon/violet, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"gh" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"gk" = ( -/obj/structure/necropolis_gate/locked, -/obj/structure/stone_tile/slab, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"gK" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"gQ" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"hc" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"hw" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"hx" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"hU" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ib" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ie" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"iP" = ( -/obj/structure/fluff/drake_statue/falling, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"iR" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"iV" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"jk" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"jt" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"jw" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"jN" = ( -/obj/machinery/sleeper/survival_pod, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"ka" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"kg" = ( -/turf/closed/indestructible/riveted/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"kT" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"kZ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ll" = ( -/obj/structure/stone_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lz" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"lC" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lO" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"lT" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"mz" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"mG" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"nm" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nu" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nv" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ny" = ( -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nI" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"nO" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ob" = ( -/obj/structure/necropolis_gate/legion_gate, -/obj/structure/necropolis_arch, -/obj/structure/stone_tile/slab, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"og" = ( -/obj/effect/landmark/bitrunning/safehouse_spawn, -/turf/template_noop, -/area/virtual_domain/safehouse) -"oo" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"ox" = ( -/turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) -"oS" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"pP" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"qo" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"qs" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"qW" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/obj/machinery/door/airlock/survival_pod/glass, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"rt" = ( -/obj/effect/mob_spawn/corpse/human/miner, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"rU" = ( -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sd" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sk" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"sz" = ( -/obj/structure/stone_tile/center, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"sA" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"tk" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"tF" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"uK" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"vf" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"wq" = ( -/obj/structure/marker_beacon/teal, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"wy" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"xd" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"xm" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"xw" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"xD" = ( -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"yu" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"yZ" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"zg" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) -"zo" = ( -/obj/effect/turf_decal/mining/survival, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"zW" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ah" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/lavaland/surface/outdoors/virtual_domain) -"Aj" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ak" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"As" = ( -/obj/structure/marker_beacon/cerulean, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"AY" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Bo" = ( -/obj/structure/marker_beacon/indigo, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"BO" = ( -/turf/template_noop, -/area/virtual_domain/safehouse) -"CX" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Dm" = ( -/turf/closed/mineral/random/volcanic, -/area/lavaland/surface/outdoors/virtual_domain) -"DP" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/center, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ek" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ep" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Ez" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"EC" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Fg" = ( -/obj/structure/stone_tile/surrounding/cracked{ - dir = 6 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Fp" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/template_noop, -/area/virtual_domain/safehouse) -"Fq" = ( -/obj/structure/marker_beacon/fuchsia, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"FV" = ( -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Gj" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Gn" = ( -/turf/closed/indestructible/riveted/boss/see_through, -/area/lavaland/surface/outdoors/virtual_domain) -"Go" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"GH" = ( -/obj/structure/fans, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"GM" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Hi" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Hu" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Hw" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"HK" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"HQ" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"HZ" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ii" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Io" = ( -/obj/structure/marker_beacon/jade, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ip" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"IB" = ( -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"IG" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"IL" = ( -/obj/structure/stone_tile/surrounding, -/obj/structure/stone_tile/center/cracked, -/mob/living/simple_animal/hostile/megafauna/legion/virtual_domain, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"IQ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jc" = ( -/obj/structure/stone_tile/slab, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jp" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Jt" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Jw" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"JD" = ( -/obj/structure/fluff/drake_statue, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"KG" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Le" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Lx" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"LH" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ml" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Mm" = ( -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Mo" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"MH" = ( -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"MP" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"MW" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Nl" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Ot" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Pv" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"Px" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"PO" = ( -/obj/structure/stone_tile/block{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Qi" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Qx" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"QD" = ( -/obj/item/pickaxe, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"RC" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"RV" = ( -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"So" = ( -/obj/structure/stone_tile/cracked, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Sw" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"SI" = ( -/obj/effect/turf_decal/mining, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"SJ" = ( -/obj/structure/stone_tile/slab/cracked, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"SX" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Ti" = ( -/turf/closed/mineral/random/high_chance/volcanic, -/area/lavaland/surface/outdoors/virtual_domain) -"Tm" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/obj/structure/tubes, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"TC" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"TJ" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Ud" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain/powered) -"UD" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/center/cracked, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"UM" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Vc" = ( -/obj/structure/tubes, -/obj/item/crowbar, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"VI" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile, -/obj/structure/stone_tile/center, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Wa" = ( -/obj/structure/stone_tile/surrounding_tile{ - dir = 4 - }, -/obj/structure/stone_tile/surrounding_tile/cracked{ - dir = 1 - }, -/obj/structure/stone_tile/surrounding_tile{ - dir = 8 - }, -/obj/structure/stone_tile/center/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Wm" = ( -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WM" = ( -/obj/structure/stone_tile/block, -/obj/structure/stone_tile/cracked{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WR" = ( -/obj/structure/stone_tile/block, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"WS" = ( -/obj/item/gps/computer, -/obj/structure/tubes, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"Xb" = ( -/obj/structure/marker_beacon/yellow, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xn" = ( -/obj/structure/stone_tile, -/obj/structure/stone_tile/cracked{ - dir = 8 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xo" = ( -/obj/structure/stone_tile/block, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Xv" = ( -/obj/structure/stone_tile{ - dir = 1 - }, -/obj/structure/stone_tile/cracked, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"XO" = ( -/obj/effect/turf_decal/mining/survival{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/lavaland/surface/outdoors/virtual_domain) -"Yu" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"YN" = ( -/obj/structure/stone_tile/block/cracked, -/obj/structure/stone_tile/block/cracked{ - dir = 1 - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"YV" = ( -/obj/structure/stone_tile{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Zc" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/obj/structure/stone_tile/block{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Zh" = ( -/obj/structure/marker_beacon/purple, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/lavaland/surface/outdoors/virtual_domain) -"Zj" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 8 - }, -/obj/structure/stone_tile/block{ - dir = 4 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"Zq" = ( -/obj/structure/stone_tile/block{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 4 - }, -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/indestructible/boss, -/area/lavaland/surface/outdoors/virtual_domain) -"Zu" = ( -/obj/machinery/smartfridge/survival_pod{ - desc = "A heated storage unit. This one's seen better days."; - name = "dusty survival pod storage" - }, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) -"ZM" = ( -/obj/structure/stone_tile/cracked{ - dir = 4 - }, -/obj/structure/stone_tile, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors/virtual_domain) -"ZN" = ( -/obj/structure/table/survival_pod, -/obj/item/knife/combat/survival, -/turf/open/floor/pod/dark, -/area/lavaland/surface/outdoors/virtual_domain) - -(1,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -Ah -"} -(2,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ox -"} -(3,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(4,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(5,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(6,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(7,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(8,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -rt -nu -nu -ib -ib -ox -"} -(9,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(10,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(11,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(12,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -ib -ox -"} -(13,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -fG -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -ib -ox -"} -(14,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -ib -ox -"} -(15,1,1) = {" -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(16,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(17,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -Ti -Ti -Ti -GM -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Xb -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(18,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -et -Ti -GM -GM -GM -nu -nu -nu -nu -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(19,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(20,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(21,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -nu -nu -nu -nu -GM -Ti -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Zh -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(22,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -FV -nu -nu -nu -nu -Ti -Dm -Dm -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(23,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -GM -GM -Ti -Ti -Dm -Dm -Ti -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(24,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -FV -Ml -Ti -Dm -Dm -Ti -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(25,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -Ti -Dm -Dm -IB -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(26,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -GM -GM -GM -fA -fA -fA -fA -RV -fA -fA -fA -fA -fA -fA -Xn -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -As -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(27,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ek -Le -be -be -kT -GM -GM -GM -GM -fA -fA -xm -fA -fA -fA -GM -ZM -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(28,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -dr -KG -mz -KG -KG -jt -GM -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -HZ -nu -bu -nu -nu -nu -MH -nu -nu -lz -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(29,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -mG -Hw -hU -Mm -lO -et -GM -tk -fA -fA -fA -fA -ak -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -YV -nu -nu -So -nu -nu -nu -nu -nu -nu -bu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(30,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ez -WR -JD -rU -KG -dm -GM -GM -fA -Hi -fA -fA -fA -ll -fA -fA -Wm -fA -fA -YV -qs -MH -nu -nu -nu -ny -ca -oS -nu -nu -Qx -nu -nu -hx -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(31,1,1) = {" -ox -kg -kg -kg -Hu -Zq -wy -Zq -lT -kg -kg -Gn -Gn -KG -Ak -nv -Ot -mG -hw -kg -kg -Wm -fA -fA -fA -fA -fA -fA -fA -fA -fA -ak -nu -nu -qs -nu -nu -TC -nu -YV -nu -ny -nu -oS -nu -nu -nu -SX -nu -nu -nu -zg -BO -BO -BO -BO -BO -og -Ud -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(32,1,1) = {" -ox -kg -kg -Gn -VI -xw -gQ -ka -iR -kg -kg -Gn -Gn -sz -KG -KG -KG -KG -mz -kg -kZ -kZ -sd -kZ -lC -kZ -TJ -UM -kZ -IQ -UM -UM -AY -nu -nI -nu -nu -nu -nu -oS -nu -nu -nu -nu -nu -qs -nu -nu -nu -nu -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(33,1,1) = {" -ox -PO -PO -gk -PO -Zc -IL -Yu -SJ -Yu -Yu -Yu -ob -dL -uK -MP -uK -uK -dL -Jc -Mo -eJ -Mo -hc -yu -eJ -Fg -eJ -YN -tF -Mo -Zj -HQ -qo -Jp -nu -aR -nu -TC -nu -YV -nu -nu -oS -nu -nu -ny -Sw -nu -nu -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -ib -ib -nu -nu -ib -ox -"} -(34,1,1) = {" -ox -kg -kg -Gn -Nl -gh -jw -lT -oo -kg -kg -Gn -Gn -Wa -KG -xd -Ez -mz -HK -kg -ie -Jw -Jw -jk -Jw -jk -dn -Jw -Jw -LH -Ii -Qi -aI -nu -Xo -nu -nu -YV -Sw -nu -nu -nu -sA -nu -Gj -nu -nu -HZ -nu -YV -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(35,1,1) = {" -ox -kg -kg -kg -Hu -Ep -iV -Go -Ip -kg -kg -Gn -Gn -lO -nO -hU -UD -KG -dm -kg -kg -ll -fA -fA -fA -ak -fA -fA -fA -fA -ll -fA -nu -nu -ny -nu -nu -Aj -HZ -nu -ew -nu -nu -bu -nu -nu -nu -nu -nu -Aj -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(36,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -KG -WR -iP -rU -Ez -cf -GM -GM -fA -fA -yZ -vf -ll -fA -fA -fA -ak -fA -fA -oS -ny -qs -YV -qs -nu -nu -nu -nu -nu -nu -Sw -nu -qs -oS -nu -nu -Sw -nu -nu -BO -BO -BO -BO -BO -BO -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -ib -ox -"} -(37,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -xd -zW -nv -DP -KG -FV -GM -GM -fA -fA -fA -GM -Px -fA -IG -GM -Hi -fA -fA -nu -nu -nu -nu -TC -nu -ah -nu -nu -nm -nu -nu -nu -nu -nu -nu -sk -nu -nu -zg -BO -BO -BO -BO -BO -Fp -Ud -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -ib -ox -"} -(38,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -bd -KG -KG -KG -lO -Jc -GM -GM -GM -fA -fA -fA -fA -fA -fA -GM -Jt -fA -fA -fA -nu -TC -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(39,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ek -KG -lO -MW -pP -GM -GM -GM -GM -fA -fA -fA -fA -fA -fA -fA -xD -fA -fA -fA -oS -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(40,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -IB -nu -nu -nu -nu -GM -RV -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(41,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -Sw -Xv -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -GM -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(42,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -nu -nu -nu -ny -GM -fA -fA -fA -fA -fA -fA -fA -fA -fA -EC -GM -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Bo -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(43,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -WM -GM -Px -ny -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(44,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(45,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -GM -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(46,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -GM -nu -nu -nu -nu -nu -nu -fA -fA -ak -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -wq -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -ib -ox -"} -(47,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -xD -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -ib -ox -"} -(48,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -ib -ox -"} -(49,1,1) = {" -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -Ti -GM -nu -nu -nu -nu -nu -nu -fA -fA -fA -GM -fA -fA -fA -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -Fq -nu -ib -ib -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -ib -ox -"} -(50,1,1) = {" -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -kg -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -rt -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(51,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -dQ -XO -dQ -dQ -GM -nu -nu -nu -ib -ox -"} -(52,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -Fq -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -GH -jN -ZN -zo -GM -nu -nu -nu -ib -ox -"} -(53,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -RC -Zu -QD -bt -qW -CX -nu -nu -nu -ib -ox -"} -(54,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -WS -Tm -Vc -SI -Lx -nu -nu -nu -ib -ox -"} -(55,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -dQ -dQ -Pv -dQ -dQ -Lx -nu -nu -nu -ib -ox -"} -(56,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -fA -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -GM -GM -GM -GM -dx -gK -nu -nu -nu -ib -ox -"} -(57,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -Io -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(58,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(59,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -ox -"} -(60,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -fA -fA -fA -fA -nu -nu -nu -nu -nu -nu -Xb -nu -nu -nu -ib -ox -"} -(61,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -nu -nu -ib -ox -"} -(62,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -nu -ib -ox -"} -(63,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -ib -ib -ib -nu -nu -nu -nu -nu -nu -nu -nu -ib -ib -nu -nu -nu -nu -ib -ib -ox -"} -(64,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ib -ox -"} -(65,1,1) = {" -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -cp -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -ox -"} diff --git a/_maps/virtual_domains/pipedream.dmm b/_maps/virtual_domains/pipedream.dmm index 44bd845477a..c443e8c4764 100644 --- a/_maps/virtual_domains/pipedream.dmm +++ b/_maps/virtual_domains/pipedream.dmm @@ -4,13 +4,13 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "aw" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "ax" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/frame/computer{ @@ -21,24 +21,24 @@ icon_state = "medium" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "aK" = ( /turf/open/space/basic, -/area/space) +/area/virtual_domain) "aL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "bq" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "bs" = ( /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "bw" = ( /obj/structure/disposalpipe/broken{ dir = 1 @@ -46,18 +46,18 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bx" = ( /obj/structure/frame/computer, /obj/item/shard, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-12" }, -/area/virtual_domain/powered) +/area/virtual_domain) "bA" = ( /obj/structure/chair/plastic, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "bG" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" @@ -65,7 +65,7 @@ /obj/structure/closet/crate/preopen, /obj/structure/railing, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "bS" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -80,7 +80,7 @@ pixel_y = -2 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cw" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 9 @@ -89,7 +89,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cB" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 10 @@ -99,18 +99,18 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "cF" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dx" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/item/shard, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dz" = ( /obj/machinery/light/broken, /obj/effect/decal/cleanable/dirt, @@ -119,22 +119,22 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "dA" = ( /obj/machinery/light/dim{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "dP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "eg" = ( /turf/closed/wall, -/area/virtual_domain/powered) +/area/virtual_domain) "ei" = ( /obj/machinery/conveyor/auto{ dir = 6; @@ -145,17 +145,17 @@ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "ev" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "eJ" = ( /obj/structure/disposalpipe/sorting{ dir = 2 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "eN" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 1 @@ -165,42 +165,42 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "eY" = ( /turf/closed/wall/r_wall, -/area/virtual_domain/powered) +/area/virtual_domain) "fe" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 }, /obj/structure/table/reinforced, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fg" = ( /turf/open/floor/iron/stairs/left{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain) "fj" = ( /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "fl" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fw" = ( /obj/structure/door_assembly/door_assembly_eng, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fK" = ( /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "fR" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -210,52 +210,53 @@ }, /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "fZ" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gc" = ( /obj/structure/disposalpipe/broken, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "gs" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gN" = ( /obj/structure/disposalpipe/sorting{ dir = 8 }, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "gV" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hg" = ( /obj/effect/turf_decal/caution{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hi" = ( /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "hk" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /obj/effect/decal/cleanable/dirt/dust, @@ -263,24 +264,24 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ho" = ( /obj/effect/turf_decal/siding/white{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "iw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "iz" = ( /obj/structure/broken_flooring/corner, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "iI" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 8 @@ -288,7 +289,7 @@ /obj/effect/turf_decal/trimline/yellow/corner, /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jv" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -297,53 +298,53 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jw" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/red/dim{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "jS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "jW" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ki" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "kn" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "kJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -353,67 +354,60 @@ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "kU" = ( /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lp" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, -/area/virtual_domain/powered) -"lt" = ( -/obj/structure/disposalpipe/sorting{ - dir = 8 - }, -/mob/living/basic/hivebot/range, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lx" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lB" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 5 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lC" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lI" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "lN" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "lW" = ( /obj/structure/disposalpipe/sorting{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mh" = ( /obj/structure/broken_flooring/pile{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mu" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "mE" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "mY" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -422,7 +416,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "nc" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -432,30 +426,30 @@ }, /obj/structure/sign/poster/official/safety_internals/directional/south, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "nz" = ( /obj/structure/broken_flooring/side/directional/north, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nD" = ( /obj/structure/disposalpipe/trunk/multiz, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nL" = ( /obj/effect/turf_decal/tile/dark/half, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "nS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "op" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim{ @@ -463,62 +457,56 @@ }, /obj/structure/sign/warning/doors/directional/north, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "oN" = ( /obj/machinery/conveyor/auto, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "oX" = ( /obj/structure/broken_flooring/corner/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pa" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) -"pb" = ( -/obj/structure/broken_flooring/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/mapping_helpers/damaged_window, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "po" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/maint, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "pv" = ( /obj/structure/broken_flooring/side{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "pI" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/light/small/red/dim{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "pJ" = ( /obj/structure/broken_flooring/pile{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qc" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 @@ -526,18 +514,18 @@ /obj/structure/table/reinforced, /obj/effect/spawner/random/bureaucracy/briefcase, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qk" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qN" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -545,7 +533,7 @@ /obj/effect/mob_spawn/corpse/human/factory, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -554,13 +542,13 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "qV" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "qW" = ( /obj/machinery/light/dim{ dir = 1 @@ -569,45 +557,44 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rc" = ( /obj/structure/disposalpipe/segment, /obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rz" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rG" = ( /obj/machinery/light/dim, /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "rJ" = ( /obj/structure/railing, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "rM" = ( /obj/structure/disposalpipe/broken{ dir = 1 }, -/mob/living/basic/hivebot/strong, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "rO" = ( /turf/closed/mineral, -/area/space) +/area/virtual_domain) "sn" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-38" }, -/area/virtual_domain/powered) +/area/virtual_domain) "sB" = ( /obj/machinery/light/broken{ dir = 8 @@ -617,7 +604,7 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "sW" = ( /obj/effect/decal/cleanable/oil/streak, /obj/effect/turf_decal/trimline/yellow/corner{ @@ -629,39 +616,34 @@ /obj/effect/decal/cleanable/blood/drip, /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "tl" = ( /obj/machinery/door/poddoor/shutters/indestructible{ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "tr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/virtual_domain/powered) -"tE" = ( -/obj/structure/disposalpipe/segment, -/mob/living/basic/hivebot/range, -/turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ud" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-110" }, -/area/virtual_domain/powered) +/area/virtual_domain) "uk" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/decal/cleanable/blood/splatter/over_window, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "um" = ( /obj/machinery/light/dim{ dir = 1 }, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "uv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -670,29 +652,29 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uz" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uC" = ( /obj/structure/falsewall, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uF" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "uP" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-55" }, -/area/virtual_domain/powered) +/area/virtual_domain) "uU" = ( /obj/structure/broken_flooring/side, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "vb" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/turf_decal/trimline/yellow/line{ @@ -700,7 +682,7 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ve" = ( /obj/machinery/mass_driver/trash{ dir = 1 @@ -709,26 +691,26 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "vA" = ( /obj/structure/closet/crate/maint, /obj/effect/turf_decal/stripes{ dir = 9 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vL" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vQ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "vU" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wg" = ( /obj/machinery/light/small/red/dim{ dir = 4 @@ -736,24 +718,24 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/preopen, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "wh" = ( /obj/structure/table/wood, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-207" }, -/area/virtual_domain/powered) +/area/virtual_domain) "wl" = ( /obj/item/shard, /turf/open/space/basic, -/area/space) +/area/virtual_domain) "wm" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /obj/structure/sign/clock/directional/north, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wq" = ( /obj/structure/table/wood, /obj/machinery/button/door{ @@ -763,7 +745,7 @@ /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-63" }, -/area/virtual_domain/powered) +/area/virtual_domain) "ws" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 @@ -772,57 +754,56 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "ww" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/mob/living/basic/hivebot, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wU" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "wW" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xa" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xj" = ( /obj/structure/railing/corner/end{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xk" = ( /obj/machinery/light/dim{ dir = 4 }, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xl" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "xA" = ( /obj/effect/decal/cleanable/generic, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xE" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/turf_decal/trimline/yellow/line{ @@ -830,11 +811,11 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xF" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain) "xM" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -844,28 +825,28 @@ name = "cat bed" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "xT" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "yB" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/welded, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "yM" = ( /turf/closed/indestructible/fakedoor{ name = "Stairwell Access" }, -/area/virtual_domain/powered) +/area/virtual_domain) "yQ" = ( /turf/template_noop, /area/template_noop) "yX" = ( /obj/structure/fans/tiny, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "zp" = ( /obj/structure/chair/sofa/corp/right{ dir = 1 @@ -873,13 +854,13 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/light/broken, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "zB" = ( /obj/structure/closet/crate/bin, /obj/item/trash/tray, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "zE" = ( /obj/structure/disposalpipe/broken{ dir = 1 @@ -888,7 +869,7 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "zO" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -896,30 +877,23 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Av" = ( /obj/item/stack/rods/two, /turf/open/space/basic, -/area/space) -"Aw" = ( -/obj/structure/lattice/catwalk{ - name = "industrial lift" - }, -/mob/living/basic/hivebot/rapid, -/turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "AJ" = ( /obj/effect/decal/cleanable/generic, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "AP" = ( /obj/structure/railing, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "AU" = ( /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) "Bd" = ( /obj/structure/closet/secure_closet/tac{ req_access = null @@ -928,11 +902,11 @@ /obj/item/ammo_casing/shotgun/buckshot, /obj/item/ammo_casing/shotgun/buckshot, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Bh" = ( /obj/structure/broken_flooring/corner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Bx" = ( /obj/structure/table/reinforced, /obj/machinery/microwave{ @@ -940,11 +914,11 @@ desc = "No longer cooks and boils stuff." }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BA" = ( /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "BI" = ( /obj/machinery/door/airlock/command/glass{ name = "Quartermaster's Office" @@ -957,28 +931,28 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BN" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) "BW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "BX" = ( /obj/effect/decal/cleanable/robot_debris/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ci" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ct" = ( /obj/machinery/conveyor/auto{ dir = 6 @@ -989,7 +963,7 @@ /obj/structure/sign/warning/vacuum/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Cv" = ( /obj/structure/chair/office{ dir = 8 @@ -997,30 +971,26 @@ /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-157" }, -/area/virtual_domain/powered) +/area/virtual_domain) "CA" = ( /obj/structure/disposalpipe/segment, /obj/structure/broken_flooring/side{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "CQ" = ( /obj/effect/spawner/random/trash/botanical_waste, /obj/item/trash/chips, /obj/structure/closet/secure_closet/freezer/empty/open, /turf/open/floor/iron, -/area/virtual_domain/powered) -"CR" = ( -/obj/structure/flora/rock/pile/style_random, -/turf/open/misc/asteroid/airless, -/area/virtual_domain/powered) +/area/virtual_domain) "CX" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Dr" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -1029,37 +999,37 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "DA" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "DE" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "DP" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/food_or_drink/snack, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Ex" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-137" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Ez" = ( /obj/structure/flora/rock/style_random, /turf/open/misc/asteroid/airless, -/area/space) +/area/virtual_domain) "EI" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /obj/effect/decal/cleanable/oil, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "EJ" = ( /obj/machinery/recycler/deathtrap{ dir = 8 @@ -1069,28 +1039,32 @@ }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"EK" = ( +/obj/structure/disposalpipe/broken, +/turf/open/floor/plating, +/area/virtual_domain) "Fa" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/maint, /obj/effect/turf_decal/delivery, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ff" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Fo" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Fr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/preopen, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Fw" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/rock/pile/style_random, @@ -1098,34 +1072,31 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/grass, -/area/virtual_domain/powered) +/area/virtual_domain) "FK" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) -"FO" = ( -/turf/open/misc/asteroid/airless, -/area/virtual_domain/powered) +/area/virtual_domain) "FP" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-110" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Gb" = ( /obj/effect/turf_decal/stripes{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ge" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-21" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Gh" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Gi" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 @@ -1133,7 +1104,7 @@ /obj/effect/turf_decal/trimline/yellow/corner, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Gs" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1142,7 +1113,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Gy" = ( /obj/machinery/conveyor/auto{ dir = 9; @@ -1152,11 +1123,11 @@ /obj/effect/turf_decal/stripes/line, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "GI" = ( /obj/effect/turf_decal/trimline/yellow/arrow_ccw, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "GV" = ( /obj/machinery/light/small/red/dim{ dir = 8 @@ -1166,57 +1137,57 @@ }, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Hn" = ( /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "HI" = ( /obj/structure/broken_flooring/pile/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Ib" = ( /obj/structure/chair/sofa/corp/left{ dir = 1 }, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "Ip" = ( /obj/machinery/door/airlock/engineering/glass, /obj/effect/mapping_helpers/airlock/access/any/away/supply, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Is" = ( /obj/machinery/door/airlock/engineering/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "IF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "IK" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "IZ" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/structure/closet/crate, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Jl" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Jm" = ( /obj/structure/broken_flooring/pile/directional/north, /obj/machinery/light/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Jn" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -1227,63 +1198,63 @@ }, /obj/structure/sign/warning/doors/directional/east, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Jq" = ( /obj/structure/broken_flooring/pile{ dir = 1 }, /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "JE" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/structure/sign/warning/chem_diamond/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "JR" = ( /turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "JT" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/effect/spawner/random/trash/grime, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Kb" = ( /obj/effect/mob_spawn/corpse/human/factory/guard, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Kt" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "KO" = ( /obj/structure/broken_flooring/side/directional/north, /obj/machinery/light/small/red/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "KX" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Ln" = ( /obj/structure/disposalpipe/broken{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Lp" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "LN" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -1295,7 +1266,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "LU" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 6 @@ -1303,12 +1274,13 @@ /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 }, +/obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mc" = ( /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mh" = ( /obj/machinery/conveyor/auto{ dir = 8 @@ -1317,14 +1289,11 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Mi" = ( /obj/effect/mob_spawn/corpse/human/factory, /turf/open/floor/plating, -/area/virtual_domain/powered) -"Mj" = ( -/turf/closed/mineral, -/area/virtual_domain/powered) +/area/virtual_domain) "Mu" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1333,14 +1302,14 @@ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Mx" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, /obj/structure/filingcabinet, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "My" = ( /obj/machinery/conveyor/auto{ dir = 1 @@ -1349,12 +1318,12 @@ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "MI" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-74" }, -/area/virtual_domain/powered) +/area/virtual_domain) "MN" = ( /obj/effect/turf_decal/tile/dark, /obj/effect/decal/cleanable/dirt, @@ -1362,29 +1331,29 @@ dir = 5 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Nc" = ( /obj/structure/chair/plastic{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Nu" = ( /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "NW" = ( /obj/effect/decal/cleanable/dirt, /mob/living/basic/hivebot/strong, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ok" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "On" = ( /obj/structure/broken_flooring/side{ dir = 4 @@ -1393,30 +1362,34 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"Ou" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "OJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "OL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "OQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/ripped/directional/west, /turf/open/floor/carpet/orange, -/area/virtual_domain/powered) +/area/virtual_domain) "OR" = ( /obj/machinery/light/broken, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Po" = ( /obj/machinery/light/small/red/dim{ dir = 4 @@ -1425,7 +1398,7 @@ /obj/structure/broken_flooring/corner, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Pr" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 5 @@ -1435,14 +1408,14 @@ }, /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "PH" = ( /obj/structure/railing/corner/end/flip{ dir = 8 }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Qd" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 8 @@ -1454,29 +1427,29 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Qh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/broken{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Qj" = ( /obj/machinery/light/dim{ dir = 8 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Qo" = ( /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/template_noop, -/area/virtual_domain/safehouse) +/area/virtual_domain) "Qr" = ( /turf/closed/indestructible/fakedoor/maintenance{ name = "maintenance access" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Qv" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -1488,7 +1461,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Qy" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -1497,39 +1470,46 @@ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QI" = ( /obj/structure/sign/calendar/directional/north, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "QK" = ( /obj/structure/table, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "QN" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QP" = ( /obj/structure/sign/poster/contraband/random/directional/east, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "QW" = ( /obj/machinery/conveyor/auto{ dir = 5 }, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) +"Rs" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "Ru" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Ry" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -1539,14 +1519,14 @@ }, /obj/machinery/disposal/bin, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "RJ" = ( /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain) "RK" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "RZ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -1555,7 +1535,7 @@ dir = 6 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Sg" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1564,7 +1544,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Sl" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1573,53 +1553,48 @@ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) -"SC" = ( -/mob/living/basic/hivebot/strong, -/turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "SR" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/glass, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "SS" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/mineral, -/area/virtual_domain/powered) +/area/virtual_domain) "SU" = ( /obj/effect/spawner/structure/window, /obj/item/stack/rods/two, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "SZ" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Te" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 5 }, /obj/effect/mob_spawn/corpse/human/factory/qm, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Tn" = ( /obj/structure/broken_flooring/corner{ dir = 4 }, -/mob/living/basic/hivebot, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Tp" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; id = "factorylockdown" }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Tt" = ( /obj/machinery/conveyor/auto{ dir = 9 @@ -1628,12 +1603,12 @@ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "TH" = ( /obj/structure/broken_flooring/corner/directional/south, /obj/item/ammo_casing/shotgun/buckshot/spent, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Ue" = ( /obj/structure/table/reinforced, /obj/machinery/light/small/red/dim{ @@ -1641,17 +1616,17 @@ }, /obj/structure/sign/poster/official/cleanliness/directional/west, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Uw" = ( /obj/machinery/light/dim{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UO" = ( /obj/structure/broken_flooring/side/directional/north, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "UV" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1660,18 +1635,18 @@ dir = 6 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "UX" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "UY" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vb" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -1681,7 +1656,7 @@ }, /obj/machinery/light/broken, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vg" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1691,60 +1666,60 @@ }, /obj/machinery/light/small/red/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Vh" = ( /obj/structure/table/reinforced, /turf/open/floor/iron/cafeteria, -/area/virtual_domain/powered) +/area/virtual_domain) "Vy" = ( /obj/structure/broken_flooring/singular{ dir = 4 }, /obj/effect/mob_spawn/corpse/human/factory/guard, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VA" = ( /obj/machinery/light/small/red/dim{ dir = 1 }, /obj/structure/table, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VJ" = ( /obj/structure/broken_flooring/corner{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VL" = ( /obj/structure/sign/warning/secure_area/directional/south, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "VO" = ( /obj/machinery/light/broken{ dir = 1 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Wd" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" }, /obj/structure/railing, /turf/open/chasm, -/area/virtual_domain/powered) +/area/virtual_domain) "Wp" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "WT" = ( /obj/effect/turf_decal/stripes{ dir = 8 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "WV" = ( /obj/machinery/conveyor/auto{ dir = 10; @@ -1755,32 +1730,32 @@ dir = 6 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Xb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/wall, -/area/virtual_domain/powered) +/area/virtual_domain) "Xc" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Xm" = ( /obj/item/gun/ballistic/shotgun/lethal, /obj/machinery/light/broken{ dir = 1 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Xo" = ( /obj/machinery/conveyor/auto{ dir = 4 }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Xw" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 1 @@ -1789,7 +1764,7 @@ dir = 10 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XL" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 5 @@ -1799,26 +1774,26 @@ }, /obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XN" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "XO" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XP" = ( /obj/structure/disposalpipe/segment, /obj/structure/railing/corner/end{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "XQ" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -1827,22 +1802,22 @@ dir = 4 }, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "XR" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Yc" = ( /obj/item/gun/ballistic/revolver, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yl" = ( /obj/structure/broken_flooring/corner/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Ym" = ( /mob/living/simple_animal/pet/cat/space, /obj/structure/bed/dogbed{ @@ -1855,61 +1830,61 @@ /obj/machinery/light/small/dim/directional/south, /obj/structure/sign/poster/official/moth_hardhat/directional/west, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Yz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor/shutters/indestructible{ id = "factorylockdown" }, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "YF" = ( /obj/machinery/light/small/red/dim, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "YL" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "YP" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 }, /obj/machinery/light/dim, /turf/open/floor/iron, -/area/virtual_domain/powered) +/area/virtual_domain) "Zb" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "Zg" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-157" }, -/area/virtual_domain/powered) +/area/virtual_domain) "Zy" = ( /obj/structure/table, /obj/item/flashlight/lantern, /turf/open/floor/plating, -/area/virtual_domain/powered) +/area/virtual_domain) "ZI" = ( /turf/open/floor/carpet/royalblue{ icon_state = "carpet_royalblue-203" }, -/area/virtual_domain/powered) +/area/virtual_domain) "ZP" = ( /obj/structure/railing, /turf/open/floor/iron/stairs/right{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain) (1,1,1) = {" yQ @@ -1989,8 +1964,8 @@ yQ yQ yQ RJ -Mj -Mj +rO +rO eg eg SS @@ -1998,8 +1973,8 @@ eg eg eg Xb -Mj -Mj +rO +rO RJ yQ yQ @@ -2039,7 +2014,7 @@ yQ yQ yQ RJ -Mj +rO Bx SZ Ue @@ -2049,7 +2024,7 @@ eg OQ bs Ib -Mj +rO RJ RJ RJ @@ -2102,7 +2077,7 @@ zp eY RJ RJ -Mj +rO RJ RJ rO @@ -2150,9 +2125,9 @@ fg ZP Fw eY -Mj -Mj -Mj +rO +rO +rO AU AU AU @@ -2186,7 +2161,7 @@ vA Dr bw Jq -gc +EK eg RJ eg @@ -2200,7 +2175,7 @@ hi FK eY eY -Mj +rO Ez AU aK @@ -2233,7 +2208,7 @@ yQ RJ eg jQ -lt +lW kU vU lN @@ -2249,8 +2224,8 @@ tr hi Ln eY -Mj -Mj +rO +rO AU AU BN @@ -2284,7 +2259,7 @@ RJ eg uU gj -kU +Ou Tn OR eg @@ -2583,7 +2558,7 @@ AP KX JT bG -qk +Rs DA DA zE @@ -2631,14 +2606,14 @@ jS gj rJ KX -Aw +KX Wd Ff lN XO gj DE -SC +kU tl qk mu @@ -2664,10 +2639,10 @@ RJ (16,1,1) = {" yQ RJ -Mj -Mj -Mj -Mj +rO +rO +rO +rO RJ eg eg @@ -2714,12 +2689,12 @@ RJ (17,1,1) = {" yQ RJ -Mj +rO BN AU -Mj -Mj -Mj +rO +rO +rO eg QW My @@ -2882,9 +2857,9 @@ Yl pJ eg kn -pb -kU +Tn kU +Ou kU Fa kU @@ -2919,7 +2894,7 @@ aK aK aK Av -CR +BN tr kU ei @@ -2934,9 +2909,9 @@ eg rc mu rM -gc +EK +vQ vQ -tE mu mu eg @@ -2969,7 +2944,7 @@ aK aK aK aK -FO +AU eg eg wg @@ -2988,7 +2963,7 @@ kU On pi kU -Mj +rO eg wm xA @@ -3019,12 +2994,12 @@ aK aK aK AU -FO -Mj +AU +rO eg eg -Mj -Mj +rO +rO eY eY UO @@ -3035,10 +3010,10 @@ eg eg eg eg -Mj -Mj -Mj -Mj +rO +rO +rO +rO eg RZ vQ @@ -3069,11 +3044,11 @@ aK aK AU Ez -Mj -Mj +rO +rO RJ -Mj -Mj +rO +rO Vy hi eY @@ -3086,7 +3061,7 @@ Qd jv fR cB -Mj +rO RJ RJ eg @@ -3098,10 +3073,10 @@ YL eg bq hi -Mj +rO eY -Mj -Mj +rO +rO AU AU aK @@ -3118,8 +3093,8 @@ aK AU BN AU -Mj -Mj +rO +rO RJ RJ eY @@ -3140,25 +3115,25 @@ eg RJ RJ eg -Mj -Mj +rO +rO eg eg eg eg eg -Mj -Mj +rO +rO RJ RJ -Mj -Mj -Mj +rO +rO +rO RJ RJ -Mj -Mj -Mj +rO +rO +rO RJ "} (26,1,1) = {" @@ -3168,7 +3143,7 @@ RJ RJ RJ rO -Mj +rO RJ RJ RJ @@ -3386,7 +3361,7 @@ LN xM Qv LU -Mj +rO RJ yQ yQ @@ -3434,9 +3409,9 @@ eg eg eg eg -Mj -Mj -Mj +rO +rO +rO RJ yQ yQ @@ -3526,7 +3501,7 @@ yQ yQ yQ RJ -Mj +rO CX hi Nu @@ -3576,7 +3551,7 @@ yQ yQ yQ RJ -Mj +rO CX RJ Lp diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm index 9868ab8e9b3..952a8877d37 100644 --- a/_maps/virtual_domains/pirates.dmm +++ b/_maps/virtual_domains/pirates.dmm @@ -3,13 +3,13 @@ /obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/garbage, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "by" = ( /obj/effect/turf_decal/weather/sand{ dir = 5 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bz" = ( /obj/structure/flora/bush/grassy{ pixel_y = 8 @@ -18,25 +18,25 @@ pixel_y = -10 }, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "bP" = ( /obj/structure/flora/bush/flowers_br/style_random, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cl" = ( /obj/structure/flora/rock/style_3, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ct" = ( /obj/structure/closet/cabinet, /obj/item/clothing/head/costume/pirate/armored, /obj/item/clothing/suit/costume/pirate/captain/armored, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "cx" = ( /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cJ" = ( /obj/item/stack/cannonball/shellball{ pixel_x = 13; @@ -48,7 +48,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "cQ" = ( /obj/structure/flora/grass/jungle/b{ pixel_x = -15; @@ -59,22 +59,22 @@ pixel_y = -1 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dp" = ( /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dA" = ( /obj/structure/bonfire/prelit, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "dQ" = ( /obj/structure/flora/rock/style_4, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "eb" = ( /obj/structure/flora/bush/sparsegrass, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "eD" = ( /obj/structure/flora/coconuts{ pixel_x = 9; @@ -82,38 +82,38 @@ }, /obj/structure/flora/tree/palm/style_2, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "eQ" = ( /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "eW" = ( /obj/effect/turf_decal/weather/sand{ dir = 6 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "fx" = ( /obj/structure/fluff/beach_umbrella{ pixel_x = -7; pixel_y = -10 }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "gk" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "gw" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ht" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "hH" = ( /obj/item/clothing/suit/armor/militia{ pixel_x = -5; @@ -144,18 +144,18 @@ }, /obj/structure/closet/cabinet, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hM" = ( /obj/structure/closet/crate/goldcrate, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "hW" = ( /obj/structure/chair/comfy/carp{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "iM" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -163,13 +163,13 @@ /obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/trooper/pirate/ranged/space, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "iO" = ( /obj/effect/turf_decal/weather/sand{ dir = 4 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jl" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -188,13 +188,13 @@ pixel_x = -5 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jz" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jB" = ( /obj/effect/turf_decal/weather/sand{ dir = 4 @@ -204,7 +204,7 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "jC" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -225,19 +225,19 @@ pixel_y = 7 }, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "jQ" = ( /obj/item/gun/energy/laser/hellgun{ pixel_y = 10 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kg" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "kl" = ( /obj/structure/cannon, /obj/effect/turf_decal/siding/wood, @@ -246,7 +246,10 @@ pixel_x = 8 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) +"kF" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain) "lC" = ( /obj/item/stack/cannonball{ pixel_x = 7; @@ -261,71 +264,71 @@ }, /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "me" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mw" = ( /obj/structure/flora/grass/jungle/b/style_random{ pixel_x = -13; pixel_y = 18 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "mP" = ( /obj/structure/flora/bush/fullgrass, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "nz" = ( /obj/effect/mob_spawn/corpse/human/pirate, /turf/open/misc/beach/coast{ dir = 8 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "nQ" = ( /obj/machinery/loot_locator, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "nS" = ( /obj/structure/flora/rock/pile/jungle/large, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "nX" = ( /obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/trooper/pirate/melee/space, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "oo" = ( /obj/machinery/smartfridge/drying_rack, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "oU" = ( /turf/open/misc/beach/coast{ dir = 10 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pq" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "px" = ( /obj/structure/headpike/bone{ pixel_y = 24 }, /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pP" = ( /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "pU" = ( /obj/effect/mob_spawn/corpse/human/pirate, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qj" = ( /obj/structure/barricade/wooden, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qm" = ( /obj/effect/turf_decal/siding/wood, /obj/item/melee/sabre{ @@ -335,7 +338,7 @@ /obj/item/gun/energy/laser/retro, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qx" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -344,13 +347,13 @@ /obj/effect/decal/cleanable/dirt/dust, /mob/living/basic/trooper/pirate/ranged, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qN" = ( /obj/structure/flora/bush/sunny/style_3{ pixel_y = 22 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "qX" = ( /obj/effect/turf_decal/weather/sand{ dir = 9 @@ -363,31 +366,34 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) +"rW" = ( +/turf/template_noop, +/area/virtual_domain/fullbright) "sn" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/ordnance, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "so" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "th" = ( /obj/effect/turf_decal/weather/sand, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "tk" = ( /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "to" = ( /mob/living/basic/trooper/pirate/melee, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ub" = ( /turf/template_noop, /area/virtual_domain/safehouse) @@ -399,39 +405,39 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uM" = ( /obj/structure/flora/bush/stalky{ pixel_y = 13; pixel_x = -8 }, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "uT" = ( /obj/structure/closet/crate/grave, /obj/structure/flora/grass/jungle/b, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "wb" = ( /obj/structure/flora/rock, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "we" = ( /obj/effect/mine/explosive/light, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xc" = ( /turf/open/misc/beach/coast{ dir = 4 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xg" = ( /turf/template_noop, /area/template_noop) "xm" = ( /obj/structure/barricade/wooden/crude, /turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xB" = ( /obj/structure/fermenting_barrel/gunpowder{ pixel_x = -4; @@ -452,33 +458,33 @@ pixel_y = -10 }, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xC" = ( /obj/effect/turf_decal/weather/dirt{ dir = 1 }, /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "xI" = ( /obj/structure/flora/rock/pile/style_2, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yc" = ( /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ye" = ( /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yi" = ( /mob/living/basic/trooper/pirate/melee, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yq" = ( /obj/structure/barricade/sandbags, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yw" = ( /obj/effect/mapping_helpers/burnt_floor, /mob/living/basic/trooper/pirate/ranged, @@ -486,21 +492,21 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "yA" = ( /obj/item/bedsheet/rainbow/double, /obj/structure/bed/double, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "zf" = ( /obj/structure/flora/bush/flowers_br/style_random, /obj/structure/flora/bush/ferny, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zg" = ( /obj/structure/flora/rock/pile/style_3, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "zR" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -509,30 +515,30 @@ /obj/effect/turf_decal/weather/dirt, /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "AU" = ( /obj/effect/turf_decal/weather/dirt{ dir = 1 }, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BC" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "BO" = ( /obj/structure/bookcase/random/adult, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "Cc" = ( /obj/structure/flora/tree/palm, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ct" = ( /turf/open/misc/beach/coast/corner, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Dm" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table/wood, @@ -546,7 +552,11 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) +"Dr" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain) "DJ" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/structure/bed/maint{ @@ -555,11 +565,11 @@ }, /obj/effect/decal/cleanable/wrapping, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "DL" = ( /obj/structure/flora/bush/sunny, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ED" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/weather/sand{ @@ -569,7 +579,7 @@ dir = 9 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "EZ" = ( /obj/effect/turf_decal/weather/sand{ dir = 9 @@ -577,7 +587,7 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/claymore/cutlass, @@ -592,15 +602,15 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "FT" = ( /turf/closed/mineral/random/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "GF" = ( /obj/effect/turf_decal/weather/dirt, /obj/structure/flora/rock/pile, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "GG" = ( /obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ @@ -613,38 +623,38 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Hp" = ( /obj/effect/turf_decal/siding/wood, /mob/living/basic/trooper/pirate/ranged, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "HY" = ( /turf/open/misc/beach/coast{ dir = 6 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "It" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/lavendergrass, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Iz" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/bed/maint, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IF" = ( /obj/effect/turf_decal/weather/dirt{ dir = 4 }, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IG" = ( /obj/effect/mob_spawn/corpse/human/pirate, /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "IM" = ( /obj/effect/turf_decal/weather/sand{ dir = 10 @@ -652,24 +662,24 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Jo" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Jr" = ( /obj/structure/headpike/bone, /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Jv" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "JT" = ( /obj/effect/decal/cleanable/ants, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Kb" = ( /obj/structure/railing{ color = "#4C3117"; @@ -680,23 +690,23 @@ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Kl" = ( /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Kw" = ( /obj/machinery/door/airlock/vault{ color = "#825427"; name = "Ye Olde Strong Door" }, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "KC" = ( /obj/effect/turf_decal/weather/dirt{ dir = 5 }, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KG" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -712,19 +722,19 @@ pixel_y = -3 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "KQ" = ( /obj/structure/flora/rock/style_2, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ld" = ( /obj/structure/flora/rock/pile, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Ma" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Mi" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -732,28 +742,28 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/oil, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "MW" = ( /obj/effect/turf_decal/weather/sand{ dir = 5 }, /obj/effect/decal/cleanable/glass, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nh" = ( /obj/structure/flora/rock/pile/jungle/style_3{ pixel_x = -15; pixel_y = -4 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nk" = ( /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Nz" = ( /obj/structure/flora/bush/jungle, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "NI" = ( /obj/structure/railing{ color = "#4C3117"; @@ -763,7 +773,7 @@ dir = 9 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ON" = ( /obj/item/kirbyplants/organic/plant21{ pixel_x = -8 @@ -772,11 +782,11 @@ pixel_x = 11 }, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "OP" = ( /obj/structure/flora/bush/stalky, /turf/open/misc/beach/coast, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Pq" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -788,24 +798,24 @@ pixel_y = 13 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Pz" = ( /obj/structure/table/wood, /mob/living/simple_animal/parrot{ name = "pepper" }, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "PQ" = ( /obj/structure/flora/grass/jungle/b, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Qb" = ( /obj/structure/flora/rock{ pixel_x = 7 }, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Rr" = ( /obj/structure/bed/maint{ pixel_x = -5; @@ -815,18 +825,18 @@ dir = 6 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "RR" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Sm" = ( /obj/structure/flora/tree/jungle, /obj/structure/flora/bush/fullgrass/style_random, /turf/open/misc/grass, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "St" = ( /obj/structure/table/wood, /obj/item/melee/energy/sword/pirate{ @@ -841,12 +851,12 @@ }, /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "Tp" = ( /turf/open/misc/beach/coast/corner{ dir = 1 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Tt" = ( /obj/structure/cannon{ dir = 1 @@ -855,7 +865,7 @@ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TO" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -863,7 +873,7 @@ /obj/machinery/light/small/directional/south, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/carpet/blue, -/area/virtual_domain/powered) +/area/virtual_domain) "TP" = ( /obj/effect/turf_decal/weather/dirt{ dir = 4 @@ -871,7 +881,7 @@ /turf/open/misc/beach/coast{ dir = 6 }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "TQ" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt/dust, @@ -882,11 +892,11 @@ /obj/effect/decal/cleanable/cobweb, /obj/item/toy/plush/beeplushie, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Uy" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "UE" = ( /obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ @@ -895,25 +905,25 @@ /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Vg" = ( /obj/effect/mob_spawn/corpse/human/pirate/melee, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Vk" = ( /obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand, /turf/open/floor/wood{ icon_state = "wood_large" }, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VC" = ( /obj/effect/mob_spawn/corpse/human/damaged, /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VF" = ( /turf/open/water/beach, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "VX" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/structure/rack{ @@ -925,14 +935,14 @@ pixel_y = 13 }, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "WM" = ( /obj/structure/flora/rock/pile/jungle/style_2, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "WP" = ( /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "Xn" = ( /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/template_noop, @@ -944,32 +954,32 @@ }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yj" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Yk" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood/parquet, -/area/virtual_domain/powered) +/area/virtual_domain) "Yq" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 }, /turf/open/floor/wood, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "Zk" = ( /obj/structure/flora/coconuts{ pixel_x = 12 }, /obj/structure/flora/tree/palm, /turf/open/misc/beach/sand, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) "ZZ" = ( /obj/structure/flora/grass/jungle, /turf/open/misc/dirt/jungle, -/area/virtual_domain/powered) +/area/virtual_domain/fullbright) (1,1,1) = {" xg @@ -1545,12 +1555,12 @@ cx "} (14,1,1) = {" cx -dp -dp -dp -dp -dp -dp +kF +kF +kF +kF +kF +Dr oo Kl Kl @@ -1589,12 +1599,12 @@ cx "} (15,1,1) = {" cx -dp +kF BO ht VX ct -dp +kF yi Kl dA @@ -1633,7 +1643,7 @@ cx "} (16,1,1) = {" cx -dp +kF ON WP nX @@ -1677,12 +1687,12 @@ cx "} (17,1,1) = {" cx -dp +kF jC iM so TO -dp +kF Kl Kl EZ @@ -1721,12 +1731,12 @@ cx "} (18,1,1) = {" cx -dp +kF sn hW eQ gk -dp +kF dp qX gw @@ -1765,12 +1775,12 @@ cx "} (19,1,1) = {" cx -dp +kF St Pz nQ yA -dp +kF dp Dm jz @@ -1809,12 +1819,12 @@ cx "} (20,1,1) = {" cx -dp -dp -dp -dp -dp -dp +kF +kF +kF +kF +kF +kF xm FG RR @@ -2120,7 +2130,7 @@ xg xg xg xg -xg +rW cx FT FT diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm index 05014331406..de97ca08398 100644 --- a/_maps/virtual_domains/syndicate_assault.dmm +++ b/_maps/virtual_domains/syndicate_assault.dmm @@ -5,11 +5,11 @@ /turf/open/floor/plastic, /area/ruin/space/has_grav/powered/virtual_domain) "aw" = ( -/obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "aN" = ( @@ -31,28 +31,9 @@ /obj/machinery/recharge_station, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"aZ" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, -/mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "bh" = ( /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/powered/virtual_domain) -"bo" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "bD" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -199,12 +180,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"fM" = ( -/obj/machinery/computer/crew/syndie{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/virtual_domain) "fV" = ( /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/mineral/plastitanium/red, @@ -236,7 +211,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "ip" = ( -/mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plastic, /area/ruin/space/has_grav/powered/virtual_domain) "iB" = ( @@ -274,7 +249,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "ja" = ( @@ -411,10 +385,6 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"oZ" = ( -/mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, -/turf/open/floor/carpet/royalblack, -/area/ruin/space/has_grav/powered/virtual_domain) "pl" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 8 @@ -468,6 +438,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "qY" = ( /obj/machinery/light/small/directional/south, +/obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/powered/virtual_domain) "rm" = ( @@ -622,12 +593,6 @@ /obj/item/ammo_box/c9mm, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"xZ" = ( -/obj/machinery/computer/camera_advanced/syndie{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/virtual_domain) "yl" = ( /obj/machinery/door/airlock/grunge{ name = "Captain's Room" @@ -640,10 +605,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"yD" = ( -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "yJ" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, @@ -688,13 +649,6 @@ /obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"AN" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/mob/living/basic/trooper/syndicate/ranged/smg/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Bm" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/syndicate, @@ -787,10 +741,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) -"EX" = ( -/mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Fp" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/mineral/plastitanium, @@ -863,6 +813,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 9 }, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "Ig" = ( @@ -1009,9 +960,8 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/powered/virtual_domain) -"Nt" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump, +"Nv" = ( +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "Of" = ( @@ -1076,10 +1026,6 @@ /obj/structure/tank_dispenser/oxygen, /turf/closed/mineral/random, /area/space) -"QX" = ( -/mob/living/basic/trooper/syndicate/ranged/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "Ra" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, /obj/machinery/light/small/directional/north, @@ -2016,14 +1962,14 @@ ru Sv vD uP -uP +Io Yj vD uP Wy DA +Io uP -QX vD cc ru @@ -2073,7 +2019,7 @@ ru Io uP uP -QX +Nv lN uP uP @@ -2082,9 +2028,9 @@ uP uP lN uP +Nv uP -uP -uP +Io hA qx qx @@ -2255,8 +2201,8 @@ sz Kz ru Mc -gD -yD +uP +uP uP rP ru @@ -2305,7 +2251,7 @@ ru sH Kz yl -oZ +bh bh Yk pS @@ -2314,7 +2260,7 @@ Jz vK uP uP -uP +Io sL hy ru @@ -2372,7 +2318,7 @@ pM vK uP uP -EX +Nv sL Im ru @@ -2429,7 +2375,7 @@ JN MR ru Sd -gD +uP uP uP gD @@ -2887,7 +2833,7 @@ dw ru rH uP -AN +JA JA iX JA @@ -3002,13 +2948,13 @@ uP uP dd uP -Aa -hD -Nt +uP +uP +Ox aw -hD -hD -bo +uP +uP +uP uP dd uP @@ -3062,9 +3008,9 @@ ru XS uP uP -hD -aZ -hD +uP +FN +uP uP uP Cf @@ -3466,14 +3412,14 @@ ru Kz ru Kz +Kz +Kz pz Kz -xZ -Kz -fM -Kz kI Kz +Kz +Kz ru Mm ru @@ -3531,7 +3477,7 @@ Kz Kz Kz Kz -Kz +dz ru ru ru diff --git a/_maps/virtual_domains/test_only.dmm b/_maps/virtual_domains/test_only.dmm index 22b647188b6..1fc9cfba0fd 100644 --- a/_maps/virtual_domains/test_only.dmm +++ b/_maps/virtual_domains/test_only.dmm @@ -1,15 +1,15 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "D" = ( /obj/effect/mob_spawn/corpse/human/miner, /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "I" = ( /mob/living/basic/pet/dog/corgi, /turf/open/floor, -/area/virtual_domain/powered) +/area/virtual_domain) "U" = ( /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/open/floor, diff --git a/_maps/virtual_domains/wendigo.dmm b/_maps/virtual_domains/wendigo.dmm index 17bcb48d688..dcce722cbbd 100644 --- a/_maps/virtual_domains/wendigo.dmm +++ b/_maps/virtual_domains/wendigo.dmm @@ -58,7 +58,7 @@ /turf/open/misc/asteroid/snow/ice/icemoon, /area/icemoon/underground/explored/virtual_domain) "H" = ( -/mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain, +/mob/living/simple_animal/hostile/megafauna/wendigo, /turf/open/indestructible/necropolis{ initial_gas_mix = "ICEMOON_ATMOS" }, diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index fcbd7cc116c..01d57cc06ef 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -22,11 +22,6 @@ /obj/effect/decal/cleanable/blood, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) -"h" = ( -/obj/structure/alien/weeds, -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) "i" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -100,12 +95,22 @@ /obj/effect/landmark/bitrunning/safehouse_spawn, /turf/template_noop, /area/virtual_domain/safehouse) +"w" = ( +/obj/structure/alien/weeds/node, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/space/has_grav/powered/virtual_domain) "x" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) +"y" = ( +/obj/structure/alien/weeds, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/space/has_grav/powered/virtual_domain) "z" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, @@ -246,14 +251,6 @@ /obj/structure/alien/egg/burst, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/space/has_grav/powered/virtual_domain) -"Y" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/alien/drone{ - plants_off = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) "Z" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -477,7 +474,7 @@ a E z e -e +y m K J @@ -518,13 +515,13 @@ a E z W -h +e e e e B o -e +K z E a @@ -564,7 +561,7 @@ z e V e -h +e W z E @@ -683,12 +680,12 @@ E z z e -h e e -h e e +y +e z E a @@ -786,8 +783,8 @@ z z W o -Y -e +B +K z E a @@ -826,7 +823,7 @@ E z I e -V +w e W z @@ -973,7 +970,7 @@ E z e e -p +e z z z @@ -1130,7 +1127,7 @@ E E G t -S +y e z z @@ -1260,7 +1257,7 @@ E E E z -p +e z z E @@ -1383,7 +1380,7 @@ z z T e -e +y V W z @@ -1423,7 +1420,7 @@ E z N f -S +e e W I @@ -1873,8 +1870,8 @@ E E z I -p e +y e e e diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 4a0299d835a..7af89f2673a 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -6,11 +6,6 @@ #define ACHIEVEMENT_DEFAULT "default" #define ACHIEVEMENT_SCORE "score" -///the priority for which awards are orded on [/datum/achievement_data/load_all_achievements()] -#define AWARD_PRIORITY_DEFAULT 100 -///the priority of the achievements score. NO achievement should have a priority equal or lower than this. -#define AWARD_PRIORITY_LAST 0 - /// preferences for the sound played when unlocking an achievement #define CHEEVO_SOUND_TADA "Tada Fanfare" #define CHEEVO_SOUND_JINGLE "Beeps Jingle" @@ -46,7 +41,7 @@ #define MEDAL_VOID_ASCENSION "Void" #define MEDAL_BLADE_ASCENSION "Blade" #define MEDAL_COSMOS_ASCENSION "Cosmos" -#define MEDAL_KNOCK_ASCENSION "Knock" +#define MEDAL_LOCK_ASCENSION "Knock" #define MEDAL_TOOLBOX_SOUL "Toolsoul" #define MEDAL_CHEM_TUT "Beginner Chemist" #define MEDAL_HOT_DAMN "Hot Damn!" diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index 5bc2b161781..99f9c1aca55 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -41,3 +41,10 @@ DEFINE_BITFIELD(check_flags, list( #define UPDATE_BUTTON_BACKGROUND (1<<2) #define UPDATE_BUTTON_OVERLAY (1<<3) #define UPDATE_BUTTON_STATUS (1<<4) + +/// Takes in a typepath of a `/datum/action` and adds it to `src`. +/// Only useful if you want to add the action and never desire to reference it again ever. +#define GRANT_ACTION(typepath) do {\ + var/datum/action/_ability = new typepath(src);\ + _ability.Grant(src);\ +} while (FALSE) diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 53cbf117af4..5e0b979b2f8 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -1,4 +1,5 @@ #define GET_AI_BEHAVIOR(behavior_type) SSai_behaviors.ai_behaviors[behavior_type] +#define GET_TARGETING_STRATEGY(targeting_type) SSai_behaviors.targeting_strategies[targeting_type] #define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) #define AI_STATUS_ON 1 diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index 484b38b0fd1..91ad49975fe 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -10,6 +10,12 @@ #define BB_PATH_TO_USE "BB_path_to_use" ///How close a mob must be for us to select it as a target, if that is less than how far we can maintain it as a target #define BB_AGGRO_RANGE "BB_aggro_range" +///are we hungry? determined by the udder compnent +#define BB_CHECK_HUNGRY "BB_check_hungry" +///are we ready to breed? +#define BB_BREED_READY "BB_breed_ready" +///maximum kids we can have +#define BB_MAX_CHILDREN "BB_max_children" /// Store a single or list of emotes at this key #define BB_EMOTE_KEY "BB_emotes" @@ -40,31 +46,33 @@ ///Basic Mob Keys -///Targetting subtrees +///Targeting subtrees #define BB_BASIC_MOB_CURRENT_TARGET "BB_basic_current_target" #define BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION "BB_basic_current_target_hiding_location" -#define BB_TARGETTING_DATUM "targetting_datum" +#define BB_TARGETING_STRATEGY "targeting_strategy" ///some behaviors that check current_target also set this on deep crit mobs #define BB_BASIC_MOB_EXECUTION_TARGET "BB_basic_execution_target" ///Blackboard key for a whitelist typecache of "things we can target while trying to move" -#define BB_OBSTACLE_TARGETTING_WHITELIST "BB_targetting_whitelist" +#define BB_OBSTACLE_TARGETING_WHITELIST "BB_targeting_whitelist" /// Key for the minimum status at which we want to target mobs (does not need to be specified if CONSCIOUS) #define BB_TARGET_MINIMUM_STAT "BB_target_minimum_stat" /// Flag for whether to target only wounded mobs #define BB_TARGET_WOUNDED_ONLY "BB_target_wounded_only" +/// What typepath the holding object targeting strategy should look for +#define BB_TARGET_HELD_ITEM "BB_target_held_item" -/// Blackboard key storing how long your targetting datum has held a particular target +/// Blackboard key storing how long your targeting strategy has held a particular target #define BB_BASIC_MOB_HAS_TARGET_TIME "BB_basic_mob_has_target_time" -///Targetting keys for something to run away from, if you need to store this separately from current target +///Targeting keys for something to run away from, if you need to store this separately from current target #define BB_BASIC_MOB_FLEE_TARGET "BB_basic_flee_target" #define BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION "BB_basic_flee_target_hiding_location" -#define BB_FLEE_TARGETTING_DATUM "flee_targetting_datum" +#define BB_FLEE_TARGETING_STRATEGY "flee_targeting_strategy" #define BB_BASIC_MOB_FLEE_DISTANCE "BB_basic_flee_distance" #define DEFAULT_BASIC_FLEE_DISTANCE 9 -/// Generic key for a non-specific targetted action -#define BB_TARGETTED_ACTION "BB_targetted_action" +/// Generic key for a non-specific targeted action +#define BB_TARGETED_ACTION "BB_TARGETED_action" /// Generic key for a non-specific action #define BB_GENERIC_ACTION "BB_generic_action" @@ -115,9 +123,9 @@ ///Range for a MOD AI controller. #define MOD_AI_RANGE 200 -///should we skip the faction check for the targetting datum? +///should we skip the faction check for the targeting strategy? #define BB_ALWAYS_IGNORE_FACTION "BB_always_ignore_factions" -///are we in some kind of temporary state of ignoring factions when targetting? can result in volatile results if multiple behaviours touch this +///are we in some kind of temporary state of ignoring factions when targeting? can result in volatile results if multiple behaviours touch this #define BB_TEMPORARILY_IGNORE_FACTION "BB_temporarily_ignore_factions" ///currently only used by clowns, a list of what can the mob speak randomly diff --git a/code/__DEFINES/ai/carp.dm b/code/__DEFINES/ai/carp.dm index 8286f326207..459b98ffb02 100644 --- a/code/__DEFINES/ai/carp.dm +++ b/code/__DEFINES/ai/carp.dm @@ -7,9 +7,9 @@ /// Current target turf in your migration #define BB_CARP_MIGRATION_TARGET "BB_carp_migration_target" -/// Targetting keys for magicarp spells +/// Targeting keys for magicarp spells #define BB_MAGICARP_SPELL_TARGET "BB_magicarp_spell_target" -#define BB_MAGICARP_SPELL_SPECIAL_TARGETTING "BB_magicarp_spell_special_targetting" +#define BB_MAGICARP_SPELL_SPECIAL_TARGETING "BB_magicarp_spell_special_targeting" #define MAGICARP_SPELL_CORPSES "magicarp_spell_corpses" #define MAGICARP_SPELL_WALLS "magicarp_spell_walls" #define MAGICARP_SPELL_OBJECTS "magicarp_spell_objects" diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index 72d756c0554..6f5f0364bec 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -160,10 +160,8 @@ #define BB_DEMON_CLONE_ABILITY "demon_clone_ability" ///our slippery ice ability #define BB_DEMON_SLIP_ABILITY "demon_slip_ability" -///the turf we are escaping too +///the turf we are escaping to #define BB_ESCAPE_DESTINATION "escape_destination" -///how far away we will be from our target before teleporting -#define BB_MINIMUM_DISTANCE_RANGE "minimum_distance_range" /// Corpse we have consumed #define BB_LEGION_CORPSE "legion_corpse" @@ -191,3 +189,37 @@ #define BB_MOOK_MUSIC_AUDIENCE "music_audience" /// the bonfire we will light up #define BB_MOOK_BONFIRE_TARGET "bonfire_target" + +//gutlunch keys +///the trough we will eat from +#define BB_TROUGH_TARGET "trough_target" +//leaper keys +///key holds our volley ability +#define BB_LEAPER_VOLLEY "leaper_volley" +///key holds our flop ability +#define BB_LEAPER_FLOP "leaper_flop" +///key holds our bubble ability +#define BB_LEAPER_BUBBLE "leaper_bubble" +///key holds our summon ability +#define BB_LEAPER_SUMMON "leaper_summon" +///key holds the world timer for swimming +#define BB_KEY_SWIM_TIME "key_swim_time" +///key holds the water or land target turf +#define BB_SWIM_ALTERNATE_TURF "swim_alternate_turf" +///key holds our state of swimming +#define BB_CURRENTLY_SWIMMING "currently_swimming" +///key holds how long we will be swimming for +#define BB_KEY_SWIMMER_COOLDOWN "key_swimmer_cooldown" +//Wizard AI keys +/// Key where we store our main targeted spell +#define BB_WIZARD_TARGETED_SPELL "BB_wizard_targeted_spell" +/// Key where we store our secondary, untargeted spell +#define BB_WIZARD_SECONDARY_SPELL "BB_wizard_secondary_spell" +/// Key where we store our blink spell +#define BB_WIZARD_BLINK_SPELL "BB_wizard_blink_spell" +/// Key for the next time we can cast a spell +#define BB_WIZARD_SPELL_COOLDOWN "BB_wizard_spell_cooldown" + +//netguardians +/// rocket launcher +#define BB_NETGUARDIAN_ROCKET_ABILITY "netguardian_rocket" diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm index 5894aedff14..1e692b9f805 100644 --- a/code/__DEFINES/ai/pet_commands.dm +++ b/code/__DEFINES/ai/pet_commands.dm @@ -4,6 +4,6 @@ /// Blackboard field for what we actually want the pet to target #define BB_CURRENT_PET_TARGET "BB_current_pet_target" /// Blackboard field for how we target things, as usually we want to be more permissive than normal -#define BB_PET_TARGETTING_DATUM "BB_pet_targetting" +#define BB_PET_TARGETING_STRATEGY "BB_pet_targeting" /// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them #define BB_FRIENDS_LIST "BB_friends_list" diff --git a/code/__DEFINES/ai/ventcrawling.dm b/code/__DEFINES/ai/ventcrawling.dm index f981ef3bba5..a60b7fd5940 100644 --- a/code/__DEFINES/ai/ventcrawling.dm +++ b/code/__DEFINES/ai/ventcrawling.dm @@ -3,7 +3,7 @@ /// Key that holds a vent that we want to exit out of (when we're already in a pipenet) #define BB_EXIT_VENT_TARGET "BB_exit_vent_target" /// Do we plan on going inside a vent? Boolean. -#define BB_CURRENTLY_TARGETTING_VENT "BB_currently_targetting_vent" +#define BB_CURRENTLY_TARGETING_VENT "BB_currently_targeting_vent" /// How long should we wait before we try and enter a vent again? #define BB_VENTCRAWL_COOLDOWN "BB_ventcrawl_cooldown" /// The least amount of time (in seconds) we take to go through the vents. diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm index 6f25e61e7c5..cfb408898ec 100644 --- a/code/__DEFINES/alerts.dm +++ b/code/__DEFINES/alerts.dm @@ -68,5 +68,6 @@ #define ALERT_BITRUNNER_INTEGRITY "bitrunning_integrity" #define ALERT_BITRUNNER_SHUTDOWN "bitrunning_shutdown" #define ALERT_BITRUNNER_RESET "bitrunning_reset" -#define ALERT_BITRUNNER_SPAWN_CYBERCOP "bitrunning_spawn_cybercop" #define ALERT_BITRUNNER_THREAT "bitrunning_threat" +#define ALERT_BITRUNNER_BREACH "bitrunning_breach" +#define ALERT_BITRUNNER_GLITCH "bitrunning_glitch" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index fc56283e31f..d81dd02b692 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -80,7 +80,7 @@ #define PATH_VOID "Void Path" #define PATH_BLADE "Blade Path" #define PATH_COSMIC "Cosmic Path" -#define PATH_KNOCK "Knock Path" +#define PATH_LOCK "Lock Path" /// Defines are used in /proc/has_living_heart() to report if the heretic has no heart period, no living heart, or has a living heart. #define HERETIC_NO_HEART_ORGAN -1 @@ -317,8 +317,8 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list( #define ANTAG_GROUP_ASHWALKERS "Ash Walkers" #define ANTAG_GROUP_BIOHAZARDS "Biohazards" #define ANTAG_GROUP_CLOWNOPS "Clown Operatives" -#define ANTAG_GROUP_CYBERAUTH "Cyber Authority" #define ANTAG_GROUP_ERT "Emergency Response Team" +#define ANTAG_GROUP_GLITCH "Digital Anomalies" #define ANTAG_GROUP_HORRORS "Eldritch Horrors" #define ANTAG_GROUP_LEVIATHANS "Spaceborne Leviathans" #define ANTAG_GROUP_NINJAS "Ninja Clan" diff --git a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm index dd794cbf053..9a040f0c160 100644 --- a/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm +++ b/code/__DEFINES/atmospherics/atmos_mapping_helpers.dm @@ -7,6 +7,8 @@ #define OPENTURF_DEFAULT_ATMOS GAS_O2 + "=22;" + GAS_N2 + "=82;TEMP=293.15" /// the default low-pressure air mix used mostly for mining areas. #define OPENTURF_LOW_PRESSURE GAS_O2 + "=14;" + GAS_N2 + "=30;TEMP=293.15" +/// breathable air that causes disease +#define OPENTURF_DIRTY_ATMOS GAS_MIASMA + "=15;" + GAS_O2 + "=88;TEMP=293.15" /// -193,15°C telecommunications. also used for xenobiology slime killrooms #define TCOMMS_ATMOS GAS_N2 + "=100;TEMP=80" /// space diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm index 260a80190e7..dbd8bbc5610 100644 --- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm +++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm @@ -96,6 +96,9 @@ /// The temperature the blue icon is displayed. #define BODYTEMP_COLD_WARNING_3 (BODYTEMP_COLD_DAMAGE_LIMIT - 150) //120k +/// Beyond this temperature, being on fire will increase body temperature by less and less +#define BODYTEMP_FIRE_TEMP_SOFTCAP 1200 + /// The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define PRESSURE_DAMAGE_COEFFICIENT 2 #define MAX_HIGH_PRESSURE_DAMAGE 2 diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index af7454617d6..1bc91b38464 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -75,15 +75,9 @@ #define DATA_HUD_PERMIT 11 //SKYRAT EDIT #define DATA_HUD_DNR 12 // SKYRAT EDIT -// Notification action types -#define NOTIFY_JUMP "jump" -#define NOTIFY_PLAY "play" -#define NOTIFY_ORBIT "orbit" - /// cooldown for being shown the images for any particular data hud #define ADD_HUD_TO_COOLDOWN 20 - // Security HUD icon_state defines #define SECHUD_NO_ID "hudno_id" diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index 6c8a3022e8f..c7275f7c423 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -26,3 +26,5 @@ #define MOOK_ATTACK_ACTIVE 2 #define MOOK_ATTACK_STRIKE 3 +///keeps track of how many gutlunches are born +GLOBAL_VAR_INIT(gutlunch_count, 0) diff --git a/code/__DEFINES/bitrunning.dm b/code/__DEFINES/bitrunning.dm index 343801c477e..bdb02b4d792 100644 --- a/code/__DEFINES/bitrunning.dm +++ b/code/__DEFINES/bitrunning.dm @@ -4,17 +4,22 @@ #define BITRUNNER_COST_HIGH 3 #define BITRUNNER_COST_EXTREME 20 +/// Yay you did it #define BITRUNNER_REWARD_MIN 1 +/// You faced some decent odds #define BITRUNNER_REWARD_LOW 3 +/// One of your teammates might've died #define BITRUNNER_REWARD_MEDIUM 4 +/// Heroic effort #define BITRUNNER_REWARD_HIGH 5 +/// For the priciest domains, free loot basically #define BITRUNNER_REWARD_EXTREME 6 -/// Blue in ui +/// Blue in ui. Basically the only threat is rogue ghosts roles #define BITRUNNER_DIFFICULTY_NONE 0 -/// Yellow +/// Yellow. Mobs are kinda dumb and largely avoidable #define BITRUNNER_DIFFICULTY_LOW 1 -/// Orange +/// Orange. Mobs will shoot at you or are pretty aggressive #define BITRUNNER_DIFFICULTY_MEDIUM 2 -/// Red with skull +/// Red with skull. I am trying to kill bitrunners. #define BITRUNNER_DIFFICULTY_HIGH 3 diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm index c2ec221b5e2..9607819c880 100644 --- a/code/__DEFINES/botany.dm +++ b/code/__DEFINES/botany.dm @@ -84,3 +84,6 @@ /// A list of possible egg laying descriptions #define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + +/// Used as a baseline plant rarity for more uncommon plants, usually requiring mutation +#define PLANT_MODERATELY_RARE 20 diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 4ba4b8b26c5..4590a5081f0 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -3,6 +3,11 @@ * SPDX-License-Identifier: MIT */ +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + #define MESSAGE_TYPE_SYSTEM "system" #define MESSAGE_TYPE_LOCALCHAT "localchat" #define MESSAGE_TYPE_RADIO "radio" diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index b23df993432..6a71a8d6c3c 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -33,6 +33,13 @@ #define COLOR_HALF_TRANSPARENT_BLACK "#0000007A" #define COLOR_RED "#FF0000" +#define COLOR_CHRISTMAS_RED "#D6001C" +#define COLOR_OLD_GLORY_RED "#B22234" +#define COLOR_FRENCH_RED "#EF4135" +#define COLOR_ETHIOPIA_RED "#DA121A" +#define COLOR_UNION_JACK_RED "#C8102E" +#define COLOR_MEDIUM_DARK_RED "#CC0000" +#define COLOR_PINK_RED "EF3340" #define COLOR_SYNDIE_RED "#F10303" #define COLOR_SYNDIE_RED_HEAD "#760500" #define COLOR_MOSTLY_PURE_RED "#FF3300" @@ -50,7 +57,10 @@ #define COLOR_YELLOW "#FFFF00" #define COLOR_VIVID_YELLOW "#FBFF23" +#define COLOR_TANGERINE_YELLOW "#FFCC00" #define COLOR_VERY_SOFT_YELLOW "#FAE48E" +#define COLOR_GOLD "#FFD700" +#define COLOR_ETHIOPIA_YELLOW "#FCDD09" #define COLOR_OLIVE "#808000" #define COLOR_ASSISTANT_OLIVE "#828163" @@ -63,6 +73,9 @@ #define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3" #define COLOR_VERY_DARK_LIME_GREEN "#003300" #define COLOR_GREEN "#008000" +#define COLOR_CHRISTMAS_GREEN "#00873E" +#define COLOR_IRISH_GREEN "#169B62" +#define COLOR_ETHIOPIA_GREEN "#078930" #define COLOR_DARK_MODERATE_LIME_GREEN "#44964A" #define COLOR_PAI_GREEN "#00FF88" #define COLOR_PALE_GREEN "#20e28e" @@ -72,6 +85,10 @@ #define COLOR_DARK_CYAN "#00A2FF" #define COLOR_TEAL "#008080" #define COLOR_BLUE "#0000FF" +#define COLOR_OLD_GLORY_BLUE "#3C3B6E" +#define COLOR_FRENCH_BLUE "#0055A4" +#define COLOR_UNION_JACK_BLUE "#012169" +#define COLOR_TRUE_BLUE "#0066CC" #define COLOR_STRONG_BLUE "#1919c8" #define COLOR_CENTCOM_BLUE "#134975" #define COLOR_BRIGHT_BLUE "#2CB2E8" @@ -101,6 +118,7 @@ #define COLOR_DARK_PURPLE "#551A8B" #define COLOR_ORANGE "#FF9900" +#define COLOR_IRISH_ORANGE "#FF883E" #define COLOR_ENGINEERING_ORANGE "#FFA62B" #define COLOR_MOSTLY_PURE_ORANGE "#ff8000" #define COLOR_TAN_ORANGE "#FF7B00" @@ -265,6 +283,8 @@ #define LIGHT_COLOR_TUNGSTEN "#FFD6AA" /// Barely visible cyan-ish hue, as the doctor prescribed. rgb(240, 250, 250) #define LIGHT_COLOR_HALOGEN "#F0FAFA" +/// Nearly red. rgb(226, 78, 118) +#define LIGHT_COLOR_BUBBLEGUM "#e24e76" //The GAGS greyscale_colors for each department's computer/machine circuits #define CIRCUIT_COLOR_GENERIC "#1A7A13" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index cc9412208fb..d619da64d48 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -132,13 +132,22 @@ DEFINE_BITFIELD(status_flags, list( //slowdown when crawling #define CRAWLING_ADD_SLOWDOWN 4 -//Attack types for checking shields/hit reactions +//Attack types for checking block reactions +/// Attack was made with a melee weapon #define MELEE_ATTACK 1 +/// Attack is a punch or kick. +/// Mob attacks are not classified as unarmed (currently). #define UNARMED_ATTACK 2 +/// A projectile is hitting us. #define PROJECTILE_ATTACK 3 +/// A thrown item is hitting us. #define THROWN_PROJECTILE_ATTACK 4 +/// We're being tackled or leaped at. #define LEAP_ATTACK 5 +/// Used in check block to get what mob is attacking the blocker. +#define GET_ASSAILANT(weapon) (get(weapon, /mob/living)) + //attack visual effects #define ATTACK_EFFECT_PUNCH "punch" #define ATTACK_EFFECT_KICK "kick" @@ -169,6 +178,9 @@ DEFINE_BITFIELD(status_flags, list( GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( /obj/item/gun))) +//The define for base unarmed miss chance +#define UNARMED_MISS_CHANCE_BASE 20 +#define UNARMED_MISS_CHANCE_MAX 80 //Combat object defines diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm index 0c9523b9c20..25eb8b15f38 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm @@ -47,6 +47,11 @@ #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" ///from base of atom/setDir(): (old_dir, new_dir). Called after the direction changes. #define COMSIG_ATOM_POST_DIR_CHANGE "atom_dir_change" +///from base of atom/movable/keybind_face_direction(): (dir). Called before turning with the movement lock key. +#define COMSIG_MOVABLE_KEYBIND_FACE_DIR "keybind_face_dir" + ///ignores the movement lock key, used for turning while strafing in a mech + #define COMSIG_IGNORE_MOVEMENT_LOCK (1<<0) + /// from /datum/component/singularity/proc/can_move(), as well as /obj/energy_ball/proc/can_move() /// if a callback returns `SINGULARITY_TRY_MOVE_BLOCK`, then the singularity will not move to that turf #define COMSIG_ATOM_SINGULARITY_TRY_MOVE "atom_singularity_try_move" diff --git a/code/__DEFINES/dcs/signals/signals_bitrunning.dm b/code/__DEFINES/dcs/signals/signals_bitrunning.dm index e2731a05b34..74d418182d5 100644 --- a/code/__DEFINES/dcs/signals/signals_bitrunning.dm +++ b/code/__DEFINES/dcs/signals/signals_bitrunning.dm @@ -1,37 +1,46 @@ -/// from /obj/machinery/netpod/default_pry_open() : (mob/living/intruder) -#define COMSIG_BITRUNNER_CROWBAR_ALERT "bitrunner_crowbar" +/// from /atom/movable/screen/alert/bitrunning/qserver_domain_complete +#define COMSIG_BITRUNNER_ALERT_SEVER "bitrunner_alert_sever" /// from /obj/effect/bitrunning/loot_signal: (points) #define COMSIG_BITRUNNER_GOAL_POINT "bitrunner_goal_point" +// Netpods + +/// from /obj/machinery/netpod/sever_connection() +#define COMSIG_BITRUNNER_NETPOD_SEVER "bitrunner_netpod_sever" + +/// from /obj/machinery/netpod/default_pry_open() : (mob/living/intruder) +#define COMSIG_BITRUNNER_CROWBAR_ALERT "bitrunner_crowbar" + +/// from /obj/machinery/netpod/on_damage_taken() +#define COMSIG_BITRUNNER_NETPOD_INTEGRITY "bitrunner_netpod_damage" + +/// from /obj/machinery/netpod/open_machine() +#define COMSIG_BITRUNNER_NETPOD_OPENED "bitrunner_netpod_opened" + +// Server + /// from /obj/machinery/quantum_server/on_goal_turf_entered(): (atom/entered, reward_points) #define COMSIG_BITRUNNER_DOMAIN_COMPLETE "bitrunner_complete" -/// from /obj/machinery/netpod/on_take_damage() -#define COMSIG_BITRUNNER_NETPOD_INTEGRITY "bitrunner_netpod_damage" +/// from /obj/machinery/quantum_server/generate_loot() +#define COMSIG_BITRUNNER_CACHE_SEVER "bitrunner_cache_sever" -/// from /obj/structure/hololadder and complete alert -#define COMSIG_BITRUNNER_SAFE_DISCONNECT "bitrunner_disconnect" - -/// from /obj/machinery/netpod/open_machine(), /obj/machinery/quantum_server, etc (obj/machinery/netpod) -#define COMSIG_BITRUNNER_SEVER_AVATAR "bitrunner_sever" +/// from /obj/machinery/quantum_server/sever_connection() +#define COMSIG_BITRUNNER_QSRV_SEVER "bitrunner_qserver_sever" /// from /obj/machinery/quantum_server/shutdown() : (mob/living) #define COMSIG_BITRUNNER_SHUTDOWN_ALERT "bitrunner_shutdown" -// Notifies the bitrunners -/// from /datum/antagonist/cyber_police/proc/notify() : +/// from /obj/machinery/quantum_server/notify_threat() #define COMSIG_BITRUNNER_THREAT_CREATED "bitrunner_threat" -// Informs the server to up the threat count -/// from event spawns: (mob/living) -#define COMSIG_BITRUNNER_SPAWN_GLITCH "bitrunner_spawn_glitch" - -/// from /obj/machinery/quantum_server/refreshParts(): (servo rating) -#define COMSIG_BITRUNNER_SERVER_UPGRADED "bitrunner_server_upgraded" - /// from /obj/machinery/quantum_server/scrub_vdom() #define COMSIG_BITRUNNER_DOMAIN_SCRUBBED "bitrunner_domain_scrubbed" -/// from /obj/machinery/netpod/open_machine() -#define COMSIG_BITRUNNER_NETPOD_OPENED "bitrunner_netpod_opened" +/// from /obj/machienry/quantum_server/station_spawn() +#define COMSIG_BITRUNNER_STATION_SPAWN "bitrunner_station_spawn" + +// Ladder +/// from /obj/structure/hololadder/disconnect() +#define COMSIG_BITRUNNER_LADDER_SEVER "bitrunner_ladder_sever" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index e86ed58269e..f3c3d5d71cc 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -133,9 +133,6 @@ #define COMSIG_HUMAN_CORETEMP_CHANGE "human_coretemp_change" ///from /datum/species/handle_fire. Called when the human is set on fire and burning clothes and stuff #define COMSIG_HUMAN_BURNING "human_burning" -///from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) -#define COMSIG_HUMAN_CHECK_SHIELDS "human_check_shields" - #define SHIELD_BLOCK (1<<0) ///from /mob/living/carbon/human/proc/force_say(): () #define COMSIG_HUMAN_FORCESAY "human_forcesay" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm new file mode 100644 index 00000000000..9f4819de797 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_guardian.dm @@ -0,0 +1,7 @@ +/// Sent when a guardian is manifested +#define COMSIG_GUARDIAN_MANIFESTED "guardian_manifested" +/// Sent when a guardian is recalled +#define COMSIG_GUARDIAN_RECALLED "guardian_recalled" + +/// Sent when an assassin guardian is forced to exit stealth +#define COMSIG_GUARDIAN_ASSASSIN_REVEALED "guardian_assassin_revealed" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index ceebe7f304b..c2c28f31257 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -139,6 +139,9 @@ #define COMSIG_LIVING_EARLY_UNARMED_ATTACK "human_pre_attack_hand" /// from mob/living/*/UnarmedAttack(): (mob/living/source, atom/target, proximity, modifiers) #define COMSIG_LIVING_UNARMED_ATTACK "living_unarmed_attack" +///From base of mob/living/MobBump(): (mob/bumped, mob/living/bumper) +#define COMSIG_LIVING_PRE_MOB_BUMP "movable_pre_bump" + #define COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP (1<<0) ///From base of mob/living/MobBump() (mob/living) #define COMSIG_LIVING_MOB_BUMP "living_mob_bump" ///From base of mob/living/Bump() (turf/closed) @@ -219,9 +222,18 @@ /// From /datum/ai/behavior/climb_tree/perform() : (mob/living/basic/living_pawn) #define COMSIG_LIVING_CLIMB_TREE "living_climb_tree" +///from /mob/living/proc/check_block(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) +#define COMSIG_LIVING_CHECK_BLOCK "living_check_block" + #define SUCCESSFUL_BLOCK (1<<0) + /// Sent on a mob from /datum/component/mob_chain when component is attached with it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_GAINED_CHAIN_TAIL "living_gained_chain_tail" /// Sent on a mob from /datum/component/mob_chain when component is detached from it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_LOST_CHAIN_TAIL "living_detached_chain_tail" /// Sent from a 'contract chain' button on a mob chain #define COMSIG_MOB_CHAIN_CONTRACT "living_chain_contracted" + +/// Sent from a mob to their loc when starting to remove cuffs on itself +#define COMSIG_MOB_REMOVING_CUFFS "living_removing_cuffs" +/// Sent as a reply to above from any atom that wishs to stop self-cuff removal +#define COMSIG_MOB_BLOCK_CUFF_REMOVAL (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_turf.dm b/code/__DEFINES/dcs/signals/signals_turf.dm index 65709f4e446..04a2648773a 100644 --- a/code/__DEFINES/dcs/signals/signals_turf.dm +++ b/code/__DEFINES/dcs/signals/signals_turf.dm @@ -31,5 +31,7 @@ ///from /datum/element/footstep/prepare_step(): (list/steps) #define COMSIG_TURF_PREPARE_STEP_SOUND "turf_prepare_step_sound" + //stops element/footstep/proc/prepare_step() from returning null if the turf itself has no sound + #define FOOTSTEP_OVERRIDEN (1<<0) ///from base of datum/thrownthing/finalize(): (turf/turf, atom/movable/thrownthing) when something is thrown and lands on us #define COMSIG_TURF_MOVABLE_THROW_LANDED "turf_movable_throw_landed" diff --git a/code/__DEFINES/exosuit_fab.dm b/code/__DEFINES/exosuit_fab.dm index 706daf6e2de..4cc21f210d6 100644 --- a/code/__DEFINES/exosuit_fab.dm +++ b/code/__DEFINES/exosuit_fab.dm @@ -33,10 +33,12 @@ #define EXOSUIT_MODULE_RETICENCE (1<<9) /// Module is compatible with Marauder models #define EXOSUIT_MODULE_MARAUDER (1<<10) +/// Module is compatible with Paddy models +#define EXOSUIT_MODULE_PADDY (1<<11) /// Module is compatible with "Working" Exosuit models - Ripley and Clarke #define EXOSUIT_MODULE_WORKING (EXOSUIT_MODULE_RIPLEY | EXOSUIT_MODULE_CLARKE) /// Module is compatible with "Combat" Exosuit models - Gygax, H.O.N.K, Durand and Phazon, or any Exosuit with an empty Concealed Weapon Bay -#define EXOSUIT_MODULE_COMBAT (EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON | EXOSUIT_MODULE_SAVANNAH | EXOSUIT_MODULE_RETICENCE | EXOSUIT_MODULE_MARAUDER | EXOSUIT_MODULE_CONCEALED_WEP_BAY) +#define EXOSUIT_MODULE_COMBAT (EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON | EXOSUIT_MODULE_SAVANNAH | EXOSUIT_MODULE_RETICENCE | EXOSUIT_MODULE_MARAUDER | EXOSUIT_MODULE_PADDY | EXOSUIT_MODULE_CONCEALED_WEP_BAY) /// Module is compatible with "Medical" Exosuit modelsm - Odysseus #define EXOSUIT_MODULE_MEDICAL EXOSUIT_MODULE_ODYSSEUS diff --git a/code/__DEFINES/guardian_defines.dm b/code/__DEFINES/guardian_defines.dm index e7961368fee..ae2c3175b4a 100644 --- a/code/__DEFINES/guardian_defines.dm +++ b/code/__DEFINES/guardian_defines.dm @@ -3,5 +3,28 @@ #define GUARDIAN_THEME_CARP "carp" #define GUARDIAN_THEME_MINER "miner" -#define GUARDIAN_COLOR_LAYER 1 -#define GUARDIAN_TOTAL_LAYERS 1 +#define GUARDIAN_MAGIC "magic" +#define GUARDIAN_TECH "tech" + +#define GUARDIAN_ASSASSIN "assassin" +#define GUARDIAN_CHARGER "charger" +#define GUARDIAN_DEXTROUS "dextrous" +#define GUARDIAN_EXPLOSIVE "explosive" +#define GUARDIAN_GASEOUS "gaseous" +#define GUARDIAN_GRAVITOKINETIC "gravitokinetic" +#define GUARDIAN_LIGHTNING "lightning" +#define GUARDIAN_PROTECTOR "protector" +#define GUARDIAN_RANGED "ranged" +#define GUARDIAN_STANDARD "standard" +#define GUARDIAN_SUPPORT "support" + +/// List of all guardians currently extant +GLOBAL_LIST_EMPTY(parasites) + +/// Assoc list of guardian theme singletons +GLOBAL_LIST_INIT(guardian_themes, list( + GUARDIAN_THEME_TECH = new /datum/guardian_fluff/tech, + GUARDIAN_THEME_MAGIC = new /datum/guardian_fluff, + GUARDIAN_THEME_CARP = new /datum/guardian_fluff/carp, + GUARDIAN_THEME_MINER = new /datum/guardian_fluff/miner, +)) diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 55d25fd5e45..c00361184a5 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -132,12 +132,12 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_TURF_OPEN_CLIFF S_TURF(60) ///turf/open/cliff // SKYRAT EDIT ADDITION -#define SMOOTH_GROUP_ELEVATED_PLASTEEL S_TURF(60) -#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(61) +#define SMOOTH_GROUP_ELEVATED_PLASTEEL S_TURF(61) +#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(62) -#define SMOOTH_GROUP_FISSURE S_TURF(62) +#define SMOOTH_GROUP_FISSURE S_TURF(63) -#define MAX_S_TURF 62 //Always match this value with the one above it. +#define MAX_S_TURF 63 //Always match this value with the one above it. //SKYRAT EDIT END diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm index 0b4e9588729..55732f2364b 100644 --- a/code/__DEFINES/interaction_flags.dm +++ b/code/__DEFINES/interaction_flags.dm @@ -36,9 +36,8 @@ #define INTERACT_MACHINE_OPEN_SILICON (1<<4) /// must be silicon to interact #define INTERACT_MACHINE_REQUIRES_SILICON (1<<5) -/// MACHINES HAVE THIS BY DEFAULT, SOMEONE SHOULD RUN THROUGH MACHINES AND REMOVE IT FROM THINGS LIKE LIGHT SWITCHES WHEN POSSIBLE!!-------------------------- /// This flag determines if a machine set_machine's the user when the user uses it, making updateUsrDialog make the user re-call interact() on it. -/// THIS FLAG IS ON ALL MACHINES BY DEFAULT, NEEDS TO BE RE-EVALUATED LATER!! +/// This is exclusively used for non-TGUI UIs, and its instances should be removed when moved to TGUI. #define INTERACT_MACHINE_SET_MACHINE (1<<6) /// the user must have vision to interact (blind people need not apply) #define INTERACT_MACHINE_REQUIRES_SIGHT (1<<7) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 3e19baa5b8a..f164c78d422 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -227,6 +227,7 @@ GLOBAL_LIST_INIT(security_vest_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, + /obj/item/pen/red/security, /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION )) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 7f408a6805e..e9963ca1f6a 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -73,6 +73,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define iscliffturf(A) (istype(A, /turf/open/cliff)) +#define iswaterturf(A) (istype(A, /turf/open/water)) + GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( /turf/closed/mineral, /turf/open/misc/asteroid, @@ -145,10 +147,14 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( // basic mobs #define isbasicmob(A) (istype(A, /mob/living/basic)) +#define isconstruct(A) (istype(A, /mob/living/basic/construct)) + #define iscow(A) (istype(A, /mob/living/basic/cow)) #define isgorilla(A) (istype(A, /mob/living/basic/gorilla)) +#define isshade(A) (istype(A, /mob/living/basic/shade)) + #define is_simian(A) (isgorilla(A) || ismonkey(A)) /// returns whether or not the atom is either a basic mob OR simple animal @@ -159,9 +165,6 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define ismining(A) (istype(A, /mob/living/simple_animal/hostile/asteroid) || istype(A, /mob/living/basic/mining)) -/// constructs, which are both simple and basic for now -#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct) || istype(A, /mob/living/basic/construct)) - //Simple animals #define isanimal(A) (istype(A, /mob/living/simple_animal)) @@ -169,8 +172,6 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isbot(A) (istype(A, /mob/living/simple_animal/bot)) -#define isshade(A) (istype(A, /mob/living/simple_animal/shade)) - #define ismouse(A) (istype(A, /mob/living/basic/mouse)) #define isslime(A) (istype(A, /mob/living/simple_animal/slime)) @@ -187,7 +188,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isregalrat(A) (istype(A, /mob/living/basic/regal_rat)) -#define isguardian(A) (istype(A, /mob/living/simple_animal/hostile/guardian)) +#define isguardian(A) (istype(A, /mob/living/basic/guardian)) #define ismegafauna(A) (istype(A, /mob/living/simple_animal/hostile/megafauna)) diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index db65b0b6ee8..5a37f60aba6 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -46,6 +46,7 @@ #define MECHA_SNOWFLAKE_ID_AIR_TANK "air_tank_snowflake" #define MECHA_SNOWFLAKE_ID_WEAPON_BALLISTIC "ballistic_weapon_snowflake" #define MECHA_SNOWFLAKE_ID_GENERATOR "generator_snowflake" +#define MECHA_SNOWFLAKE_ID_CLAW "lawclaw_snowflake" #define MECHA_AMMO_INCENDIARY "Incendiary bullet" #define MECHA_AMMO_BUCKSHOT "Buckshot shell" diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index f71871f964a..540e5f7914c 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -39,6 +39,14 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) ///Is the loop moving the movable outside its control, like it's an external force? e.g. footsteps won't play if enabled. #define MOVEMENT_LOOP_OUTSIDE_CONTROL (1<<4) +// Movement loop status flags +/// Has the loop been paused, soon to be resumed? +#define MOVELOOP_STATUS_PAUSED (1<<0) +/// Is the loop running? (Is true even when paused) +#define MOVELOOP_STATUS_RUNNING (1<<1) +/// Is the loop queued in a subsystem? +#define MOVELOOP_STATUS_QUEUED (1<<2) + /** * Returns a bitfield containing flags both present in `flags` arg and the `processing_move_loop_flags` move_packet variable. * Has no use outside of procs called within the movement proc chain. diff --git a/code/__DEFINES/observers.dm b/code/__DEFINES/observers.dm new file mode 100644 index 00000000000..0bacf223d8c --- /dev/null +++ b/code/__DEFINES/observers.dm @@ -0,0 +1,12 @@ +// Various flags for notify_ghosts ghost popups. +/// Determines if the notification will not run if called during mapload. +#define GHOST_NOTIFY_IGNORE_MAPLOAD (1<<0) +/// Determines if the notification will flash the Byond window. +#define GHOST_NOTIFY_FLASH_WINDOW (1<<1) +/// Determines if the notification will notify suiciders. +#define GHOST_NOTIFY_NOTIFY_SUICIDERS (1<<2) + +/// The default set of flags to be passed into a notify_ghosts call. +#define NOTIFY_CATEGORY_DEFAULT (GHOST_NOTIFY_FLASH_WINDOW | GHOST_NOTIFY_IGNORE_MAPLOAD | GHOST_NOTIFY_NOTIFY_SUICIDERS) +/// The default set of flags, without the flash_window flag. +#define NOTIFY_CATEGORY_NOFLASH (NOTIFY_CATEGORY_DEFAULT & ~GHOST_NOTIFY_FLASH_WINDOW) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index aa8c3c15970..50847d1415d 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -135,6 +135,9 @@ /// such as hair color being affixed to hair. #define PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES "supplemental_features" +/// These preferences will not be rendered on the preferences page, and are practically invisible unless specifically rendered. Used for quirks, currently. +#define PREFERENCE_CATEGORY_MANUALLY_RENDERED "manually_rendered_features" + // Playtime is tracked in minutes /// The time needed to unlock hardcore random mode in preferences #define PLAYTIME_HARDCORE_RANDOM 120 // 2 hours diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index a82ac8422c5..58f25ac39f1 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -52,6 +52,14 @@ #define CALIBER_ARROW "arrow" /// The caliber used by the harpoon gun. #define CALIBER_HARPOON "harpoon" +/// The caliber used by the rebar crossbow. +#define CALIBER_REBAR "sharpened iron rod" +/// The caliber used by the rebar crossbow when forced to hold 2 rods. +#define CALIBER_REBAR_FORCED "sharpened iron rod" +/// The caliber used by the syndicate rebar crossbow. +#define CALIBER_REBAR_SYNDIE "jagged iron rod" +/// The caliber used by the syndicate rebar crossbow. +#define CALIBER_REBAR_SYNDIE_NORMAL "sharpened iron rod" /// The caliber used by the meat hook. #define CALIBER_HOOK "hook" /// The caliber used by the changeling tentacle mutation. diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 56b9c1cea2c..cb2747d4f4b 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -58,8 +58,10 @@ #define ALLERGIC_REMOVAL_SKIP "Allergy" //Used in holder.dm/equlibrium.dm to set values and volume limits -///the minimum volume of reagents than can be operated on. +///The minimum volume of reagents than can be operated on. #define CHEMICAL_QUANTISATION_LEVEL 0.0001 +///Sanity check limit to clamp chems to sane amounts and prevent rounding errors during transfer. +#define CHEMICAL_VOLUME_ROUNDING 0.01 ///Default pH for reagents datum #define CHEMICAL_NORMAL_PH 7.000 ///Minimum pH attainable by a solution diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 52ee2c87f4e..005c67ae1a3 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,10 +1,6 @@ -#define RDSCREEN_NOBREAK "" - /// For instances where we don't want a design showing up due to it being for debug/sanity purposes #define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" -#define RESEARCH_MATERIAL_DESTROY_ID "__destroy" - //! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) #define TECHWEB_POINT_TYPE_GENERIC "General Research" @@ -55,7 +51,6 @@ #define CELL_LINE_TABLE_WALKING_MUSHROOM "cell_line_walking_mushroom_table" #define CELL_LINE_TABLE_QUEEN_BEE "cell_line_bee_queen_table" #define CELL_LINE_TABLE_BUTTERFLY "cell_line_butterfly_table" -#define CELL_LINE_TABLE_LEAPER "cell_line_leaper_table" #define CELL_LINE_TABLE_MEGA_ARACHNID "cell_line_table_mega_arachnid" //! All cell virus types diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 12a114439c7..9ab97ae5a8d 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -44,6 +44,9 @@ GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( /obj/item/organ/internal/monster_core, /obj/item/organ/internal/vocal_cords/colossus, /obj/item/organ/internal/zombie_infection, + /obj/item/organ/internal/empowered_borer_egg, // SKYRAT EDIT ADDITION + /obj/item/organ/internal/eyes/robotic, // SKYRAT EDIT ADDITION + /obj/item/organ/internal/eyes/night_vision/cyber, // SKYRAT EDIT ADDITION ))) /// List of body parts we can apply to people diff --git a/code/__DEFINES/research/research_categories.dm b/code/__DEFINES/research/research_categories.dm index e8d426fcfc5..9ebdb44c8a5 100644 --- a/code/__DEFINES/research/research_categories.dm +++ b/code/__DEFINES/research/research_categories.dm @@ -126,6 +126,7 @@ #define RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV "/Savannah-Ivanov" #define RND_CATEGORY_MECHFAB_RIPLEY "/Ripley" +#define RND_CATEGORY_MECHFAB_PADDY "/Paddy" #define RND_CATEGORY_MECHFAB_ODYSSEUS "/Odysseus" #define RND_CATEGORY_MECHFAB_GYGAX "/Gygax" #define RND_CATEGORY_MECHFAB_DURAND "/Durand" diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 7be802d59cd..cd8bb8f5e20 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -27,7 +27,6 @@ #define ROLE_BLOB "Blob" #define ROLE_BLOB_INFECTION "Blob Infection" #define ROLE_CHANGELING_MIDROUND "Changeling (Midround)" -#define ROLE_CYBER_POLICE "Cyber Police" #define ROLE_FUGITIVE "Fugitive" #define ROLE_LONE_OPERATIVE "Lone Operative" #define ROLE_MALF_MIDROUND "Malf AI (Midround)" @@ -117,7 +116,13 @@ #define ROLE_SYNDICATE_DRONE "Syndicate Drone" #define ROLE_VENUSHUMANTRAP "Venus Human Trap" #define ROLE_ZOMBIE "Zombie" -//SKYRAT EDIT START + +// Virtual dom related +#define ROLE_GLITCH "Glitch" // the parent type of all vdom roles +#define ROLE_CYBER_POLICE "Cyber Police" +#define ROLE_CYBER_TAC "Cyber Tac" +#define ROLE_NETGUARDIAN "NetGuardian Prime" +//SKYRAT EDIT START - Skyrat roles #define ROLE_BLACK_MARKET_DEALER "Black Market Dealer" #define ROLE_DS2 "DS2 Syndicate" #define ROLE_FREIGHTER_CREW "Freighter Crew" @@ -151,7 +156,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_BLOB = 0, ROLE_BLOB_INFECTION = 0, ROLE_CHANGELING_MIDROUND = 0, - ROLE_CYBER_POLICE = 0, ROLE_FUGITIVE = 0, ROLE_LONE_OPERATIVE = 14, ROLE_MALF_MIDROUND = 0, @@ -180,6 +184,7 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_STOWAWAY_CHANGELING = 0, // I'm not too sure why these are here, but they're not moving. + ROLE_GLITCH = 0, ROLE_PAI = 0, ROLE_SENTIENCE = 0, )) diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index ae5f4e48352..645e0094135 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -64,7 +64,8 @@ // INVISIBILITY PRIORITIES #define INVISIBILITY_PRIORITY_ADMIN 100 -#define INVISIBILITY_PRIORITY_BASIC_ANTI_INVISIBILITY 1 +#define INVISIBILITY_PRIORITY_TURRET_COVER 20 +#define INVISIBILITY_PRIORITY_BASIC_ANTI_INVISIBILITY 10 #define INVISIBILITY_PRIORITY_NONE 0 //------------------------ diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 76ab9ccf841..ab8ff969e30 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -23,6 +23,7 @@ #define span_bold(str) ("" + str + "") #define span_boldannounce(str) ("" + str + "") #define span_bolddanger(str) ("" + str + "") +#define span_bolditalic(str) ("" + str + "") #define span_boldnicegreen(str) ("" + str + "") #define span_boldnotice(str) ("" + str + "") #define span_boldwarning(str) ("" + str + "") diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index a0df5e24eb7..c98baa5f4aa 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -102,3 +102,7 @@ #define HALLUCINATION_FILE "hallucination.json" /// File location for ninja lines #define NINJA_FILE "ninja.json" +/// File loation for title splashes +#define SPLASH_FILE "splashes.json" +///File location for mother hallucination lines +#define MOTHER_FILE "mother.json" diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 6187a67825a..b0e97e05e9b 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.5.3" +#define TGS_DMAPI_VERSION "6.7.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -129,6 +129,13 @@ /// DreamDaemon Ultrasafe security level. #define TGS_SECURITY_ULTRASAFE 2 +/// DreamDaemon public visibility level. +#define TGS_VISIBILITY_PUBLIC 0 +/// DreamDaemon private visibility level. +#define TGS_VISIBILITY_PRIVATE 1 +/// DreamDaemon invisible visibility level. +#define TGS_VISIBILITY_INVISIBLE 2 + //REQUIRED HOOKS /** @@ -458,6 +465,10 @@ /world/proc/TgsSecurityLevel() return +/// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! +/world/proc/TgsVisibility() + return + /// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsTestMerges() return diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e03e6ded05f..655c7e507b5 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -663,7 +663,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_TENTACLE_IMMUNE "tentacle_immune" /// Currently under the effect of overwatch #define TRAIT_OVERWATCHED "watcher_overwatched" -/// Cannot be targetted by watcher overwatch +/// Cannot be targeted by watcher overwatch #define TRAIT_OVERWATCH_IMMUNE "overwatch_immune" //non-mob traits @@ -867,6 +867,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait applied when an integrated circuit/module becomes undupable #define TRAIT_CIRCUIT_UNDUPABLE "circuit_undupable" +/// Trait applied when an integrated circuit opens a UI on a player (see list pick component) +#define TRAIT_CIRCUIT_UI_OPEN "circuit_ui_open" + /// Hearing trait that is from the hearing component #define CIRCUIT_HEAR_TRAIT "circuit_hear" @@ -1047,6 +1050,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai */ #define TRAIT_UNIQUE_IMMERSE "unique_immerse" +/// This item is currently under the control of telekinesis +#define TRAIT_TELEKINESIS_CONTROLLED "telekinesis_controlled" // unique trait sources, still defines #define EMP_TRAIT "emp_trait" @@ -1343,5 +1348,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait given to a dragon who fails to defend their rifts #define TRAIT_RIFT_FAILURE "fail_dragon_loser" +///trait determines if this mob can breed given by /datum/component/breeding +#define TRAIT_MOB_BREEDER "mob_breeder" /// Trait given to mobs that we do not want to mindswap #define TRAIT_NO_MINDSWAP "no_mindswap" diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm index 9aac19be3c1..d210a07dde4 100644 --- a/code/__DEFINES/vehicles.dm +++ b/code/__DEFINES/vehicles.dm @@ -26,6 +26,8 @@ #define UNBUCKLE_DISABLED_RIDER (1<<3) // For fireman carries, the carrying human needs an arm #define CARRIER_NEEDS_ARM (1<<4) +// This rider must be our friend +#define JUST_FRIEND_RIDERS (1<<5) //car_traits flags ///Will this car kidnap people by ramming into them? diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 1cc9025b821..f6cb654b1d5 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -57,7 +57,7 @@ // VV HREF KEYS #define VV_HK_TARGET "target" -#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targetting hrefs. +#define VV_HK_VARNAME "targetvar" //name or index of var for 1 variable targeting hrefs. // vv_do_list() keys #define VV_HK_LIST_ADD "listadd" diff --git a/code/__DEFINES/wiremod.dm b/code/__DEFINES/wiremod.dm index 14a03d780ce..421650e3bf1 100644 --- a/code/__DEFINES/wiremod.dm +++ b/code/__DEFINES/wiremod.dm @@ -45,6 +45,8 @@ #define PORT_TYPE_ATOM "entity" /// Datum datatype #define PORT_TYPE_DATUM "datum" +/// User datatype +#define PORT_TYPE_USER "user" /// The maximum range between a port and an atom diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm index 7aec41d7b5c..79c188cd481 100644 --- a/code/__DEFINES/wounds.dm +++ b/code/__DEFINES/wounds.dm @@ -90,7 +90,7 @@ GLOBAL_LIST_INIT(wound_severities_chronological, list( // "Where" a specific biostate is within a given limb // Interior is hard shit, the last line, shit like bones -// Exterior is soft shit, targetted by slashes and pierces (usually), protects exterior +// Exterior is soft shit, targeted by slashes and pierces (usually), protects exterior // A limb needs both mangled interior and exterior to be dismembered, but slash/pierce must mangle exterior to attack the interior // Not having exterior/interior counts as mangled exterior/interior for the purposes of dismemberment /// The given biostate is on the "interior" of the limb - hard shit, protected by exterior diff --git a/code/__DEFINES/~skyrat_defines/barsigns.dm b/code/__DEFINES/~skyrat_defines/barsigns.dm new file mode 100644 index 00000000000..8a6fe2652bb --- /dev/null +++ b/code/__DEFINES/~skyrat_defines/barsigns.dm @@ -0,0 +1,2 @@ +#define SKYRAT_BARSIGN_FILE 'modular_skyrat/modules/barsigns/icons/barsigns.dmi' +#define SKYRAT_LARGE_BARSIGN_FILE 'modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi' diff --git a/code/__DEFINES/~skyrat_defines/colors.dm b/code/__DEFINES/~skyrat_defines/colors.dm index 9c5e17b06a5..4f00b0651b1 100644 --- a/code/__DEFINES/~skyrat_defines/colors.dm +++ b/code/__DEFINES/~skyrat_defines/colors.dm @@ -1,3 +1,5 @@ #define LIGHT_COLOR_CLOCKWORK "#BE8700" #define COLOR_SOLFED_GOLD "#FFD900" #define LIGHT_COLOR_YELLOW "#E1E17D" +#define COLOR_NRI_POLICE_BLUE "#1f3347" +#define COLOR_NRI_POLICE_SILVER "#c0c0c0" diff --git a/code/__DEFINES/~skyrat_defines/traits.dm b/code/__DEFINES/~skyrat_defines/traits.dm index 49f025e4ab0..f099b57f260 100644 --- a/code/__DEFINES/~skyrat_defines/traits.dm +++ b/code/__DEFINES/~skyrat_defines/traits.dm @@ -17,6 +17,9 @@ /// This makes trait makes it so that the person cannot be infected by the zombie virus. #define TRAIT_MUTANT_IMMUNE "mutant_immune" +/// adds -6 quirk to negative quirks for free points. +#define TRAIT_GIFTED "gifted" + //AdditionalEmotes *turf traits #define TRAIT_WATER_ASPECT "water_aspect" #define TRAIT_WEBBING_ASPECT "webbing_aspect" @@ -48,6 +51,12 @@ // felinid traits #define TRAIT_FELINE "feline_aspect" +// canine traits +#define TRAIT_CANINE "canine_aspect" + +// avian traits +#define TRAIT_AVIAN "avian_aspect" + // chameleon mutation #define TRAIT_CHAMELEON_SKIN "chameleon_skin" @@ -57,9 +66,6 @@ /// The trait that determines if someone has the oversized quirk. #define TRAIT_OVERSIZED "trait_oversized" -/// Caninid trait -#define TRAIT_CANINE "trait_canine" - /// Cargo Loader trait #define TRAIT_TRASHMAN "trait_trashman" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 32e4135b965..918428daf77 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -898,6 +898,13 @@ UNTYPED_LIST_ADD(keys, key) return keys +///Gets the total amount of everything in the associative list. +/proc/assoc_value_sum(list/input) + var/keys = 0 + for(var/key in input) + keys += input[key] + return keys + ///compare two lists, returns TRUE if they are the same /proc/compare_list(list/l,list/d) if(!islist(l) || !islist(d)) diff --git a/code/__HELPERS/animations.dm b/code/__HELPERS/animations.dm deleted file mode 100644 index cae8d3a8f52..00000000000 --- a/code/__HELPERS/animations.dm +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Causes the passed atom / image to appear floating, - * playing a simple animation where they move up and down by 2 pixels (looping) - * - * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! - * This is just so you can apply the animation to things which can be animated but are not movables (like images) - */ -#define DO_FLOATING_ANIM(target) \ - animate(target, pixel_y = 2, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE); \ - animate(pixel_y = -2, time = 1 SECONDS, flags = ANIMATION_RELATIVE) - -/** - * Stops the passed atom / image from appearing floating - * (Living mobs also have a 'body_position_pixel_y_offset' variable that has to be taken into account here) - * - * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! - * This is just so you can apply the animation to things which can be animated but are not movables (like images) - */ -#define STOP_FLOATING_ANIM(target) \ - var/final_pixel_y = 0; \ - if(ismovable(target)) { \ - var/atom/movable/movable_target = target; \ - final_pixel_y = movable_target.base_pixel_y; \ - }; \ - if(isliving(target)) { \ - var/mob/living/living_target = target; \ - final_pixel_y += living_target.body_position_pixel_y_offset; \ - }; \ - animate(target, pixel_y = final_pixel_y, time = 1 SECONDS) - -/// The duration of the animate call in mob/living/update_transform -#define UPDATE_TRANSFORM_ANIMATION_TIME (0.2 SECONDS) - -///Animates source spinning around itself. For docmentation on the args, check atom/proc/SpinAnimation() -/atom/proc/do_spin_animation(speed = 1 SECONDS, loops = -1, segments = 3, angle = 120, parallel = TRUE) - var/list/matrices = list() - for(var/i in 1 to segments-1) - var/matrix/segment_matrix = matrix(transform) - segment_matrix.Turn(angle*i) - matrices += segment_matrix - var/matrix/last = matrix(transform) - matrices += last - - speed /= segments - - if(parallel) - animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) - else - animate(src, transform = matrices[1], time = speed, loops) - for(var/i in 2 to segments) //2 because 1 is covered above - animate(transform = matrices[i], time = speed) - //doesn't have an object argument because this is "Stacking" with the animate call above - //3 billion% intentional - -/// Similar to shake but more spasm-y and jerk-y -/atom/proc/spasm_animation(loops = -1) - var/list/transforms = list( - matrix(transform).Translate(-1, 0), - matrix(transform).Translate(0, 1), - matrix(transform).Translate(1, 0), - matrix(transform).Translate(0, -1), - ) - - animate(src, transform = transforms[1], time = 0.2, loop = loops) - animate(transform = transforms[2], time = 0.1) - animate(transform = transforms[3], time = 0.2) - animate(transform = transforms[4], time = 0.3) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index e1303882b1a..0210c44ee57 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -189,12 +189,6 @@ /proc/cmp_assoc_list_name(list/A, list/B) return sorttext(B["name"], A["name"]) -/// Used by /datum/achievement_data/load_all_achievements() to determine in which order awards have to be loaded. -/proc/cmp_award_priority(type_a, type_b) - var/datum/award/award_a = SSachievements.awards[type_a] - var/datum/award/award_b = SSachievements.awards[type_b] - return award_b?.load_priority - award_a?.load_priority - /// Orders mobs by health /proc/cmp_mob_health(mob/living/mob_a, mob/living/mob_b) return mob_b.health - mob_a.health diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 616469ecabf..ed7373ece93 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -119,7 +119,7 @@ /obj/item/stack/sheet/sinew = GLOB.sinew_recipes, /obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes, /obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes, - /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, + /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, // SKYRAT EDIT ADDITION /obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes, /obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes, /obj/item/stack/sheet/mineral/uranium = GLOB.uranium_recipes, @@ -244,7 +244,7 @@ // Wall mounted machinery which are visually on the wall. GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list( /obj/item/radio/intercom, - /obj/item/storage/secure/safe, + /obj/structure/secure_safe, /obj/machinery/airalarm, /obj/machinery/bluespace_vendor, /obj/machinery/button, diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index c2b2f1e33b2..4a60dd23c60 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1481,3 +1481,27 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) var/icon/my_icon = icon(icon_path) GLOB.icon_dimensions[icon_path] = list("width" = my_icon.Width(), "height" = my_icon.Height()) return GLOB.icon_dimensions[icon_path] + +/// Fikou's fix for making toast alerts look nice - resets offsets, transforms to fit +/proc/get_small_overlay(atom/source) + var/mutable_appearance/alert_overlay = new(source) + alert_overlay.pixel_x = 0 + alert_overlay.pixel_y = 0 + + var/scale = 1 + var/list/icon_dimensions = get_icon_dimensions(source.icon) + var/width = icon_dimensions["width"] + var/height = icon_dimensions["height"] + + if(width > world.icon_size) + alert_overlay.pixel_x = -(world.icon_size / 2) * ((width - world.icon_size) / world.icon_size) + if(height > world.icon_size) + alert_overlay.pixel_y = -(world.icon_size / 2) * ((height - world.icon_size) / world.icon_size) + if(width > world.icon_size || height > world.icon_size) + if(width >= height) + scale = world.icon_size / width + else + scale = world.icon_size / height + alert_overlay.transform = alert_overlay.transform.Scale(scale) + + return alert_overlay diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index a7d47fb8f09..d675b252796 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -37,7 +37,7 @@ * * encode_title - if TRUE, the title will be HTML encoded * * encode_text - if TRUE, the text will be HTML encoded */ -/proc/priority_announce(text, title = "", sound, type, sender_override, has_important_message = FALSE, list/mob/players, encode_title = TRUE, encode_text = TRUE, color_override) +/proc/priority_announce(text, title = "", sound, type, sender_override, has_important_message = FALSE, list/mob/players = GLOB.player_list, encode_title = TRUE, encode_text = TRUE, color_override) if(!text) return @@ -85,18 +85,23 @@ dispatch_announcement_to_players(finalized_announcement, players, sound) - if(isnull(sender_override)) + if(isnull(sender_override) && players == GLOB.player_list) if(length(title) > 0) - GLOB.news_network.submit_article(title + "

" + text, "Central Command", "Station Announcements", null) + GLOB.news_network.submit_article(title + "

" + text, "[command_name()]", "Station Announcements", null) else - GLOB.news_network.submit_article(text, "Central Command Update", "Station Announcements", null) + GLOB.news_network.submit_article(text, "[command_name()] Update", "Station Announcements", null) /proc/print_command_report(text = "", title = null, announce=TRUE) if(!title) title = "Classified [command_name()] Update" if(announce) - priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", SSstation.announcer.get_rand_report_sound(), has_important_message = TRUE) + priority_announce( + text = "A report has been downloaded and printed out at all communications consoles.", + title = "Incoming Classified Message", + sound = SSstation.announcer.get_rand_report_sound(), + has_important_message = TRUE, + ) var/datum/comm_message/message = new message.title = title @@ -180,10 +185,7 @@ return jointext(returnable_strings, "") /// Proc that just dispatches the announcement to our applicable audience. Only the announcement is a mandatory arg. -/proc/dispatch_announcement_to_players(announcement, list/players, sound_override = null, should_play_sound = TRUE) - if(!players) - players = GLOB.player_list - +/proc/dispatch_announcement_to_players(announcement, list/players = GLOB.player_list, sound_override = null, should_play_sound = TRUE) // SKYRAT EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS /* Original: diff --git a/code/__HELPERS/visual_effects.dm b/code/__HELPERS/visual_effects.dm new file mode 100644 index 00000000000..b7855ade45f --- /dev/null +++ b/code/__HELPERS/visual_effects.dm @@ -0,0 +1,125 @@ +/** + * Causes the passed atom / image to appear floating, + * playing a simple animation where they move up and down by 2 pixels (looping) + * + * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! + * This is just so you can apply the animation to things which can be animated but are not movables (like images) + */ +#define DO_FLOATING_ANIM(target) \ + animate(target, pixel_y = 2, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE); \ + animate(pixel_y = -2, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + +/** + * Stops the passed atom / image from appearing floating + * (Living mobs also have a 'body_position_pixel_y_offset' variable that has to be taken into account here) + * + * In most cases you should NOT call this manually, instead use [/datum/element/movetype_handler]! + * This is just so you can apply the animation to things which can be animated but are not movables (like images) + */ +#define STOP_FLOATING_ANIM(target) \ + var/final_pixel_y = 0; \ + if(ismovable(target)) { \ + var/atom/movable/movable_target = target; \ + final_pixel_y = movable_target.base_pixel_y; \ + }; \ + if(isliving(target)) { \ + var/mob/living/living_target = target; \ + final_pixel_y += living_target.body_position_pixel_y_offset; \ + }; \ + animate(target, pixel_y = final_pixel_y, time = 1 SECONDS) + +/// The duration of the animate call in mob/living/update_transform +#define UPDATE_TRANSFORM_ANIMATION_TIME (0.2 SECONDS) + +///Animates source spinning around itself. For docmentation on the args, check atom/proc/SpinAnimation() +/atom/proc/do_spin_animation(speed = 1 SECONDS, loops = -1, segments = 3, angle = 120, parallel = TRUE) + var/list/matrices = list() + for(var/i in 1 to segments-1) + var/matrix/segment_matrix = matrix(transform) + segment_matrix.Turn(angle*i) + matrices += segment_matrix + var/matrix/last = matrix(transform) + matrices += last + + speed /= segments + + if(parallel) + animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) + else + animate(src, transform = matrices[1], time = speed, loops) + for(var/i in 2 to segments) //2 because 1 is covered above + animate(transform = matrices[i], time = speed) + //doesn't have an object argument because this is "Stacking" with the animate call above + //3 billion% intentional + +/// Similar to shake but more spasm-y and jerk-y +/atom/proc/spasm_animation(loops = -1) + var/list/transforms = list( + matrix(transform).Translate(-1, 0), + matrix(transform).Translate(0, 1), + matrix(transform).Translate(1, 0), + matrix(transform).Translate(0, -1), + ) + + animate(src, transform = transforms[1], time = 0.2, loop = loops) + animate(transform = transforms[2], time = 0.1) + animate(transform = transforms[3], time = 0.2) + animate(transform = transforms[4], time = 0.3) + +/** + * Proc called when you want the atom to spin around the center of its icon (or where it would be if its transform var is translated) + * By default, it makes the atom spin forever and ever at a speed of 60 rpm. + * + * Arguments: + * * speed: how much it takes for the atom to complete one 360° rotation + * * loops: how many times do we want the atom to rotate + * * clockwise: whether the atom ought to spin clockwise or counter-clockwise + * * segments: in how many animate calls the rotation is split. Probably unnecessary, but you shouldn't set it lower than 3 anyway. + * * parallel: whether the animation calls have the ANIMATION_PARALLEL flag, necessary for it to run alongside concurrent animations. + */ +/atom/proc/SpinAnimation(speed = 1 SECONDS, loops = -1, clockwise = TRUE, segments = 3, parallel = TRUE) + if(!segments) + return + var/segment = 360/segments + if(!clockwise) + segment = -segment + SEND_SIGNAL(src, COMSIG_ATOM_SPIN_ANIMATION, speed, loops, segments, segment) + do_spin_animation(speed, loops, segments, segment, parallel) + +/// Makes this atom look like a "hologram" +/// So transparent, blue, with a scanline and an emissive glow +/// This is acomplished using a combination of filters and render steps/overlays +/// The degree of the opacity is optional, based off the opacity arg (0 -> 1) +/atom/proc/makeHologram(opacity = 0.5) + // First, we'll make things blue (roughly) and sorta transparent + add_filter("HOLO: Color and Transparent", 1, color_matrix_filter(rgb(125,180,225, opacity * 255))) + // Now we're gonna do a scanline effect + // Gonna take this atom and give it a render target, then use it as a source for a filter + // (We use an atom because it seems as if setting render_target on an MA is just invalid. I hate this engine) + var/atom/movable/scanline = new(null) + scanline.icon = 'icons/effects/effects.dmi' + scanline.icon_state = "scanline" + scanline.appearance_flags |= RESET_TRANSFORM + // * so it doesn't render + var/static/uid_scan = 0 + scanline.render_target = "*HoloScanline [uid_scan]" + uid_scan++ + // Now we add it as a filter, and overlay the appearance so the render source is always around + add_filter("HOLO: Scanline", 2, alpha_mask_filter(render_source = scanline.render_target)) + add_overlay(scanline) + qdel(scanline) + // Annd let's make the sucker emissive, so it glows in the dark + if(!render_target) + var/static/uid = 0 + render_target = "HOLOGRAM [uid]" + uid++ + // I'm using static here to reduce the overhead, it does mean we need to do plane stuff manually tho + var/static/atom/movable/render_step/emissive/glow = new(null) + glow.render_source = render_target + SET_PLANE_EXPLICIT(glow, initial(glow.plane), src) + // We're creating a render step that copies ourselves, and draws it to the emissive plane + // Then we overlay it, and release "ownership" back to this proc, since we get to keep the appearance it generates + // We can't just use an MA from the start cause render_source setting starts going fuckey REALLY quick + var/mutable_appearance/glow_appearance = new(glow) + add_overlay(glow_appearance) + LAZYADD(update_overlays_on_z, glow_appearance) diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~skyrat_helpers/is_helpers.dm index 80f96bf533c..6c46b9295b1 100644 --- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm +++ b/code/__HELPERS/~skyrat_helpers/is_helpers.dm @@ -27,6 +27,8 @@ #define ismammal(A) (is_species(A,/datum/species/mammal)) #define isinsect(A) (is_species(A,/datum/species/insect)) #define isfeline(A) (isfelinid(A) || istajaran(A) || HAS_TRAIT(A, TRAIT_FELINE)) +#define iscanine(A) (isvulpkanin(A) || HAS_TRAIT(A, TRAIT_CANINE)) +#define isavian(A) (isteshari(A) || isvox(A) || isvoxprimalis(A) || HAS_TRAIT(A, TRAIT_AVIAN)) // Xen mobs #define isxenmob(A) (istype(A, /mob/living/simple_animal/hostile/blackmesa/xen)) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 135fb00dea1..1e775dd49ae 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -6,16 +6,11 @@ GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb. GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins -GLOBAL_LIST_INIT(dangerous_turfs, typecacheof(list( - /turf/open/lava, - /turf/open/chasm, - /turf/open/space, - /turf/open/openspace))) - /// List of types of abstract mob which shouldn't usually exist in the world on its own if we're spawning random mobs GLOBAL_LIST_INIT(abstract_mob_types, list( /mob/living/basic/blob_minion, /mob/living/basic/construct, + /mob/living/basic/guardian, /mob/living/basic/heretic_summon, /mob/living/basic/mining, /mob/living/basic/pet, @@ -32,8 +27,6 @@ GLOBAL_LIST_INIT(abstract_mob_types, list( /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/asteroid/elite, /mob/living/simple_animal/hostile/asteroid, - /mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/hostile/guardian, /mob/living/simple_animal/hostile/megafauna, /mob/living/simple_animal/hostile/mimic, // Cannot exist if spawned without being passed an item reference /mob/living/simple_animal/hostile/retaliate, diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index b2662b5e804..bc195bcf5f4 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -25,6 +25,10 @@ GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1. GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) +GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) +GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt")) +GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt")) +GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt")) GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt")) diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 1a56a44f5e5..9dcdf05db73 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -8,11 +8,12 @@ #define POLL_IGNORE_BLOB "blob" #define POLL_IGNORE_BOTS "bots" #define POLL_IGNORE_CARGORILLA "cargorilla" -#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support" #define POLL_IGNORE_CONSTRUCT "construct" +#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support" #define POLL_IGNORE_DRONE "drone" #define POLL_IGNORE_FIRE_SHARK "fire_shark" #define POLL_IGNORE_FUGITIVE "fugitive" +#define POLL_IGNORE_GLITCH "glitch" #define POLL_IGNORE_GOLEM "golem" #define POLL_IGNORE_HERETIC_MONSTER "heretic_monster" #define POLL_IGNORE_HOLOPARASITE "holoparasite" @@ -37,21 +38,21 @@ #define POLL_IGNORE_SYNDICATE "syndicate" #define POLL_IGNORE_VENUSHUMANTRAP "venus_human_trap" -//Skyrat Edit Start: Cortical Borer GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_ACADEMY_WIZARD = "Academy Wizard Defender", - POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", + POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", // SKYRAT EDIT ADDITION POLL_IGNORE_ALIEN_LARVA = "Xenomorph larva", POLL_IGNORE_ASH_SPIRIT = "Ash Spirit", POLL_IGNORE_ASHWALKER = "Ashwalker eggs", POLL_IGNORE_BLOB = "Blob spores", POLL_IGNORE_BOTS = "Bots", POLL_IGNORE_CARGORILLA = "Cargorilla", - POLL_IGNORE_CONTRACTOR_SUPPORT = "Contractor Support Unit", POLL_IGNORE_CONSTRUCT = "Construct", + POLL_IGNORE_CONTRACTOR_SUPPORT = "Contractor Support Unit", POLL_IGNORE_DRONE = "Drone shells", POLL_IGNORE_FIRE_SHARK = "Fire Shark", POLL_IGNORE_FUGITIVE = "Fugitive Hunter", + POLL_IGNORE_GLITCH = "Glitch", POLL_IGNORE_GOLEM = "Golems", POLL_IGNORE_HERETIC_MONSTER = "Heretic Monster", POLL_IGNORE_HOLOPARASITE = "Holoparasite", @@ -64,8 +65,8 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_POSSESSED_BLADE = "Possessed blade", POLL_IGNORE_PYROSLIME = "Slime", POLL_IGNORE_RAW_PROPHET = "Raw Prophet", - POLL_IGNORE_RUST_SPIRIT = "Rust Spirit", POLL_IGNORE_REGAL_RAT = "Regal rat", + POLL_IGNORE_RUST_SPIRIT = "Rust Spirit", POLL_IGNORE_SENTIENCE_POTION = "Sentience potion", POLL_IGNORE_SHADE = "Shade", POLL_IGNORE_SHUTTLE_DENIZENS = "Shuttle denizens", @@ -76,7 +77,6 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_SYNDICATE = "Syndicate", POLL_IGNORE_VENUSHUMANTRAP = "Venus Human Traps", )) -//Skyrat Edit Stop: Cortical Borer GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore()) diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 68d63d97934..47b1008aa8a 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -63,8 +63,6 @@ GLOBAL_LIST_INIT(blacklisted_metalgen_types, typecacheof(list( /turf/closed/indestructible, //indestructible turfs should be indestructible, metalgen transmutation to plasma allows them to be destroyed /turf/open/indestructible ))) -/// Names of human readable reagents used by plumbing UI. -GLOBAL_LIST_INIT(chemical_name_list, init_chemical_name_list()) /// Map of reagent names to its datum path GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) @@ -81,16 +79,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) return reagent_list -/// Creates an list which is indexed by reagent name . used by plumbing reaction chamber and chemical filter UI -/proc/init_chemical_name_list() - var/list/name_list = list() - - for(var/X in GLOB.chemical_reagents_list) - var/datum/reagent/Reagent = GLOB.chemical_reagents_list[X] - name_list += Reagent.name - - return sort_list(name_list) - /** * Chemical Reactions - Initialises all /datum/chemical_reaction into a list * It is filtered into multiple lists within a list. @@ -196,7 +184,19 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) /// Builds map of reagent name to its datum path /proc/build_name2reagentlist() . = list() - for (var/datum/reagent/R as anything in subtypesof(/datum/reagent)) - var/name = initial(R.name) + + //build map with keys stored seperatly + var/list/name_to_reagent = list() + var/list/only_names = list() + for (var/datum/reagent/reagent as anything in GLOB.chemical_reagents_list) + var/name = initial(reagent.name) if (length(name)) - .[ckey(name)] = R + name_to_reagent[name] = reagent + only_names += name + + //sort keys + only_names = sort_list(only_names) + + //build map with sorted keys + for(var/name as anything in only_names) + .[name] = name_to_reagent[name] diff --git a/code/_globalvars/lists/xenobiology.dm b/code/_globalvars/lists/xenobiology.dm index 1e247a6279d..f641e9d5ecc 100644 --- a/code/_globalvars/lists/xenobiology.dm +++ b/code/_globalvars/lists/xenobiology.dm @@ -73,11 +73,9 @@ GLOBAL_LIST_INIT_TYPED(cell_line_tables, /list, list( CELL_LINE_TABLE_WALKING_MUSHROOM = list(/datum/micro_organism/cell_line/walking_mushroom = 1), CELL_LINE_TABLE_QUEEN_BEE = list(/datum/micro_organism/cell_line/queen_bee = 1), CELL_LINE_TABLE_BUTTERFLY = list(/datum/micro_organism/cell_line/butterfly = 1), - CELL_LINE_TABLE_LEAPER = list(/datum/micro_organism/cell_line/leaper = 1), CELL_LINE_TABLE_MEGA_ARACHNID = list(/datum/micro_organism/cell_line/mega_arachnid = 1), CELL_LINE_TABLE_ALGAE = list( /datum/micro_organism/cell_line/frog = 2, - /datum/micro_organism/cell_line/leaper = 2, /datum/micro_organism/cell_line/mega_arachnid = 1, /datum/micro_organism/cell_line/queen_bee = 1, /datum/micro_organism/cell_line/butterfly = 1, diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index f8ea532914b..5bb8b4bf314 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -57,7 +57,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/carbon/alien, /mob/living/simple_animal/slime, )), - "anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)), + "anime" = typecacheof(list(/mob/living/basic/guardian)), "birds" = typecacheof(list( /mob/living/basic/chick, /mob/living/basic/chicken, @@ -96,14 +96,13 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/basic/faithless, /mob/living/basic/ghost, /mob/living/basic/heretic_summon, - /mob/living/basic/skeleton, /mob/living/basic/revenant, + /mob/living/basic/shade, + /mob/living/basic/skeleton, + /mob/living/basic/wizard, /mob/living/simple_animal/bot/mulebot/paranormal, - /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/hostile/dark_wizard, - /mob/living/simple_animal/hostile/wizard, /mob/living/simple_animal/hostile/zombie, - /mob/living/simple_animal/shade, )), )) @@ -368,7 +367,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/effect/forcefield/wizard/heretic, /obj/effect/heretic_influence, /obj/effect/heretic_rune, - /obj/effect/knock_portal, + /obj/effect/lock_portal, /obj/effect/visible_heretic_influence, /obj/item/ammo_box/strilka310/lionhunter, /obj/item/ammo_casing/strilka310/lionhunter, @@ -380,7 +379,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/codex_cicatrix, /obj/item/coin/eldritch, /obj/item/gun/ballistic/rifle/lionhunter, - /obj/item/heretic_lintel, + /obj/item/heretic_labyrinth_handbook, /obj/item/melee/rune_carver, /obj/item/melee/sickly_blade, /obj/item/melee/touch_attack/mansus_fist, @@ -389,7 +388,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/toy/reality_pierce, /obj/projectile/curse_hand, /obj/structure/destructible/eldritch_crucible, - /obj/structure/knock_tear, + /obj/structure/lock_tear, )), "insects" = typecacheof(list( /obj/item/clothing/mask/animal/small/bee, diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 8fd711279a5..118ba513d4a 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -85,6 +85,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, "TRAIT_JOLLY" = TRAIT_JOLLY, "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, + "TRAIT_NO_FLOATING_ANIM" = TRAIT_NO_FLOATING_ANIM, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, "TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER, "TRAIT_NO_SLIP_ICE" = TRAIT_NO_SLIP_ICE, @@ -152,6 +153,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, + "TRAIT_GIFTED" = TRAIT_GIFTED, // SKYRAT EDIT - ADDITION "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 4275c78dbe4..a0b9ac88925 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -17,13 +17,17 @@ if(!category || QDELETED(src)) return + var/datum/weakref/master_ref + if(isdatum(new_master)) + master_ref = WEAKREF(new_master) var/atom/movable/screen/alert/thealert if(alerts[category]) thealert = alerts[category] if(thealert.override_alerts) return thealert - if(new_master && new_master != thealert.master) - WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [thealert.master]") + if(master_ref && thealert.master_ref && master_ref != thealert.master_ref) + var/datum/current_master = thealert.master_ref.resolve() + WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [current_master]") clear_alert(category) return .() @@ -55,7 +59,7 @@ new_master.layer = old_layer new_master.plane = old_plane thealert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts() - thealert.master = new_master + thealert.master_ref = master_ref else thealert.icon_state = "[initial(thealert.icon_state)][severity]" thealert.severity = severity @@ -294,13 +298,17 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/fire/Click() . = ..() if(!.) - return + return FALSE var/mob/living/living_owner = owner + if(!living_owner.can_resist()) + return FALSE living_owner.changeNext_move(CLICK_CD_RESIST) - if(living_owner.mobility_flags & MOBILITY_MOVE) - return living_owner.resist_fire() + if(!(living_owner.mobility_flags & MOBILITY_MOVE)) + return FALSE + + return living_owner.resist_fire() /atom/movable/screen/alert/give // information set when the give alert is made icon_state = "default" @@ -502,7 +510,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." alerttooltipstyle = "cult" var/static/image/narnar var/angle = 0 - var/mob/living/simple_animal/hostile/construct/Cviewer = null + var/mob/living/basic/construct/Cviewer /atom/movable/screen/alert/bloodsense/Initialize(mapload, datum/hud/hud_owner) . = ..() @@ -607,19 +615,13 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //GUARDIANS -/atom/movable/screen/alert/cancharge - name = "Charge Ready" - desc = "You are ready to charge at a location!" - icon_state = "guardian_charge" - alerttooltipstyle = "parasite" - /atom/movable/screen/alert/canstealth name = "Stealth Ready" desc = "You are ready to enter stealth!" icon_state = "guardian_canstealth" alerttooltipstyle = "parasite" -/atom/movable/screen/alert/instealth +/atom/movable/screen/alert/status_effect/instealth name = "In Stealth" desc = "You are in stealth and your next attack will do bonus damage!" icon_state = "guardian_instealth" @@ -780,29 +782,25 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." desc = "This can be clicked on to perform an action." icon_state = "template" timeout = 30 SECONDS - /// The target to use the action on - var/atom/target - /// Which on click action to use - var/action = NOTIFY_JUMP + /// Weakref to the target atom to use the action on + var/datum/weakref/target_ref + /// If we want to interact on click rather than jump/orbit + var/click_interact = FALSE /atom/movable/screen/alert/notify_action/Click() . = ..() - if(isnull(target)) + + var/atom/target = target_ref?.resolve() + if(isnull(target) || !isobserver(owner) || target == owner) return var/mob/dead/observer/ghost_owner = owner - if(!istype(ghost_owner)) + + if(click_interact) + ghost_owner.jump_to_interact(target) return - switch(action) - if(NOTIFY_PLAY) - target.attack_ghost(ghost_owner) - if(NOTIFY_JUMP) - var/turf/target_turf = get_turf(target) - if(target_turf && isturf(target_turf)) - ghost_owner.abstract_move(target_turf) - if(NOTIFY_ORBIT) - ghost_owner.ManualFollow(target) + ghost_owner.observer_view(target) //OBJECT-BASED @@ -916,14 +914,15 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat to_chat(usr, span_boldnotice("[name] - [desc]")) return FALSE - if(master && click_master) - return usr.client.Click(master, location, control, params) + var/datum/our_master = master_ref?.resolve() + if(our_master && click_master) + return usr.client.Click(our_master, location, control, params) return TRUE /atom/movable/screen/alert/Destroy() . = ..() severity = 0 - master = null + master_ref = null owner = null screen_loc = "" diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index f9963c1fa3a..ba1d8f4565e 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -1,7 +1,7 @@ /datum/hud/guardian ui_style = 'icons/hud/guardian.dmi' -/datum/hud/guardian/New(mob/living/simple_animal/hostile/guardian/owner) +/datum/hud/guardian/New(mob/living/basic/guardian/owner) ..() var/atom/movable/screen/using @@ -34,10 +34,10 @@ using.screen_loc = ui_back static_inventory += using -/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian +/datum/hud/dextrous/guardian/New(mob/living/basic/guardian/owner) //for a dextrous guardian ..() var/atom/movable/screen/using - if(istype(owner, /mob/living/simple_animal/hostile/guardian/dextrous)) + if(istype(owner, /mob/living/basic/guardian/dextrous)) var/atom/movable/screen/inventory/inv_box inv_box = new /atom/movable/screen/inventory(null, src) @@ -86,8 +86,8 @@ /datum/hud/dextrous/guardian/persistent_inventory_update() if(!mymob) return - if(istype(mymob, /mob/living/simple_animal/hostile/guardian/dextrous)) - var/mob/living/simple_animal/hostile/guardian/dextrous/dex_guardian = mymob + if(istype(mymob, /mob/living/basic/guardian/dextrous)) + var/mob/living/basic/guardian/dextrous/dex_guardian = mymob if(hud_shown) if(dex_guardian.internal_storage) @@ -109,7 +109,7 @@ /atom/movable/screen/guardian/manifest/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.manifest() @@ -120,7 +120,7 @@ /atom/movable/screen/guardian/recall/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.recall() /atom/movable/screen/guardian/toggle_mode @@ -130,7 +130,7 @@ /atom/movable/screen/guardian/toggle_mode/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.toggle_modes() /atom/movable/screen/guardian/toggle_mode/inactive @@ -153,7 +153,7 @@ /atom/movable/screen/guardian/communicate/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.communicate() @@ -164,5 +164,5 @@ /atom/movable/screen/guardian/toggle_light/Click() if(isguardian(usr)) - var/mob/living/simple_animal/hostile/guardian/user = usr + var/mob/living/basic/guardian/user = usr user.toggle_light() diff --git a/code/_onclick/hud/ooze.dm b/code/_onclick/hud/ooze.dm index 1b466f7ff97..0962b58126a 100644 --- a/code/_onclick/hud/ooze.dm +++ b/code/_onclick/hud/ooze.dm @@ -1,4 +1,4 @@ -///Hud type with targetting dol and a nutrition bar +///Hud type with targeting dol and a nutrition bar /datum/hud/ooze/New(mob/living/owner) . = ..() diff --git a/code/_onclick/hud/rendering/plane_master.dm b/code/_onclick/hud/rendering/plane_master.dm deleted file mode 100644 index 4ae1c573ad4..00000000000 --- a/code/_onclick/hud/rendering/plane_master.dm +++ /dev/null @@ -1,684 +0,0 @@ -// I hate this place -INITIALIZE_IMMEDIATE(/atom/movable/screen/plane_master) - -/atom/movable/screen/plane_master - screen_loc = "CENTER" - icon_state = "blank" - appearance_flags = PLANE_MASTER - blend_mode = BLEND_OVERLAY - plane = LOWEST_EVER_PLANE - /// Will be sent to the debug ui as a description for each plane - /// Also useful as a place to explain to coders how/why your plane works, and what it's meant to do - /// Plaintext and basic html are fine to use here. - /// I'll bonk you if I find you putting "lmao stuff" in here, make this useful. - var/documentation = "" - /// Our real alpha value, so alpha can persist through being hidden/shown - var/true_alpha = 255 - /// Tracks if we're using our true alpha, or being manipulated in some other way - var/alpha_enabled = TRUE - - /// The plane master group we're a member of, our "home" - var/datum/plane_master_group/home - - /// If our plane master allows for offsetting - /// Mostly used for planes that really don't need to be duplicated, like the hud planes - var/allows_offsetting = TRUE - /// Our offset from our "true" plane, see below - var/offset - /// When rendering multiz, lower levels get their own set of plane masters - /// Real plane here represents the "true" plane value of something, ignoring the offset required to handle lower levels - var/real_plane - - //--rendering relay vars-- - /// list of planes we will relay this plane's render to - var/list/render_relay_planes = list(RENDER_PLANE_GAME) - /// blend mode to apply to the render relay in case you dont want to use the plane_masters blend_mode - var/blend_mode_override - /// list of current relays this plane is utilizing to render - var/list/atom/movable/render_plane_relay/relays = list() - /// if render relays have already be generated - var/relays_generated = FALSE - - /// If this plane master should be hidden from the player at roundstart - /// We do this so PMs can opt into being temporary, to reduce load on clients - var/start_hidden = FALSE - /// If this plane master is being forced to hide. - /// Hidden PMs will dump ANYTHING relayed or drawn onto them. Be careful with this - /// Remember: a hidden plane master will dump anything drawn directly to it onto the output render. It does NOT hide its contents - /// Use alpha for that - var/force_hidden = FALSE - - /// If this plane should be scaled by multiz - /// Planes with this set should NEVER be relay'd into each other, as that will cause visual fuck - var/multiz_scaled = TRUE - - /// Bitfield that describes how this plane master will render if its z layer is being "optimized" - /// If a plane master is NOT critical, it will be completely dropped if we start to render outside a client's multiz boundary prefs - /// Of note: most of the time we will relay renders to non critical planes in this stage. so the plane master will end up drawing roughly "in order" with its friends - /// This is NOT done for parallax and other problem children, because the rules of BLEND_MULTIPLY appear to not behave as expected :( - /// This will also just make debugging harder, because we do fragile things in order to ensure things operate as epected. I'm sorry - /// Compile time - /// See [code\__DEFINES\layers.dm] for our bitflags - var/critical = NONE - - /// If this plane master is outside of our visual bounds right now - var/is_outside_bounds = FALSE - -/atom/movable/screen/plane_master/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset = 0) - . = ..() - src.offset = offset - true_alpha = alpha - real_plane = plane - - if(!set_home(home)) - return INITIALIZE_HINT_QDEL - update_offset() - if(!documentation && !(istype(src, /atom/movable/screen/plane_master) || istype(src, /atom/movable/screen/plane_master/rendering_plate))) - stack_trace("Plane master created without a description. Document how your thing works so people will know in future, and we can display it in the debug menu") - if(start_hidden) - hide_plane(home.our_hud?.mymob) - generate_render_relays() - -/atom/movable/screen/plane_master/Destroy() - if(home) - // NOTE! We do not clear ourselves from client screens - // We relay on whoever qdel'd us to reset our hud, and properly purge us - home.plane_masters -= "[plane]" - home = null - . = ..() - QDEL_LIST(relays) - -/// Sets the plane group that owns us, it also determines what screen we render to -/// Returns FALSE if the set_home fails, TRUE otherwise -/atom/movable/screen/plane_master/proc/set_home(datum/plane_master_group/home) - if(!istype(home, /datum/plane_master_group)) - return FALSE - src.home = home - if(home.map) - screen_loc = "[home.map]:[screen_loc]" - assigned_map = home.map - return TRUE - -/// Updates our "offset", basically what layer of multiz we're meant to render -/// Top is 0, goes up as you go down -/// It's taken into account by render targets and relays, so we gotta make sure they're on the same page -/atom/movable/screen/plane_master/proc/update_offset() - name = "[initial(name)] #[offset]" - SET_PLANE_W_SCALAR(src, real_plane, offset) - for(var/i in 1 to length(render_relay_planes)) - render_relay_planes[i] = GET_NEW_PLANE(render_relay_planes[i], offset) - if(initial(render_target)) - render_target = OFFSET_RENDER_TARGET(initial(render_target), offset) - -/atom/movable/screen/plane_master/proc/set_alpha(new_alpha) - true_alpha = new_alpha - if(!alpha_enabled) - return - alpha = new_alpha - -/atom/movable/screen/plane_master/proc/disable_alpha() - alpha_enabled = FALSE - alpha = 0 - -/atom/movable/screen/plane_master/proc/enable_alpha() - alpha_enabled = TRUE - alpha = true_alpha - -/// Shows a plane master to the passed in mob -/// Override this to apply unique effects and such -/// Returns TRUE if the call is allowed, FALSE otherwise -/atom/movable/screen/plane_master/proc/show_to(mob/mymob) - SHOULD_CALL_PARENT(TRUE) - if(force_hidden) - return FALSE - - var/client/our_client = mymob?.canon_client - // Alright, let's get this out of the way - // Mobs can move z levels without their client. If this happens, we need to ensure critical display settings are respected - // This is done here. Mild to severe pain but it's nessesary - if(check_outside_bounds()) - if(!(critical & PLANE_CRITICAL_DISPLAY)) - return FALSE - if(!our_client) - return TRUE - our_client.screen += src - - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - our_client.screen += relays - return TRUE - return TRUE - - if(!our_client) - return TRUE - - our_client.screen += src - our_client.screen += relays - return TRUE - -/// Hook to allow planes to work around is_outside_bounds -/// Return false to allow a show, true otherwise -/atom/movable/screen/plane_master/proc/check_outside_bounds() - return is_outside_bounds - -/// Hides a plane master from the passeed in mob -/// Do your effect cleanup here -/atom/movable/screen/plane_master/proc/hide_from(mob/oldmob) - SHOULD_CALL_PARENT(TRUE) - var/client/their_client = oldmob?.client - if(!their_client) - return - their_client.screen -= src - their_client.screen -= relays - - -/// Forces this plane master to hide, until unhide_plane is called -/// This allows us to disable unused PMs without breaking anything else -/atom/movable/screen/plane_master/proc/hide_plane(mob/cast_away) - force_hidden = TRUE - hide_from(cast_away) - -/// Disables any forced hiding, allows the plane master to be used as normal -/atom/movable/screen/plane_master/proc/unhide_plane(mob/enfold) - force_hidden = FALSE - show_to(enfold) - -/// Mirrors our force hidden state to the hidden state of the plane that came before, assuming it's valid -/// This allows us to mirror any hidden sets from before we were created, no matter how low that chance is -/atom/movable/screen/plane_master/proc/mirror_parent_hidden() - var/mob/our_mob = home?.our_hud?.mymob - var/atom/movable/screen/plane_master/true_plane = our_mob?.hud_used?.get_plane_master(plane) - if(true_plane == src || !true_plane) - return - - if(true_plane.force_hidden == force_hidden) - return - - // If one of us already exists and it's not hidden, unhide ourselves - if(true_plane.force_hidden) - hide_plane(our_mob) - else - unhide_plane(our_mob) - -/atom/movable/screen/plane_master/proc/outside_bounds(mob/relevant) - if(force_hidden || is_outside_bounds) - return - is_outside_bounds = TRUE - // If we're of critical importance, AND we're below the rendering layer - if(critical & PLANE_CRITICAL_DISPLAY) - // We here assume that your render target starts with * - if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) - render_target = copytext_char(render_target, 2) - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - return - var/client/our_client = relevant.client - if(our_client) - for(var/atom/movable/render_plane_relay/relay as anything in relays) - our_client.screen -= relay - - return - hide_from(relevant) - -/atom/movable/screen/plane_master/proc/inside_bounds(mob/relevant) - is_outside_bounds = FALSE - if(critical & PLANE_CRITICAL_DISPLAY) - // We here assume that your render target starts with * - if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) - render_target = "*[render_target]" - - if(!(critical & PLANE_CRITICAL_NO_RELAY)) - return - var/client/our_client = relevant.client - if(our_client) - for(var/atom/movable/render_plane_relay/relay as anything in relays) - our_client.screen += relay - - return - show_to(relevant) - -/atom/movable/screen/plane_master/clickcatcher - name = "Click Catcher" - documentation = "Contains the screen object we use as a backdrop to catch clicks on portions of the screen that would otherwise contain nothing else. \ -
Will always be below almost everything else" - plane = CLICKCATCHER_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - multiz_scaled = FALSE - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/clickcatcher/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(offset_increased)) - offset_increased(SSmapping, 0, SSmapping.max_plane_offset) - -/atom/movable/screen/plane_master/clickcatcher/proc/offset_increased(datum/source, old_off, new_off) - SIGNAL_HANDLER - // We only want need the lowest level - // If my system better supported changing PM plane values mid op I'd do that, but I do NOT so - if(new_off > offset) - hide_plane(home?.our_hud?.mymob) - -/atom/movable/screen/plane_master/parallax_white - name = "Parallax whitifier" - documentation = "Essentially a backdrop for the parallax plane. We're rendered just below it, so we'll be multiplied by its well, parallax.\ -
If you want something to look as if it has parallax on it, draw it to this plane." - plane = PLANE_SPACE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) - critical = PLANE_CRITICAL_FUCKO_PARALLAX // goes funny when touched. no idea why I don't trust byond - -/atom/movable/screen/plane_master/parallax_white/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_SPACE_LAYER) - -///Contains space parallax -/atom/movable/screen/plane_master/parallax - name = "Parallax" - documentation = "Contains parallax, or to be more exact the screen objects that hold parallax.\ -
Note the BLEND_MULTIPLY. The trick here is how low our plane value is. Because of that, we draw below almost everything in the game.\ -
We abuse this to ensure we multiply against the Parallax whitifier plane, or space's plane. It's set to full white, so when you do the multiply you just get parallax out where it well, makes sense to be.\ -
Also notice that the parent parallax plane is mirrored down to all children. We want to support viewing parallax across all z levels at once." - plane = PLANE_SPACE_PARALLAX - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - blend_mode = BLEND_MULTIPLY - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - multiz_scaled = FALSE - -/atom/movable/screen/plane_master/parallax/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - if(offset != 0) - // You aren't the source? don't change yourself - return - RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(on_offset_increase)) - RegisterSignal(SSdcs, COMSIG_NARSIE_SUMMON_UPDATE, PROC_REF(narsie_modified)) - if(GLOB.narsie_summon_count >= 1) - narsie_start_midway(GLOB.narsie_effect_last_modified) // We assume we're on the start, so we can use this number - offset_increase(0, SSmapping.max_plane_offset) - -/atom/movable/screen/plane_master/parallax/proc/on_offset_increase(datum/source, old_offset, new_offset) - SIGNAL_HANDLER - offset_increase(old_offset, new_offset) - -/atom/movable/screen/plane_master/parallax/proc/offset_increase(old_offset, new_offset) - // Parallax will be mirrored down to any new planes that are added, so it will properly render across mirage borders - for(var/offset in old_offset to new_offset) - if(offset != 0) - // Overlay so we don't multiply twice, and thus fuck up our rendering - add_relay_to(GET_NEW_PLANE(plane, offset), BLEND_OVERLAY) - -// Hacky shit to ensure parallax works in perf mode -/atom/movable/screen/plane_master/parallax/outside_bounds(mob/relevant) - if(offset == 0) - remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) - is_outside_bounds = TRUE // I'm sorry :( - return - // If we can't render, and we aren't the bottom layer, don't render us - // This way we only multiply against stuff that's not fullwhite space - var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) - var/turf/viewing_turf = get_turf(relevant) - if(!viewing_turf || offset != GET_LOWEST_STACK_OFFSET(viewing_turf.z)) - parent_parallax.remove_relay_from(plane) - else - parent_parallax.add_relay_to(plane, BLEND_OVERLAY) - return ..() - -/atom/movable/screen/plane_master/parallax/inside_bounds(mob/relevant) - if(offset == 0) - add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) - is_outside_bounds = FALSE - return - // Always readd, just in case we lost it - var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) - parent_parallax.add_relay_to(plane, BLEND_OVERLAY) - return ..() - -// Needs to handle rejoining on a lower z level, so we NEED to readd old planes -/atom/movable/screen/plane_master/parallax/check_outside_bounds() - // If we're outside bounds AND we're the 0th plane, we need to show cause parallax is hacked to hell - return offset != 0 && is_outside_bounds - -/// Starts the narsie animation midway, so we can catch up to everyone else quickly -/atom/movable/screen/plane_master/parallax/proc/narsie_start_midway(start_time) - var/time_elapsed = world.time - start_time - narsie_summoned_effect(max(16 SECONDS - time_elapsed, 0)) - -/// Starts the narsie animation, make us grey, then red -/atom/movable/screen/plane_master/parallax/proc/narsie_modified(datum/source, new_count) - SIGNAL_HANDLER - if(new_count >= 1) - narsie_summoned_effect(16 SECONDS) - else - narsie_unsummoned() - -/atom/movable/screen/plane_master/parallax/proc/narsie_summoned_effect(animate_time) - if(GLOB.narsie_summon_count >= 2) - var/static/list/nightmare_parallax = list(255,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, -130,0,0,0) - animate(src, color = nightmare_parallax, time = animate_time) - return - - var/static/list/grey_parallax = list(0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0,0,0,1, -0.1,-0.1,-0.1,0) - // We're gonna animate ourselves grey - // Then, once it's done, about 40 seconds into the event itself, we're gonna start doin some shit. see below - animate(src, color = grey_parallax, time = animate_time) - -/atom/movable/screen/plane_master/parallax/proc/narsie_unsummoned() - animate(src, color = null, time = 8 SECONDS) - -/atom/movable/screen/plane_master/gravpulse - name = "Gravpulse" - documentation = "Ok so this one's fun. Basically, we want to be able to distort the game plane when a grav annom is around.\ -
So we draw the pattern we want to use to this plane, and it's then used as a render target by a distortion filter on the game plane.\ -
Note the blend mode and lack of relay targets. This plane exists only to distort, it's never rendered anywhere." - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = GRAVITY_PULSE_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - blend_mode = BLEND_ADD - render_target = GRAVITY_PULSE_RENDER_TARGET - render_relay_planes = list() - -///Contains just the floor -/atom/movable/screen/plane_master/floor - name = "Floor" - documentation = "The well, floor. This is mostly used as a sorting mechanism, but it also lets us create a \"border\" around the game world plane, so its drop shadow will actually work." - plane = FLOOR_PLANE - render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/transparent_floor - name = "Transparent Floor" - documentation = "Really just openspace, stuff that is a turf but has no color or alpha whatsoever.\ -
We use this to draw to just the light mask plane, cause if it's not there we get holes of blackness over openspace" - plane = TRANSPARENT_FLOOR_PLANE - render_relay_planes = list(LIGHT_MASK_PLANE) - // Needs to be critical or it uh, it'll look white - critical = PLANE_CRITICAL_DISPLAY|PLANE_CRITICAL_NO_RELAY - -/atom/movable/screen/plane_master/floor/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_FLOOR_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/wall - name = "Wall" - documentation = "Holds all walls. We render this onto the game world. Separate so we can use this + space and floor planes as a guide for where byond blackness is NOT." - plane = WALL_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/wall/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/game - name = "Lower game world" - documentation = "Exists mostly because of FOV shit. Basically, if you've just got a normal not ABOVE fov thing, and you don't want it masked, stick it here yeah?" - plane = GAME_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_fov_hidden - name = "lower game world fov hidden" - documentation = "If you want something to be hidden by fov, stick it on this plane. We're masked by the fov blocker plane, so the items on us can actually well, disappear." - plane = GAME_PLANE_FOV_HIDDEN - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_fov_hidden/Initialize(mapload, datum/hud/hud_owner) - . = ..() - add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) - -/atom/movable/screen/plane_master/field_of_vision_blocker - name = "Field of vision blocker" - documentation = "This is one of those planes that's only used as a filter. It masks out things that want to be hidden by fov.\ -
Literally just contains FOV images, or masks." - plane = FIELD_OF_VISION_BLOCKER_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list() - // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently - allows_offsetting = FALSE - start_hidden = TRUE - // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us. - // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER - multiz_scaled = FALSE - -/atom/movable/screen/plane_master/field_of_vision_blocker/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - mirror_parent_hidden() - -/atom/movable/screen/plane_master/game_world_upper - name = "Upper game world" - documentation = "Ok so fov is kinda fucky, because planes in byond serve both as effect groupings and as rendering orderers. Since that's true, we need a plane that we can stick stuff that draws above fov blocked stuff on." - plane = GAME_PLANE_UPPER - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/wall_upper - name = "Upper wall" - documentation = "There are some walls that want to render above most things (mostly minerals since they shift over.\ -
We draw them to their own plane so we can hijack them for our emissive mask stuff" - plane = WALL_PLANE_UPPER - render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) - -/atom/movable/screen/plane_master/wall_upper/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) - . = ..() - add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) - -/atom/movable/screen/plane_master/game_world_upper_fov_hidden - name = "Upper game world fov hidden" - documentation = "Just as we need a place to draw things \"above\" the hidden fov plane, we also need to be able to hide stuff that draws over the upper game plane." - plane = GAME_PLANE_UPPER_FOV_HIDDEN - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/atom/movable/screen/plane_master/game_world_upper_fov_hidden/Initialize(mapload, datum/hud/hud_owner) - . = ..() - // Dupe of the other hidden plane - add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) - -/atom/movable/screen/plane_master/seethrough - name = "Seethrough" - documentation = "Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them." - plane = SEETHROUGH_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - start_hidden = TRUE - -/atom/movable/screen/plane_master/game_world_above - name = "Above game world" - documentation = "We need a place that's unmasked by fov that also draws above the upper game world fov hidden plane. I told you fov was hacky man." - plane = ABOVE_GAME_PLANE - render_relay_planes = list(RENDER_PLANE_GAME_WORLD) - -/** - * Plane master that byond will by default draw to - * Shouldn't be used, exists to prevent people using plane 0 - * NOTE: If we used SEE_BLACKNESS on a map format that wasn't SIDE_MAP, this is where its darkness would land - * This would allow us to control it and do fun things. But we can't because side map doesn't support it, so this is just a stub - */ -/atom/movable/screen/plane_master/default - name = "Default" - documentation = "This is quite fiddly, so bear with me. By default (in byond) everything in the game is rendered onto plane 0. It's the default plane. \ -
But, because we've moved everything we control off plane 0, all that's left is stuff byond internally renders. \ -
What I'd like to do with this is capture byond blackness by giving mobs the SEE_BLACKNESS sight flag. \ -
But we CAN'T because SEE_BLACKNESS does not work with our rendering format. So I just eat it I guess" - plane = DEFAULT_PLANE - multiz_scaled = FALSE - start_hidden = TRUE // Doesn't DO anything, exists to hold this place - -/atom/movable/screen/plane_master/area - name = "Area" - documentation = "Holds the areas themselves, which ends up meaning it holds any overlays/effects we apply to areas. NOT snow or rad storms, those go on above lighting" - plane = AREA_PLANE - -/atom/movable/screen/plane_master/massive_obj - name = "Massive object" - documentation = "Huge objects need to render above everything else on the game plane, otherwise they'd well, get clipped and look not that huge. This does that." - plane = MASSIVE_OBJ_PLANE - -/atom/movable/screen/plane_master/point - name = "Point" - documentation = "I mean like, what do you want me to say? Points draw over pretty much everything else, so they get their own plane. Remember we layer render relays to draw planes in their proper order on render plates." - plane = POINT_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -///Contains all turf lighting -/atom/movable/screen/plane_master/turf_lighting - name = "Turf Lighting" - documentation = "Contains all lighting drawn to turfs. Not so complex, draws directly onto the lighting plate." - plane = LIGHTING_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_LIGHTING) - blend_mode_override = BLEND_ADD - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - critical = PLANE_CRITICAL_DISPLAY - -/// This will not work through multiz, because of a byond bug with BLEND_MULTIPLY -/// Bug report is up, waiting on a fix -/atom/movable/screen/plane_master/o_light_visual - name = "Overlight light visual" - documentation = "Holds overlay lighting objects, or the sort of lighting that's a well, overlay stuck to something.\ -
Exists because lighting updating is really slow, and movement needs to feel smooth.\ -
We draw to the game plane, and mask out space for ourselves on the lighting plane so any color we have has the chance to display." - plane = O_LIGHTING_VISUAL_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_target = O_LIGHTING_VISUAL_RENDER_TARGET - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - blend_mode = BLEND_MULTIPLY - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/above_lighting - name = "Above lighting" - plane = ABOVE_LIGHTING_PLANE - documentation = "Anything on the game plane that needs a space to draw on that will be above the lighting plane.\ -
Mostly little alerts and effects, also sometimes contains things that are meant to look as if they glow." - -/** - * Handles emissive overlays and emissive blockers. - */ -/atom/movable/screen/plane_master/emissive - name = "Emissive" - documentation = "Holds things that will be used to mask the lighting plane later on. Masked by the Emissive Mask plane to ensure we don't emiss out under a wall.\ -
Relayed onto the Emissive render plane to do the actual masking of lighting, since we need to be transformed and other emissive stuff needs to be transformed too.\ -
Don't want to double scale now." - plane = EMISSIVE_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_relay_planes = list(EMISSIVE_RENDER_PLATE) - critical = PLANE_CRITICAL_DISPLAY - -/atom/movable/screen/plane_master/pipecrawl - name = "Pipecrawl" - documentation = "Holds pipecrawl images generated during well, pipecrawling.\ -
Has a few effects and a funky color matrix designed to make things a bit more visually readable." - plane = PIPECRAWL_IMAGES_PLANE - start_hidden = TRUE - -/atom/movable/screen/plane_master/pipecrawl/Initialize(mapload, datum/hud/hud_owner) - . = ..() - // Makes everything on this plane slightly brighter - // Has a nice effect, makes thing stand out - color = list(1.2,0,0,0, 0,1.2,0,0, 0,0,1.2,0, 0,0,0,1, 0,0,0,0) - // This serves a similar purpose, I want the pipes to pop - add_filter("pipe_dropshadow", 1, drop_shadow_filter(x = -1, y= -1, size = 1, color = "#0000007A")) - mirror_parent_hidden() - -/atom/movable/screen/plane_master/camera_static - name = "Camera static" - documentation = "Holds camera static images. Usually only visible to people who can well, see static.\ -
We use images rather then vis contents because they're lighter on maptick, and maptick sucks butt." - plane = CAMERA_STATIC_PLANE - -/atom/movable/screen/plane_master/camera_static/show_to(mob/mymob) - . = ..() - if(!.) - return - var/datum/hud/our_hud = home.our_hud - if(isnull(our_hud)) - return - - // We'll hide the slate if we're not seeing through a camera eye - // This can call on a cycle cause we don't clear in hide_from - // Yes this is the best way of hooking into the hud, I hate myself too - RegisterSignal(our_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed), override = TRUE) - eye_changed(our_hud, null, our_hud.mymob?.canon_client?.eye) - -/atom/movable/screen/plane_master/camera_static/proc/eye_changed(datum/hud/source, atom/old_eye, atom/new_eye) - SIGNAL_HANDLER - - if(!isaicamera(new_eye)) - if(!force_hidden) - hide_plane(source.mymob) - return - - if(force_hidden) - unhide_plane(source.mymob) - -/atom/movable/screen/plane_master/high_game - name = "High Game" - documentation = "Holds anything that wants to be displayed above the rest of the game plane, and doesn't want to be clickable. \ -
This includes atmos debug overlays, blind sound images, and mining scanners. \ -
Really only exists for its layering potential, we don't use this for any vfx" - plane = HIGH_GAME_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -/atom/movable/screen/plane_master/ghost - name = "Ghost" - documentation = "Ghosts draw here, so they don't get mixed up in the visuals of the game world. Note, this is not not how we HIDE ghosts from people, that's done with invisible and see_invisible." - plane = GHOST_PLANE - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/fullscreen - name = "Fullscreen" - documentation = "Holds anything that applies to or above the full screen. \ -
Note, it's still rendered underneath hud objects, but this lets us control the order that things like death/damage effects render in." - plane = FULLSCREEN_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/runechat - name = "Runechat" - documentation = "Holds runechat images, that text that pops up when someone say something. Uses a dropshadow to well, look nice." - plane = RUNECHAT_PLANE - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/runechat/show_to(mob/mymob) - . = ..() - if(!.) - return - remove_filter("AO") - if(istype(mymob) && mymob.canon_client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion)) - add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA")) - -/atom/movable/screen/plane_master/balloon_chat - name = "Balloon chat" - documentation = "Holds ballon chat images, those little text bars that pop up for a second when you do some things. NOT runechat." - plane = BALLOON_CHAT_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - -/atom/movable/screen/plane_master/hud - name = "HUD" - documentation = "Contains anything that want to be rendered on the hud. Typically is just screen elements." - plane = HUD_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/above_hud - name = "Above HUD" - documentation = "Anything that wants to be drawn ABOVE the rest of the hud. Typically close buttons and other elements that need to be always visible. Think preventing draggable action button memes." - plane = ABOVE_HUD_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/splashscreen - name = "Splashscreen" - documentation = "Cinematics and the splash screen." - plane = SPLASHSCREEN_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_NON_GAME) - allows_offsetting = FALSE - -/atom/movable/screen/plane_master/escape_menu - name = "Escape Menu" - documentation = "Anything relating to the escape menu." - plane = ESCAPE_MENU_PLANE - appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR - render_relay_planes = list(RENDER_PLANE_MASTER) - allows_offsetting = FALSE diff --git a/code/_onclick/hud/rendering/plane_masters/_plane_master.dm b/code/_onclick/hud/rendering/plane_masters/_plane_master.dm new file mode 100644 index 00000000000..13f94fa9f5a --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/_plane_master.dm @@ -0,0 +1,236 @@ +// I hate this place +INITIALIZE_IMMEDIATE(/atom/movable/screen/plane_master) + +/atom/movable/screen/plane_master + screen_loc = "CENTER" + icon_state = "blank" + appearance_flags = PLANE_MASTER + blend_mode = BLEND_OVERLAY + plane = LOWEST_EVER_PLANE + /// Will be sent to the debug ui as a description for each plane + /// Also useful as a place to explain to coders how/why your plane works, and what it's meant to do + /// Plaintext and basic html are fine to use here. + /// I'll bonk you if I find you putting "lmao stuff" in here, make this useful. + var/documentation = "" + /// Our real alpha value, so alpha can persist through being hidden/shown + var/true_alpha = 255 + /// Tracks if we're using our true alpha, or being manipulated in some other way + var/alpha_enabled = TRUE + + /// The plane master group we're a member of, our "home" + var/datum/plane_master_group/home + + /// If our plane master allows for offsetting + /// Mostly used for planes that really don't need to be duplicated, like the hud planes + var/allows_offsetting = TRUE + /// Our offset from our "true" plane, see below + var/offset + /// When rendering multiz, lower levels get their own set of plane masters + /// Real plane here represents the "true" plane value of something, ignoring the offset required to handle lower levels + var/real_plane + + //--rendering relay vars-- + /// list of planes we will relay this plane's render to + var/list/render_relay_planes = list(RENDER_PLANE_GAME) + /// blend mode to apply to the render relay in case you dont want to use the plane_masters blend_mode + var/blend_mode_override + /// list of current relays this plane is utilizing to render + var/list/atom/movable/render_plane_relay/relays = list() + /// if render relays have already be generated + var/relays_generated = FALSE + + /// If this plane master should be hidden from the player at roundstart + /// We do this so PMs can opt into being temporary, to reduce load on clients + var/start_hidden = FALSE + /// If this plane master is being forced to hide. + /// Hidden PMs will dump ANYTHING relayed or drawn onto them. Be careful with this + /// Remember: a hidden plane master will dump anything drawn directly to it onto the output render. It does NOT hide its contents + /// Use alpha for that + var/force_hidden = FALSE + + /// If this plane should be scaled by multiz + /// Planes with this set should NEVER be relay'd into each other, as that will cause visual fuck + var/multiz_scaled = TRUE + + /// Bitfield that describes how this plane master will render if its z layer is being "optimized" + /// If a plane master is NOT critical, it will be completely dropped if we start to render outside a client's multiz boundary prefs + /// Of note: most of the time we will relay renders to non critical planes in this stage. so the plane master will end up drawing roughly "in order" with its friends + /// This is NOT done for parallax and other problem children, because the rules of BLEND_MULTIPLY appear to not behave as expected :( + /// This will also just make debugging harder, because we do fragile things in order to ensure things operate as epected. I'm sorry + /// Compile time + /// See [code\__DEFINES\layers.dm] for our bitflags + var/critical = NONE + + /// If this plane master is outside of our visual bounds right now + var/is_outside_bounds = FALSE + +/atom/movable/screen/plane_master/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset = 0) + . = ..() + src.offset = offset + true_alpha = alpha + real_plane = plane + + if(!set_home(home)) + return INITIALIZE_HINT_QDEL + update_offset() + if(!documentation && !(istype(src, /atom/movable/screen/plane_master) || istype(src, /atom/movable/screen/plane_master/rendering_plate))) + stack_trace("Plane master created without a description. Document how your thing works so people will know in future, and we can display it in the debug menu") + if(start_hidden) + hide_plane(home.our_hud?.mymob) + generate_render_relays() + +/atom/movable/screen/plane_master/Destroy() + if(home) + // NOTE! We do not clear ourselves from client screens + // We relay on whoever qdel'd us to reset our hud, and properly purge us + home.plane_masters -= "[plane]" + home = null + . = ..() + QDEL_LIST(relays) + +/// Sets the plane group that owns us, it also determines what screen we render to +/// Returns FALSE if the set_home fails, TRUE otherwise +/atom/movable/screen/plane_master/proc/set_home(datum/plane_master_group/home) + if(!istype(home, /datum/plane_master_group)) + return FALSE + src.home = home + if(home.map) + screen_loc = "[home.map]:[screen_loc]" + assigned_map = home.map + return TRUE + +/// Updates our "offset", basically what layer of multiz we're meant to render +/// Top is 0, goes up as you go down +/// It's taken into account by render targets and relays, so we gotta make sure they're on the same page +/atom/movable/screen/plane_master/proc/update_offset() + name = "[initial(name)] #[offset]" + SET_PLANE_W_SCALAR(src, real_plane, offset) + for(var/i in 1 to length(render_relay_planes)) + render_relay_planes[i] = GET_NEW_PLANE(render_relay_planes[i], offset) + if(initial(render_target)) + render_target = OFFSET_RENDER_TARGET(initial(render_target), offset) + +/atom/movable/screen/plane_master/proc/set_alpha(new_alpha) + true_alpha = new_alpha + if(!alpha_enabled) + return + alpha = new_alpha + +/atom/movable/screen/plane_master/proc/disable_alpha() + alpha_enabled = FALSE + alpha = 0 + +/atom/movable/screen/plane_master/proc/enable_alpha() + alpha_enabled = TRUE + alpha = true_alpha + +/// Shows a plane master to the passed in mob +/// Override this to apply unique effects and such +/// Returns TRUE if the call is allowed, FALSE otherwise +/atom/movable/screen/plane_master/proc/show_to(mob/mymob) + SHOULD_CALL_PARENT(TRUE) + if(force_hidden) + return FALSE + + var/client/our_client = mymob?.canon_client + // Alright, let's get this out of the way + // Mobs can move z levels without their client. If this happens, we need to ensure critical display settings are respected + // This is done here. Mild to severe pain but it's nessesary + if(check_outside_bounds()) + if(!(critical & PLANE_CRITICAL_DISPLAY)) + return FALSE + if(!our_client) + return TRUE + our_client.screen += src + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + our_client.screen += relays + return TRUE + return TRUE + + if(!our_client) + return TRUE + + our_client.screen += src + our_client.screen += relays + return TRUE + +/// Hook to allow planes to work around is_outside_bounds +/// Return false to allow a show, true otherwise +/atom/movable/screen/plane_master/proc/check_outside_bounds() + return is_outside_bounds + +/// Hides a plane master from the passeed in mob +/// Do your effect cleanup here +/atom/movable/screen/plane_master/proc/hide_from(mob/oldmob) + SHOULD_CALL_PARENT(TRUE) + var/client/their_client = oldmob?.client + if(!their_client) + return + their_client.screen -= src + their_client.screen -= relays + + +/// Forces this plane master to hide, until unhide_plane is called +/// This allows us to disable unused PMs without breaking anything else +/atom/movable/screen/plane_master/proc/hide_plane(mob/cast_away) + force_hidden = TRUE + hide_from(cast_away) + +/// Disables any forced hiding, allows the plane master to be used as normal +/atom/movable/screen/plane_master/proc/unhide_plane(mob/enfold) + force_hidden = FALSE + show_to(enfold) + +/// Mirrors our force hidden state to the hidden state of the plane that came before, assuming it's valid +/// This allows us to mirror any hidden sets from before we were created, no matter how low that chance is +/atom/movable/screen/plane_master/proc/mirror_parent_hidden() + var/mob/our_mob = home?.our_hud?.mymob + var/atom/movable/screen/plane_master/true_plane = our_mob?.hud_used?.get_plane_master(plane) + if(true_plane == src || !true_plane) + return + + if(true_plane.force_hidden == force_hidden) + return + + // If one of us already exists and it's not hidden, unhide ourselves + if(true_plane.force_hidden) + hide_plane(our_mob) + else + unhide_plane(our_mob) + +/atom/movable/screen/plane_master/proc/outside_bounds(mob/relevant) + if(force_hidden || is_outside_bounds) + return + is_outside_bounds = TRUE + // If we're of critical importance, AND we're below the rendering layer + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = copytext_char(render_target, 2) + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen -= relay + + return + hide_from(relevant) + +/atom/movable/screen/plane_master/proc/inside_bounds(mob/relevant) + is_outside_bounds = FALSE + if(critical & PLANE_CRITICAL_DISPLAY) + // We here assume that your render target starts with * + if(critical & PLANE_CRITICAL_CUT_RENDER && render_target) + render_target = "*[render_target]" + + if(!(critical & PLANE_CRITICAL_NO_RELAY)) + return + var/client/our_client = relevant.client + if(our_client) + for(var/atom/movable/render_plane_relay/relay as anything in relays) + our_client.screen += relay + + return + show_to(relevant) diff --git a/code/_onclick/hud/rendering/plane_masters/camera_static.dm b/code/_onclick/hud/rendering/plane_masters/camera_static.dm new file mode 100644 index 00000000000..4cb3436a7a4 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/camera_static.dm @@ -0,0 +1,30 @@ +/atom/movable/screen/plane_master/camera_static + name = "Camera static" + documentation = "Holds camera static images. Usually only visible to people who can well, see static.\ +
We use images rather then vis contents because they're lighter on maptick, and maptick sucks butt." + plane = CAMERA_STATIC_PLANE + +/atom/movable/screen/plane_master/camera_static/show_to(mob/mymob) + . = ..() + if(!.) + return + var/datum/hud/our_hud = home.our_hud + if(isnull(our_hud)) + return + + // We'll hide the slate if we're not seeing through a camera eye + // This can call on a cycle cause we don't clear in hide_from + // Yes this is the best way of hooking into the hud, I hate myself too + RegisterSignal(our_hud, COMSIG_HUD_EYE_CHANGED, PROC_REF(eye_changed), override = TRUE) + eye_changed(our_hud, null, our_hud.mymob?.canon_client?.eye) + +/atom/movable/screen/plane_master/camera_static/proc/eye_changed(datum/hud/source, atom/old_eye, atom/new_eye) + SIGNAL_HANDLER + + if(!isaicamera(new_eye)) + if(!force_hidden) + hide_plane(source.mymob) + return + + if(force_hidden) + unhide_plane(source.mymob) diff --git a/code/_onclick/hud/rendering/plane_masters/clickcatcher.dm b/code/_onclick/hud/rendering/plane_masters/clickcatcher.dm new file mode 100644 index 00000000000..8e581dc081c --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/clickcatcher.dm @@ -0,0 +1,20 @@ +/atom/movable/screen/plane_master/clickcatcher + name = "Click Catcher" + documentation = "Contains the screen object we use as a backdrop to catch clicks on portions of the screen that would otherwise contain nothing else. \ +
Will always be below almost everything else" + plane = CLICKCATCHER_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + multiz_scaled = FALSE + critical = PLANE_CRITICAL_DISPLAY + +/atom/movable/screen/plane_master/clickcatcher/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(offset_increased)) + offset_increased(SSmapping, 0, SSmapping.max_plane_offset) + +/atom/movable/screen/plane_master/clickcatcher/proc/offset_increased(datum/source, old_off, new_off) + SIGNAL_HANDLER + // We only want need the lowest level + // If my system better supported changing PM plane values mid op I'd do that, but I do NOT so + if(new_off > offset) + hide_plane(home?.our_hud?.mymob) diff --git a/code/_onclick/hud/rendering/plane_masters/core_game_planes.dm b/code/_onclick/hud/rendering/plane_masters/core_game_planes.dm new file mode 100644 index 00000000000..89379070b35 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/core_game_planes.dm @@ -0,0 +1,122 @@ +//-------------------- FLOOR PLANE -------------------- + +///Contains just the floor +/atom/movable/screen/plane_master/floor + name = "Floor" + documentation = "The well, floor. This is mostly used as a sorting mechanism, but it also lets us create a \"border\" around the game world plane, so its drop shadow will actually work." + plane = FLOOR_PLANE + render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) + +/atom/movable/screen/plane_master/transparent_floor + name = "Transparent Floor" + documentation = "Really just openspace, stuff that is a turf but has no color or alpha whatsoever.\ +
We use this to draw to just the light mask plane, cause if it's not there we get holes of blackness over openspace" + plane = TRANSPARENT_FLOOR_PLANE + render_relay_planes = list(LIGHT_MASK_PLANE) + // Needs to be critical or it uh, it'll look white + critical = PLANE_CRITICAL_DISPLAY|PLANE_CRITICAL_NO_RELAY + +/atom/movable/screen/plane_master/floor/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_FLOOR_LAYER, relay_color = GLOB.em_block_color) + +//-------------------- WALL PLANE -------------------- + +/atom/movable/screen/plane_master/wall + name = "Wall" + documentation = "Holds all walls. We render this onto the game world. Separate so we can use this + space and floor planes as a guide for where byond blackness is NOT." + plane = WALL_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) + +/atom/movable/screen/plane_master/wall/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) + +/atom/movable/screen/plane_master/wall_upper + name = "Upper wall" + documentation = "There are some walls that want to render above most things (mostly minerals since they shift over.\ +
We draw them to their own plane so we can hijack them for our emissive mask stuff" + plane = WALL_PLANE_UPPER + render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE) + +/atom/movable/screen/plane_master/wall_upper/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color) + +//-------------------- AREA PLANE -------------------- + +/atom/movable/screen/plane_master/area + name = "Area" + documentation = "Holds the areas themselves, which ends up meaning it holds any overlays/effects we apply to areas. NOT snow or rad storms, those go on above lighting" + plane = AREA_PLANE + +//-------------------- GAME PLANES -------------------- + +/atom/movable/screen/plane_master/game + name = "Lower game world" + documentation = "Exists mostly because of FOV shit. Basically, if you've just got a normal not ABOVE fov thing, and you don't want it masked, stick it here yeah?" + plane = GAME_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/high_game + name = "High Game" + documentation = "Holds anything that wants to be displayed above the rest of the game plane, and doesn't want to be clickable. \ +
This includes atmos debug overlays, blind sound images, and mining scanners. \ +
Really only exists for its layering potential, we don't use this for any vfx" + plane = HIGH_GAME_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +//-------------------- FOV PLANES -------------------- + +/atom/movable/screen/plane_master/game_world_fov_hidden + name = "lower game world fov hidden" + documentation = "If you want something to be hidden by fov, stick it on this plane. We're masked by the fov blocker plane, so the items on us can actually well, disappear." + plane = GAME_PLANE_FOV_HIDDEN + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/game_world_fov_hidden/Initialize(mapload, datum/hud/hud_owner) + . = ..() + add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) + +/atom/movable/screen/plane_master/field_of_vision_blocker + name = "Field of vision blocker" + documentation = "This is one of those planes that's only used as a filter. It masks out things that want to be hidden by fov.\ +
Literally just contains FOV images, or masks." + plane = FIELD_OF_VISION_BLOCKER_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list() + // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently + allows_offsetting = FALSE + start_hidden = TRUE + // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us. + // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER + multiz_scaled = FALSE + +/atom/movable/screen/plane_master/field_of_vision_blocker/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + mirror_parent_hidden() + +/atom/movable/screen/plane_master/game_world_above + name = "Above game world" + documentation = "We need a place that's unmasked by fov that also draws above the upper game world fov hidden plane. I told you fov was hacky man." + plane = ABOVE_GAME_PLANE + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/game_world_upper + name = "Upper game world" + documentation = "Ok so fov is kinda fucky, because planes in byond serve both as effect groupings and as rendering orderers. Since that's true, we need a plane that we can stick stuff that draws above fov blocked stuff on." + plane = GAME_PLANE_UPPER + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/game_world_upper_fov_hidden + name = "Upper game world fov hidden" + documentation = "Just as we need a place to draw things \"above\" the hidden fov plane, we also need to be able to hide stuff that draws over the upper game plane." + plane = GAME_PLANE_UPPER_FOV_HIDDEN + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + +/atom/movable/screen/plane_master/game_world_upper_fov_hidden/Initialize(mapload, datum/hud/hud_owner) + . = ..() + // Dupe of the other hidden plane + add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE)) diff --git a/code/_onclick/hud/rendering/plane_masters/default.dm b/code/_onclick/hud/rendering/plane_masters/default.dm new file mode 100644 index 00000000000..f4f49f5bdd8 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/default.dm @@ -0,0 +1,15 @@ +/** + * Plane master that byond will by default draw to + * Shouldn't be used, exists to prevent people using plane 0 + * NOTE: If we used SEE_BLACKNESS on a map format that wasn't SIDE_MAP, this is where its darkness would land + * This would allow us to control it and do fun things. But we can't because side map doesn't support it, so this is just a stub + */ +/atom/movable/screen/plane_master/default + name = "Default" + documentation = "This is quite fiddly, so bear with me. By default (in byond) everything in the game is rendered onto plane 0. It's the default plane. \ +
But, because we've moved everything we control off plane 0, all that's left is stuff byond internally renders. \ +
What I'd like to do with this is capture byond blackness by giving mobs the SEE_BLACKNESS sight flag. \ +
But we CAN'T because SEE_BLACKNESS does not work with our rendering format. So I just eat it I guess" + plane = DEFAULT_PLANE + multiz_scaled = FALSE + start_hidden = TRUE // Doesn't DO anything, exists to hold this place diff --git a/code/_onclick/hud/rendering/plane_masters/in_world_chat.dm b/code/_onclick/hud/rendering/plane_masters/in_world_chat.dm new file mode 100644 index 00000000000..bc7d327b8fb --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/in_world_chat.dm @@ -0,0 +1,20 @@ +/atom/movable/screen/plane_master/runechat + name = "Runechat" + documentation = "Holds runechat images, that text that pops up when someone say something. Uses a dropshadow to well, look nice." + plane = RUNECHAT_PLANE + render_relay_planes = list(RENDER_PLANE_NON_GAME) + +/atom/movable/screen/plane_master/runechat/show_to(mob/mymob) + . = ..() + if(!.) + return + remove_filter("AO") + if(istype(mymob) && mymob.canon_client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion)) + add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA")) + +/atom/movable/screen/plane_master/balloon_chat + name = "Balloon chat" + documentation = "Holds ballon chat images, those little text bars that pop up for a second when you do some things. NOT runechat." + plane = BALLOON_CHAT_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) diff --git a/code/_onclick/hud/rendering/plane_masters/lighting.dm b/code/_onclick/hud/rendering/plane_masters/lighting.dm new file mode 100644 index 00000000000..2ac4139b78f --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/lighting.dm @@ -0,0 +1,44 @@ +///Contains all turf lighting +/atom/movable/screen/plane_master/turf_lighting + name = "Turf Lighting" + documentation = "Contains all lighting drawn to turfs. Not so complex, draws directly onto the lighting plate." + plane = LIGHTING_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_LIGHTING) + blend_mode_override = BLEND_ADD + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + critical = PLANE_CRITICAL_DISPLAY + +/// This will not work through multiz, because of a byond bug with BLEND_MULTIPLY +/// Bug report is up, waiting on a fix +/atom/movable/screen/plane_master/o_light_visual + name = "Overlight light visual" + documentation = "Holds overlay lighting objects, or the sort of lighting that's a well, overlay stuck to something.\ +
Exists because lighting updating is really slow, and movement needs to feel smooth.\ +
We draw to the game plane, and mask out space for ourselves on the lighting plane so any color we have has the chance to display." + plane = O_LIGHTING_VISUAL_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_target = O_LIGHTING_VISUAL_RENDER_TARGET + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + blend_mode = BLEND_MULTIPLY + critical = PLANE_CRITICAL_DISPLAY + +/atom/movable/screen/plane_master/above_lighting + name = "Above lighting" + plane = ABOVE_LIGHTING_PLANE + documentation = "Anything on the game plane that needs a space to draw on that will be above the lighting plane.\ +
Mostly little alerts and effects, also sometimes contains things that are meant to look as if they glow." + +/** + * Handles emissive overlays and emissive blockers. + */ +/atom/movable/screen/plane_master/emissive + name = "Emissive" + documentation = "Holds things that will be used to mask the lighting plane later on. Masked by the Emissive Mask plane to ensure we don't emiss out under a wall.\ +
Relayed onto the Emissive render plane to do the actual masking of lighting, since we need to be transformed and other emissive stuff needs to be transformed too.\ +
Don't want to double scale now." + plane = EMISSIVE_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list(EMISSIVE_RENDER_PLATE) + critical = PLANE_CRITICAL_DISPLAY diff --git a/code/_onclick/hud/rendering/plane_masters/parallax.dm b/code/_onclick/hud/rendering/plane_masters/parallax.dm new file mode 100644 index 00000000000..ee49ab17700 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/parallax.dm @@ -0,0 +1,105 @@ +/atom/movable/screen/plane_master/parallax_white + name = "Parallax whitifier" + documentation = "Essentially a backdrop for the parallax plane. We're rendered just below it, so we'll be multiplied by its well, parallax.\ +
If you want something to look as if it has parallax on it, draw it to this plane." + plane = PLANE_SPACE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_GAME, LIGHT_MASK_PLANE) + critical = PLANE_CRITICAL_FUCKO_PARALLAX // goes funny when touched. no idea why I don't trust byond + +/atom/movable/screen/plane_master/parallax_white/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_SPACE_LAYER) + +///Contains space parallax +/atom/movable/screen/plane_master/parallax + name = "Parallax" + documentation = "Contains parallax, or to be more exact the screen objects that hold parallax.\ +
Note the BLEND_MULTIPLY. The trick here is how low our plane value is. Because of that, we draw below almost everything in the game.\ +
We abuse this to ensure we multiply against the Parallax whitifier plane, or space's plane. It's set to full white, so when you do the multiply you just get parallax out where it well, makes sense to be.\ +
Also notice that the parent parallax plane is mirrored down to all children. We want to support viewing parallax across all z levels at once." + plane = PLANE_SPACE_PARALLAX + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_MULTIPLY + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + multiz_scaled = FALSE + +/atom/movable/screen/plane_master/parallax/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset) + . = ..() + if(offset != 0) + // You aren't the source? don't change yourself + return + RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(on_offset_increase)) + RegisterSignal(SSdcs, COMSIG_NARSIE_SUMMON_UPDATE, PROC_REF(narsie_modified)) + if(GLOB.narsie_summon_count >= 1) + narsie_start_midway(GLOB.narsie_effect_last_modified) // We assume we're on the start, so we can use this number + offset_increase(0, SSmapping.max_plane_offset) + +/atom/movable/screen/plane_master/parallax/proc/on_offset_increase(datum/source, old_offset, new_offset) + SIGNAL_HANDLER + offset_increase(old_offset, new_offset) + +/atom/movable/screen/plane_master/parallax/proc/offset_increase(old_offset, new_offset) + // Parallax will be mirrored down to any new planes that are added, so it will properly render across mirage borders + for(var/offset in old_offset to new_offset) + if(offset != 0) + // Overlay so we don't multiply twice, and thus fuck up our rendering + add_relay_to(GET_NEW_PLANE(plane, offset), BLEND_OVERLAY) + +// Hacky shit to ensure parallax works in perf mode +/atom/movable/screen/plane_master/parallax/outside_bounds(mob/relevant) + if(offset == 0) + remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) + is_outside_bounds = TRUE // I'm sorry :( + return + // If we can't render, and we aren't the bottom layer, don't render us + // This way we only multiply against stuff that's not fullwhite space + var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) + var/turf/viewing_turf = get_turf(relevant) + if(!viewing_turf || offset != GET_LOWEST_STACK_OFFSET(viewing_turf.z)) + parent_parallax.remove_relay_from(plane) + else + parent_parallax.add_relay_to(plane, BLEND_OVERLAY) + return ..() + +/atom/movable/screen/plane_master/parallax/inside_bounds(mob/relevant) + if(offset == 0) + add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME, 0)) + is_outside_bounds = FALSE + return + // Always readd, just in case we lost it + var/atom/movable/screen/plane_master/parent_parallax = home.our_hud.get_plane_master(PLANE_SPACE_PARALLAX) + parent_parallax.add_relay_to(plane, BLEND_OVERLAY) + return ..() + +// Needs to handle rejoining on a lower z level, so we NEED to readd old planes +/atom/movable/screen/plane_master/parallax/check_outside_bounds() + // If we're outside bounds AND we're the 0th plane, we need to show cause parallax is hacked to hell + return offset != 0 && is_outside_bounds + +/// Starts the narsie animation midway, so we can catch up to everyone else quickly +/atom/movable/screen/plane_master/parallax/proc/narsie_start_midway(start_time) + var/time_elapsed = world.time - start_time + narsie_summoned_effect(max(16 SECONDS - time_elapsed, 0)) + +/// Starts the narsie animation, make us grey, then red +/atom/movable/screen/plane_master/parallax/proc/narsie_modified(datum/source, new_count) + SIGNAL_HANDLER + if(new_count >= 1) + narsie_summoned_effect(16 SECONDS) + else + narsie_unsummoned() + +/atom/movable/screen/plane_master/parallax/proc/narsie_summoned_effect(animate_time) + if(GLOB.narsie_summon_count >= 2) + var/static/list/nightmare_parallax = list(255,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, -130,0,0,0) + animate(src, color = nightmare_parallax, time = animate_time) + return + + var/static/list/grey_parallax = list(0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0.4,0.4,0.4,0, 0,0,0,1, -0.1,-0.1,-0.1,0) + // We're gonna animate ourselves grey + // Then, once it's done, about 40 seconds into the event itself, we're gonna start doin some shit. see below + animate(src, color = grey_parallax, time = animate_time) + +/atom/movable/screen/plane_master/parallax/proc/narsie_unsummoned() + animate(src, color = null, time = 8 SECONDS) diff --git a/code/_onclick/hud/rendering/plane_masters/pipecrawl.dm b/code/_onclick/hud/rendering/plane_masters/pipecrawl.dm new file mode 100644 index 00000000000..cb75135e1a4 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/pipecrawl.dm @@ -0,0 +1,15 @@ +/atom/movable/screen/plane_master/pipecrawl + name = "Pipecrawl" + documentation = "Holds pipecrawl images generated during well, pipecrawling.\ +
Has a few effects and a funky color matrix designed to make things a bit more visually readable." + plane = PIPECRAWL_IMAGES_PLANE + start_hidden = TRUE + +/atom/movable/screen/plane_master/pipecrawl/Initialize(mapload, datum/hud/hud_owner) + . = ..() + // Makes everything on this plane slightly brighter + // Has a nice effect, makes thing stand out + color = list(1.2,0,0,0, 0,1.2,0,0, 0,0,1.2,0, 0,0,0,1, 0,0,0,0) + // This serves a similar purpose, I want the pipes to pop + add_filter("pipe_dropshadow", 1, drop_shadow_filter(x = -1, y= -1, size = 1, color = "#0000007A")) + mirror_parent_hidden() diff --git a/code/_onclick/hud/rendering/plane_masters/simple_plane_masters.dm b/code/_onclick/hud/rendering/plane_masters/simple_plane_masters.dm new file mode 100644 index 00000000000..ea0ad21a773 --- /dev/null +++ b/code/_onclick/hud/rendering/plane_masters/simple_plane_masters.dm @@ -0,0 +1,82 @@ +/* + * Put plane masters that are just a simple type def in here, anything more complex should get its own file + */ + +/atom/movable/screen/plane_master/gravpulse + name = "Gravpulse" + documentation = "Ok so this one's fun. Basically, we want to be able to distort the game plane when a grav annom is around.\ +
So we draw the pattern we want to use to this plane, and it's then used as a render target by a distortion filter on the game plane.\ +
Note the blend mode and lack of relay targets. This plane exists only to distort, it's never rendered anywhere." + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + plane = GRAVITY_PULSE_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + blend_mode = BLEND_ADD + render_target = GRAVITY_PULSE_RENDER_TARGET + render_relay_planes = list() + +/atom/movable/screen/plane_master/seethrough + name = "Seethrough" + documentation = "Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them." + plane = SEETHROUGH_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_relay_planes = list(RENDER_PLANE_GAME_WORLD) + start_hidden = TRUE + +/atom/movable/screen/plane_master/massive_obj + name = "Massive object" + documentation = "Huge objects need to render above everything else on the game plane, otherwise they'd well, get clipped and look not that huge. This does that." + plane = MASSIVE_OBJ_PLANE + +/atom/movable/screen/plane_master/point + name = "Point" + documentation = "I mean like, what do you want me to say? Points draw over pretty much everything else, so they get their own plane. Remember we layer render relays to draw planes in their proper order on render plates." + plane = POINT_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + +/atom/movable/screen/plane_master/ghost + name = "Ghost" + documentation = "Ghosts draw here, so they don't get mixed up in the visuals of the game world. Note, this is not not how we HIDE ghosts from people, that's done with invisible and see_invisible." + plane = GHOST_PLANE + render_relay_planes = list(RENDER_PLANE_NON_GAME) + +/atom/movable/screen/plane_master/fullscreen + name = "Fullscreen" + documentation = "Holds anything that applies to or above the full screen. \ +
Note, it's still rendered underneath hud objects, but this lets us control the order that things like death/damage effects render in." + plane = FULLSCREEN_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/hud + name = "HUD" + documentation = "Contains anything that want to be rendered on the hud. Typically is just screen elements." + plane = HUD_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/above_hud + name = "Above HUD" + documentation = "Anything that wants to be drawn ABOVE the rest of the hud. Typically close buttons and other elements that need to be always visible. Think preventing draggable action button memes." + plane = ABOVE_HUD_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/splashscreen + name = "Splashscreen" + documentation = "Cinematics and the splash screen." + plane = SPLASHSCREEN_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_NON_GAME) + allows_offsetting = FALSE + +/atom/movable/screen/plane_master/escape_menu + name = "Escape Menu" + documentation = "Anything relating to the escape menu." + plane = ESCAPE_MENU_PLANE + appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR + render_relay_planes = list(RENDER_PLANE_MASTER) + allows_offsetting = FALSE diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 2c2c768c1af..966e6032eca 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -15,8 +15,8 @@ animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT appearance_flags = APPEARANCE_UI - /// A reference to the object in the slot. Grabs or items, generally. - var/obj/master = null + /// A reference to the object in the slot. Grabs or items, generally, but any datum will do. + var/datum/weakref/master_ref = null /// A reference to the owner HUD, if any. var/datum/hud/hud = null // BUBBER EDIT - Unprivate this for hot editing. /** @@ -42,7 +42,7 @@ hud = hud_owner /atom/movable/screen/Destroy() - master = null + master_ref = null hud = null return ..() @@ -249,10 +249,12 @@ /atom/movable/screen/close/Initialize(mapload, datum/hud/hud_owner, new_master) . = ..() - master = new_master + master_ref = WEAKREF(new_master) /atom/movable/screen/close/Click() - var/datum/storage/storage = master + var/datum/storage/storage = master_ref?.resolve() + if(!storage) + return storage.hide_contents(usr) return TRUE @@ -394,10 +396,10 @@ /atom/movable/screen/storage/Initialize(mapload, datum/hud/hud_owner, new_master) . = ..() - master = new_master + master_ref = WEAKREF(new_master) /atom/movable/screen/storage/Click(location, control, params) - var/datum/storage/storage_master = master + var/datum/storage/storage_master = master_ref?.resolve() if(!istype(storage_master)) return FALSE diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b3d15e0c476..213e3dae195 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -257,32 +257,154 @@ CRASH("areas are NOT supposed to have attacked_by() called on them!") /mob/living/attacked_by(obj/item/attacking_item, mob/living/user) - send_item_attack_message(attacking_item, user) - if(!attacking_item.force) - return FALSE + + var/targeting = check_zone(user.zone_selected) + if(user != src) + var/zone_hit_chance = 80 + if(body_position == LYING_DOWN) + zone_hit_chance += 10 + targeting = get_random_valid_zone(targeting, zone_hit_chance) + var/targeting_human_readable = parse_zone(targeting) + + send_item_attack_message(attacking_item, user, targeting_human_readable, targeting) + + var/armor_block = min(run_armor_check( + def_zone = targeting, + attack_flag = MELEE, + absorb_text = span_notice("Your armor has protected your [targeting_human_readable]!"), + soften_text = span_warning("Your armor has softened a hit to your [targeting_human_readable]!"), + armour_penetration = attacking_item.armour_penetration, + weak_against_armour = attacking_item.weak_against_armour, + ), ARMOR_MAX_BLOCK) + var/damage = attacking_item.force if(mob_biotypes & MOB_ROBOTIC) damage *= attacking_item.demolition_mod - apply_damage(damage, attacking_item.damtype, attacking_item = attacking_item) - if(attacking_item.damtype == BRUTE && prob(33)) + + var/wounding = attacking_item.wound_bonus + if((attacking_item.item_flags & SURGICAL_TOOL) && !user.combat_mode && body_position == LYING_DOWN && (LAZYLEN(surgeries) > 0)) + wounding = CANT_WOUND + + if(user != src) + // This doesn't factor in armor, or most damage modifiers (physiology). Your mileage may vary + if(check_block(attacking_item, damage, "the [attacking_item.name]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype)) + return FALSE + + SEND_SIGNAL(attacking_item, COMSIG_ITEM_ATTACK_ZONE, src, user, targeting) + + if(damage <= 0) + return FALSE + + if(ishuman(src) || client) // istype(src) is kinda bad, but it's to avoid spamming the blackbox + SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[attacking_item.force]", "[attacking_item.type]")) + SSblackbox.record_feedback("tally", "zone_targeted", 1, targeting_human_readable) + + var/damage_done = apply_damage( + damage = damage, + damagetype = attacking_item.damtype, + def_zone = targeting, + blocked = armor_block, + wound_bonus = wounding, + bare_wound_bonus = attacking_item.bare_wound_bonus, + sharpness = attacking_item.get_sharpness(), + attack_direction = get_dir(user, src), + attacking_item = attacking_item, + ) + + attack_effects(damage_done, targeting, armor_block, attacking_item, user) + + return TRUE + +/** + * Called when we take damage, used to cause effects such as a blood splatter. + * + * Return TRUE if an effect was done, FALSE otherwise. + */ +/mob/living/proc/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype == BRUTE && prob(25 + damage_done * 2)) attacking_item.add_mob_blood(src) - var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(src) - return TRUE //successful attack + add_splatter_floor(get_turf(src)) + if(get_dist(attacker, src) <= 1) + attacker.add_mob_blood(src) + return TRUE -/mob/living/simple_animal/attacked_by(obj/item/I, mob/living/user) - if(!attack_threshold_check(I.force, I.damtype, MELEE, FALSE)) - playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), TRUE, -1) - else - return ..() + return FALSE -/mob/living/basic/attacked_by(obj/item/I, mob/living/user) - if(!attack_threshold_check(I.force, I.damtype, MELEE, FALSE)) - playsound(loc, 'sound/weapons/tap.ogg', I.get_clamped_volume(), TRUE, -1) - else - return ..() +/mob/living/silicon/robot/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + spark_system.start() + . = TRUE + return ..() || . + +/mob/living/silicon/ai/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + spark_system.start() + . = TRUE + return ..() || . + +/mob/living/carbon/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + var/obj/item/bodypart/hit_bodypart = get_bodypart(hit_zone) || bodyparts[1] + if(!hit_bodypart.can_bleed()) + return FALSE + + return ..() + +/mob/living/carbon/human/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + . = ..() + switch(hit_zone) + if(BODY_ZONE_HEAD) + if(.) + if(wear_mask) + wear_mask.add_mob_blood(src) + update_worn_mask() + if(head) + head.add_mob_blood(src) + update_worn_head() + if(glasses && prob(33)) + glasses.add_mob_blood(src) + update_worn_glasses() + + if(!attacking_item.get_sharpness() && armor_block < 50) + if(prob(damage_done)) + adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) + if(stat == CONSCIOUS) + visible_message( + span_danger("[src] is knocked senseless!"), + span_userdanger("You're knocked senseless!"), + ) + set_confusion_if_lower(20 SECONDS) + adjust_eye_blur(20 SECONDS) + if(prob(10)) + gain_trauma(/datum/brain_trauma/mild/concussion) + else + adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_done * 0.2) + + // rev deconversion through blunt trauma. + // this can be signalized to the rev datum + if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((maxHealth - health) * 0.5))) // SKYRAT EDIT CHANGE - ORIGINAL : if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((100 - health) * 0.5))) + var/datum/antagonist/rev/rev = mind.has_antag_datum(/datum/antagonist/rev) + rev?.remove_revolutionary(attacker) + + if(BODY_ZONE_CHEST) + if(.) + if(wear_suit) + wear_suit.add_mob_blood(src) + update_worn_oversuit() + if(w_uniform) + w_uniform.add_mob_blood(src) + update_worn_undersuit() + + if(stat == CONSCIOUS && !attacking_item.get_sharpness() && armor_block < 50) + if(prob(damage_done)) + visible_message( + span_danger("[src] is knocked down!"), + span_userdanger("You're knocked down!"), + ) + apply_effect(6 SECONDS, EFFECT_KNOCKDOWN, armor_block) + + // Triggers force say events + if(damage_done > 10 || (damage_done >= 5 && prob(33))) + force_say() /** * Last proc in the [/obj/item/proc/melee_attack_chain]. @@ -335,7 +457,7 @@ else return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 -/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area, obj/item/bodypart/hit_bodypart) +/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area, def_zone) if(!I.force && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous)) return var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 46ca2f53904..f398a5c0343 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -169,6 +169,9 @@ /mob/living/proc/resolve_right_click_attack(atom/target, list/modifiers) return target.attack_animal_secondary(src, modifiers) +/** + * Called when a simple animal is unarmed attacking / clicking on this atom. + */ /atom/proc/attack_animal(mob/user, list/modifiers) SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 3de27ee7e10..c0ef2b6001f 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -110,6 +110,8 @@ /obj/item/tk_grab/Destroy() STOP_PROCESSING(SSfastprocess, src) + if(!QDELETED(focus)) + REMOVE_TRAIT(focus, TRAIT_TELEKINESIS_CONTROLLED, REF(tk_user)) focus = null tk_user = null return ..() @@ -259,6 +261,7 @@ if(!check_if_focusable(target)) return focus = target + ADD_TRAIT(focus, TRAIT_TELEKINESIS_CONTROLLED, REF(tk_user)) update_appearance() apply_focus_overlay() return TRUE diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index ddcdf867413..f93ab6e09f6 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -5,39 +5,94 @@ SUBSYSTEM_DEF(chat) name = "Chat" - flags = SS_TICKER + flags = SS_TICKER|SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_CHAT init_order = INIT_ORDER_CHAT - var/list/payload_by_client = list() + /// Assosciates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() -/datum/controller/subsystem/chat/Initialize() - // Just used by chat system to know that initialization is nearly finished. - // The to_chat checks could probably check the runlevel instead, but would require testing. - return SS_INIT_SUCCESS + /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Assosciates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) /datum/controller/subsystem/chat/fire() - for(var/key in payload_by_client) - var/client/client = key - var/payload = payload_by_client[key] - payload_by_client -= key - if(client) - // Send to tgchat - client.tgui_panel?.window.send_message("chat/message", payload) - // Send to old chat - for(var/message in payload) - SEND_TEXT(client, message_to_html(message)) + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + if(MC_TICK_CHECK) return -/datum/controller/subsystem/chat/proc/queue(target, message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - LAZYADD(payload_by_client[client], list(message)) +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - LAZYADD(payload_by_client[client], list(message)) + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) + SSblackbox.record_feedback( + "nested tally", + "chat_resend_byond_version", + 1, + list( + "[client.byond_version]", + "[client.byond_build]", + ), + ) diff --git a/code/controllers/subsystem/circuit_component.dm b/code/controllers/subsystem/circuit_component.dm index 3ef1be5a3aa..bae302ed9d0 100644 --- a/code/controllers/subsystem/circuit_component.dm +++ b/code/controllers/subsystem/circuit_component.dm @@ -39,7 +39,7 @@ SUBSYSTEM_DEF(circuit_component) * Those that registered first will be executed first and those registered last will be executed last. */ /datum/controller/subsystem/circuit_component/proc/add_callback(datum/port/input, datum/callback/to_call) - if(instant_run_tick == world.time && (TICK_USAGE - instant_run_start_cpu_usage) < instant_run_max_cpu_usage) + if(instant_run_tick == world.time && (TICK_USAGE - instant_run_start_cpu_usage) <= instant_run_max_cpu_usage) instant_run_callbacks_to_run += to_call return @@ -80,7 +80,7 @@ SUBSYSTEM_DEF(circuit_component) else instant_run_tick = 0 - if((TICK_USAGE - instant_run_start_cpu_usage) < instant_run_max_cpu_usage) + if((TICK_USAGE - instant_run_start_cpu_usage) <= instant_run_max_cpu_usage) return received_inputs else return null diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 511a438bf9a..f047d17d944 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -53,10 +53,6 @@ SUBSYSTEM_DEF(economy) */ var/list/audit_log = list() - /// Total value of exported materials. - var/export_total = 0 - /// Total value of imported goods. - var/import_total = 0 /// Number of mail items generated. var/mail_waiting = 0 /// Mail Holiday: AKA does mail arrive today? Always blocked on Sundays. diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 88112f93226..d21e2da97d2 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -359,75 +359,80 @@ SUBSYSTEM_DEF(garbage) /datum/qdel_item/New(mytype) name = "[mytype]" - /// Should be treated as a replacement for the 'del' keyword. /// /// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(datum/D, force=FALSE, ...) - if(!istype(D)) - del(D) +/proc/qdel(datum/to_delete, force = FALSE, ...) + if(!istype(to_delete)) + del(to_delete) return - var/datum/qdel_item/I = SSgarbage.items[D.type] - if (!I) - I = SSgarbage.items[D.type] = new /datum/qdel_item(D.type) - I.qdels++ + var/datum/qdel_item/trash = SSgarbage.items[to_delete.type] + if (isnull(trash)) + trash = SSgarbage.items[to_delete.type] = new /datum/qdel_item(to_delete.type) + trash.qdels++ - if(isnull(D.gc_destroyed)) - if (SEND_SIGNAL(D, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + if(!isnull(to_delete.gc_destroyed)) + if(to_delete.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[to_delete.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + return + + if (SEND_SIGNAL(to_delete, COMSIG_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + return + + to_delete.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/start_tick = world.tick_usage + SEND_SIGNAL(to_delete, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy + var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. + + if(world.time != start_time) + trash.slept_destroy++ + else + trash.destroy_time += TICK_USAGE_TO_MS(start_tick) + + if(isnull(to_delete)) + return + + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.Queue(to_delete) + if (QDEL_HINT_IWILLGC) + to_delete.gc_destroyed = world.time return - D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED - var/start_time = world.time - var/start_tick = world.tick_usage - SEND_SIGNAL(D, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy - var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - if(world.time != start_time) - I.slept_destroy++ - else - I.destroy_time += TICK_USAGE_TO_MS(start_tick) - if(!D) - return - switch(hint) - if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. - SSgarbage.Queue(D) - if (QDEL_HINT_IWILLGC) - D.gc_destroyed = world.time + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + to_delete.gc_destroyed = null //clear the gc variable (important!) return - if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. - if(!force) - D.gc_destroyed = null //clear the gc variable (important!) - return - // Returning LETMELIVE after being told to force destroy - // indicates the objects Destroy() does not respect force - #ifdef TESTING - if(!I.no_respect_force) - testing("WARNING: [D.type] has been force deleted, but is \ - returning an immortal QDEL_HINT, indicating it does \ - not respect the force flag for qdel(). It has been \ - placed in the queue, further instances of this type \ - will also be queued.") - #endif - I.no_respect_force++ - - SSgarbage.Queue(D) - if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete - SSgarbage.Queue(D, GC_QUEUE_HARDDELETE) - if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - SSgarbage.HardDelete(D) - #ifdef REFERENCE_TRACKING - if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. - SSgarbage.Queue(D) - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum, find_references)) - if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. - SSgarbage.Queue(D) - SSgarbage.reference_find_on_fail[text_ref(D)] = TRUE + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + #ifdef TESTING + if(!trash.no_respect_force) + testing("WARNING: [to_delete.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") #endif - else - #ifdef TESTING - if(!I.no_hint) - testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") - #endif - I.no_hint++ - SSgarbage.Queue(D) - else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) - CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + trash.no_respect_force++ + + SSgarbage.Queue(to_delete) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete + SSgarbage.Queue(to_delete, GC_QUEUE_HARDDELETE) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + SSgarbage.HardDelete(to_delete) + #ifdef REFERENCE_TRACKING + if (QDEL_HINT_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.Queue(to_delete) + INVOKE_ASYNC(to_delete, TYPE_PROC_REF(/datum, find_references)) + if (QDEL_HINT_IFFAIL_FINDREFERENCE) //qdel will, if REFERENCE_TRACKING is enabled and the object fails to collect, display all references to this object. + SSgarbage.Queue(to_delete) + SSgarbage.reference_find_on_fail[text_ref(to_delete)] = TRUE + #endif + else + #ifdef TESTING + if(!trash.no_hint) + testing("WARNING: [to_delete.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") + #endif + trash.no_hint++ + SSgarbage.Queue(to_delete) diff --git a/code/controllers/subsystem/movement/move_handler.dm b/code/controllers/subsystem/movement/move_handler.dm index 90266dd3139..fcc5c1c6504 100644 --- a/code/controllers/subsystem/movement/move_handler.dm +++ b/code/controllers/subsystem/movement/move_handler.dm @@ -121,9 +121,12 @@ SUBSYSTEM_DEF(move_manager) var/datum/controller/subsystem/movement/current_subsystem = running_loop.controller - current_subsystem.remove_loop(running_loop) - contesting_subsystem.add_loop(contestant) + var/current_running_loop = running_loop running_loop = contestant + current_subsystem.remove_loop(current_running_loop) + if(running_loop != contestant) // A signal registrant could have messed with things + return FALSE + contesting_subsystem.add_loop(contestant) return TRUE ///Tries to figure out the current favorite loop to run. More complex then just deciding between two different loops, assumes no running loop currently exists @@ -138,7 +141,7 @@ SUBSYSTEM_DEF(move_manager) var/datum/move_loop/checking = existing_loops[owner] if(checking.flags & MOVEMENT_LOOP_IGNORE_PRIORITY) continue - if(favorite && favorite.priority < checking.priority) + if(favorite && favorite.priority > checking.priority) continue favorite = checking @@ -152,8 +155,8 @@ SUBSYSTEM_DEF(move_manager) /datum/movement_packet/proc/remove_loop(datum/controller/subsystem/movement/remove_from, datum/move_loop/loop_to_remove) if(loop_to_remove == running_loop) - remove_from.remove_loop(loop_to_remove) running_loop = null + remove_from.remove_loop(loop_to_remove) if(loop_to_remove.flags & MOVEMENT_LOOP_IGNORE_PRIORITY) remove_from.remove_loop(loop_to_remove) if(QDELETED(src)) diff --git a/code/controllers/subsystem/movement/movement.dm b/code/controllers/subsystem/movement/movement.dm index c43debda543..425c67a0c47 100644 --- a/code/controllers/subsystem/movement/movement.dm +++ b/code/controllers/subsystem/movement/movement.dm @@ -52,8 +52,11 @@ SUBSYSTEM_DEF(movement) while(processing.len) var/datum/move_loop/loop = processing[processing.len] processing.len-- + // No longer queued since we just got removed from the loop + loop.queued_time = null loop.process() //This shouldn't get nulls, if it does, runtime - if(!QDELETED(loop)) //Re-Insert the loop + if(!QDELETED(loop) && loop.status & MOVELOOP_STATUS_QUEUED) //Re-Insert the loop + loop.status &= ~MOVELOOP_STATUS_QUEUED loop.timer = world.time + loop.delay queue_loop(loop) if (MC_TICK_CHECK) @@ -86,26 +89,42 @@ SUBSYSTEM_DEF(movement) buckets -= "[bucket_time]" /datum/controller/subsystem/movement/proc/queue_loop(datum/move_loop/loop) - var/target_time = loop.timer - var/string_time = "[target_time]" + if(loop.status & MOVELOOP_STATUS_QUEUED) + stack_trace("A move loop attempted to queue while already queued") + return + loop.queued_time = loop.timer + loop.status |= MOVELOOP_STATUS_QUEUED + var/list/our_bucket = buckets["[loop.queued_time]"] // If there's no bucket for this, lets set them up - if(!buckets[string_time]) - buckets[string_time] = list() + if(!our_bucket) + buckets["[loop.queued_time]"] = list() + our_bucket = buckets["[loop.queued_time]"] // This makes assoc buckets and sorted buckets point to the same place, allowing for quicker inserts - var/list/new_bucket = list(list(target_time, buckets[string_time])) - BINARY_INSERT_DEFINE(new_bucket, sorted_buckets, SORT_VAR_NO_TYPE, list(target_time), SORT_FIRST_INDEX, COMPARE_KEY) + var/list/new_bucket = list(list(loop.queued_time, our_bucket)) + var/list/compare_item = list(loop.queued_time) + BINARY_INSERT_DEFINE(new_bucket, sorted_buckets, SORT_VAR_NO_TYPE, compare_item, SORT_FIRST_INDEX, COMPARE_KEY) - buckets[string_time] += loop + our_bucket += loop /datum/controller/subsystem/movement/proc/dequeue_loop(datum/move_loop/loop) - var/list/our_entries = buckets["[loop.timer]"] + // Go home, you're not here anyway + if(!(loop.status & MOVELOOP_STATUS_QUEUED)) + return + if(isnull(loop.queued_time)) // This happens if a moveloop is dequeued while handling process() + loop.status &= ~MOVELOOP_STATUS_QUEUED + return + var/list/our_entries = buckets["[loop.queued_time]"] our_entries -= loop if(!length(our_entries)) - smash_bucket(bucket_time = loop.timer) // We can't pass an index in for context because we don't know our position + smash_bucket(bucket_time = loop.queued_time) // We can't pass an index in for context because we don't know our position + loop.queued_time = null + loop.status &= ~MOVELOOP_STATUS_QUEUED /datum/controller/subsystem/movement/proc/add_loop(datum/move_loop/add) + if(add.status & MOVELOOP_STATUS_QUEUED) + CRASH("Loop being added that is already queued.") add.loop_started() - if(QDELETED(add)) + if(QDELETED(add) || add.status & MOVELOOP_STATUS_QUEUED) return queue_loop(add) diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index 0b464a9a196..de8e4531236 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -21,12 +21,12 @@ var/delay = 1 ///The next time we should process ///Used primarially as a hint to be reasoned about by our [controller], and as the id of our bucket - ///Should not be modified directly outside of [start_loop] var/timer = 0 - ///Is this loop running or not - var/running = FALSE - ///Track if we're currently paused - var/paused = FALSE + ///The time we are CURRENTLY queued for processing + ///Do not modify this directly + var/queued_time = -1 + /// Status bitfield for what state the move loop is currently in + var/status = NONE /datum/move_loop/New(datum/movement_packet/owner, datum/controller/subsystem/movement/controller, atom/moving, priority, flags, datum/extra_info) src.owner = owner @@ -57,7 +57,7 @@ /datum/move_loop/proc/loop_started() SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_MOVELOOP_START) - running = TRUE + status |= MOVELOOP_STATUS_RUNNING //If this is our first time starting to move with this loop //And we're meant to start instantly if(!timer && flags & MOVEMENT_LOOP_START_FAST) @@ -68,7 +68,7 @@ ///Called when a loop is stopped, doesn't stop the loop itself /datum/move_loop/proc/loop_stopped() SHOULD_CALL_PARENT(TRUE) - running = FALSE + status &= ~MOVELOOP_STATUS_RUNNING SEND_SIGNAL(src, COMSIG_MOVELOOP_STOP) /datum/move_loop/proc/info_deleted(datum/source) @@ -91,7 +91,7 @@ ///Pauses the move loop for some passed in period ///This functionally means shifting its timer up, and clearing it from its current bucket /datum/move_loop/proc/pause_for(time) - if(!controller || !running) //No controller or not running? go away + if(!controller || !(status & MOVELOOP_STATUS_RUNNING)) //No controller or not running? go away return //Dequeue us from our current bucket controller.dequeue_loop(src) @@ -141,21 +141,21 @@ ///Pause our loop untill restarted with resume_loop() /datum/move_loop/proc/pause_loop() - if(!controller || !running || paused) //we dead + if(!controller || !(status & MOVELOOP_STATUS_RUNNING) || (status & MOVELOOP_STATUS_PAUSED)) //we dead return //Dequeue us from our current bucket controller.dequeue_loop(src) - paused = TRUE + status |= MOVELOOP_STATUS_PAUSED ///Resume our loop after being paused by pause_loop() /datum/move_loop/proc/resume_loop() - if(!controller || !running || !paused) + if(!controller || (status & MOVELOOP_STATUS_RUNNING|MOVELOOP_STATUS_PAUSED) != (MOVELOOP_STATUS_RUNNING|MOVELOOP_STATUS_PAUSED)) return - controller.queue_loop(src) timer = world.time - paused = FALSE + controller.queue_loop(src) + status &= ~MOVELOOP_STATUS_PAUSED ///Removes the atom from some movement subsystem. Defaults to SSmovement /datum/controller/subsystem/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) @@ -367,7 +367,7 @@ ///Bool used to determine if we're already making a path in JPS. this prevents us from re-pathing while we're already busy. var/is_pathing = FALSE ///Callbacks to invoke once we make a path - var/list/datum/callback/on_finish_callbacks + var/list/datum/callback/on_finish_callbacks = list() /datum/move_loop/has_target/jps/New(datum/movement_packet/owner, datum/controller/subsystem/movement/controller, atom/moving, priority, flags, datum/extra_info) . = ..() diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index 78583cef350..b8df42742e4 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -24,7 +24,12 @@ SUBSYSTEM_DEF(nightshift) check_nightshift() /datum/controller/subsystem/nightshift/proc/announce(message) - priority_announce(message, sound='sound/misc/notice2.ogg', sender_override="Automated Lighting System Announcement") + priority_announce( + text = message, + sound = 'sound/misc/notice2.ogg', + sender_override = "Automated Lighting System Announcement", + color_override = "grey", + ) /datum/controller/subsystem/nightshift/proc/check_nightshift() var/emergency = SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm deleted file mode 100644 index ce3c1f7619b..00000000000 --- a/code/controllers/subsystem/persistence.dm +++ /dev/null @@ -1,631 +0,0 @@ -#define FILE_RECENT_MAPS "data/RecentMaps.json" - -#define KEEP_ROUNDS_MAP 3 - -SUBSYSTEM_DEF(persistence) - name = "Persistence" - init_order = INIT_ORDER_PERSISTENCE - flags = SS_NO_FIRE - - ///instantiated wall engraving components - var/list/wall_engravings = list() - ///all saved persistent engravings loaded from JSON - var/list/saved_engravings = list() - ///tattoo stories that we're saving. - var/list/prison_tattoos_to_save = list() - ///tattoo stories that have been selected for this round. - var/list/prison_tattoos_to_use = list() - var/list/saved_messages = list() - var/list/saved_modes = list(1,2,3) - var/list/saved_maps = list() - var/list/blocked_maps = list() - var/list/saved_trophies = list() - var/list/picture_logging_information = list() - var/list/obj/structure/sign/picture_frame/photo_frames - var/list/obj/item/storage/photo_album/photo_albums - var/rounds_since_engine_exploded = 0 - var/delam_highscore = 0 - var/tram_hits_this_round = 0 - var/tram_hits_last_round = 0 - -/datum/controller/subsystem/persistence/Initialize() - load_poly() - load_wall_engravings() - load_prisoner_tattoos() - load_trophies() - load_recent_maps() - load_photo_persistence() - load_randomized_recipes() - load_custom_outfits() - load_delamination_counter() - load_tram_counter() - load_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER - load_adventures() - return SS_INIT_SUCCESS - -///Collects all data to persist. -/datum/controller/subsystem/persistence/proc/collect_data() - save_wall_engravings() - save_prisoner_tattoos() - collect_trophies() - collect_maps() - save_photo_persistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. - save_randomized_recipes() - save_scars() - save_modular_persistence() // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE - save_custom_outfits() - save_delamination_counter() - if(SStransport.can_fire) - for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) - save_tram_history(transport.specific_transport_id) - save_tram_counter() - save_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER - -///Loads up Poly's speech buffer. -/datum/controller/subsystem/persistence/proc/load_poly() - for(var/mob/living/simple_animal/parrot/poly/P in GLOB.alive_mob_list) - twitterize(P.speech_buffer, "polytalk") - break //Who's been duping the bird?! - -///Loads all engravings, and places a select amount in maintenance and the prison. -/datum/controller/subsystem/persistence/proc/load_wall_engravings() - var/json_file = file(ENGRAVING_SAVE_FILE) - if(!fexists(json_file)) - return - - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - - if(json["version"] < ENGRAVING_PERSISTENCE_VERSION) - update_wall_engravings(json) - - saved_engravings = json["entries"] - - if(!saved_engravings.len) - log_world("Failed to load engraved messages on map [SSmapping.config.map_name]") - return - - var/list/viable_turfs = get_area_turfs(/area/station/maintenance, subtypes = TRUE) + get_area_turfs(/area/station/security/prison, subtypes = TRUE) - var/list/turfs_to_pick_from = list() - - for(var/turf/T as anything in viable_turfs) - if(!isclosedturf(T)) - continue - turfs_to_pick_from += T - - var/successfully_loaded_engravings = 0 - - for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS)) - var/engraving = pick_n_take(saved_engravings) - if(!islist(engraving)) - stack_trace("something's wrong with the engraving data! one of the saved engravings wasn't a list!") - continue - - var/turf/closed/engraved_wall = pick(turfs_to_pick_from) - - if(HAS_TRAIT(engraved_wall, TRAIT_NOT_ENGRAVABLE)) - continue - - engraved_wall.AddComponent(/datum/component/engraved, engraving["story"], FALSE, engraving["story_value"]) - successfully_loaded_engravings++ - turfs_to_pick_from -= engraved_wall - - log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.config.map_name]") - -///Saves all new engravings in the world. -/datum/controller/subsystem/persistence/proc/save_wall_engravings() - var/list/saved_data = list() - - saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION - saved_data["entries"] = list() - - - var/json_file = file(ENGRAVING_SAVE_FILE) - if(fexists(json_file)) - var/list/old_json = json_decode(file2text(json_file)) - if(old_json) - saved_data["entries"] = old_json["entries"] - - for(var/datum/component/engraved/engraving in wall_engravings) - if(!engraving.persistent_save) - continue - var/area/engraved_area = get_area(engraving.parent) - if(!(engraved_area.area_flags & PERSISTENT_ENGRAVINGS)) - continue - saved_data["entries"] += engraving.save_persistent() - - fdel(json_file) - - WRITE_FILE(json_file, json_encode(saved_data)) - -///This proc can update entries if the format has changed at some point. -/datum/controller/subsystem/persistence/proc/update_wall_engravings(json) - for(var/engraving_entry in json["entries"]) - continue //no versioning yet - - //Save it to the file - var/json_file = file(ENGRAVING_SAVE_FILE) - fdel(json_file) - WRITE_FILE(json_file, json_encode(json)) - - return json - -///Loads all tattoos, and select a few based on the amount of prisoner spawn positions. -/datum/controller/subsystem/persistence/proc/load_prisoner_tattoos() - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - - if(json["version"] < TATTOO_PERSISTENCE_VERSION) - update_prisoner_tattoos(json) - - var/datum/job/prisoner_datum = SSjob.name_occupations[JOB_PRISONER] - if(!prisoner_datum) - return - var/iterations_allowed = prisoner_datum.spawn_positions - - var/list/entries = json["entries"] - if(entries.len) - for(var/index in 1 to iterations_allowed) - prison_tattoos_to_use += list(entries[rand(1, entries.len)]) - - log_world("Loaded [prison_tattoos_to_use.len] prison tattoos") - -///Saves all tattoos, so they can appear on prisoners in future rounds -/datum/controller/subsystem/persistence/proc/save_prisoner_tattoos() - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - var/list/saved_data = list() - var/list/entries = list() - - if(fexists(json_file)) - var/list/old_json = json_decode(file2text(json_file)) - if(old_json) - entries += old_json["entries"] //Save the old if its there - - entries += prison_tattoos_to_save - - saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION - saved_data["entries"] = entries - - fdel(json_file) - WRITE_FILE(json_file, json_encode(saved_data)) - -///This proc can update entries if the format has changed at some point. -/datum/controller/subsystem/persistence/proc/update_prisoner_tattoos(json) - for(var/tattoo_entry in json["entries"]) - continue //no versioning yet - - //Save it to the file - var/json_file = file(PRISONER_TATTOO_SAVE_FILE) - fdel(json_file) - WRITE_FILE(json_file, json_encode(json)) - - return json - -/// Loads the trophies from the source file, and places a few in trophy display cases. -/datum/controller/subsystem/persistence/proc/load_trophies() - var/list/raw_saved_trophies = list() - if(fexists("data/npc_saves/TrophyItems.json")) - var/json_file = file("data/npc_saves/TrophyItems.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trophies = json["data"] - fdel("data/npc_saves/TrophyItems.json") - else - var/json_file = file("data/trophy_items.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trophies = json["data"] - - for(var/raw_json in raw_saved_trophies) - var/datum/trophy_data/parsed_trophy_data = new - parsed_trophy_data.load_from_json(raw_json) - saved_trophies += parsed_trophy_data - - set_up_trophies() - -///trophy data datum, for admin manipulation -/datum/trophy_data - ///path of the item the trophy will try to mimic, null if path_string is invalid - var/path - ///the message that appears under the item - var/message - ///the key of the one who placed the item in the trophy case - var/placer_key - -/datum/trophy_data/proc/load_from_json(list/json_data) - path = json_data["path"] - message = json_data["message"] - placer_key = json_data["placer_key"] - -/datum/trophy_data/proc/to_json() - var/list/new_data = list() - new_data["path"] = path - new_data["message"] = message - new_data["placer_key"] = placer_key - new_data["is_valid"] = text2path(path) ? TRUE : FALSE - return new_data - -/// Returns a list for the admin trophy panel. -/datum/controller/subsystem/persistence/proc/trophy_ui_data() - var/list/ui_data = list() - for(var/datum/trophy_data/data in saved_trophies) - var/list/pdata = data.to_json() - pdata["ref"] = REF(data) - ui_data += list(pdata) - - return ui_data - -/// Loads up the amount of times maps appeared to alter their appearance in voting and rotation. -/datum/controller/subsystem/persistence/proc/load_recent_maps() - var/map_sav = FILE_RECENT_MAPS - if(!fexists(FILE_RECENT_MAPS)) - return - var/list/json = json_decode(file2text(map_sav)) - if(!json) - return - saved_maps = json["data"] - - //Convert the mapping data to a shared blocking list, saves us doing this in several places later. - for(var/map in config.maplist) - var/datum/map_config/VM = config.maplist[map] - var/run = 0 - if(VM.map_name == SSmapping.config.map_name) - run++ - for(var/name in SSpersistence.saved_maps) - if(VM.map_name == name) - run++ - if(run >= 2) //If run twice in the last KEEP_ROUNDS_MAP + 1 (including current) rounds, disable map for voting and rotation. - blocked_maps += VM.map_name - -/// Puts trophies into trophy cases. -/datum/controller/subsystem/persistence/proc/set_up_trophies() - - var/list/valid_trophies = list() - - for(var/datum/trophy_data/data in saved_trophies) - - if(!data) //sanity for incorrect deserialization - continue - - var/path = text2path(data.path) - if(!path) //If the item no longer exist, ignore it - continue - - valid_trophies += data - - for(var/obj/structure/displaycase/trophy/trophy_case in GLOB.trophy_cases) - if(!valid_trophies.len) - break - - if(trophy_case.showpiece) - continue - - trophy_case.set_up_trophy(pick_n_take(valid_trophies)) - -///Loads up the photo album source file. -/datum/controller/subsystem/persistence/proc/get_photo_albums() - var/album_path = file("data/photo_albums.json") - if(fexists(album_path)) - return json_decode(file2text(album_path)) - -///Loads up the photo frames source file. -/datum/controller/subsystem/persistence/proc/get_photo_frames() - var/frame_path = file("data/photo_frames.json") - if(fexists(frame_path)) - return json_decode(file2text(frame_path)) - -/// Removes the identifier of a persistent photo frame from the json. -/datum/controller/subsystem/persistence/proc/remove_photo_frames(identifier) - var/frame_path = file("data/photo_frames.json") - if(!fexists(frame_path)) - return - - var/frame_json = json_decode(file2text(frame_path)) - frame_json -= identifier - - frame_json = json_encode(frame_json) - fdel(frame_path) - WRITE_FILE(frame_path, frame_json) - -///Loads photo albums, and populates them; also loads and applies frames to picture frames. -/datum/controller/subsystem/persistence/proc/load_photo_persistence() - var/album_path = file("data/photo_albums.json") - var/frame_path = file("data/photo_frames.json") - if(fexists(album_path)) - var/list/json = json_decode(file2text(album_path)) - if(json.len) - for(var/i in photo_albums) - var/obj/item/storage/photo_album/A = i - if(!A.persistence_id) - continue - if(json[A.persistence_id]) - A.populate_from_id_list(json[A.persistence_id]) - - if(fexists(frame_path)) - var/list/json = json_decode(file2text(frame_path)) - if(json.len) - for(var/i in photo_frames) - var/obj/structure/sign/picture_frame/PF = i - if(!PF.persistence_id) - continue - if(json[PF.persistence_id]) - PF.load_from_id(json[PF.persistence_id]) - -///Saves the contents of photo albums and the picture frames. -/datum/controller/subsystem/persistence/proc/save_photo_persistence() - var/album_path = file("data/photo_albums.json") - var/frame_path = file("data/photo_frames.json") - - var/list/frame_json = list() - var/list/album_json = list() - - if(fexists(album_path)) - album_json = json_decode(file2text(album_path)) - fdel(album_path) - - for(var/i in photo_albums) - var/obj/item/storage/photo_album/A = i - if(!istype(A) || !A.persistence_id) - continue - var/list/L = A.get_picture_id_list() - album_json[A.persistence_id] = L - - album_json = json_encode(album_json) - - WRITE_FILE(album_path, album_json) - - if(fexists(frame_path)) - frame_json = json_decode(file2text(frame_path)) - fdel(frame_path) - - for(var/i in photo_frames) - var/obj/structure/sign/picture_frame/F = i - if(!istype(F) || !F.persistence_id) - continue - frame_json[F.persistence_id] = F.get_photo_id() - - frame_json = json_encode(frame_json) - - WRITE_FILE(frame_path, frame_json) - -///Collects trophies from all existing trophy cases. -/datum/controller/subsystem/persistence/proc/collect_trophies() - for(var/trophy_case in GLOB.trophy_cases) - save_trophy(trophy_case) - - var/json_file = file("data/trophy_items.json") - var/list/file_data = list() - var/list/converted_data = list() - - for(var/datum/trophy_data/data in saved_trophies) - converted_data += list(data.to_json()) - - converted_data = remove_duplicate_trophies(converted_data) - - file_data["data"] = converted_data - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///gets the list of json trophies, and deletes the ones with an identical path and message -/datum/controller/subsystem/persistence/proc/remove_duplicate_trophies(list/trophies) - var/list/ukeys = list() - . = list() - for(var/trophy in trophies) - var/tkey = "[trophy["path"]]-[trophy["message"]]" - if(ukeys[tkey]) - continue - else - . += list(trophy) - ukeys[tkey] = TRUE - -///If there is a trophy in the trophy case, saved it, if the trophy was not a holo trophy and has a message attached. -/datum/controller/subsystem/persistence/proc/save_trophy(obj/structure/displaycase/trophy/trophy_case) - if(!trophy_case.holographic_showpiece && trophy_case.showpiece && trophy_case.trophy_message) - var/datum/trophy_data/data = new - data.path = trophy_case.showpiece.type - data.message = trophy_case.trophy_message - data.placer_key = trophy_case.placer_key - saved_trophies += data - -///Updates the list of the most recent maps. -/datum/controller/subsystem/persistence/proc/collect_maps() - if(length(saved_maps) > KEEP_ROUNDS_MAP) //Get rid of extras from old configs. - saved_maps.Cut(KEEP_ROUNDS_MAP+1) - var/mapstosave = min(length(saved_maps)+1, KEEP_ROUNDS_MAP) - if(length(saved_maps) < mapstosave) //Add extras if too short, one per round. - saved_maps += mapstosave - for(var/i = mapstosave; i > 1; i--) - saved_maps[i] = saved_maps[i-1] - saved_maps[1] = SSmapping.config.map_name - var/json_file = file(FILE_RECENT_MAPS) - var/list/file_data = list() - file_data["data"] = saved_maps - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///Loads all randomized recipes. -/datum/controller/subsystem/persistence/proc/load_randomized_recipes() - var/json_file = file("data/RandomizedChemRecipes.json") - var/json - if(fexists(json_file)) - json = json_decode(file2text(json_file)) - - for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) - var/datum/chemical_reaction/randomized/R = new randomized_type - var/loaded = FALSE - if(R.persistent && json) - var/list/recipe_data = json["[R.type]"] - if(recipe_data) - if(R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period)) - loaded = TRUE - if(!loaded) //We do not have information for whatever reason, just generate new one - if(R.persistent) - log_game("Resetting persistent [randomized_type] random recipe.") - R.GenerateRecipe() - - if(!R.HasConflicts()) //Might want to try again if conflicts happened in the future. - add_chemical_reaction(R) - else - log_game("Randomized recipe [randomized_type] resulted in conflicting recipes.") - -///Saves all randomized recipes. -/datum/controller/subsystem/persistence/proc/save_randomized_recipes() - var/json_file = file("data/RandomizedChemRecipes.json") - var/list/file_data = list() - - //asert globchems done - for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) - var/datum/chemical_reaction/randomized/R = get_chemical_reaction(randomized_type) //ew, would be nice to add some simple tracking - if(R?.persistent) - var/list/recipe_data = R.SaveOldRecipe() - file_data["[R.type]"] = recipe_data - - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -///Saves all scars for everyone's original characters -/datum/controller/subsystem/persistence/proc/save_scars() - for(var/i in GLOB.joined_player_list) - var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i) - if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client?.prefs.read_preference(/datum/preference/toggle/persistent_scars)) - continue - - var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve() - - if(!original_human) - continue - - if(original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human) - original_human.save_persistent_scars(TRUE) - else - original_human.save_persistent_scars() - -///Loads the custom outfits of every admin. -/datum/controller/subsystem/persistence/proc/load_custom_outfits() - var/file = file("data/custom_outfits.json") - if(!fexists(file)) - return - var/outfits_json = file2text(file) - var/list/outfits = json_decode(outfits_json) - if(!islist(outfits)) - return - - for(var/outfit_data in outfits) - if(!islist(outfit_data)) - continue - - var/outfittype = text2path(outfit_data["outfit_type"]) - if(!ispath(outfittype, /datum/outfit)) - continue - var/datum/outfit/outfit = new outfittype - if(!outfit.load_from(outfit_data)) - continue - GLOB.custom_outfits += outfit - -///Saves each admin's custom outfit list -/datum/controller/subsystem/persistence/proc/save_custom_outfits() - var/file = file("data/custom_outfits.json") - fdel(file) - - var/list/data = list() - for(var/datum/outfit/outfit in GLOB.custom_outfits) - data += list(outfit.get_json_data()) - - WRITE_FILE(file, json_encode(data)) - -/// Location where we save the information about how many rounds it has been since the engine blew up/tram hits -#define DELAMINATION_COUNT_FILEPATH "data/rounds_since_delamination.txt" -#define DELAMINATION_HIGHSCORE_FILEPATH "data/delamination_highscore.txt" -#define TRAM_COUNT_FILEPATH "data/tram_hits_last_round.txt" - -/datum/controller/subsystem/persistence/proc/load_delamination_counter() - if (!fexists(DELAMINATION_COUNT_FILEPATH)) - return - rounds_since_engine_exploded = text2num(file2text(DELAMINATION_COUNT_FILEPATH)) - if (fexists(DELAMINATION_HIGHSCORE_FILEPATH)) - delam_highscore = text2num(file2text(DELAMINATION_HIGHSCORE_FILEPATH)) - for (var/obj/machinery/incident_display/sign as anything in GLOB.map_delamination_counters) - sign.update_delam_count(rounds_since_engine_exploded, delam_highscore) - -/datum/controller/subsystem/persistence/proc/save_delamination_counter() - rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_COUNT_FILEPATH) - if((rounds_since_engine_exploded + 1) > delam_highscore) - rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_HIGHSCORE_FILEPATH) - -/datum/controller/subsystem/persistence/proc/load_tram_counter() - if(!fexists(TRAM_COUNT_FILEPATH)) - return - tram_hits_last_round = text2num(file2text(TRAM_COUNT_FILEPATH)) - -/datum/controller/subsystem/persistence/proc/save_tram_counter() - rustg_file_write("[tram_hits_this_round]", TRAM_COUNT_FILEPATH) - -#define MAX_TRAM_SAVES 4 - -// Loads historical tram data -/datum/controller/subsystem/persistence/proc/load_tram_history(specific_transport_id) - var/list/raw_saved_trams = list() - var/json_file = file("data/tram_data/[specific_transport_id].json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - if(!json) - return - raw_saved_trams = json["data"] - - var/list/previous_tram_data = list() - for(var/raw_json in raw_saved_trams) - var/datum/tram_mfg_info/parsed_tram_data = new - parsed_tram_data.load_from_json(raw_json) - previous_tram_data += parsed_tram_data - return previous_tram_data - -// Saves historical tram data -/datum/controller/subsystem/persistence/proc/save_tram_history(specific_transport_id) - var/list/packaged_tram_data = list() - for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) - if(transport.specific_transport_id == specific_transport_id) - packaged_tram_data = package_tram_data(transport) - break - - var/json_file = file("data/tram_data/[specific_transport_id].json") - var/list/file_data = list() - var/list/converted_data = list() - - for(var/datum/tram_mfg_info/data in packaged_tram_data) - converted_data += list(data.export_to_json()) - - file_data["data"] = converted_data - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/datum/controller/subsystem/persistence/proc/package_tram_data(datum/transport_controller/linear/tram/tram_controller) - var/list/packaged_data = list() - var/list/tram_list = tram_controller.tram_history - if(!isnull(tram_list)) - while(tram_list.len > MAX_TRAM_SAVES) - tram_list.Cut(1,2) - - for(var/datum/tram_mfg_info/data as anything in tram_list) - packaged_data += data - - packaged_data += tram_controller.tram_registration - return packaged_data - -#undef DELAMINATION_COUNT_FILEPATH -#undef DELAMINATION_HIGHSCORE_FILEPATH -#undef TRAM_COUNT_FILEPATH -#undef FILE_RECENT_MAPS -#undef KEEP_ROUNDS_MAP -#undef MAX_TRAM_SAVES diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm new file mode 100644 index 00000000000..c98be5d1c5a --- /dev/null +++ b/code/controllers/subsystem/persistence/_persistence.dm @@ -0,0 +1,108 @@ +#define FILE_RECENT_MAPS "data/RecentMaps.json" +#define KEEP_ROUNDS_MAP 3 + +SUBSYSTEM_DEF(persistence) + name = "Persistence" + init_order = INIT_ORDER_PERSISTENCE + flags = SS_NO_FIRE + + ///instantiated wall engraving components + var/list/wall_engravings = list() + ///all saved persistent engravings loaded from JSON + var/list/saved_engravings = list() + ///tattoo stories that we're saving. + var/list/prison_tattoos_to_save = list() + ///tattoo stories that have been selected for this round. + var/list/prison_tattoos_to_use = list() + var/list/saved_messages = list() + var/list/saved_modes = list(1,2,3) + var/list/saved_maps = list() + var/list/blocked_maps = list() + var/list/saved_trophies = list() + var/list/picture_logging_information = list() + var/list/obj/structure/sign/picture_frame/photo_frames + var/list/obj/item/storage/photo_album/photo_albums + var/rounds_since_engine_exploded = 0 + var/delam_highscore = 0 + var/tram_hits_this_round = 0 + var/tram_hits_last_round = 0 + +/datum/controller/subsystem/persistence/Initialize() + load_poly() + load_wall_engravings() + load_prisoner_tattoos() + load_trophies() + load_recent_maps() + load_photo_persistence() + load_randomized_recipes() + load_custom_outfits() + load_delamination_counter() + load_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER + load_tram_counter() + load_adventures() + return SS_INIT_SUCCESS + +///Collects all data to persist. +/datum/controller/subsystem/persistence/proc/collect_data() + save_wall_engravings() + save_prisoner_tattoos() + collect_trophies() + collect_maps() + save_photo_persistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. + save_randomized_recipes() + save_scars() + save_custom_outfits() + save_modular_persistence() // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE + save_delamination_counter() + if(SStransport.can_fire) + for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) + save_tram_history(transport.specific_transport_id) + save_tram_counter() + save_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER + +///Loads up Poly's speech buffer. +/datum/controller/subsystem/persistence/proc/load_poly() + for(var/mob/living/simple_animal/parrot/poly/P in GLOB.alive_mob_list) + twitterize(P.speech_buffer, "polytalk") + break //Who's been duping the bird?! + +/// Loads up the amount of times maps appeared to alter their appearance in voting and rotation. +/datum/controller/subsystem/persistence/proc/load_recent_maps() + var/map_sav = FILE_RECENT_MAPS + if(!fexists(FILE_RECENT_MAPS)) + return + var/list/json = json_decode(file2text(map_sav)) + if(!json) + return + saved_maps = json["data"] + + //Convert the mapping data to a shared blocking list, saves us doing this in several places later. + for(var/map in config.maplist) + var/datum/map_config/VM = config.maplist[map] + var/run = 0 + if(VM.map_name == SSmapping.config.map_name) + run++ + for(var/name in SSpersistence.saved_maps) + if(VM.map_name == name) + run++ + if(run >= 2) //If run twice in the last KEEP_ROUNDS_MAP + 1 (including current) rounds, disable map for voting and rotation. + blocked_maps += VM.map_name + +///Updates the list of the most recent maps. +/datum/controller/subsystem/persistence/proc/collect_maps() + if(length(saved_maps) > KEEP_ROUNDS_MAP) //Get rid of extras from old configs. + saved_maps.Cut(KEEP_ROUNDS_MAP+1) + var/mapstosave = min(length(saved_maps)+1, KEEP_ROUNDS_MAP) + if(length(saved_maps) < mapstosave) //Add extras if too short, one per round. + saved_maps += mapstosave + for(var/i = mapstosave; i > 1; i--) + saved_maps[i] = saved_maps[i-1] + saved_maps[1] = SSmapping.config.map_name + var/json_file = file(FILE_RECENT_MAPS) + var/list/file_data = list() + file_data["data"] = saved_maps + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +#undef FILE_RECENT_MAPS +#undef KEEP_ROUNDS_MAP diff --git a/code/controllers/subsystem/persistence/counter_delamination.dm b/code/controllers/subsystem/persistence/counter_delamination.dm new file mode 100644 index 00000000000..81dca300c7e --- /dev/null +++ b/code/controllers/subsystem/persistence/counter_delamination.dm @@ -0,0 +1,20 @@ +/// Location where we save the information about how many rounds it has been since the engine blew up +#define DELAMINATION_COUNT_FILEPATH "data/rounds_since_delamination.txt" +#define DELAMINATION_HIGHSCORE_FILEPATH "data/delamination_highscore.txt" + +/datum/controller/subsystem/persistence/proc/load_delamination_counter() + if(!fexists(DELAMINATION_COUNT_FILEPATH)) + return + rounds_since_engine_exploded = text2num(file2text(DELAMINATION_COUNT_FILEPATH)) + if(fexists(DELAMINATION_HIGHSCORE_FILEPATH)) + delam_highscore = text2num(file2text(DELAMINATION_HIGHSCORE_FILEPATH)) + for(var/obj/machinery/incident_display/sign as anything in GLOB.map_delamination_counters) + sign.update_delam_count(rounds_since_engine_exploded, delam_highscore) + +/datum/controller/subsystem/persistence/proc/save_delamination_counter() + rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_COUNT_FILEPATH) + if((rounds_since_engine_exploded + 1) > delam_highscore) + rustg_file_write("[rounds_since_engine_exploded + 1]", DELAMINATION_HIGHSCORE_FILEPATH) + +#undef DELAMINATION_COUNT_FILEPATH +#undef DELAMINATION_HIGHSCORE_FILEPATH diff --git a/code/controllers/subsystem/persistence/counter_tram_hits.dm b/code/controllers/subsystem/persistence/counter_tram_hits.dm new file mode 100644 index 00000000000..806d5d5b5c2 --- /dev/null +++ b/code/controllers/subsystem/persistence/counter_tram_hits.dm @@ -0,0 +1,64 @@ +/// Location where we save the information about how many times the tram hit on previous round +#define TRAM_COUNT_FILEPATH "data/tram_hits_last_round.txt" +#define MAX_TRAM_SAVES 4 + +// Loads historical tram data +/datum/controller/subsystem/persistence/proc/load_tram_history(specific_transport_id) + var/list/raw_saved_trams = list() + var/json_file = file("data/tram_data/[specific_transport_id].json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trams = json["data"] + + var/list/previous_tram_data = list() + for(var/raw_json in raw_saved_trams) + var/datum/tram_mfg_info/parsed_tram_data = new + parsed_tram_data.load_from_json(raw_json) + previous_tram_data += parsed_tram_data + return previous_tram_data + +// Saves historical tram data +/datum/controller/subsystem/persistence/proc/save_tram_history(specific_transport_id) + var/list/packaged_tram_data = list() + for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) + if(transport.specific_transport_id == specific_transport_id) + packaged_tram_data = package_tram_data(transport) + break + + var/json_file = file("data/tram_data/[specific_transport_id].json") + var/list/file_data = list() + var/list/converted_data = list() + + for(var/datum/tram_mfg_info/data in packaged_tram_data) + converted_data += list(data.export_to_json()) + + file_data["data"] = converted_data + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +/datum/controller/subsystem/persistence/proc/package_tram_data(datum/transport_controller/linear/tram/tram_controller) + var/list/packaged_data = list() + var/list/tram_list = tram_controller.tram_history + if(!isnull(tram_list)) + while(tram_list.len > MAX_TRAM_SAVES) + tram_list.Cut(1,2) + + for(var/datum/tram_mfg_info/data as anything in tram_list) + packaged_data += data + + packaged_data += tram_controller.tram_registration + return packaged_data + +/datum/controller/subsystem/persistence/proc/load_tram_counter() + if(!fexists(TRAM_COUNT_FILEPATH)) + return + tram_hits_last_round = text2num(file2text(TRAM_COUNT_FILEPATH)) + +/datum/controller/subsystem/persistence/proc/save_tram_counter() + rustg_file_write("[tram_hits_this_round]", TRAM_COUNT_FILEPATH) + +#undef TRAM_COUNT_FILEPATH +#undef MAX_TRAM_SAVES diff --git a/code/controllers/subsystem/persistence/custom_outfits.dm b/code/controllers/subsystem/persistence/custom_outfits.dm new file mode 100644 index 00000000000..942f874fde5 --- /dev/null +++ b/code/controllers/subsystem/persistence/custom_outfits.dm @@ -0,0 +1,32 @@ +///Loads the custom outfits of every admin. +/datum/controller/subsystem/persistence/proc/load_custom_outfits() + var/file = file("data/custom_outfits.json") + if(!fexists(file)) + return + var/outfits_json = file2text(file) + var/list/outfits = json_decode(outfits_json) + if(!islist(outfits)) + return + + for(var/outfit_data in outfits) + if(!islist(outfit_data)) + continue + + var/outfittype = text2path(outfit_data["outfit_type"]) + if(!ispath(outfittype, /datum/outfit)) + continue + var/datum/outfit/outfit = new outfittype + if(!outfit.load_from(outfit_data)) + continue + GLOB.custom_outfits += outfit + +///Saves each admin's custom outfit list +/datum/controller/subsystem/persistence/proc/save_custom_outfits() + var/file = file("data/custom_outfits.json") + fdel(file) + + var/list/data = list() + for(var/datum/outfit/outfit in GLOB.custom_outfits) + data += list(outfit.get_json_data()) + + WRITE_FILE(file, json_encode(data)) diff --git a/code/controllers/subsystem/persistence/engravings.dm b/code/controllers/subsystem/persistence/engravings.dm new file mode 100644 index 00000000000..f47fc7fbba1 --- /dev/null +++ b/code/controllers/subsystem/persistence/engravings.dm @@ -0,0 +1,84 @@ +///Loads all engravings, and places a select amount in maintenance and the prison. +/datum/controller/subsystem/persistence/proc/load_wall_engravings() + var/json_file = file(ENGRAVING_SAVE_FILE) + if(!fexists(json_file)) + return + + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + + if(json["version"] < ENGRAVING_PERSISTENCE_VERSION) + update_wall_engravings(json) + + saved_engravings = json["entries"] + + if(!saved_engravings.len) + log_world("Failed to load engraved messages on map [SSmapping.config.map_name]") + return + + var/list/viable_turfs = get_area_turfs(/area/station/maintenance, subtypes = TRUE) + get_area_turfs(/area/station/security/prison, subtypes = TRUE) + var/list/turfs_to_pick_from = list() + + for(var/turf/T as anything in viable_turfs) + if(!isclosedturf(T)) + continue + turfs_to_pick_from += T + + var/successfully_loaded_engravings = 0 + + for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS)) + var/engraving = pick_n_take(saved_engravings) + if(!islist(engraving)) + stack_trace("something's wrong with the engraving data! one of the saved engravings wasn't a list!") + continue + + var/turf/closed/engraved_wall = pick(turfs_to_pick_from) + + if(HAS_TRAIT(engraved_wall, TRAIT_NOT_ENGRAVABLE)) + continue + + engraved_wall.AddComponent(/datum/component/engraved, engraving["story"], FALSE, engraving["story_value"]) + successfully_loaded_engravings++ + turfs_to_pick_from -= engraved_wall + + log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.config.map_name]") + +///Saves all new engravings in the world. +/datum/controller/subsystem/persistence/proc/save_wall_engravings() + var/list/saved_data = list() + + saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION + saved_data["entries"] = list() + + + var/json_file = file(ENGRAVING_SAVE_FILE) + if(fexists(json_file)) + var/list/old_json = json_decode(file2text(json_file)) + if(old_json) + saved_data["entries"] = old_json["entries"] + + for(var/datum/component/engraved/engraving in wall_engravings) + if(!engraving.persistent_save) + continue + var/area/engraved_area = get_area(engraving.parent) + if(!(engraved_area.area_flags & PERSISTENT_ENGRAVINGS)) + continue + saved_data["entries"] += engraving.save_persistent() + + fdel(json_file) + + WRITE_FILE(json_file, json_encode(saved_data)) + +///This proc can update entries if the format has changed at some point. +/datum/controller/subsystem/persistence/proc/update_wall_engravings(json) + for(var/engraving_entry in json["entries"]) + continue //no versioning yet + + //Save it to the file + var/json_file = file(ENGRAVING_SAVE_FILE) + fdel(json_file) + WRITE_FILE(json_file, json_encode(json)) + + return json + diff --git a/code/controllers/subsystem/persistence/photo_albums.dm b/code/controllers/subsystem/persistence/photo_albums.dm new file mode 100644 index 00000000000..3aee856b2c2 --- /dev/null +++ b/code/controllers/subsystem/persistence/photo_albums.dm @@ -0,0 +1,86 @@ +///Loads up the photo album source file. +/datum/controller/subsystem/persistence/proc/get_photo_albums() + var/album_path = file("data/photo_albums.json") + if(fexists(album_path)) + return json_decode(file2text(album_path)) + +///Loads up the photo frames source file. +/datum/controller/subsystem/persistence/proc/get_photo_frames() + var/frame_path = file("data/photo_frames.json") + if(fexists(frame_path)) + return json_decode(file2text(frame_path)) + +/// Removes the identifier of a persistent photo frame from the json. +/datum/controller/subsystem/persistence/proc/remove_photo_frames(identifier) + var/frame_path = file("data/photo_frames.json") + if(!fexists(frame_path)) + return + + var/frame_json = json_decode(file2text(frame_path)) + frame_json -= identifier + + frame_json = json_encode(frame_json) + fdel(frame_path) + WRITE_FILE(frame_path, frame_json) + +///Loads photo albums, and populates them; also loads and applies frames to picture frames. +/datum/controller/subsystem/persistence/proc/load_photo_persistence() + var/album_path = file("data/photo_albums.json") + var/frame_path = file("data/photo_frames.json") + if(fexists(album_path)) + var/list/json = json_decode(file2text(album_path)) + if(json.len) + for(var/i in photo_albums) + var/obj/item/storage/photo_album/A = i + if(!A.persistence_id) + continue + if(json[A.persistence_id]) + A.populate_from_id_list(json[A.persistence_id]) + + if(fexists(frame_path)) + var/list/json = json_decode(file2text(frame_path)) + if(json.len) + for(var/i in photo_frames) + var/obj/structure/sign/picture_frame/PF = i + if(!PF.persistence_id) + continue + if(json[PF.persistence_id]) + PF.load_from_id(json[PF.persistence_id]) + +///Saves the contents of photo albums and the picture frames. +/datum/controller/subsystem/persistence/proc/save_photo_persistence() + var/album_path = file("data/photo_albums.json") + var/frame_path = file("data/photo_frames.json") + + var/list/frame_json = list() + var/list/album_json = list() + + if(fexists(album_path)) + album_json = json_decode(file2text(album_path)) + fdel(album_path) + + for(var/i in photo_albums) + var/obj/item/storage/photo_album/A = i + if(!istype(A) || !A.persistence_id) + continue + var/list/L = A.get_picture_id_list() + album_json[A.persistence_id] = L + + album_json = json_encode(album_json) + + WRITE_FILE(album_path, album_json) + + if(fexists(frame_path)) + frame_json = json_decode(file2text(frame_path)) + fdel(frame_path) + + for(var/i in photo_frames) + var/obj/structure/sign/picture_frame/F = i + if(!istype(F) || !F.persistence_id) + continue + frame_json[F.persistence_id] = F.get_photo_id() + + frame_json = json_encode(frame_json) + + WRITE_FILE(frame_path, frame_json) + diff --git a/code/controllers/subsystem/persistence/recipes.dm b/code/controllers/subsystem/persistence/recipes.dm new file mode 100644 index 00000000000..84145b26aab --- /dev/null +++ b/code/controllers/subsystem/persistence/recipes.dm @@ -0,0 +1,39 @@ +///Loads all randomized recipes. +/datum/controller/subsystem/persistence/proc/load_randomized_recipes() + var/json_file = file("data/RandomizedChemRecipes.json") + var/json + if(fexists(json_file)) + json = json_decode(file2text(json_file)) + + for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) + var/datum/chemical_reaction/randomized/R = new randomized_type + var/loaded = FALSE + if(R.persistent && json) + var/list/recipe_data = json["[R.type]"] + if(recipe_data) + if(R.LoadOldRecipe(recipe_data) && (daysSince(R.created) <= R.persistence_period)) + loaded = TRUE + if(!loaded) //We do not have information for whatever reason, just generate new one + if(R.persistent) + log_game("Resetting persistent [randomized_type] random recipe.") + R.GenerateRecipe() + + if(!R.HasConflicts()) //Might want to try again if conflicts happened in the future. + add_chemical_reaction(R) + else + log_game("Randomized recipe [randomized_type] resulted in conflicting recipes.") + +///Saves all randomized recipes. +/datum/controller/subsystem/persistence/proc/save_randomized_recipes() + var/json_file = file("data/RandomizedChemRecipes.json") + var/list/file_data = list() + + //asert globchems done + for(var/randomized_type in subtypesof(/datum/chemical_reaction/randomized)) + var/datum/chemical_reaction/randomized/R = get_chemical_reaction(randomized_type) //ew, would be nice to add some simple tracking + if(R?.persistent) + var/list/recipe_data = R.SaveOldRecipe() + file_data["[R.type]"] = recipe_data + + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/controllers/subsystem/persistence/scars.dm b/code/controllers/subsystem/persistence/scars.dm new file mode 100644 index 00000000000..fa378f24dd4 --- /dev/null +++ b/code/controllers/subsystem/persistence/scars.dm @@ -0,0 +1,17 @@ +///Saves all scars for everyone's original characters +/datum/controller/subsystem/persistence/proc/save_scars() + for(var/i in GLOB.joined_player_list) + var/mob/living/carbon/human/ending_human = get_mob_by_ckey(i) + if(!istype(ending_human) || !ending_human.mind?.original_character_slot_index || !ending_human.client?.prefs.read_preference(/datum/preference/toggle/persistent_scars)) + continue + + var/mob/living/carbon/human/original_human = ending_human.mind.original_character.resolve() + + if(!original_human) + continue + + if(original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human) + original_human.save_persistent_scars(TRUE) + else + original_human.save_persistent_scars() + diff --git a/code/controllers/subsystem/persistence/tattoos.dm b/code/controllers/subsystem/persistence/tattoos.dm new file mode 100644 index 00000000000..45dd31c7f5c --- /dev/null +++ b/code/controllers/subsystem/persistence/tattoos.dm @@ -0,0 +1,55 @@ +///Loads all tattoos, and select a few based on the amount of prisoner spawn positions. +/datum/controller/subsystem/persistence/proc/load_prisoner_tattoos() + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + + if(json["version"] < TATTOO_PERSISTENCE_VERSION) + update_prisoner_tattoos(json) + + var/datum/job/prisoner_datum = SSjob.name_occupations[JOB_PRISONER] + if(!prisoner_datum) + return + var/iterations_allowed = prisoner_datum.spawn_positions + + var/list/entries = json["entries"] + if(entries.len) + for(var/index in 1 to iterations_allowed) + prison_tattoos_to_use += list(entries[rand(1, entries.len)]) + + log_world("Loaded [prison_tattoos_to_use.len] prison tattoos") + +///Saves all tattoos, so they can appear on prisoners in future rounds +/datum/controller/subsystem/persistence/proc/save_prisoner_tattoos() + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + var/list/saved_data = list() + var/list/entries = list() + + if(fexists(json_file)) + var/list/old_json = json_decode(file2text(json_file)) + if(old_json) + entries += old_json["entries"] //Save the old if its there + + entries += prison_tattoos_to_save + + saved_data["version"] = ENGRAVING_PERSISTENCE_VERSION + saved_data["entries"] = entries + + fdel(json_file) + WRITE_FILE(json_file, json_encode(saved_data)) + +///This proc can update entries if the format has changed at some point. +/datum/controller/subsystem/persistence/proc/update_prisoner_tattoos(json) + for(var/tattoo_entry in json["entries"]) + continue //no versioning yet + + //Save it to the file + var/json_file = file(PRISONER_TATTOO_SAVE_FILE) + fdel(json_file) + WRITE_FILE(json_file, json_encode(json)) + + return json + diff --git a/code/controllers/subsystem/persistence/trophies.dm b/code/controllers/subsystem/persistence/trophies.dm new file mode 100644 index 00000000000..515ed386085 --- /dev/null +++ b/code/controllers/subsystem/persistence/trophies.dm @@ -0,0 +1,125 @@ +///trophy data datum, for admin manipulation +/datum/trophy_data + ///path of the item the trophy will try to mimic, null if path_string is invalid + var/path + ///the message that appears under the item + var/message + ///the key of the one who placed the item in the trophy case + var/placer_key + +/// Loads the trophies from the source file, and places a few in trophy display cases. +/datum/controller/subsystem/persistence/proc/load_trophies() + var/list/raw_saved_trophies = list() + if(fexists("data/npc_saves/TrophyItems.json")) + var/json_file = file("data/npc_saves/TrophyItems.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trophies = json["data"] + fdel("data/npc_saves/TrophyItems.json") + else + var/json_file = file("data/trophy_items.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + raw_saved_trophies = json["data"] + + for(var/raw_json in raw_saved_trophies) + var/datum/trophy_data/parsed_trophy_data = new + parsed_trophy_data.load_from_json(raw_json) + saved_trophies += parsed_trophy_data + + set_up_trophies() + +/datum/trophy_data/proc/load_from_json(list/json_data) + path = json_data["path"] + message = json_data["message"] + placer_key = json_data["placer_key"] + +/datum/trophy_data/proc/to_json() + var/list/new_data = list() + new_data["path"] = path + new_data["message"] = message + new_data["placer_key"] = placer_key + new_data["is_valid"] = text2path(path) ? TRUE : FALSE + return new_data + +/// Returns a list for the admin trophy panel. +/datum/controller/subsystem/persistence/proc/trophy_ui_data() + var/list/ui_data = list() + for(var/datum/trophy_data/data in saved_trophies) + var/list/pdata = data.to_json() + pdata["ref"] = REF(data) + ui_data += list(pdata) + + return ui_data + + +/// Puts trophies into trophy cases. +/datum/controller/subsystem/persistence/proc/set_up_trophies() + + var/list/valid_trophies = list() + + for(var/datum/trophy_data/data in saved_trophies) + + if(!data) //sanity for incorrect deserialization + continue + + var/path = text2path(data.path) + if(!path) //If the item no longer exist, ignore it + continue + + valid_trophies += data + + for(var/obj/structure/displaycase/trophy/trophy_case in GLOB.trophy_cases) + if(!valid_trophies.len) + break + + if(trophy_case.showpiece) + continue + + trophy_case.set_up_trophy(pick_n_take(valid_trophies)) + +///Collects trophies from all existing trophy cases. +/datum/controller/subsystem/persistence/proc/collect_trophies() + for(var/trophy_case in GLOB.trophy_cases) + save_trophy(trophy_case) + + var/json_file = file("data/trophy_items.json") + var/list/file_data = list() + var/list/converted_data = list() + + for(var/datum/trophy_data/data in saved_trophies) + converted_data += list(data.to_json()) + + converted_data = remove_duplicate_trophies(converted_data) + + file_data["data"] = converted_data + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +///gets the list of json trophies, and deletes the ones with an identical path and message +/datum/controller/subsystem/persistence/proc/remove_duplicate_trophies(list/trophies) + var/list/ukeys = list() + . = list() + for(var/trophy in trophies) + var/tkey = "[trophy["path"]]-[trophy["message"]]" + if(ukeys[tkey]) + continue + else + . += list(trophy) + ukeys[tkey] = TRUE + +///If there is a trophy in the trophy case, saved it, if the trophy was not a holo trophy and has a message attached. +/datum/controller/subsystem/persistence/proc/save_trophy(obj/structure/displaycase/trophy/trophy_case) + if(!trophy_case.holographic_showpiece && trophy_case.showpiece && trophy_case.trophy_message) + var/datum/trophy_data/data = new + data.path = trophy_case.showpiece.type + data.message = trophy_case.trophy_message + data.placer_key = trophy_case.placer_key + saved_trophies += data + diff --git a/code/controllers/subsystem/persistent_paintings.dm b/code/controllers/subsystem/persistent_paintings.dm index 4eb77bd21be..35656e2a56d 100644 --- a/code/controllers/subsystem/persistent_paintings.dm +++ b/code/controllers/subsystem/persistent_paintings.dm @@ -113,6 +113,11 @@ SUBSYSTEM_DEF(persistent_paintings) /// A list of /datum/paintings saved or ready to be saved this round. var/list/paintings = list() + /// A list of paintings' data for paintings that are currently stored in the library. + var/list/cached_painting_data = list() + /// A list of paintings' data for paintings that are currently stored in the library, with admin metadata + var/list/admin_painting_data = list() + ///The list of available frame reskins (they are purely cosmetic) and the associated patronage amount required for them. var/list/frame_types_by_patronage_tier = list( "simple" = 0, @@ -127,8 +132,8 @@ SUBSYSTEM_DEF(persistent_paintings) "gold" = PATRONAGE_EXCELLENT_FRAME, "diamond" = PATRONAGE_AMAZING_FRAME, "rainbow" = PATRONAGE_SUPERB_FRAME, - "supermatter" = PATRONAGE_LEGENDARY_FRAME - ) + "supermatter" = PATRONAGE_LEGENDARY_FRAME, + ) /datum/controller/subsystem/persistent_paintings/Initialize() var/json_file = file("data/paintings.json") @@ -142,8 +147,29 @@ SUBSYSTEM_DEF(persistent_paintings) for(var/obj/structure/sign/painting/painting_frame as anything in painting_frames) painting_frame.load_persistent() + cache_paintings() + return SS_INIT_SUCCESS +/datum/controller/subsystem/persistent_paintings/proc/cache_paintings() + cached_painting_data = list() + admin_painting_data = list() + + for(var/datum/painting/painting as anything in paintings) + cached_painting_data += list(list( + "title" = painting.title, + "creator" = painting.creator_name, + "md5" = painting.md5, + "ref" = REF(painting), + "width" = painting.width, + "height" = painting.height, + "ratio" = painting.width/painting.height, + )) + + var/list/pdata = painting.to_json() + pdata["ref"] = REF(painting) + admin_painting_data += pdata + /** * Generates painting data ready to be consumed by ui. * Args: @@ -152,31 +178,27 @@ SUBSYSTEM_DEF(persistent_paintings) * * search_text : text to search for if the PAINTINGS_FILTER_SEARCH_TITLE or PAINTINGS_FILTER_SEARCH_CREATOR filters are enabled. */ /datum/controller/subsystem/persistent_paintings/proc/painting_ui_data(filter=NONE, admin=FALSE, search_text) - . = list() var/searching = filter & (PAINTINGS_FILTER_SEARCH_TITLE|PAINTINGS_FILTER_SEARCH_CREATOR) && search_text - for(var/datum/painting/painting as anything in paintings) - if(filter & PAINTINGS_FILTER_AI_PORTRAIT && ((painting.width != 24 && painting.width != 23) || (painting.height != 24 && painting.height != 23))) + + if(!searching) + return admin ? admin_painting_data : cached_painting_data + + var/list/filtered_paintings = list() + var/list/searched_paintings = admin ? admin_painting_data : cached_painting_data + + for(var/painting as anything in searched_paintings) + if(filter & PAINTINGS_FILTER_AI_PORTRAIT && ((painting["width"] != 24 && painting["width"] != 23) || (painting["height"] != 24 && painting["height"] != 23))) continue if(searching) var/haystack_text = "" if(filter & PAINTINGS_FILTER_SEARCH_TITLE) - haystack_text = painting.title + haystack_text = painting["title"] else if(filter & PAINTINGS_FILTER_SEARCH_CREATOR) - haystack_text = painting.creator_name + haystack_text = painting["creator"] if(!findtext(haystack_text, search_text)) continue - if(admin) - var/list/pdata = painting.to_json() - pdata["ref"] = REF(painting) - . += list(pdata) - else - . += list(list( - "title" = painting.title, - "creator" = painting.creator_name, - "md5" = painting.md5, - "ref" = REF(painting), - "ratio" = painting.width/painting.height, - )) + filtered_paintings += painting + return filtered_paintings /// Returns paintings with given tag. /datum/controller/subsystem/persistent_paintings/proc/get_paintings_with_tag(tag_name) @@ -309,6 +331,7 @@ SUBSYSTEM_DEF(persistent_paintings) var/payload = json_encode(all_data) fdel(json_file) WRITE_FILE(json_file, payload) + cache_paintings() #undef PAINTINGS_DATA_FORMAT_VERSION #undef PATRONAGE_OK_FRAME diff --git a/code/controllers/subsystem/processing/ai_behaviors.dm b/code/controllers/subsystem/processing/ai_behaviors.dm index 4ec698db32b..e92da2474bb 100644 --- a/code/controllers/subsystem/processing/ai_behaviors.dm +++ b/code/controllers/subsystem/processing/ai_behaviors.dm @@ -8,9 +8,12 @@ PROCESSING_SUBSYSTEM_DEF(ai_behaviors) wait = 1 ///List of all ai_behavior singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors() var/list/ai_behaviors + ///List of all targeting_strategy singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors() + var/list/targeting_strategies /datum/controller/subsystem/processing/ai_behaviors/Initialize() SetupAIBehaviors() + SetupTargetingStrats() return SS_INIT_SUCCESS /datum/controller/subsystem/processing/ai_behaviors/proc/SetupAIBehaviors() @@ -18,3 +21,9 @@ PROCESSING_SUBSYSTEM_DEF(ai_behaviors) for(var/behavior_type in subtypesof(/datum/ai_behavior)) var/datum/ai_behavior/ai_behavior = new behavior_type ai_behaviors[behavior_type] = ai_behavior + +/datum/controller/subsystem/processing/ai_behaviors/proc/SetupTargetingStrats() + targeting_strategies = list() + for(var/target_type in subtypesof(/datum/targeting_strategy)) + var/datum/targeting_strategy/target_start = new target_type + targeting_strategies[target_type] = target_start diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 6208ac91c1c..477f6784964 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/mute, /datum/quirk/softspoken), list(/datum/quirk/poor_aim, /datum/quirk/bighands), list(/datum/quirk/bilingual, /datum/quirk/foreigner), - list(/datum/quirk/spacer_born, /datum/quirk/paraplegic, /datum/quirk/item_quirk/settler), + list(/datum/quirk/spacer_born, /datum/quirk/item_quirk/settler), list(/datum/quirk/photophobia, /datum/quirk/nyctophobia), list(/datum/quirk/item_quirk/settler, /datum/quirk/freerunning), list(/datum/quirk/numb, /datum/quirk/selfaware), @@ -30,6 +30,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/no_guns, /datum/quirk/bighands, /datum/quirk/poor_aim), list(/datum/quirk/no_guns, /datum/quirk/nonviolent), list(/datum/quirk/spacer_born, /datum/quirk/oversized), + list(/datum/quirk/feline_aspect, /datum/quirk/item_quirk/canine, /datum/quirk/item_quirk/avian), //SKYRAT EDIT ADDITION END )) diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 1cc3468fb7d..1d31582fc5f 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -27,15 +27,15 @@ SUBSYSTEM_DEF(research) var/list/techweb_nodes_starting = list() ///category name = list(node.id = TRUE) var/list/techweb_categories = list() - ///associative double-layer path = list(id = list(point_type = point_discount)) - var/list/techweb_boost_items = list() + ///List of all items that can unlock a node. (node.id = list(items)) + var/list/techweb_unlock_items = list() ///Node ids that should be hidden by default. var/list/techweb_nodes_hidden = list() ///Node ids that are exclusive to the BEPIS. var/list/techweb_nodes_experimental = list() ///path = list(point type = value) var/list/techweb_point_items = list( - /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) ) var/list/errored_datums = list() var/list/point_types = list() //typecache style type = TRUE list @@ -64,7 +64,7 @@ SUBSYSTEM_DEF(research) /// Lookup list for ordnance briefers. var/list/ordnance_experiments = list() /// Lookup list for scipaper partners. - var/list/scientific_partners = list() + var/list/datum/scientific_partner/scientific_partners = list() /datum/controller/subsystem/research/Initialize() point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES @@ -153,7 +153,7 @@ SUBSYSTEM_DEF(research) if (!verify_techweb_nodes()) //Verify all nodes have ids and such. stack_trace("Invalid techweb nodes detected") calculate_techweb_nodes() - calculate_techweb_boost_list() + calculate_techweb_item_unlocking_requirements() if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly. CRASH("Invalid techweb nodes detected") @@ -209,25 +209,15 @@ SUBSYSTEM_DEF(research) N.unlock_ids -= u research_node_id_error(u) . = FALSE - for(var/p in N.boost_item_paths) + for(var/p in N.required_items_to_unlock) if(!ispath(p)) - N.boost_item_paths -= p + N.required_items_to_unlock -= p WARNING("[p] is not a valid path.") node_boost_error(N.id, "[p] is not a valid path.") . = FALSE - var/list/points = N.boost_item_paths[p] - if(islist(points)) - for(var/i in points) - if(!isnum(points[i])) - WARNING("[points[i]] is not a valid number.") - node_boost_error(N.id, "[points[i]] is not a valid number.") - . = FALSE - else if(!point_types[i]) - WARNING("[i] is not a valid point type.") - node_boost_error(N.id, "[i] is not a valid point type.") - . = FALSE - else if(!isnull(points)) - N.boost_item_paths -= p + var/list/points = N.required_items_to_unlock[p] + if(!isnull(points)) + N.required_items_to_unlock -= p node_boost_error(N.id, "No valid list.") WARNING("No valid list.") . = FALSE @@ -281,18 +271,16 @@ SUBSYSTEM_DEF(research) var/datum/techweb_node/prereq_node = techweb_node_by_id(prereq_id) prereq_node.unlock_ids[node.id] = node -/datum/controller/subsystem/research/proc/calculate_techweb_boost_list(clearall = FALSE) - if(clearall) - techweb_boost_items = list() +/datum/controller/subsystem/research/proc/calculate_techweb_item_unlocking_requirements() for(var/node_id in techweb_nodes) var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/path in node.boost_item_paths) + for(var/path in node.required_items_to_unlock) if(!ispath(path)) continue - if(length(techweb_boost_items[path])) - techweb_boost_items[path][node.id] = node.boost_item_paths[path] + if(length(techweb_unlock_items[path])) + techweb_unlock_items[path][node.id] = node.required_items_to_unlock[path] else - techweb_boost_items[path] = list(node.id = node.boost_item_paths[path]) + techweb_unlock_items[path] = list(node.id = node.required_items_to_unlock[path]) CHECK_TICK /datum/controller/subsystem/research/proc/populate_ordnance_experiments() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index eee808e9f4e..b1ebf3d586c 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -100,9 +100,6 @@ SUBSYSTEM_DEF(shuttle) /// Wishlist items made by crew for cargo to purchase at their leisure. var/list/request_list = list() - /// A listing of previously delivered supply packs. - var/list/order_history = list() - /// A list of job accesses that are able to purchase any shuttles. var/list/has_purchase_shuttle_access @@ -265,13 +262,27 @@ SUBSYSTEM_DEF(shuttle) message_admins(msg) log_shuttle("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]") emergency_no_recall = TRUE - priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") + priority_announce( + text = "Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.", + title = "Emergency Shuttle Dispatched", + sound = ANNOUNCER_SHUTTLECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) if(emergency.timeLeft(1) > emergency_call_time * ALERT_COEFF_AUTOEVAC_CRITICAL) emergency.request(null, set_coefficient = ALERT_COEFF_AUTOEVAC_CRITICAL) /datum/controller/subsystem/shuttle/proc/block_recall(lockout_timer) + if(isnull(lockout_timer)) + CRASH("Emergency shuttle block was called, but missing a value for the lockout duration") if(admin_emergency_no_recall) - priority_announce("Error!", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Emergency shuttle uplink interference detected, shuttle call disabled while the system reinitializes. Estimated restore in [DisplayTimeText(lockout_timer, round_seconds_to = 60)].", + title = "Uplink Interference", + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) addtimer(CALLBACK(src, PROC_REF(unblock_recall)), lockout_timer) return emergency_no_recall = TRUE @@ -279,7 +290,13 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/unblock_recall() if(admin_emergency_no_recall) - priority_announce("Error!", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text= "Emergency shuttle uplink services are now back online.", + title = "Uplink Restored", + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) return emergency_no_recall = FALSE @@ -519,15 +536,23 @@ SUBSYSTEM_DEF(shuttle) emergency.mode = SHUTTLE_STRANDED emergency.timer = null emergency.sound_played = FALSE - priority_announce("Hostile environment detected. \ - Departure has been postponed indefinitely pending \ - conflict resolution.", null, 'sound/misc/notice1.ogg', ANNOUNCEMENT_TYPE_PRIORITY) + priority_announce( + text = "Departure has been postponed indefinitely pending conflict resolution.", + title = "Hostile Environment Detected", + sound = 'sound/misc/notice1.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) if(!emergency_no_escape && (emergency.mode == SHUTTLE_STRANDED)) emergency.mode = SHUTTLE_DOCKED emergency.setTimer(emergency_dock_time) - priority_announce("Hostile environment resolved. \ - You have 3 minutes to board the Emergency Shuttle.", - null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY) + priority_announce( + text = "You have [DisplayTimeText(emergency_dock_time)] to board the emergency shuttle.", + title = "Hostile Environment Resolved", + sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) //try to move/request to dock_home if possible, otherwise dock_away. Mainly used for admin buttons /datum/controller/subsystem/shuttle/proc/toggleShuttle(shuttle_id, dock_home, dock_away, timed) @@ -717,8 +742,6 @@ SUBSYSTEM_DEF(shuttle) shopping_list = SSshuttle.shopping_list if (istype(SSshuttle.request_list)) request_list = SSshuttle.request_list - if (istype(SSshuttle.order_history)) - order_history = SSshuttle.order_history if (istype(SSshuttle.shuttle_loan)) shuttle_loan = SSshuttle.shuttle_loan diff --git a/code/controllers/subsystem/stock_market.dm b/code/controllers/subsystem/stock_market.dm index 7c2cb71dc49..c0d85eaf85d 100644 --- a/code/controllers/subsystem/stock_market.dm +++ b/code/controllers/subsystem/stock_market.dm @@ -51,6 +51,7 @@ SUBSYSTEM_DEF(stock_market) price_minimum = round(initial(mat.minimum_value_override) * SHEET_MATERIAL_AMOUNT) var/price_maximum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 3) var/price_baseline = initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT + var/quantity_baseline = initial(mat.tradable_base_quantity) var/stock_quantity = materials_quantity[mat] @@ -84,15 +85,15 @@ SUBSYSTEM_DEF(stock_market) switch(trend) if(MARKET_TREND_UPWARD) price_change = ROUND_UP(gaussian(price_units * 0.1, price_baseline * 0.05)) //If we don't ceil, small numbers will get trapped at low values - quantity_change = -round(gaussian(stock_quantity * 0.1, stock_quantity * 0.05)) + quantity_change = -round(gaussian(quantity_baseline * 0.05, quantity_baseline * 0.05)) if(MARKET_TREND_STABLE) price_change = round(gaussian(0, price_baseline * 0.01)) - quantity_change = round(gaussian(0, stock_quantity * 0.01)) + quantity_change = round(gaussian(0, quantity_baseline * 0.01)) if(MARKET_TREND_DOWNWARD) price_change = -ROUND_UP(gaussian(price_units * 0.1, price_baseline * 0.05)) - quantity_change = round(gaussian(stock_quantity * 0.1, stock_quantity * 0.05)) + quantity_change = round(gaussian(quantity_baseline * 0.05, quantity_baseline * 0.05)) materials_prices[mat] = round(clamp(price_units + price_change, price_minimum, price_maximum)) - materials_quantity[mat] = round(clamp(stock_quantity + quantity_change, 0, initial(mat.tradable_base_quantity) * 2)) + materials_quantity[mat] = round(clamp(stock_quantity + quantity_change, 0, quantity_baseline * 2)) /** * Market events are a way to spice up the market and make it more interesting. diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 15a4aed4adb..e68ee9ee1f2 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -66,7 +66,7 @@ SUBSYSTEM_DEF(vote) // Remove AFK or clientless non-voters. for(var/non_voter_ckey in non_voters) var/client/non_voter_client = non_voters[non_voter_ckey] - if(!non_voter_client || non_voter_client.is_afk()) + if(!istype(non_voter_client) || non_voter_client.is_afk()) non_voters -= non_voter_ckey // Now get the result of the vote. diff --git a/code/datums/achievements/_achievement_data.dm b/code/datums/achievements/_achievement_data.dm index aa47d8e9fc8..295770b89b5 100644 --- a/code/datums/achievements/_achievement_data.dm +++ b/code/datums/achievements/_achievement_data.dm @@ -45,7 +45,7 @@ kv[key] = value qdel(Query) - for(var/award_type in sortTim(subtypesof(/datum/award), GLOBAL_PROC_REF(cmp_award_priority))) + for(var/award_type in subtypesof(/datum/award)) var/datum/award/award = SSachievements.awards[award_type] if(!award || !award.name) //Skip abstract achievements types continue @@ -116,7 +116,7 @@ "icon_class" = assets.icon_class_name(award.icon), "value" = data[achievement_type], ) - award_data += award.get_ui_data() + award_data += award.get_ui_data(user.ckey) .["achievements"] += list(award_data) for(var/score in SSachievements.scores) diff --git a/code/datums/achievements/_awards.dm b/code/datums/achievements/_awards.dm index 7a7701e0cf1..23ab5e81001 100644 --- a/code/datums/achievements/_awards.dm +++ b/code/datums/achievements/_awards.dm @@ -15,9 +15,6 @@ //Value returned on db connection failure, in case we want to differ 0 and nonexistent later on var/default_value = FALSE - ///Whether the award has to be loaded before or after other awards on [/datum/achievement_data/load_all_achievements()] - var/load_priority = AWARD_PRIORITY_DEFAULT - ///This proc loads the achievement data from the hub. /datum/award/proc/load(key) if(!SSdbcore.Connect()) @@ -109,7 +106,6 @@ /datum/award/achievement/on_unlock(mob/user) . = ..() to_chat(user, span_greenannounce("Achievement unlocked: [name]!")) - user.client.give_award(/datum/award/score/achievements_score, user, 1) var/sound/sound_to_send = LAZYACCESS(GLOB.achievement_sounds, user.client.prefs.read_preference(/datum/preference/choiced/sound_achievement)) if(sound_to_send) SEND_SOUND(user, sound_to_send) @@ -177,20 +173,45 @@ desc = "Don't worry, metagaming is all that matters." icon = "elephant" //Obey the reference database_id = ACHIEVEMENTS_SCORE - load_priority = AWARD_PRIORITY_LAST //See below -/** - * If the raw value is not numerical, it's likely this is the first time the score is being loaded for a ckey. - * So, let's start counting how many achievements have been unlocked so far and return its value instead, - * which is why this award should always be loaded last. - */ +/datum/award/score/achievements_score/get_ui_data(key) + . = ..() + var/datum/db_query/get_unlocked_count = SSdbcore.NewQuery( + "SELECT COUNT(m.achievement_key) FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' WHERE a.ckey = :ckey", + list("ckey" = key) + ) + if(!get_unlocked_count.Execute(async = TRUE)) + qdel(get_unlocked_count) + .["value"] = default_value + return . + if(get_unlocked_count.NextRow()) + .["value"] = text2num(get_unlocked_count.item[1]) + qdel(get_unlocked_count) + return . + +/datum/award/score/achievements_score/LoadHighScores() + var/datum/db_query/get_unlocked_highscore = SSdbcore.NewQuery( + "SELECT ckey, COUNT(ckey) AS c FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' GROUP BY ckey ORDER BY c DESC LIMIT 50", + ) + if(!get_unlocked_highscore.Execute(async = TRUE)) + qdel(get_unlocked_highscore) + return + else + while(get_unlocked_highscore.NextRow()) + var/key = get_unlocked_highscore.item[1] + var/score = text2num(get_unlocked_highscore.item[2]) + high_scores[key] = score + qdel(get_unlocked_highscore) + /datum/award/score/achievements_score/on_achievement_data_init(datum/achievement_data/holder, database_value) - if(isnum(database_value)) - return ..() - //We need to keep the value differents so that it's properly saved at the end of the round. - holder.original_cached_data[type] = 0 - var/value = 0 - for(var/award_type in holder.data) - if(ispath(award_type, /datum/award/achievement) && holder.data[award_type]) - value++ - holder.data[type] = value + var/datum/db_query/get_unlocked_load = SSdbcore.NewQuery( + "SELECT COUNT(m.achievement_key) FROM [format_table_name("achievements")] AS a JOIN [format_table_name("achievement_metadata")] m ON a.achievement_key = m.achievement_key AND m.achievement_type = 'Achievement' WHERE a.ckey = :ckey", + list("ckey" = holder.owner_ckey) + ) + if(!get_unlocked_load.Execute(async = TRUE)) + qdel(get_unlocked_load) + return + if(get_unlocked_load.NextRow()) + holder.data[type] = text2num(get_unlocked_load.item[1]) || 0 + holder.original_cached_data[type] = 0 + qdel(get_unlocked_load) diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index f83f2cde7b0..8ae3da33e3a 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -135,11 +135,11 @@ database_id = MEDAL_COSMOS_ASCENSION icon = "cosmicascend" -/datum/award/achievement/misc/knock_ascension - name = "Secrets behind the Spider Door" +/datum/award/achievement/misc/lock_ascension + name = "Secrets of the Locked Labyrinth" desc = "You managed to open a gate into the mansus." - database_id = MEDAL_KNOCK_ASCENSION - icon = "knockascend" + database_id = MEDAL_LOCK_ASCENSION + icon = "lockascend" /datum/award/achievement/misc/grand_ritual_finale name = "Archmage" diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index a7e0603461a..ed4309c36e1 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -177,6 +177,8 @@ /// Starts a cooldown time for other abilities that share a cooldown with this. Has some niche usage with more complicated attack ai! /// Will use default cooldown time if an override is not specified /datum/action/cooldown/proc/StartCooldownOthers(override_cooldown_time) + if(!length(owner.actions)) + return // Possible if they have an action they don't control for(var/datum/action/cooldown/shared_ability in owner.actions - src) if(!(shared_cooldown & shared_ability.shared_cooldown)) continue diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm index f0fcfb9783e..fa7bc821a5e 100644 --- a/code/datums/actions/items/toggles.dm +++ b/code/datums/actions/items/toggles.dm @@ -82,6 +82,17 @@ return FALSE return ..() +/datum/action/item_action/toggle_hud + name = "Toggle Implant HUD" + desc = "Disables your HUD implant's visuals. You can still access examine information." + +/datum/action/item_action/toggle_hud/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/organ/internal/cyberimp/eyes/hud/hud_implant = target + hud_implant.toggle_hud(owner) + /datum/action/item_action/wheelys name = "Toggle Wheels" desc = "Pops out or in your shoes' wheels." diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index 7fb56209777..d235b4d50ab 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -156,17 +156,23 @@ SSexplosions.med_mov_atom += target INVOKE_ASYNC(src, PROC_REF(DestroySurroundings), source) - hit_target(source, target, charge_damage) + try_hit_target(source, target) -/datum/action/cooldown/mob_cooldown/charge/proc/hit_target(atom/movable/source, atom/target, damage_dealt) - if(!isliving(target)) - return - var/mob/living/living_target = target - living_target.visible_message("[source] slams into [living_target]!", "[source] tramples you into the ground!") - source.forceMove(get_turf(living_target)) - living_target.apply_damage(damage_dealt, BRUTE, wound_bonus = CANT_WOUND) - playsound(get_turf(living_target), 'sound/effects/meteorimpact.ogg', 100, TRUE) - shake_camera(living_target, 4, 3) +/// Attempt to hit someone with our charge +/datum/action/cooldown/mob_cooldown/charge/proc/try_hit_target(atom/movable/source, atom/target) + if (can_hit_target(source, target)) + hit_target(source, target, charge_damage) + +/// Returns true if we're allowed to charge into this target +/datum/action/cooldown/mob_cooldown/charge/proc/can_hit_target(atom/movable/source, atom/target) + return isliving(target) + +/// Actually hit someone +/datum/action/cooldown/mob_cooldown/charge/proc/hit_target(atom/movable/source, mob/living/target, damage_dealt) + target.visible_message(span_danger("[source] slams into [target]!"), span_userdanger("[source] tramples you into the ground!")) + target.apply_damage(damage_dealt, BRUTE, wound_bonus = CANT_WOUND) + playsound(get_turf(target), 'sound/effects/meteorimpact.ogg', 100, TRUE) + shake_camera(target, 4, 3) shake_camera(source, 2, 3) /datum/action/cooldown/mob_cooldown/charge/basic_charge @@ -187,31 +193,33 @@ /datum/action/cooldown/mob_cooldown/charge/basic_charge/do_charge_indicator(atom/charger, atom/charge_target) charger.Shake(shake_pixel_shift, shake_pixel_shift, shake_duration) +/datum/action/cooldown/mob_cooldown/charge/basic_charge/can_hit_target(atom/movable/source, atom/target) + if(!isliving(target)) + if(!target.density || target.CanPass(source, get_dir(target, source))) + return FALSE + return TRUE + return ..() + /datum/action/cooldown/mob_cooldown/charge/basic_charge/hit_target(atom/movable/source, atom/target, damage_dealt) var/mob/living/living_source if(isliving(source)) living_source = source if(!isliving(target)) - if(!target.density || target.CanPass(source, get_dir(target, source))) - return source.visible_message(span_danger("[source] smashes into [target]!")) - if(!living_source) - return - living_source.Stun(recoil_duration, ignore_canstun = TRUE) + living_source?.Stun(recoil_duration, ignore_canstun = TRUE) return var/mob/living/living_target = target if(ishuman(living_target)) var/mob/living/carbon/human/human_target = living_target - if(human_target.check_shields(source, 0, "the [source.name]", attack_type = LEAP_ATTACK) && living_source) + if(human_target.check_block(source, 0, "the [source.name]", attack_type = LEAP_ATTACK) && living_source) living_source.Stun(recoil_duration, ignore_canstun = TRUE) return - living_target.visible_message(span_danger("[source] charges on [living_target]!"), span_userdanger("[source] charges into you!")) + living_target.visible_message(span_danger("[source] charges into [living_target]!"), span_userdanger("[source] charges into you!")) living_target.Knockdown(knockdown_duration) - /datum/status_effect/tired_post_charge id = "tired_post_charge" duration = 1 SECONDS diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index 45b6538c018..b3673b2f96c 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -37,7 +37,7 @@ var/list/turfs = get_line(owner, target_turf) - get_turf(owner) INVOKE_ASYNC(src, PROC_REF(progressive_fire_line), turfs) -/// Creates fire with a delay on the list of targetted turfs +/// Creates fire with a delay on the list of targeted turfs /datum/action/cooldown/mob_cooldown/fire_breath/proc/progressive_fire_line(list/burn_turfs) if (QDELETED(owner) || owner.stat == DEAD) return diff --git a/code/datums/actions/mobs/personality_commune.dm b/code/datums/actions/mobs/personality_commune.dm new file mode 100644 index 00000000000..26cf4834492 --- /dev/null +++ b/code/datums/actions/mobs/personality_commune.dm @@ -0,0 +1,56 @@ +// This can probably be changed to use mind linker at some point +/datum/action/personality_commune + name = "Personality Commune" + desc = "Sends thoughts to your alternate consciousness." + background_icon_state = "bg_spell" + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "telepathy" + overlay_icon_state = "bg_spell_border" + + /// Fluff text shown when a message is sent to the pair + var/fluff_text = span_boldnotice("You hear an echoing voice in the back of your head...") + +/datum/action/personality_commune/New(Target) + . = ..() + if(!istype(target, /datum/brain_trauma/severe/split_personality)) + stack_trace("[type] was created on a target that isn't a /datum/brain_trauma/severe/split_personality, this doesn't work.") + qdel(src) + +/datum/action/personality_commune/Grant(mob/grant_to) + if(!istype(grant_to, /mob/living/split_personality)) + return + + return ..() + +/datum/action/personality_commune/Trigger(trigger_flags) + . = ..() + if(!.) + return FALSE + + var/datum/brain_trauma/severe/split_personality/trauma = target + var/mob/living/split_personality/non_controller = usr + var/client/non_controller_client = non_controller.client + + var/to_send = tgui_input_text(non_controller, "What would you like to tell your other self?", "Commune") + if(QDELETED(src) || QDELETED(trauma) || !to_send) + return FALSE + + var/mob/living/carbon/human/personality_body = trauma.owner + if(personality_body.client == non_controller_client) // We took control + return FALSE + + var/user_message = span_boldnotice("You concentrate and send thoughts to your other self:") + var/user_message_body = span_notice("[to_send]") + + to_chat(non_controller, "[user_message] [user_message_body]") + + personality_body.balloon_alert(personality_body, "you hear a voice") + to_chat(personality_body, "[fluff_text] [user_message_body]") + + log_directed_talk(non_controller, personality_body, to_send, LOG_SAY, "[name]") + for(var/dead_mob in GLOB.dead_mob_list) + if(!isobserver(dead_mob)) + continue + to_chat(dead_mob, "[FOLLOW_LINK(dead_mob, non_controller)] [span_boldnotice("[non_controller] [name]:")] [span_notice("\"[to_send]\" to")] [span_name("[trauma]")]") + + return TRUE diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index a8c118303f3..88a24f50516 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -352,7 +352,11 @@ multiple modular subtrees with behaviors /// Returns true if we have a blackboard key with the provided key and it is not qdeleting /datum/ai_controller/proc/blackboard_key_exists(key) var/datum/key_value = blackboard[key] - return !QDELETED(key_value) + if (isdatum(key_value)) + return !QDELETED(key_value) + if (islist(key_value)) + return length(key_value) > 0 + return !!key_value /** * Used to manage references to datum by AI controllers diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index 553b192a180..5941bb818f4 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -2,74 +2,77 @@ * Find a compatible, living partner, if we're also alone. */ /datum/ai_behavior/find_partner - action_cooldown = 40 SECONDS - /// Range to look. var/range = 7 - /// Maximum number of children var/max_children = 3 /datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key) . = ..() - + max_children = controller.blackboard[BB_MAX_CHILDREN] || max_children var/mob/pawn_mob = controller.pawn var/list/partner_types = controller.blackboard[partner_types_key] var/list/child_types = controller.blackboard[child_types_key] + var/mob/living/living_pawn = controller.pawn - var/mob/living/partner var/children = 0 - for(var/mob/other in oview(range, pawn_mob)) - if(other.stat != CONSCIOUS) //Check if it's conscious FIRST. - continue - var/is_child = is_type_in_list(other, child_types) - if(is_child) //Check for children SECOND. - children++ - else if(is_type_in_list(other, partner_types)) - if(other.ckey) - continue - else if(!is_child && other.gender == MALE && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; - partner = other - - //shyness check. we're not shy in front of things that share a faction with us. - else if(isliving(other) && !pawn_mob.faction_check_atom(other)) + for(var/mob/living/other in oview(range, pawn_mob)) + if(!pawn_mob.faction_check_atom(other)) finish_action(controller, FALSE) return - if(partner && children < max_children) - controller.set_blackboard_key(target_key, partner) + if(children >= max_children) + finish_action(controller, FALSE) + return + + if(other.stat != CONSCIOUS) //Check if it's conscious FIRST. + continue + + if(is_type_in_list(other, child_types)) //Check for children SECOND. + children++ + continue + + if(!is_type_in_list(other, partner_types) || !HAS_TRAIT(other, TRAIT_MOB_BREEDER)) + continue + + if(other.ckey) + continue + + if(other.gender != living_pawn.gender && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; + controller.set_blackboard_key(target_key, other) + finish_action(controller, TRUE) + + finish_action(controller, FALSE) - finish_action(controller, TRUE) /** * Reproduce. */ /datum/ai_behavior/make_babies - action_cooldown = 40 SECONDS behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH /datum/ai_behavior/make_babies/setup(datum/ai_controller/controller, target_key, child_types_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(!target) return FALSE set_movement_target(controller, target) - return TRUE /datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key) . = ..() var/mob/target = controller.blackboard[target_key] - if(!target || target.stat != CONSCIOUS) + if(QDELETED(target) || target.stat != CONSCIOUS) finish_action(controller, FALSE, target_key) return - - var/child_type = pick_weight(controller.blackboard[child_types_key]) - var/turf/turf_loc = get_turf(controller.pawn.loc) - if(turf_loc) - new child_type(turf_loc) - + var/mob/living/basic/living_pawn = controller.pawn + living_pawn.set_combat_mode(FALSE) + living_pawn.melee_attack(target) finish_action(controller, TRUE, target_key) /datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() - controller.clear_blackboard_key(target_key) + if(!succeeded) + return + var/mob/living/living_pawn = controller.pawn + living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) diff --git a/code/datums/ai/babies/babies_subtrees.dm b/code/datums/ai/babies/babies_subtrees.dm index aad92f8422e..1b7fe5b88cb 100644 --- a/code/datums/ai/babies/babies_subtrees.dm +++ b/code/datums/ai/babies/babies_subtrees.dm @@ -2,12 +2,23 @@ * Reproduce with a similar mob. */ /datum/ai_planning_subtree/make_babies + operational_datums = list(/datum/component/breed) + ///chance to make babies var/chance = 5 + ///make babies behavior we will use + var/datum/ai_behavior/reproduce_behavior = /datum/ai_behavior/make_babies /datum/ai_planning_subtree/make_babies/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - if(controller.pawn.gender != FEMALE || !SPT_PROB(chance, seconds_per_tick)) + if(!SPT_PROB(chance, seconds_per_tick)) + return + + if(controller.blackboard_key_exists(BB_BABIES_TARGET)) + controller.queue_behavior(reproduce_behavior, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES) + return SUBTREE_RETURN_FINISH_PLANNING + + if(controller.pawn.gender == FEMALE || !controller.blackboard[BB_BREED_READY]) return var/partner_types = controller.blackboard[BB_BABIES_PARTNER_TYPES] @@ -21,7 +32,4 @@ return // Find target - if(controller.blackboard_key_exists(BB_BABIES_TARGET)) - controller.queue_behavior(/datum/ai_behavior/make_babies, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES) - return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_partner, BB_BABIES_TARGET, BB_BABIES_PARTNER_TYPES, BB_BABIES_CHILD_TYPES) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 91ba7ec4894..21b141feff8 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -2,10 +2,10 @@ action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() - if(!controller.blackboard_key_exists(targetting_datum_key)) - CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + if(!controller.blackboard[targeting_strategy_key]) + CRASH("No targeting strategy was supplied in the blackboard for [controller.pawn]") //Hiding location is priority var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] @@ -14,7 +14,7 @@ set_movement_target(controller, target) -/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) if (isliving(controller.pawn)) var/mob/living/pawn = controller.pawn if (world.time < pawn.next_move) @@ -22,15 +22,15 @@ . = ..() var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) - if(!targetting_datum.can_attack(basic_mob, target)) + if(!targeting_strategy.can_attack(basic_mob, target)) finish_action(controller, FALSE, target_key) return - var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! controller.set_blackboard_key(hiding_location_key, hiding_target) @@ -40,7 +40,7 @@ basic_mob.melee_attack(target) -/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() if(!succeeded) controller.clear_blackboard_key(target_key) @@ -54,30 +54,30 @@ ///do we care about avoiding friendly fire? var/avoid_friendly_fire = FALSE -/datum/ai_behavior/basic_ranged_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if(QDELETED(target)) return FALSE set_movement_target(controller, target) -/datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) - if(!targetting_datum.can_attack(basic_mob, target, chase_range)) + if(!targeting_strategy.can_attack(basic_mob, target, chase_range)) finish_action(controller, FALSE, target_key) return - var/atom/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/atom/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! var/atom/final_target = hiding_target ? hiding_target : target if(!can_see(basic_mob, final_target, required_distance)) return - if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targetting_datum)) + if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targeting_strategy)) adjust_position(basic_mob, target) return ..() @@ -85,17 +85,17 @@ basic_mob.RangedAttack(final_target) return ..() //only start the cooldown when the shot is shot -/datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() if(!succeeded) controller.clear_blackboard_key(target_key) -/datum/ai_behavior/basic_ranged_attack/proc/check_friendly_in_path(mob/living/source, atom/target, datum/targetting_datum/targetting_datum) +/datum/ai_behavior/basic_ranged_attack/proc/check_friendly_in_path(mob/living/source, atom/target, datum/targeting_strategy/targeting_strategy) var/list/turfs_list = calculate_trajectory(source, target) for(var/turf/possible_turf as anything in turfs_list) for(var/mob/living/potential_friend in possible_turf) - if(!targetting_datum.can_attack(source, potential_friend)) + if(!targeting_strategy.can_attack(source, potential_friend)) return TRUE return FALSE diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm similarity index 100% rename from code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targetting.dm rename to code/datums/ai/basic_mobs/basic_ai_behaviors/nearest_targeting.dm diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm similarity index 82% rename from code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm rename to code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 376f62a5855..435b9cb1ef3 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targetting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -7,16 +7,16 @@ /// Static typecache list of potentially dangerous objs var/static/list/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha)) -/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() var/mob/living/living_mob = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) - if(!targetting_datum) + if(!targeting_strategy) CRASH("No target datum was supplied in the blackboard for [controller.pawn]") var/atom/current_target = controller.blackboard[target_key] - if (targetting_datum.can_attack(living_mob, current_target, vision_range)) + if (targeting_strategy.can_attack(living_mob, current_target, vision_range)) finish_action(controller, succeeded = FALSE) return @@ -37,7 +37,7 @@ var/list/filtered_targets = list() for(var/atom/pot_target in potential_targets) - if(targetting_datum.can_attack(living_mob, pot_target))//Can we attack it? + if(targeting_strategy.can_attack(living_mob, pot_target))//Can we attack it? filtered_targets += pot_target continue @@ -48,7 +48,7 @@ var/atom/target = pick_final_target(controller, filtered_targets) controller.set_blackboard_key(target_key, target) - var/atom/potential_hiding_location = targetting_datum.find_hidden_mobs(living_mob, target) + var/atom/potential_hiding_location = targeting_strategy.find_hidden_mobs(living_mob, target) if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm index f5e4f74a1fe..e162cc61299 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm @@ -18,7 +18,7 @@ . = ..() var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent = controller.blackboard[target_key] || controller.blackboard[BB_ENTRY_VENT_TARGET] var/mob/living/cached_pawn = controller.pawn - if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETTING_VENT] || !is_vent_valid(entry_vent)) + if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETING_VENT] || !is_vent_valid(entry_vent)) return if(!cached_pawn.can_enter_vent(entry_vent, provide_feedback = FALSE)) // we're an AI we scoff at feedback @@ -30,7 +30,7 @@ finish_action(controller, FALSE, target_key) return - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. cached_pawn.handle_ventcrawl(entry_vent) if(!HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING)) //something failed and we ARE NOT IN THE VENT even though the earlier check said we were good to go! odd. finish_action(controller, FALSE, target_key) @@ -134,5 +134,5 @@ controller.clear_blackboard_key(target_key) controller.clear_blackboard_key(BB_ENTRY_VENT_TARGET) controller.clear_blackboard_key(BB_EXIT_VENT_TARGET) - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, FALSE) // just in case + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // just in case diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targeting.dm similarity index 100% rename from code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm rename to code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targeting.dm diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm index c3d334165d9..41169004354 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm @@ -12,19 +12,19 @@ var/mob/living/pawn = controller.pawn if (LAZYLEN(pawn.do_afters)) return - controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /// Attack something which is already adjacent to us without moving /datum/ai_behavior/basic_melee_attack/opportunistic action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/basic_melee_attack/opportunistic/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) - if (!controller.blackboard_key_exists(targetting_datum_key)) +/datum/ai_behavior/basic_melee_attack/opportunistic/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + if (!controller.blackboard_key_exists(targeting_strategy_key)) CRASH("No target datum was supplied in the blackboard for [controller.pawn]") return controller.blackboard_key_exists(target_key) -/datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/atom/movable/atom_pawn = controller.pawn if(!atom_pawn.CanReach(controller.blackboard[target_key])) finish_action(controller, TRUE, target_key) // Don't clear target diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm index 9f1053f29d3..7059bec93fe 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -74,7 +74,7 @@ return FALSE if (basic_mob.see_invisible < object.invisibility) return FALSE - var/list/whitelist = basic_mob.ai_controller.blackboard[BB_OBSTACLE_TARGETTING_WHITELIST] + var/list/whitelist = basic_mob.ai_controller.blackboard[BB_OBSTACLE_TARGETING_WHITELIST] if(whitelist && !is_type_in_typecache(object, whitelist)) return FALSE diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index 47f4155ac45..4d5319bca86 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -1,19 +1,19 @@ /// Add or remove people to our retaliation shitlist just on an arbitrary whim /datum/ai_planning_subtree/capricious_retaliate /// Blackboard key which tells us how to select valid targets - var/targetting_datum_key = BB_TARGETTING_DATUM + var/targeting_strategy_key = BB_TARGETING_STRATEGY /// Whether we should skip checking faction for our decision var/ignore_faction = TRUE /datum/ai_planning_subtree/capricious_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/capricious_retaliate, targetting_datum_key, ignore_faction) + controller.queue_behavior(/datum/ai_behavior/capricious_retaliate, targeting_strategy_key, ignore_faction) /// Add or remove people to our retaliation shitlist just on an arbitrary whim /datum/ai_behavior/capricious_retaliate action_cooldown = 1 SECONDS -/datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targetting_datum_key, ignore_faction) +/datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction) . = ..() var/atom/pawn = controller.pawn if (controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) @@ -35,10 +35,10 @@ var/aggro_range = controller.blackboard[BB_AGGRO_RANGE] || 9 var/list/potential_targets = hearers(aggro_range, get_turf(pawn)) - pawn if (!length(potential_targets)) - failed_targetting(controller, pawn, ignore_faction) + failed_targeting(controller, pawn, ignore_faction) return - var/datum/targetting_datum/target_helper = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/target_helper = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) var/mob/living/final_target = null if (ignore_faction) @@ -49,7 +49,7 @@ final_target = test_target if (isnull(final_target)) - failed_targetting(controller, pawn, ignore_faction) + failed_targeting(controller, pawn, ignore_faction) return controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, final_target) @@ -57,7 +57,7 @@ finish_action(controller, TRUE, ignore_faction) /// Called if we try but fail to target something -/datum/ai_behavior/capricious_retaliate/proc/failed_targetting(datum/ai_controller/controller, atom/pawn, ignore_faction) +/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(datum/ai_controller/controller, atom/pawn, ignore_faction) finish_action(controller, FALSE, ignore_faction) pawn.visible_message(span_notice("[pawn] grumbles.")) // We're pissed off but with no outlet to vent our frustration upon diff --git a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm index 4f901745eee..4a2f5b476c7 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm @@ -20,7 +20,7 @@ return SUBTREE_RETURN_FINISH_PLANNING //we gotta get out of here. /// Try to escape from your current target, without performing any other actions. -/// Reads from some fleeing-specific targetting keys rather than the current mob target. +/// Reads from some fleeing-specific targeting keys rather than the current mob target. /datum/ai_planning_subtree/flee_target/from_flee_key target_key = BB_BASIC_MOB_FLEE_TARGET hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION diff --git a/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm b/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm new file mode 100644 index 00000000000..12c77119f3e --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/go_for_swim.dm @@ -0,0 +1,59 @@ +#define DEFAULT_TIME_SWIMMER 30 SECONDS + +///subtree to go and swim! +/datum/ai_planning_subtree/go_for_swim + +/datum/ai_planning_subtree/go_for_swim/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_SWIM_ALTERNATE_TURF)) + controller.queue_behavior(/datum/ai_behavior/travel_towards/swimming, BB_SWIM_ALTERNATE_TURF) + + if(isnull(controller.blackboard[BB_KEY_SWIM_TIME])) + controller.set_blackboard_key(BB_KEY_SWIM_TIME, DEFAULT_TIME_SWIMMER) + + var/mob/living/living_pawn = controller.pawn + var/turf/our_turf = get_turf(living_pawn) + + // we have been taken out of water! + controller.set_blackboard_key(BB_CURRENTLY_SWIMMING, iswaterturf(our_turf)) + + if(controller.blackboard[BB_KEY_SWIM_TIME] < world.time) + controller.queue_behavior(/datum/ai_behavior/find_and_set/swim_alternate, BB_SWIM_ALTERNATE_TURF, /turf/open) + return + + // have some fun in the water + if(controller.blackboard[BB_CURRENTLY_SWIMMING] && SPT_PROB(5, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/perform_emote, "splashes water all around!") + + +///find land if its time to get out of water, otherwise find water +/datum/ai_behavior/find_and_set/swim_alternate + +/datum/ai_behavior/find_and_set/swim_alternate/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/living_pawn = controller.pawn + if(QDELETED(living_pawn)) + return null + var/look_for_land = controller.blackboard[BB_CURRENTLY_SWIMMING] + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(search_range, living_pawn)) + if(isclosedturf(possible_turf) || isspaceturf(possible_turf) || isopenspaceturf(possible_turf)) + continue + if(possible_turf.is_blocked_turf()) + continue + if(look_for_land == iswaterturf(possible_turf)) + continue + possible_turfs += possible_turf + + if(!length(possible_turfs)) + return null + + return(pick(possible_turfs)) + +/datum/ai_behavior/travel_towards/swimming + clear_target = TRUE + +/datum/ai_behavior/travel_towards/swimming/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + var/time_to_add = controller.blackboard[BB_KEY_SWIMMER_COOLDOWN] ? controller.blackboard[BB_KEY_SWIMMER_COOLDOWN] : DEFAULT_TIME_SWIMMER + controller.set_blackboard_key(BB_KEY_SWIM_TIME, world.time + time_to_add ) + +#undef DEFAULT_TIME_SWIMMER diff --git a/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm b/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm index 63a745305b2..240272d1ef4 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/opportunistic_ventcrawler.dm @@ -15,6 +15,6 @@ controller.queue_behavior(/datum/ai_behavior/travel_towards, BB_ENTRY_VENT_TARGET) return - controller.set_blackboard_key(BB_CURRENTLY_TARGETTING_VENT, TRUE) + controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, TRUE) controller.queue_behavior(/datum/ai_behavior/crawl_through_vents, BB_ENTRY_VENT_TARGET) return SUBTREE_RETURN_FINISH_PLANNING // we are going into this vent... no distractions diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index be395f3dfe4..95a125eea5c 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -14,30 +14,30 @@ . = ..() if(!controller.blackboard_key_exists(target_key)) return - controller.queue_behavior(attack_behavior, target_key, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range) + controller.queue_behavior(attack_behavior, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range) /// How often will we try to perform our ranged attack? /datum/ai_behavior/ranged_skirmish action_cooldown = 1 SECONDS -/datum/ai_behavior/ranged_skirmish/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, max_range, min_range) +/datum/ai_behavior/ranged_skirmish/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) . = ..() var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] return !QDELETED(target) -/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, max_range, min_range) +/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) finish_action(controller, succeeded = FALSE) return - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if(!targetting_datum.can_attack(controller.pawn, target)) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if(!targeting_strategy.can_attack(controller.pawn, target)) finish_action(controller, succeeded = FALSE) return - var/hiding_target = targetting_datum.find_hidden_mobs(controller.pawn, target) + var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target) controller.set_blackboard_key(hiding_location_key, hiding_target) target = hiding_target || target diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm index 210aaf0aa8b..5b1f5ffbff9 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_attack_target.dm @@ -8,7 +8,7 @@ . = ..() if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) return - controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) if (end_planning) return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. @@ -20,5 +20,5 @@ . = ..() if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) return - controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm index 3fe1ada33ba..6630f7d193d 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm @@ -5,11 +5,11 @@ . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) return - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /// Find the nearest thing on our list of 'things which have done damage to me' and set it as the flee target /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee - var/targeting_key = BB_TARGETTING_DATUM + var/targeting_key = BB_TARGETING_STRATEGY /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() @@ -18,4 +18,4 @@ controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list/nearest, BB_BASIC_MOB_RETALIATE_LIST, BB_BASIC_MOB_CURRENT_TARGET, targeting_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/from_flee_key - targeting_key = BB_FLEE_TARGETTING_DATUM + targeting_key = BB_FLEE_TARGETING_STRATEGY diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm index ec4ef1863ad..1c7d8de9120 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_target.dm @@ -2,7 +2,7 @@ /datum/ai_planning_subtree/simple_find_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) // Prevents finding a target if a human is nearby /datum/ai_planning_subtree/simple_find_target/not_while_observed diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm index 8840c1ea3a7..7a230014d9a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_wounded_target.dm @@ -3,4 +3,4 @@ /datum/ai_planning_subtree/simple_find_wounded_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/most_wounded, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/most_wounded, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index 701f911d273..55ec7387613 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -2,7 +2,7 @@ /datum/ai_planning_subtree/target_retaliate operational_datums = list(/datum/element/ai_retaliate, /datum/component/ai_retaliate_advanced) /// Blackboard key which tells us how to select valid targets - var/targetting_datum_key = BB_TARGETTING_DATUM + var/targeting_strategy_key = BB_TARGETING_STRATEGY /// Blackboard key in which to store selected target var/target_key = BB_BASIC_MOB_CURRENT_TARGET /// Blackboard key in which to store selected target's hiding place @@ -12,16 +12,16 @@ /datum/ai_planning_subtree/target_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() - controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targetting_datum_key, hiding_place_key, check_faction) + controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targeting_strategy_key, hiding_place_key, check_faction) /datum/ai_planning_subtree/target_retaliate/check_faction check_faction = TRUE /// Places a mob which you can see and who has recently attacked you into some 'run away from this' AI keys -/// Can use a different targetting datum than you use to select attack targets +/// Can use a different targeting strategy than you use to select attack targets /// Not required if fleeing is the only target behaviour or uses the same target datum /datum/ai_planning_subtree/target_retaliate/to_flee - targetting_datum_key = BB_FLEE_TARGETTING_DATUM + targeting_strategy_key = BB_FLEE_TARGETING_STRATEGY target_key = BB_BASIC_MOB_FLEE_TARGET hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION @@ -34,11 +34,11 @@ /// How far can we see stuff? var/vision_range = 9 -/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targetting_datum_key, hiding_location_key, check_faction) +/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction) . = ..() var/mob/living/living_mob = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if(!targetting_datum) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if(!targeting_strategy) CRASH("No target datum was supplied in the blackboard for [controller.pawn]") var/list/shitlist = controller.blackboard[shitlist_key] @@ -47,13 +47,13 @@ if (!check_faction) controller.set_blackboard_key(BB_TEMPORARILY_IGNORE_FACTION, TRUE) - if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targetting_datum.can_attack(living_mob, existing_target, vision_range)) + if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targeting_strategy.can_attack(living_mob, existing_target, vision_range)) finish_action(controller, succeeded = TRUE, check_faction = check_faction) return var/list/enemies_list = list() for(var/mob/living/potential_target as anything in shitlist) - if(!targetting_datum.can_attack(living_mob, potential_target, vision_range)) + if(!targeting_strategy.can_attack(living_mob, potential_target, vision_range)) continue enemies_list += potential_target @@ -65,7 +65,7 @@ var/atom/new_target = pick_final_target(controller, enemies_list) controller.set_blackboard_key(target_key, new_target) - var/atom/potential_hiding_location = targetting_datum.find_hidden_mobs(living_mob, new_target) + var/atom/potential_hiding_location = targeting_strategy.find_hidden_mobs(living_mob, new_target) if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm index d9ee3ef0918..cd809804ba3 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/targeted_mob_ability.dm @@ -1,7 +1,7 @@ /// Attempts to use a mob ability on a target /datum/ai_planning_subtree/targeted_mob_ability /// Blackboard key for the ability - var/ability_key = BB_TARGETTED_ACTION + var/ability_key = BB_TARGETED_ACTION /// Blackboard key for where the target ref is stored var/target_key = BB_BASIC_MOB_CURRENT_TARGET /// Behaviour to perform using ability diff --git a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm index fb83b8f8684..5ceef67bedb 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm @@ -1,6 +1,6 @@ /** * Simple behaviours which simply try to use an ability whenever it is available. - * For something which wants a target try `targetted_mob_ability`. + * For something which wants a target try `targeted_mob_ability`. */ /datum/ai_planning_subtree/use_mob_ability /// Blackboard key for the ability diff --git a/code/datums/ai/basic_mobs/generic_controllers.dm b/code/datums/ai/basic_mobs/generic_controllers.dm index 208c1833add..dae1b944dd3 100644 --- a/code/datums/ai/basic_mobs/generic_controllers.dm +++ b/code/datums/ai/basic_mobs/generic_controllers.dm @@ -1,7 +1,7 @@ /// The most basic AI tree which just finds a guy and then runs at them to click them /datum/ai_controller/basic_controller/simple_hostile blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -14,7 +14,7 @@ /// Find a target, walk at target, attack intervening obstacles /datum/ai_controller/basic_controller/simple_hostile_obstacles blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_use_targetted_ability.dm b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm similarity index 100% rename from code/datums/ai/basic_mobs/pet_commands/pet_use_targetted_ability.dm rename to code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm diff --git a/code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm similarity index 79% rename from code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm rename to code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm index d8b7e49c23c..2505b87a717 100644 --- a/code/datums/ai/basic_mobs/targetting_datums/basic_targetting_datum.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -1,18 +1,19 @@ -///Datum for basic mobs to define what they can attack. -/datum/targetting_datum +///Datum for basic mobs to define what they can attack.GET_TARGETING_STRATEGY\((/[^,]*)\), +///Global, just like ai_behaviors +/datum/targeting_strategy ///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/proc/can_attack(mob/living/living_mob, atom/target, vision_range) +/datum/targeting_strategy/proc/can_attack(mob/living/living_mob, atom/target, vision_range) return ///Returns something the target might be hiding inside of -/datum/targetting_datum/proc/find_hidden_mobs(mob/living/living_mob, atom/target) +/datum/targeting_strategy/proc/find_hidden_mobs(mob/living/living_mob, atom/target) var/atom/target_hiding_location if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) target_hiding_location = target.loc return target_hiding_location -/datum/targetting_datum/basic +/datum/targeting_strategy/basic /// When we do our basic faction check, do we look for exact faction matches? var/check_factions_exactly = FALSE /// Whether we care for seeing the target or not @@ -22,7 +23,7 @@ /// If this blackboard key is TRUE, makes us only target wounded mobs var/target_wounded_key -/datum/targetting_datum/basic/can_attack(mob/living/living_mob, atom/the_target, vision_range) +/datum/targeting_strategy/basic/can_attack(mob/living/living_mob, atom/the_target, vision_range) var/datum/ai_controller/basic_controller/our_controller = living_mob.ai_controller if(isnull(our_controller)) @@ -82,29 +83,29 @@ return FALSE /// Returns true if the mob and target share factions -/datum/targetting_datum/basic/proc/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/proc/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) if (controller.blackboard[BB_ALWAYS_IGNORE_FACTION] || controller.blackboard[BB_TEMPORARILY_IGNORE_FACTION]) return FALSE return living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly) /// Subtype more forgiving for items. /// Careful, this can go wrong and keep a mob hyper-focused on an item it can't lose aggro on -/datum/targetting_datum/basic/allow_items +/datum/targeting_strategy/basic/allow_items -/datum/targetting_datum/basic/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) +/datum/targeting_strategy/basic/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) . = ..() if(isitem(the_target)) // trust fall exercise return TRUE /// Subtype which searches for mobs of a size relative to ours -/datum/targetting_datum/basic/of_size +/datum/targeting_strategy/basic/of_size /// If true, we will return mobs which are smaller than us. If false, larger. var/find_smaller = TRUE /// If true, we will return mobs which are the same size as us. var/inclusive = TRUE -/datum/targetting_datum/basic/of_size/can_attack(mob/living/owner, atom/target, vision_range) +/datum/targeting_strategy/basic/of_size/can_attack(mob/living/owner, atom/target, vision_range) if(!isliving(target)) return FALSE . = ..() @@ -119,14 +120,14 @@ return !find_smaller // This is just using the default values but the subtype makes it clearer -/datum/targetting_datum/basic/of_size/ours_or_smaller +/datum/targeting_strategy/basic/of_size/ours_or_smaller -/datum/targetting_datum/basic/of_size/larger +/datum/targeting_strategy/basic/of_size/larger find_smaller = FALSE inclusive = FALSE /// Makes the mob only attack their own faction. Useful mostly if their attacks do something helpful (e.g. healing touch). -/datum/targetting_datum/basic/same_faction +/datum/targeting_strategy/basic/same_faction -/datum/targetting_datum/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target) return !..() // inverts logic to ONLY target mobs that share a faction diff --git a/code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm b/code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm similarity index 55% rename from code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm rename to code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm index e2081bf308e..1b52c4986bb 100644 --- a/code/datums/ai/basic_mobs/targetting_datums/dont_target_friends.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/dont_target_friends.dm @@ -1,12 +1,12 @@ /// Don't target an atom in our friends list (or turfs), anything else is fair game -/datum/targetting_datum/basic/not_friends +/datum/targeting_strategy/basic/not_friends /// Stop regarding someone as a valid target once they pass this stat level, setting it to DEAD means you will happily attack corpses var/attack_until_past_stat = HARD_CRIT /// If we can try to closed turfs or not var/attack_closed_turf = FALSE ///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/basic/not_friends/can_attack(mob/living/living_mob, atom/target, vision_range) +/datum/targeting_strategy/basic/not_friends/can_attack(mob/living/living_mob, atom/target, vision_range) if(attack_closed_turf && isclosedturf(target)) return TRUE @@ -16,16 +16,16 @@ return ..() ///friends dont care about factions -/datum/targetting_datum/basic/not_friends/faction_check(mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/not_friends/faction_check(mob/living/living_mob, mob/living/the_target) return FALSE -/datum/targetting_datum/basic/not_friends/attack_closed_turfs +/datum/targeting_strategy/basic/not_friends/attack_closed_turfs attack_closed_turf = TRUE -/// Subtype that allows us to target items while deftly avoiding attacking our allies. Be careful when it comes to targetting items as an AI could get trapped targetting something it can't destroy. -/datum/targetting_datum/basic/not_friends/allow_items +/// Subtype that allows us to target items while deftly avoiding attacking our allies. Be careful when it comes to targeting items as an AI could get trapped targeting something it can't destroy. +/datum/targeting_strategy/basic/not_friends/allow_items -/datum/targetting_datum/basic/not_friends/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) +/datum/targeting_strategy/basic/not_friends/allow_items/can_attack(mob/living/living_mob, atom/the_target, vision_range) . = ..() if(isitem(the_target)) // trust fall exercise diff --git a/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm b/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm new file mode 100644 index 00000000000..7cc76d3010c --- /dev/null +++ b/code/datums/ai/basic_mobs/targeting_strategies/with_object.dm @@ -0,0 +1,29 @@ +/** + * Find mobs who are holding the bb configurable object type + * + * This is an extension of basic targeting behaviour, that allows you to + * only target the mob if they have a specific item in their hand. + * + */ +/datum/targeting_strategy/basic/holding_object + /// BB key that holds the target typepath to use + var/target_item_key = BB_TARGET_HELD_ITEM + +///Returns true or false depending on if the target can be attacked by the mob +/datum/targeting_strategy/basic/holding_object/can_attack(mob/living/living_mob, atom/target, vision_range) + var/datum/ai_controller/controller = living_mob.ai_controller + var/object_type_path = controller.blackboard[target_item_key] + + if (object_type_path == null) + return FALSE // no op + if(!ismob(target)) + return FALSE // no hands no problems + + // Look at me, type casting like a grown up + var/mob/targetmob = target + // Check if our parent behaviour agrees we can attack this target (we ignore faction by default) + var/can_attack = ..() + if(can_attack && targetmob.is_holding_item_of_type(object_type_path)) + return TRUE // they have the item + // No valid target + return FALSE diff --git a/code/datums/ai/basic_mobs/targetting_datums/with_object.dm b/code/datums/ai/basic_mobs/targetting_datums/with_object.dm deleted file mode 100644 index 91e99bb4a22..00000000000 --- a/code/datums/ai/basic_mobs/targetting_datums/with_object.dm +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Find mobs who are holding the configurable object type - * - * This is an extension of basic targeting behaviour, that allows you to - * only target the mob if they have a specific item in their hand. - * - */ -/datum/targetting_datum/basic/holding_object - // We will find mobs who are holding this object in their hands - var/object_type_path = null - -/** - * Create an instance of the holding object targeting datum - * - * * object_type_path Pass an object type path, this will be compared to the items - * in targets hands to filter the target list. - */ -/datum/targetting_datum/basic/holding_object/New(object_type_path) - if (!ispath(object_type_path)) - stack_trace("trying to create an item targeting datum with no valid typepath") - // Leaving object type as null will make this basically a noop - return - src.object_type_path = object_type_path - -///Returns true or false depending on if the target can be attacked by the mob -/datum/targetting_datum/basic/holding_object/can_attack(mob/living/living_mob, atom/target, vision_range) - if (object_type_path == null) - return FALSE // no op - if(!ismob(target)) - return FALSE // no hands no problems - - // Look at me, type casting like a grown up - var/mob/targetmob = target - // Check if our parent behaviour agrees we can attack this target (we ignore faction by default) - var/can_attack = ..() - if(can_attack && targetmob.is_holding_item_of_type(object_type_path)) - return TRUE // they have the item - // No valid target - return FALSE diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index 6c9cb779bb3..c7723eab1a1 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -7,18 +7,18 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM required_distance = 3 -/datum/ai_behavior/basic_melee_attack/dog/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/dog/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) controller.behavior_cooldowns[src] = world.time + action_cooldown var/mob/living/living_pawn = controller.pawn if(!(isturf(living_pawn.loc) || HAS_TRAIT(living_pawn, TRAIT_AI_BAGATTACK))) // Void puppies can attack from inside bags - finish_action(controller, FALSE, target_key, targetting_datum_key, hiding_location_key) + finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) return // Unfortunately going to repeat this check in parent call but what can you do var/atom/target = controller.blackboard[target_key] - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] - if (!targetting_datum.can_attack(living_pawn, target)) - finish_action(controller, FALSE, target_key, targetting_datum_key, hiding_location_key) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if (!targeting_strategy.can_attack(living_pawn, target)) + finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) return if (!living_pawn.Adjacent(target)) diff --git a/code/datums/ai/dog/dog_controller.dm b/code/datums/ai/dog/dog_controller.dm index a95e3d57b6b..a5794ff9b5f 100644 --- a/code/datums/ai/dog/dog_controller.dm +++ b/code/datums/ai/dog/dog_controller.dm @@ -2,7 +2,7 @@ blackboard = list( BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_dog @@ -19,9 +19,11 @@ blackboard = list( BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, - // Find nearby mobs with tongs in hand. - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/holding_object(/obj/item/kitchen/tongs), + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + // Find nearby mobs ... + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/holding_object, + // With tongs in hand! + BB_TARGET_HELD_ITEM = /obj/item/kitchen/tongs, BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/pet/dog), BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/dog/corgi/puppy = 95, /mob/living/basic/pet/dog/corgi/puppy/void = 5), ) @@ -31,7 +33,7 @@ /datum/ai_planning_subtree/make_babies, // Ian WILL prioritise sex over following your instructions /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/dog_harassment, - // Find targets to run away from (uses the targetting datum from above) + // Find targets to run away from (uses the targeting strategy from above) /datum/ai_planning_subtree/simple_find_target, // Flee from that target /datum/ai_planning_subtree/flee_target, @@ -43,3 +45,20 @@ return return corgi_pawn.access_card.GetAccess() + +/datum/ai_controller/basic_controller/dog/puppy + blackboard = list( + BB_DOG_HARASS_HARM = TRUE, + BB_VISION_RANGE = AI_DOG_VISION_RANGE, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/holding_object, + // With tongs in hand! + BB_TARGET_HELD_ITEM = /obj/item/kitchen/tongs, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/dog, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/dog_harassment, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/flee_target, + ) diff --git a/code/datums/ai/dog/dog_subtrees.dm b/code/datums/ai/dog/dog_subtrees.dm index 66198b61ac3..62f63da54bd 100644 --- a/code/datums/ai/dog/dog_subtrees.dm +++ b/code/datums/ai/dog/dog_subtrees.dm @@ -4,27 +4,27 @@ /datum/ai_planning_subtree/dog_harassment/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) if(!SPT_PROB(10, seconds_per_tick)) return - controller.queue_behavior(/datum/ai_behavior/find_hated_dog_target, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(/datum/ai_behavior/find_hated_dog_target, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) var/atom/harass_target = controller.blackboard[BB_DOG_HARASS_TARGET] if (isnull(harass_target)) return - controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) return SUBTREE_RETURN_FINISH_PLANNING /datum/ai_behavior/find_hated_dog_target -/datum/ai_behavior/find_hated_dog_target/setup(datum/ai_controller/controller, target_key, targetting_datum_key) +/datum/ai_behavior/find_hated_dog_target/setup(datum/ai_controller/controller, target_key, targeting_strategy_key) . = ..() var/mob/living/dog = controller.pawn - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) for(var/mob/living/iter_living in oview(2, dog)) if(iter_living.stat != CONSCIOUS || !HAS_TRAIT(iter_living, TRAIT_HATED_BY_DOGS)) continue if(!isnull(dog.buckled)) dog.audible_message(span_notice("[dog] growls at [iter_living], yet [dog.p_they()] [dog.p_are()] much too comfy to move."), hearing_distance = COMBAT_MESSAGE_RANGE) continue - if(!targetting_datum.can_attack(dog, iter_living)) + if(!targeting_strategy.can_attack(dog, iter_living)) continue dog.audible_message(span_warning("[dog] growls at [iter_living], seemingly annoyed by [iter_living.p_their()] presence."), hearing_distance = COMBAT_MESSAGE_RANGE) diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index 6107b1664ee..f54ba33e6e3 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -68,12 +68,8 @@ /datum/ai_behavior/find_and_set/in_list /datum/ai_behavior/find_and_set/in_list/search_tactic(datum/ai_controller/controller, locate_paths, search_range) - var/list/found = list() - for(var/locate_path in locate_paths) - var/single_locate = ..(controller, locate_path, search_range) - if(single_locate) - found += single_locate - if(found.len) + var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) + if(length(found)) return pick(found) /** @@ -142,7 +138,13 @@ /datum/ai_behavior/find_and_set/conscious_person /datum/ai_behavior/find_and_set/conscious_person/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/customers = list() for(var/mob/living/carbon/human/target in oview(search_range, controller.pawn)) if(IS_DEAD_OR_INCAP(target) || !target.mind) continue - return target + customers += target + + if(customers.len) + return pick(customers) + + return null diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 468cfed33fb..3ea9feb2b34 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -81,6 +81,7 @@ /// Do we reset the target after attacking something, so we can check for status changes. var/always_reset_target = FALSE + /datum/ai_behavior/hunt_target/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) . = ..() var/atom/hunt_target = controller.blackboard[hunting_target_key] @@ -123,10 +124,27 @@ controller.clear_blackboard_key(hunting_target_key) /datum/ai_behavior/hunt_target/unarmed_attack_target + ///do we toggle combat mode before interacting with the object? + var/switch_combat_mode = FALSE /datum/ai_behavior/hunt_target/unarmed_attack_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) + if(switch_combat_mode) + hunter.combat_mode = !(hunter.combat_mode) hunter.UnarmedAttack(hunted, TRUE) +/datum/ai_behavior/hunt_target/unarmed_attack_target/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) + . = ..() + if(!switch_combat_mode) + return + var/mob/living/living_pawn = controller.pawn + living_pawn.combat_mode = initial(living_pawn.combat_mode) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/switch_combat_mode + switch_combat_mode = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target + always_reset_target = TRUE + /datum/ai_behavior/hunt_target/use_ability_on_target always_reset_target = TRUE ///the ability we will use diff --git a/code/datums/ai/idle_behaviors/idle_random_walk.dm b/code/datums/ai/idle_behaviors/idle_random_walk.dm index f189e89b423..8924da5c30b 100644 --- a/code/datums/ai/idle_behaviors/idle_random_walk.dm +++ b/code/datums/ai/idle_behaviors/idle_random_walk.dm @@ -10,7 +10,10 @@ if(SPT_PROB(walk_chance, seconds_per_tick) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) var/move_dir = pick(GLOB.alldirs) - living_pawn.Move(get_step(living_pawn, move_dir), move_dir) + var/turf/destination_turf = get_step(living_pawn, move_dir) + if(!destination_turf?.can_cross_safely(living_pawn)) + return + living_pawn.Move(destination_turf, move_dir) /datum/idle_behavior/idle_random_walk/less_walking walk_chance = 10 @@ -69,7 +72,7 @@ var/turf/possible_step = get_step(living_pawn, direction) if(get_dist(possible_step, target) > minimum_distance) continue - if(possible_step.is_blocked_turf()) + if(possible_step.is_blocked_turf() || !possible_step.can_cross_safely(living_pawn)) continue possible_turfs += possible_step diff --git a/code/datums/ai/learn_ai.md b/code/datums/ai/learn_ai.md index 9906806cfbd..e4e8a712cf0 100644 --- a/code/datums/ai/learn_ai.md +++ b/code/datums/ai/learn_ai.md @@ -25,7 +25,7 @@ First, let's look at the blackboard. ```dm /datum/ai_controller/basic/cow blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = new /datum/targeting_strategy/basic/allow_items(), BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) @@ -81,7 +81,7 @@ Okay, so we have blackboard variables, which are considered by subtrees to plan //now we know we have a target but should let a hostile subtree plan attacking humans. let's check if it's actually food if(target in wanted) - controller.queue_behavior(/datum/ai_behavior/basic_melee_attack, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return SUBTREE_RETURN_FINISH_PLANNING //this prevents further subtrees from planning since we want to focus on eating the food ``` @@ -94,7 +94,7 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I //flag tells the AI it needs to have a movement target to work, and since it doesn't have "AI_BEHAVIOR_MOVE_AND_PERFORM", it won't call perform() every 0.6 seconds until it is in melee range. Smart! behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT -/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() //all this is doing in setup is setting the movement target. setup is called once when the behavior is first planned, and returning FALSE can cancel the behavior if something isn't right. @@ -107,20 +107,20 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I controller.current_movement_target = target ///perform will run every "action_cooldown" deciseconds as long as the conditions are good for it to do so (we set "AI_BEHAVIOR_REQUIRE_MOVEMENT", so it won't perform until in range). -/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) . = ..() var/mob/living/basic/basic_mob = controller.pawn - //targetting datum will kill the action if not real anymore + //targeting strategy will kill the action if not real anymore var/datum/weakref/weak_target = controller.blackboard[target_key] var/atom/target = weak_target?.resolve() - var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeting_strategy = controller.blackboard[targeting_strategy_key] - if(!targetting_datum.can_attack(basic_mob, target)) + if(!targeting_strategy.can_attack(basic_mob, target)) ///We have a target that is no longer valid to attack. Remember that returning doesn't end the behavior, JUST this single performance. So we call "finish_action" with whether it succeeded in doing what it wanted to do (it didn't, so FALSE) and the blackboard keys passed into this behavior. finish_action(controller, FALSE, target_key) return //don't forget to end the performance too - var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! controller.blackboard[hiding_location_key] = hiding_target @@ -131,7 +131,7 @@ And one of those behaviors, `basic_melee_attack`. As I have been doing so far, I basic_mob.melee_attack(target) ///and so the action has ended. we can now clean up the AI's blackboard based on the success of the action, and the keys passed in. -/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() ///if the behavior failed, the target is no longer valid, so we should lose aggro of them. We remove the target_key (which could be anything, it's whatever key was passed into the behavior by the subtree) from the blackboard. Couldn't do THAT with normal variables! if(!succeeded) diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index 2b734ca24a9..af29e83f1a4 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -24,37 +24,47 @@ if(controller.pathing_attempts >= max_pathing_attempts) controller.CancelActions() -///Should the movement be allowed to happen? As of writing this, MOVELOOP_SKIP_STEP is defined as (1<<0) so be careful on using (return TRUE) or (can_move = TRUE; return can_move) +///Should the movement be allowed to happen? return TRUE if it can, FALSE otherwise /datum/ai_movement/proc/allowed_to_move(datum/move_loop/source) + SHOULD_BE_PURE(TRUE) + var/atom/movable/pawn = source.moving var/datum/ai_controller/controller = source.extra_info - source.delay = controller.movement_delay var/can_move = TRUE - if(controller.ai_traits & STOP_MOVING_WHEN_PULLED && pawn.pulledby) //Need to store more state. Annoying. + if((controller.ai_traits & STOP_MOVING_WHEN_PULLED) && pawn.pulledby) //Need to store more state. Annoying. can_move = FALSE if(!isturf(pawn.loc)) //No moving if not on a turf can_move = FALSE + if(isliving(pawn)) + var/mob/living/pawn_mob = pawn + if(!(pawn_mob.mobility_flags & MOBILITY_MOVE)) + can_move = FALSE + + return can_move + +///Anything to do before moving; any checks if the pawn should be able to move should be placed in allowed_to_move() and called by this proc +/datum/ai_movement/proc/pre_move(datum/move_loop/source) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + + var/datum/ai_controller/controller = source.extra_info + // Check if this controller can actually run, so we don't chase people with corpses if(!controller.able_to_run()) controller.CancelActions() qdel(source) //stop moving return MOVELOOP_SKIP_STEP - //Why doesn't this return TRUE or can_move? - //MOVELOOP_SKIP_STEP is defined as (1<<0) and TRUE are defined as the same "1", returning TRUE would be the equivalent of skipping the move - if(can_move) - return + source.delay = controller.movement_delay + + if(allowed_to_move(source)) + return NONE increment_pathing_failures(controller) return MOVELOOP_SKIP_STEP -///Anything to do before moving; any checks if the pawn should be able to move should be placed in allowed_to_move() and called by this proc -/datum/ai_movement/proc/pre_move(datum/move_loop/source) - SIGNAL_HANDLER - return allowed_to_move(source) - //Anything to do post movement /datum/ai_movement/proc/post_move(datum/move_loop/source, succeeded) SIGNAL_HANDLER diff --git a/code/datums/ai/movement/ai_movement_basic_avoidance.dm b/code/datums/ai/movement/ai_movement_basic_avoidance.dm index 371fb9dbc4b..6b48f1b5e9e 100644 --- a/code/datums/ai/movement/ai_movement_basic_avoidance.dm +++ b/code/datums/ai/movement/ai_movement_basic_avoidance.dm @@ -16,10 +16,8 @@ /datum/ai_movement/basic_avoidance/allowed_to_move(datum/move_loop/has_target/dist_bound/source) . = ..() var/turf/target_turf = get_step_towards(source.moving, source.target) - - if(is_type_in_typecache(target_turf, GLOB.dangerous_turfs)) - . = FALSE - return . + if(!target_turf?.can_cross_safely(source.moving)) + return FALSE /// Move immediately and don't update our facing /datum/ai_movement/basic_avoidance/backstep diff --git a/code/datums/ai/movement/ai_movement_complete_stop.dm b/code/datums/ai/movement/ai_movement_complete_stop.dm index 7805eeb3f6f..dcae93f1ba0 100644 --- a/code/datums/ai/movement/ai_movement_complete_stop.dm +++ b/code/datums/ai/movement/ai_movement_complete_stop.dm @@ -12,4 +12,4 @@ RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) /datum/ai_movement/complete_stop/allowed_to_move(datum/move_loop/source) - return // no movement allowed + return FALSE diff --git a/code/datums/ai/movement/ai_movement_dumb.dm b/code/datums/ai/movement/ai_movement_dumb.dm index a38024ff2cc..06ac4bdd10c 100644 --- a/code/datums/ai/movement/ai_movement_dumb.dm +++ b/code/datums/ai/movement/ai_movement_dumb.dm @@ -14,7 +14,5 @@ /datum/ai_movement/dumb/allowed_to_move(datum/move_loop/has_target/source) . = ..() var/turf/target_turf = get_step_towards(source.moving, source.target) - - if(is_type_in_typecache(target_turf, GLOB.dangerous_turfs)) - . = FALSE - return . + if(!target_turf?.can_cross_safely(source.moving)) + return FALSE diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index c3ea9fcfadf..9b9f9c62841 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -116,7 +116,7 @@ GLOBAL_VAR(round_default_lawset) /// Zeroth law /// A lawset can only have 1 zeroth law, it's the top dog. - /// Nothing removes it unless it's admin forced + /// Removed by things that remove core/inherent laws, but only if protected_zeroth is false. Otherwise, cannot be removed except by admins var/zeroth = null /// Zeroth borg law /// It's just a zeroth law but specially themed for cyborgs diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 48fabd701f4..61175593ce4 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -83,8 +83,7 @@ var/mob/living/owner var/bubble_icon = "default" - var/datum/action/innate/imaginary_join/join - var/datum/action/innate/imaginary_hide/hide + /mob/camera/imaginary_friend/Login() . = ..() @@ -105,10 +104,11 @@ */ /mob/camera/imaginary_friend/Initialize(mapload) . = ..() - join = new - join.Grant(src) - hide = new - hide.Grant(src) + var/static/list/grantable_actions = list( + /datum/action/innate/imaginary_join, + /datum/action/innate/imaginary_hide, + ) + grant_actions_by_list(grantable_actions) /// Links this imaginary friend to the provided mob /mob/camera/imaginary_friend/proc/attach_to_owner(mob/living/imaginary_friend_owner) diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index ed3e91707b9..81d354a19e8 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -107,6 +107,10 @@ . = ..() QDEL_IN(src, 30 SECONDS) +/obj/effect/client_image_holder/bluespace_stream/generate_image() + . = ..() + apply_wibbly_filters(.) + /obj/effect/client_image_holder/bluespace_stream/Destroy() if(!QDELETED(linked_to)) qdel(linked_to) diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index e5890a5fa9b..8b6436f1d15 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -25,11 +25,11 @@ /datum/brain_trauma/severe/split_personality/proc/make_backseats() stranger_backseat = new(owner, src) - var/datum/action/cooldown/spell/personality_commune/stranger_spell = new(src) + var/datum/action/personality_commune/stranger_spell = new(src) stranger_spell.Grant(stranger_backseat) owner_backseat = new(owner, src) - var/datum/action/cooldown/spell/personality_commune/owner_spell = new(src) + var/datum/action/personality_commune/owner_spell = new(src) owner_spell.Grant(owner_backseat) /// Attempts to get a ghost to play the personality @@ -256,13 +256,19 @@ gain_text = span_warning("Crap, that was one drink too many. You black out...") lose_text = "You wake up very, very confused and hungover. All you can remember is drinking a lot of alcohol... what happened?" poll_role = "blacked out drunkard" + random_gain = FALSE /// Duration of effect, tracked in seconds, not deciseconds. qdels when reaching 0. var/duration_in_seconds = 180 /datum/brain_trauma/severe/split_personality/blackout/on_gain() . = ..() RegisterSignal(owner, COMSIG_ATOM_SPLASHED, PROC_REF(on_splashed)) - notify_ghosts("[owner] is blacking out!", source = owner, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Bro I'm not even drunk right now") + notify_ghosts( + "[owner] is blacking out!", + source = owner, + header = "Bro I'm not even drunk right now", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/brain_trauma/severe/split_personality/blackout/on_lose() . = ..() diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 00000000000..fd35bbc4eec --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/breeding.dm b/code/datums/components/breeding.dm new file mode 100644 index 00000000000..7c9bcecf7bc --- /dev/null +++ b/code/datums/components/breeding.dm @@ -0,0 +1,76 @@ +/* + * A component to allow us to breed + */ +/datum/component/breed + /// additional mobs we can breed with + var/list/can_breed_with + ///path of the baby + var/baby_path + ///time to wait after breeding + var/breed_timer + ///AI key we set when we're ready to breed + var/breed_key = BB_BREED_READY + ///are we ready to breed? + var/ready_to_breed = TRUE + ///callback after we give birth to the child + var/datum/callback/post_birth + +/datum/component/breed/Initialize(list/can_breed_with = list(), breed_timer = 40 SECONDS, baby_path, post_birth) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + if(ishuman(parent)) //sin detected + return COMPONENT_INCOMPATIBLE + + if(!ispath(baby_path)) + stack_trace("attempted to add a breeding component with invalid baby path!") + return + + src.can_breed_with = can_breed_with + src.breed_timer = breed_timer + src.baby_path = baby_path + src.post_birth = post_birth + + ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) + +/datum/component/breed/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(breed_with_partner)) + ADD_TRAIT(parent, TRAIT_MOB_BREEDER, REF(src)) + var/mob/living/parent_mob = parent + parent_mob.ai_controller?.set_blackboard_key(breed_key, TRUE) + +/datum/component/breed/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + REMOVE_TRAIT(parent, TRAIT_MOB_BREEDER, REF(src)) + post_birth = null + + +/datum/component/breed/proc/breed_with_partner(mob/living/source, mob/living/target) + SIGNAL_HANDLER + + if(source.combat_mode) + return + + if(!is_type_in_typecache(target, can_breed_with)) + return + + if(!HAS_TRAIT(target, TRAIT_MOB_BREEDER) || target.gender == source.gender) + return + + if(!ready_to_breed) + source.balloon_alert(source, "not ready!") + return COMPONENT_HOSTILE_NO_ATTACK + + var/turf/delivery_destination = get_turf(source) + var/mob/living/baby = new baby_path(delivery_destination) + new /obj/effect/temp_visual/heart(delivery_destination) + toggle_status(source) + + addtimer(CALLBACK(src, PROC_REF(toggle_status), source), breed_timer) + post_birth?.Invoke(baby, target) + return COMPONENT_HOSTILE_NO_ATTACK + +/datum/component/breed/proc/toggle_status(mob/living/source) + ready_to_breed = !ready_to_breed + source.ai_controller?.set_blackboard_key(BB_BREED_READY, ready_to_breed) + diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 94a943b42c8..a8b64f428d9 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -206,6 +206,36 @@ time = 5 SECONDS category = CAT_WEAPON_RANGED +/datum/crafting_recipe/rebarxbow + name = "Heated Rebar Crossbow" + result = /obj/item/gun/ballistic/rifle/rebarxbow + reqs = list( + /obj/item/stack/rods = 6, + /obj/item/stack/cable_coil = 12, + /obj/item/inducer = 1, + ) + blacklist = list( + /obj/item/inducer/sci, + ) + tool_behaviors = list(TOOL_WELDER) + time = 5 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/rebarxbowforced + name = "Forced Rebar Crossbow" + desc = "Get an extra shot in your crossbow... for a chance of shooting yourself when you fire it." + result = /obj/item/gun/ballistic/rifle/rebarxbow/forced + reqs = list( + /obj/item/gun/ballistic/rifle/rebarxbow = 1, + ) + blacklist = list( + /obj/item/gun/ballistic/rifle/rebarxbow/forced, + /obj/item/gun/ballistic/rifle/rebarxbow/syndie, + ) + tool_behaviors = list(TOOL_CROWBAR) + time = 1 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/pipegun_prime name = "Regal Pipegun" always_available = FALSE diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 437bfaa2e92..44b8055b3ff 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -12,6 +12,17 @@ time = 0.5 SECONDS category = CAT_WEAPON_AMMO +/datum/crafting_recipe/rebarsyndie + name = "jagged iron rod" + result = /obj/item/ammo_casing/rebar/syndie + reqs = list( + /obj/item/stack/rods = 1, + ) + tool_behaviors = list(TOOL_WIRECUTTER) + time = 0.5 SECONDS + always_available = FALSE + category = CAT_WEAPON_AMMO + /datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" result = /obj/item/ammo_casing/shotgun/pulseslug diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index 6d098ecc44e..749fa1eac1c 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -368,11 +368,21 @@ if(!check_if_in_ritual_site(cultist, cult_team)) return FALSE var/area/summon_location = get_area(cultist) - priority_announce("Figments from an eldritch god are being summoned by [cultist.real_name] into [summon_location.get_original_area_name()] from an unknown dimension. Disrupt the ritual at all costs!", "Central Command Higher Dimensional Affairs", sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', has_important_message = TRUE) + priority_announce( + text = "Figments from an eldritch god are being summoned by [cultist.real_name] into [summon_location.get_original_area_name()] from an unknown dimension. Disrupt the ritual at all costs!", + sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', + sender_override = "[command_name()] Higher Dimensional Affairs", + has_important_message = TRUE, + ) for(var/shielded_turf in spiral_range_turfs(1, cultist, 1)) LAZYADD(shields, new /obj/structure/emergency_shield/cult/narsie(shielded_turf)) - notify_ghosts("[cultist] has begun scribing a Nar'Sie rune!", source = cultist, action = NOTIFY_ORBIT, header = "Maranax Infirmux!") + notify_ghosts( + "[cultist] has begun scribing a Nar'Sie rune!", + source = cultist, + header = "Maranax Infirmux!", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) return TRUE diff --git a/code/datums/components/damage_chain.dm b/code/datums/components/damage_chain.dm new file mode 100644 index 00000000000..be61ec68a33 --- /dev/null +++ b/code/datums/components/damage_chain.dm @@ -0,0 +1,112 @@ +/** + * Draws a line between you and another atom, hurt anyone stood in the line + */ +/datum/component/damage_chain + dupe_mode = COMPONENT_DUPE_ALLOWED + /// How often do we attempt to deal damage? + var/tick_interval + /// Tracks when we can next deal damage + COOLDOWN_DECLARE(tick_cooldown) + /// Damage inflicted per tick + var/damage_per_tick + /// Type of damage to inflict + var/damage_type + /// Optional callback which checks if we can damage the target + var/datum/callback/validate_target + /// Optional callback for additional visuals or text display when dealing damage + var/datum/callback/chain_damage_feedback + /// We will fire the damage feedback callback on every x successful attacks + var/feedback_interval + /// How many successful attacks have we made? + var/successful_attacks = 0 + /// Time between making any attacks at which we just reset the successful attack counter + var/reset_feedback_timer = 0 + /// Our chain + var/datum/beam/chain + +/datum/component/damage_chain/Initialize( + atom/linked_to, + max_distance = 7, + beam_icon = 'icons/effects/beam.dmi', + beam_state = "medbeam", + beam_type = /obj/effect/ebeam, + tick_interval = 0.3 SECONDS, + damage_per_tick = 1.2, + damage_type = BURN, + datum/callback/validate_target = null, + datum/callback/chain_damage_feedback = null, + feedback_interval = 5, +) + . = ..() + if (!isatom(parent)) + return COMPONENT_INCOMPATIBLE + if (!isatom(linked_to)) + CRASH("Attempted to create [type] linking [parent.type] with non-atom [linked_to]!") + + src.tick_interval = tick_interval + src.damage_per_tick = damage_per_tick + src.damage_type = damage_type + src.validate_target = validate_target + src.chain_damage_feedback = chain_damage_feedback + src.feedback_interval = feedback_interval + + var/atom/atom_parent = parent + chain = atom_parent.Beam(linked_to, icon = beam_icon, icon_state = beam_state, beam_type = beam_type, maxdistance = max_distance) + RegisterSignal(chain, COMSIG_QDELETING, PROC_REF(end_beam)) + START_PROCESSING(SSfastprocess, src) + +/datum/component/damage_chain/RegisterWithParent() + RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(end_beam)) // We actually don't really use many signals it's all processing + +/datum/component/damage_chain/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_LIVING_DEATH) + +/datum/component/damage_chain/Destroy(force, silent) + if (!QDELETED(chain)) + UnregisterSignal(chain, COMSIG_QDELETING) + QDEL_NULL(chain) + chain = null + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/// Destroy ourself +/datum/component/damage_chain/proc/end_beam() + SIGNAL_HANDLER + qdel(src) + +/datum/component/damage_chain/process(seconds_per_tick) + var/successful_hit = FALSE + var/list/target_turfs = list() + for(var/obj/effect/ebeam/chainpart in chain.elements) + if (isnull(chainpart) || !chainpart.x || !chainpart.y || !chainpart.z) + continue + var/turf/overlaps = get_turf_pixel(chainpart) + target_turfs |= overlaps + if(overlaps == get_turf(chain.origin) || overlaps == get_turf(chain.target)) + continue + for(var/turf/nearby_turf in circle_range(overlaps, 1)) + target_turfs |= nearby_turf + + for(var/turf/hit_turf as anything in target_turfs) + for(var/mob/living/victim in hit_turf) + if (victim == parent || victim.stat == DEAD) + continue + if (!isnull(validate_target) && !validate_target.Invoke(victim)) + continue + if (successful_attacks == 0) + chain_damage_feedback?.Invoke(victim) + victim.apply_damage(damage_per_tick, damage_type, wound_bonus = CANT_WOUND) + successful_hit = TRUE + + if (isnull(chain_damage_feedback)) + return + if (successful_hit) + successful_attacks++ + reset_feedback_timer = addtimer(CALLBACK(src, PROC_REF(reset_feedback)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE|TIMER_DELETE_ME) + if (successful_attacks > feedback_interval) + reset_feedback() + +/// Make it so that the next time we hit something we'll invoke the feedback callback +/datum/component/damage_chain/proc/reset_feedback() + successful_attacks = 0 + deltimer(reset_feedback_timer) diff --git a/code/datums/components/deadchat_control.dm b/code/datums/components/deadchat_control.dm index 48096e47670..f1ec2d73bc8 100644 --- a/code/datums/components/deadchat_control.dm +++ b/code/datums/components/deadchat_control.dm @@ -39,7 +39,11 @@ if(deadchat_mode & ANARCHY_MODE) // Choose one, please. stack_trace("deadchat_control component added to [parent.type] with both democracy and anarchy modes enabled.") timerid = addtimer(CALLBACK(src, PROC_REF(democracy_loop)), input_cooldown, TIMER_STOPPABLE | TIMER_LOOP) - notify_ghosts("[parent] is now deadchat controllable!", source = parent, action = NOTIFY_ORBIT, header="Something Interesting!") + notify_ghosts( + "[parent] is now deadchat controllable!", + source = parent, + header = "Ghost Possession!", + ) if(!ismob(parent) && !SSpoints_of_interest.is_valid_poi(parent)) SSpoints_of_interest.make_point_of_interest(parent) generated_point_of_interest = TRUE diff --git a/code/datums/components/direct_explosive_trap.dm b/code/datums/components/direct_explosive_trap.dm new file mode 100644 index 00000000000..0d204f21a1e --- /dev/null +++ b/code/datums/components/direct_explosive_trap.dm @@ -0,0 +1,85 @@ +/** + * Responds to certain signals and 'explodes' on the person using the item. + * Differs from `interaction_booby_trap` in that this doesn't actually explode, it just directly calls ex_act on one person. + */ +/datum/component/direct_explosive_trap + /// An optional mob to inform about explosions + var/mob/living/saboteur + /// Amount of force to apply + var/explosive_force + /// Colour for examine notification + var/glow_colour + /// Optional additional target checks before we go off + var/datum/callback/explosive_checks + /// Signals which set off the bomb, must pass a mob as the first non-source argument + var/list/triggering_signals + +/datum/component/direct_explosive_trap/Initialize( + mob/living/saboteur, + explosive_force = EXPLODE_HEAVY, + expire_time = 1 MINUTES, + glow_colour = COLOR_RED, + datum/callback/explosive_checks, + list/triggering_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BUMPED) +) + . = ..() + if (!isatom(parent)) + return COMPONENT_INCOMPATIBLE + src.saboteur = saboteur + src.explosive_force = explosive_force + src.glow_colour = glow_colour + src.explosive_checks = explosive_checks + src.triggering_signals = triggering_signals + + if (expire_time > 0) + addtimer(CALLBACK(src, PROC_REF(bomb_expired)), expire_time, TIMER_DELETE_ME) + +/datum/component/direct_explosive_trap/RegisterWithParent() + if (!(COMSIG_ATOM_EXAMINE in triggering_signals)) // Maybe you're being extra mean with this one + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) + RegisterSignals(parent, triggering_signals, PROC_REF(explode)) + if (!isnull(saboteur)) + RegisterSignal(saboteur, COMSIG_QDELETING, PROC_REF(on_bomber_deleted)) + +/datum/component/direct_explosive_trap/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE) + triggering_signals) + if (!isnull(saboteur)) + UnregisterSignal(saboteur, COMSIG_QDELETING) + +/datum/component/direct_explosive_trap/Destroy(force, silent) + if (isnull(saboteur)) + return ..() + UnregisterSignal(saboteur, COMSIG_QDELETING) + saboteur = null + return ..() + +/// Called if we sit too long without going off +/datum/component/direct_explosive_trap/proc/bomb_expired() + if (!isnull(saboteur)) + to_chat(saboteur, span_bolddanger("Failure! Your trap didn't catch anyone this time...")) + qdel(src) + +/// Let people know something is up +/datum/component/direct_explosive_trap/proc/on_examined(datum/source, mob/user, text) + SIGNAL_HANDLER + text += span_holoparasite("It glows with a strange light...") + +/// Blow up +/datum/component/direct_explosive_trap/proc/explode(atom/source, mob/living/victim) + SIGNAL_HANDLER + if (!isliving(victim)) + return + if (!isnull(explosive_checks) && !explosive_checks.Invoke(victim)) + return + to_chat(victim, span_bolddanger("[source] was boobytrapped!")) + if (!isnull(saboteur)) + to_chat(saboteur, span_bolddanger("Success! Your trap on [source] caught [victim.name]!")) + playsound(source, 'sound/effects/explosion2.ogg', 200, TRUE) + new /obj/effect/temp_visual/explosion(get_turf(source)) + EX_ACT(victim, explosive_force) + qdel(src) + +/// Don't hang a reference to the person who placed the bomb +/datum/component/direct_explosive_trap/proc/on_bomber_deleted() + SIGNAL_HANDLER + saboteur = null diff --git a/code/datums/components/drift.dm b/code/datums/components/drift.dm index e974a3465ff..6b91a83534f 100644 --- a/code/datums/components/drift.dm +++ b/code/datums/components/drift.dm @@ -34,7 +34,7 @@ RegisterSignal(drifting_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(after_move)) RegisterSignal(drifting_loop, COMSIG_QDELETING, PROC_REF(loop_death)) RegisterSignal(movable_parent, COMSIG_MOVABLE_NEWTONIAN_MOVE, PROC_REF(newtonian_impulse)) - if(drifting_loop.running) + if(drifting_loop.status & MOVELOOP_STATUS_RUNNING) drifting_start(drifting_loop) // There's a good chance it'll autostart, gotta catch that var/visual_delay = movable_parent.inertia_move_delay diff --git a/code/datums/components/energized.dm b/code/datums/components/energized.dm index 64adeb5e9be..97ff670113f 100644 --- a/code/datums/components/energized.dm +++ b/code/datums/components/energized.dm @@ -1,3 +1,6 @@ +#define NORMAL_TOAST_PROB 3 +#define BROKEN_TOAST_PROB 33 + /datum/component/energized can_transfer = FALSE ///what we give to connect_loc by default, makes slippable mobs moving over us slip @@ -48,24 +51,14 @@ /datum/component/energized/proc/toast(turf/open/floor/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER - if(!source.broken && !source.burnt) - return - if(!isliving(arrived)) return - if(prob(85)) - if(prob(25)) - do_sparks(1, FALSE, source) - playsound(src, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - source.audible_message(span_danger("[parent] makes an electric crackle...")) - return - var/mob/living/future_tram_victim = arrived var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() // Check for stopped states. - if(isnull(tram) || !tram.controller_operational || !inbound || !outbound) + if(isnull(tram) || !tram.controller_operational || !tram.controller_active || !inbound || !outbound) return FALSE var/obj/structure/transport/linear/tram/tram_part = tram.return_closest_platform_to(parent) @@ -76,6 +69,17 @@ if(isnull(source)) return FALSE + var/toast_prob = NORMAL_TOAST_PROB + if(source.broken || source.burnt || HAS_TRAIT(future_tram_victim, TRAIT_CURSED)) + toast_prob = BROKEN_TOAST_PROB + + if(prob(100 - toast_prob)) + if(prob(25)) + do_sparks(1, FALSE, source) + playsound(src, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + source.audible_message(span_danger("[parent] makes an electric crackle...")) + return FALSE + // Everything will be based on position and travel direction var/plate_pos var/tram_pos @@ -83,11 +87,11 @@ // Try to be agnostic about N-S vs E-W movement if(tram.travel_direction & (NORTH|SOUTH)) plate_pos = source.y - tram_pos = source.y + tram_pos = tram_part.y tram_velocity_sign = tram.travel_direction & NORTH ? 1 : -1 else plate_pos = source.x - tram_pos = source.x + tram_pos = tram_part.x tram_velocity_sign = tram.travel_direction & EAST ? 1 : -1 // How far away are we? negative if already passed. @@ -102,13 +106,21 @@ return FALSE if((tram.travel_direction & EAST) && outbound > tram.destination_platform.platform_code) return FALSE - if(approach_distance >= AMBER_THRESHOLD_NORMAL) + if(approach_distance >= AMBER_THRESHOLD_DEGRADED) return FALSE // Finally the interesting part where they ACTUALLY get hit! - notify_ghosts("[future_tram_victim] has fallen in the path of an oncoming tram!", source = future_tram_victim, action = NOTIFY_ORBIT, header = "Electrifying!") + notify_ghosts( + "[future_tram_victim] has fallen in the path of an oncoming tram!", + source = future_tram_victim, + header = "Electrifying!", + ) + do_sparks(4, FALSE, source) playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) source.audible_message(span_danger("[parent] makes a loud electric crackle!")) to_chat(future_tram_victim, span_userdanger("You hear a loud electric crackle!")) future_tram_victim.electrocute_act(15, src, 1) return TRUE + +#undef NORMAL_TOAST_PROB +#undef BROKEN_TOAST_PROB diff --git a/code/datums/components/explode_on_attack.dm b/code/datums/components/explode_on_attack.dm new file mode 100644 index 00000000000..0560184f2ba --- /dev/null +++ b/code/datums/components/explode_on_attack.dm @@ -0,0 +1,40 @@ +/** + * Bombs the user after an attack + */ +/datum/component/explode_on_attack + /// range of bomb impact + var/impact_range + /// should we be destroyed after the explosion? + var/destroy_on_explode + /// list of mobs we wont bomb on attack + var/list/mob_type_dont_bomb + +/datum/component/explode_on_attack/Initialize(impact_range = 1, destroy_on_explode = TRUE, list/mob_type_dont_bomb = list()) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.impact_range = impact_range + src.destroy_on_explode = destroy_on_explode + src.mob_type_dont_bomb = mob_type_dont_bomb + +/datum/component/explode_on_attack/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(bomb_target)) + +/datum/component/explode_on_attack/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + + +/datum/component/explode_on_attack/proc/bomb_target(mob/living/owner, atom/victim) + SIGNAL_HANDLER + + if(!isliving(victim)) + return + + if(is_type_in_typecache(victim, mob_type_dont_bomb)) + return + + explosion(owner, light_impact_range = impact_range, explosion_cause = src) + + if(destroy_on_explode && owner) + qdel(owner) + return COMPONENT_HOSTILE_NO_ATTACK + diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index f88c27a7135..05456380235 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -36,7 +36,7 @@ if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.currently_hooked_item) user.balloon_alert(user, "already fishing") return COMPONENT_NO_AFTERATTACK - var/denial_reason = fish_source.reason_we_cant_fish(rod, user) + var/denial_reason = fish_source.reason_we_cant_fish(rod, user, parent) if(denial_reason) to_chat(user, span_warning(denial_reason)) return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/components/food/ghost_edible.dm b/code/datums/components/food/ghost_edible.dm index 25207800a74..801aa95cb6b 100644 --- a/code/datums/components/food/ghost_edible.dm +++ b/code/datums/components/food/ghost_edible.dm @@ -23,7 +23,12 @@ src.bite_chance = bite_chance src.minimum_scale = minimum_scale initial_reagent_volume = atom_parent.reagents.total_volume - notify_ghosts("[parent] is edible by ghosts!", source = parent, action = NOTIFY_ORBIT, header="Something Tasty!") + notify_ghosts( + "[parent] is edible by ghosts!", + source = parent, + header = "Something Tasty!", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/component/ghost_edible/RegisterWithParent() START_PROCESSING(SSdcs, src) diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index c248b4f18c0..bf44f1c4b3c 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -36,7 +36,16 @@ target = targ weapon = wep - RegisterSignals(targ, list(COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_ITEM_ATTACK, COMSIG_MOVABLE_MOVED, COMSIG_MOB_FIRED_GUN), PROC_REF(trigger_reaction)) + RegisterSignals(targ, list( + COMSIG_MOB_ATTACK_HAND, + COMSIG_MOB_ITEM_ATTACK, + COMSIG_MOVABLE_MOVED, + COMSIG_MOB_FIRED_GUN, + COMSIG_MOVABLE_SET_GRAB_STATE, + COMSIG_LIVING_START_PULL), PROC_REF(trigger_reaction)) + RegisterSignal(targ, COMSIG_ATOM_EXAMINE, PROC_REF(examine_target)) + RegisterSignal(targ, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_target)) + RegisterSignals(targ, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_GET_PULLED), PROC_REF(cancel)) RegisterSignals(weapon, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED), PROC_REF(cancel)) var/distance = min(get_dist(shooter, target), 1) // treat 0 distance as adjacent @@ -77,6 +86,9 @@ RegisterSignal(parent, COMSIG_MOB_ATTACK_HAND, PROC_REF(check_shove)) RegisterSignal(parent, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(check_deescalate)) RegisterSignals(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP), PROC_REF(check_bump)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + RegisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_parent)) + RegisterSignal(parent, COMSIG_HUMAN_DISARM_HIT, PROC_REF(cancel)) /datum/component/gunpoint/UnregisterFromParent() UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) @@ -84,6 +96,9 @@ UnregisterSignal(parent, COMSIG_MOB_UPDATE_SIGHT) UnregisterSignal(parent, COMSIG_MOB_ATTACK_HAND) UnregisterSignal(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP)) + UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) + UnregisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP) + UnregisterSignal(parent, COMSIG_HUMAN_DISARM_HIT) ///If the shooter bumps the target, cancel the holdup to avoid cheesing and forcing the charged shot /datum/component/gunpoint/proc/check_bump(atom/B, atom/A) @@ -195,6 +210,30 @@ ) INVOKE_ASYNC(src, PROC_REF(trigger_reaction)) +///Shows if the parent is holding someone at gunpoint +/datum/component/gunpoint/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(user in viewers(target)) + examine_list += span_boldwarning("[parent] [parent.p_are()] holding [target] at gunpoint with [weapon]!") + +///Shows if the examine target is being held at gunpoint +/datum/component/gunpoint/proc/examine_target(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(user in viewers(parent)) + examine_list += span_boldwarning("[target] [target.p_are()] being held at gunpoint by [parent]!") + +///Prevents bumping the shooter to break gunpoint since shove does that +/datum/component/gunpoint/proc/block_bumps_parent(mob/bumped, mob/living/bumper) + SIGNAL_HANDLER + to_chat(bumper, span_warning("[bumped] [bumped.p_are()] holding [target] at gunpoint, you cannot push past.")) + return COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP + +///Prevents bumping the target by an ally to cheese and force the charged shot +/datum/component/gunpoint/proc/block_bumps_target(mob/bumped, mob/living/bumper) + SIGNAL_HANDLER + to_chat(bumper, span_warning("[bumped] [bumped.p_are()] being held at gunpoint, it's not wise to push [bumped.p_them()]!")) + return COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP + #undef GUNPOINT_DELAY_STAGE_2 #undef GUNPOINT_DELAY_STAGE_3 #undef GUNPOINT_BASE_WOUND_BONUS diff --git a/code/datums/components/healing_touch.dm b/code/datums/components/healing_touch.dm index a81de7ab04a..cf6ef88f24d 100644 --- a/code/datums/components/healing_touch.dm +++ b/code/datums/components/healing_touch.dm @@ -8,10 +8,15 @@ * This intercepts the attack and starts a do_after if the target is in its allowed type list. */ /datum/component/healing_touch + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS /// How much brute damage to heal var/heal_brute /// How much burn damage to heal var/heal_burn + /// How much toxin damage to heal + var/heal_tox + /// How much oxygen damage to heal + var/heal_oxy /// How much stamina damage to heal var/heal_stamina /// Interaction will use this key, and be blocked while this key is in use @@ -26,8 +31,8 @@ var/valid_biotypes /// Which kinds of carbon limbs can we heal, has no effect on non-carbon mobs. Set to null if you don't care about excluding prosthetics. var/required_bodytype - /// How targetting yourself works, expects one of HEALING_TOUCH_ANYONE, HEALING_TOUCH_NOT_SELF, or HEALING_TOUCH_SELF_ONLY - var/self_targetting + /// How targeting yourself works, expects one of HEALING_TOUCH_ANYONE, HEALING_TOUCH_NOT_SELF, or HEALING_TOUCH_SELF_ONLY + var/self_targeting /// Text to print when action starts, replaces %SOURCE% with healer and %TARGET% with healed mob var/action_text /// Text to print when action completes, replaces %SOURCE% with healer and %TARGET% with healed mob @@ -36,10 +41,16 @@ var/show_health /// Color for the healing effect var/heal_color + /// Optional click modifier required + var/required_modifier + /// Callback to run after healing a mob + var/datum/callback/after_healed /datum/component/healing_touch/Initialize( heal_brute = 20, heal_burn = 20, + heal_tox = 0, + heal_oxy = 0, heal_stamina = 0, heal_time = 2 SECONDS, interaction_key = DOAFTER_SOURCE_HEAL_TOUCH, @@ -47,17 +58,21 @@ list/valid_targets_typecache = list(), valid_biotypes = MOB_ORGANIC | MOB_MINERAL, required_bodytype = BODYTYPE_ORGANIC, - self_targetting = HEALING_TOUCH_NOT_SELF, + self_targeting = HEALING_TOUCH_NOT_SELF, action_text = "%SOURCE% begins healing %TARGET%", complete_text = "%SOURCE% finishes healing %TARGET%", show_health = FALSE, heal_color = COLOR_HEALING_CYAN, + required_modifier = null, + datum/callback/after_healed = null, ) if (!isliving(parent)) return COMPONENT_INCOMPATIBLE src.heal_brute = heal_brute src.heal_burn = heal_burn + src.heal_tox = heal_tox + src.heal_oxy = heal_oxy src.heal_stamina = heal_stamina src.heal_time = heal_time src.interaction_key = interaction_key @@ -65,15 +80,25 @@ src.valid_targets_typecache = valid_targets_typecache.Copy() src.valid_biotypes = valid_biotypes src.required_bodytype = required_bodytype - src.self_targetting = self_targetting + src.self_targeting = self_targeting src.action_text = action_text src.complete_text = complete_text src.show_health = show_health src.heal_color = heal_color + src.required_modifier = required_modifier + src.after_healed = after_healed RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(try_healing)) // Players RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(try_healing)) // NPCs +// Let's populate this list as we actually use it, this thing has too many args +/datum/component/healing_touch/InheritComponent( + datum/component/new_component, + i_am_original, + heal_color, +) + src.heal_color = heal_color + /datum/component/healing_touch/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) return ..() @@ -83,12 +108,15 @@ return ..() /// Validate our target, and interrupt the attack chain to start healing it if it is allowed -/datum/component/healing_touch/proc/try_healing(mob/living/healer, atom/target) +/datum/component/healing_touch/proc/try_healing(mob/living/healer, atom/target, proximity, modifiers) SIGNAL_HANDLER if (!isliving(target)) return - if (!is_type_in_typecache(target, valid_targets_typecache)) + if (!isnull(required_modifier) && !LAZYACCESS(modifiers, required_modifier)) + return + + if (length(valid_targets_typecache) && !is_type_in_typecache(target, valid_targets_typecache)) return // Fall back to attacking it if (extra_checks && !extra_checks.Invoke(healer, target)) @@ -98,7 +126,7 @@ healer.balloon_alert(healer, "busy!") return COMPONENT_CANCEL_ATTACK_CHAIN - switch (self_targetting) + switch (self_targeting) if (HEALING_TOUCH_NOT_SELF) if (target == healer) healer.balloon_alert(healer, "can't heal yourself!") @@ -131,6 +159,10 @@ return FALSE if (target.getStaminaLoss() > 0 && heal_stamina) return TRUE + if (target.getOxyLoss() > 0 && heal_oxy) + return TRUE + if (target.getToxLoss() > 0 && heal_tox) + return TRUE if (!iscarbon(target)) return (target.getBruteLoss() > 0 && heal_brute) || (target.getFireLoss() > 0 && heal_burn) var/mob/living/carbon/carbon_target = target @@ -154,12 +186,26 @@ if (complete_text) healer.visible_message(span_notice("[format_string(complete_text, healer, target)]")) - target.heal_overall_damage(brute = heal_brute, burn = heal_burn, stamina = heal_stamina, required_bodytype = required_bodytype) - new /obj/effect/temp_visual/heal(get_turf(target), heal_color) + var/healed = target.heal_overall_damage( + brute = heal_brute, + burn = heal_burn, + stamina = heal_stamina, + required_bodytype = required_bodytype, + updating_health = FALSE, + ) + healed += target.adjustOxyLoss(-heal_oxy, updating_health = FALSE, required_biotype = valid_biotypes) + healed += target.adjustToxLoss(-heal_tox, updating_health = FALSE, required_biotype = valid_biotypes) + if (healed <= 0) + return - if(show_health && !iscarbon(target)) - var/formatted_string = format_string("%TARGET% now has [target.health]/[target.maxHealth] health.", healer, target) - to_chat(healer, span_danger(formatted_string)) + target.updatehealth() + new /obj/effect/temp_visual/heal(get_turf(target), heal_color) + after_healed?.Invoke(target) + + if(!show_health) + return + var/formatted_string = format_string("%TARGET% now has [health_percentage(target)] health.", healer, target) + to_chat(healer, span_danger(formatted_string)) /// Reformats the passed string with the replacetext keys /datum/component/healing_touch/proc/format_string(string, atom/source, atom/target) diff --git a/code/datums/components/life_link.dm b/code/datums/components/life_link.dm new file mode 100644 index 00000000000..34cdd0504c6 --- /dev/null +++ b/code/datums/components/life_link.dm @@ -0,0 +1,169 @@ +/** + * A mob with this component passes all damage (and healing) it takes to another mob, passed as a parameter + * Essentially we use another mob's health bar as our health bar + */ +/datum/component/life_link + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Mob we pass all of our damage to + var/mob/living/host + /// Optional callback invoked when damage gets transferred + var/datum/callback/on_passed_damage + /// Optional callback invoked when the linked mob dies + var/datum/callback/on_linked_death + +/datum/component/life_link/Initialize(mob/living/host, datum/callback/on_passed_damage, datum/callback/on_linked_death) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + if (!istype(host)) + CRASH("Life link created on [parent.type] and attempted to link to invalid type [host?.type].") + register_host(host) + src.on_passed_damage = on_passed_damage + src.on_linked_death = on_linked_death + +/datum/component/life_link/RegisterWithParent() + RegisterSignal(parent, COMSIG_CARBON_LIMB_DAMAGED, PROC_REF(on_limb_damage)) + RegisterSignals(parent, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_damage_adjusted)) + RegisterSignal(parent, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_health_updated)) + RegisterSignal(parent, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(on_status_tab_updated)) + if (!isnull(host)) + var/mob/living/living_parent = parent + living_parent.updatehealth() + +/datum/component/life_link/UnregisterFromParent() + unregister_host() + UnregisterSignal(parent, list(COMSIG_CARBON_LIMB_DAMAGED, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + +/datum/component/life_link/InheritComponent(datum/component/new_comp, i_am_original, mob/living/host, datum/callback/on_passed_damage, datum/callback/on_linked_death) + register_host(host) + +/// Set someone up as our new host +/datum/component/life_link/proc/register_host(mob/living/new_host) + unregister_host() + if (isnull(new_host)) + return + host = new_host + RegisterSignal(host, COMSIG_LIVING_DEATH, PROC_REF(on_host_died)) + RegisterSignal(host, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_health_updated)) + RegisterSignal(host, COMSIG_LIVING_REVIVE, PROC_REF(on_host_revived)) + RegisterSignal(host, COMSIG_QDELETING, PROC_REF(on_host_deleted)) + var/mob/living/living_parent = parent + living_parent.updatehealth() + +/// Drop someone from being our host +/datum/component/life_link/proc/unregister_host() + if (isnull(host)) + return + UnregisterSignal(host, list(COMSIG_LIVING_DEATH, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_LIVING_REVIVE, COMSIG_QDELETING)) + host = null + +/// Called when your damage goes up or down +/datum/component/life_link/proc/on_damage_adjusted(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (forced) + return + amount *= our_mob.get_damage_mod(type) + switch (type) + if(BRUTE) + host.adjustBruteLoss(amount, forced = TRUE) + if(BURN) + host.adjustFireLoss(amount, forced = TRUE) + if(TOX) + host.adjustToxLoss(amount, forced = TRUE) + if(OXY) + host.adjustOxyLoss(amount, forced = TRUE) + if(CLONE) + host.adjustCloneLoss(amount, forced = TRUE) + + on_passed_damage?.Invoke(our_mob, host, amount) + return COMPONENT_IGNORE_CHANGE + +/// Called when someone hurts one of our limbs, bypassing normal damage adjustment +/datum/component/life_link/proc/on_limb_damage(mob/living/our_mob, limb, brute, burn) + SIGNAL_HANDLER + if (brute != 0) + host.adjustBruteLoss(brute, updating_health = FALSE) + if (burn != 0) + host.adjustFireLoss(burn, updating_health = FALSE) + if (brute != 0 || burn != 0) + host.updatehealth() + on_passed_damage?.Invoke(our_mob, host, brute + burn) + return COMPONENT_PREVENT_LIMB_DAMAGE + +/// Called when either the host or parent's health tries to update, update our displayed health +/datum/component/life_link/proc/on_health_updated() + SIGNAL_HANDLER + update_health_hud(parent) + update_med_hud_health(parent) + update_med_hud_status(parent) + +/// Update our parent's health display based on how harmed our host is +/datum/component/life_link/proc/update_health_hud(mob/living/mob_parent) + var/severity = 0 + var/healthpercent = health_percentage(host) + switch(healthpercent) + if(100 to INFINITY) + severity = 0 + if(85 to 100) + severity = 1 + if(70 to 85) + severity = 2 + if(55 to 70) + severity = 3 + if(40 to 55) + severity = 4 + if(25 to 40) + severity = 5 + else + severity = 6 + if(severity > 0) + mob_parent.overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) + else + mob_parent.clear_fullscreen("brute") + if(mob_parent.hud_used?.healths) + mob_parent.hud_used.healths.maptext = MAPTEXT("
[round(healthpercent, 0.5)]%
") + +/// Update our health on the medical hud +/datum/component/life_link/proc/update_med_hud_health(mob/living/mob_parent) + var/image/holder = mob_parent.hud_list?[HEALTH_HUD] + if(isnull(holder)) + return + holder.icon_state = "hud[RoundHealth(host)]" + var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) + holder.pixel_y = size_check.Height() - world.icon_size + +/// Update our vital status on the medical hud +/datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent) + var/image/holder = mob_parent.hud_list?[STATUS_HUD] + if(isnull(holder)) + return + var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) + holder.pixel_y = size_check.Height() - world.icon_size + if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH)) + holder.icon_state = "huddead" + else + holder.icon_state = "hudhealthy" + +/// When our status tab updates, draw how much HP our host has in there +/datum/component/life_link/proc/on_status_tab_updated(mob/living/source, list/items) + SIGNAL_HANDLER + var/healthpercent = health_percentage(host) + items += "Host Health: [round(healthpercent, 0.5)]%" + +/// Called when our host dies, we should die too +/datum/component/life_link/proc/on_host_died(mob/living/source, gibbed) + SIGNAL_HANDLER + on_linked_death?.Invoke(parent, host, gibbed) + var/mob/living/living_parent = parent + living_parent.death(gibbed) + +/// Called when our host undies, we should undie too +/datum/component/life_link/proc/on_host_revived(mob/living/source, full_heal_flags) + SIGNAL_HANDLER + var/mob/living/living_parent = parent + living_parent.revive(full_heal_flags) + +/// Called when +/datum/component/life_link/proc/on_host_deleted() + SIGNAL_HANDLER + qdel(src) diff --git a/code/datums/components/lock_on_cursor.dm b/code/datums/components/lock_on_cursor.dm index 0ccac6ee2f9..30140dd95bd 100644 --- a/code/datums/components/lock_on_cursor.dm +++ b/code/datums/components/lock_on_cursor.dm @@ -8,13 +8,13 @@ */ /datum/component/lock_on_cursor dupe_mode = COMPONENT_DUPE_ALLOWED - /// Appearance to overlay onto whatever we are targetting + /// Appearance to overlay onto whatever we are targeting var/mutable_appearance/lock_appearance /// Current images we are displaying to the client var/list/image/lock_images /// Typecache of things we are allowed to target var/list/target_typecache - /// Cache of weakrefs to ignore targetting formatted as `list(weakref = TRUE)` + /// Cache of weakrefs to ignore targeting formatted as `list(weakref = TRUE)` var/list/immune_weakrefs /// Number of things we can target at once var/lock_amount diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm new file mode 100644 index 00000000000..d4d833b707d --- /dev/null +++ b/code/datums/components/lockable_storage.dm @@ -0,0 +1,206 @@ +/** + * ##lockable_storage + * Adds a UI to the object that triggers when you use it in hand (if item) or attack (everything else). + * The UI is a lock that, when unlocked, allows you to access the contents inside of it. + * When using this, make sure you have icons for `on_update_icon_state`. + */ +/datum/component/lockable_storage + ///Boolean on whether the panel has been hacked open with a screwdriver. + var/panel_open = FALSE + ///The number currently sitting in the briefcase's panel. + var/numeric_input + + ///The code that will open this safe, set by usually players. + ///Importantly, can be null if there's no password. + var/lock_code + ///Boolean on whether the storage can be hacked open with a multitool. + var/can_hack_open + +/datum/component/lockable_storage/Initialize( + lock_code, + can_hack_open = TRUE, +) + . = ..() + if(!isobj(parent)) + return COMPONENT_INCOMPATIBLE + + var/atom/atom_parent = parent + atom_parent.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 + + if(!atom_parent.atom_storage) + atom_parent.create_storage( + max_specific_storage = WEIGHT_CLASS_GIGANTIC, + max_total_storage = 14, + canthold = list(/obj/item/storage/briefcase/secure), + ) + + + src.lock_code = lock_code + if(!isnull(lock_code)) + atom_parent.atom_storage.locked = STORAGE_FULLY_LOCKED + src.can_hack_open = can_hack_open + + atom_parent.update_appearance() + +/datum/component/lockable_storage/RegisterWithParent() + . = ..() + if(can_hack_open) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), PROC_REF(on_screwdriver_act)) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_multitool_act)) + + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(on_update_icon_state)) + + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_interact)) + else + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_interact)) + +/datum/component/lockable_storage/UnregisterFromParent() + if(can_hack_open) + UnregisterSignal(parent, list( + COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), + COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), + )) + UnregisterSignal(parent, list( + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, + COMSIG_ATOM_UPDATE_ICON_STATE, + )) + + if(isitem(parent)) + UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) + else + UnregisterSignal(parent, COMSIG_ATOM_ATTACK_HAND) + return ..() + +/** + * Adds context screentips to the locked item. + * Arguments: + * * source - The item that will display its screentip + * * context - The list of context that will be displayed. We add onto this list for it to show up. + * * held_item - The item in your hand, which in this case should be a screwdriver or multitool, if necessary. + * * user - The user who is going to see the screentips. + */ +/datum/component/lockable_storage/proc/on_requesting_context_from_item(datum/source, list/context, obj/item/held_item, mob/user) + SIGNAL_HANDLER + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Open storage" + return CONTEXTUAL_SCREENTIP_SET + + if(can_hack_open) + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Hack panel open" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + +///Called when examining the storage item. +/datum/component/lockable_storage/proc/on_examine(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(can_hack_open) + examine_list += "The service panel is currently [panel_open ? "unscrewed" : "screwed shut"]." + +/** + * Called when a screwdriver is used on the parent, if it's hackable. + */ +/datum/component/lockable_storage/proc/on_screwdriver_act(atom/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + if(!can_hack_open || !source.atom_storage.locked) + return COMPONENT_BLOCK_TOOL_ATTACK + + panel_open = !panel_open + source.balloon_alert(user, "panel [panel_open ? "opened" : "closed"]") + return COMPONENT_BLOCK_TOOL_ATTACK + +/** + * Called when a multitool is used on the parent, if it's hackable. + * Checks if we can start hacking and, if so, will begin the hacking process. + */ +/datum/component/lockable_storage/proc/on_multitool_act(atom/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + if(!can_hack_open || !source.atom_storage.locked) + return COMPONENT_BLOCK_TOOL_ATTACK + if(!panel_open) + source.balloon_alert(user, "panel closed!") + return COMPONENT_BLOCK_TOOL_ATTACK + source.balloon_alert(user, "hacking...") + INVOKE_ASYNC(src, PROC_REF(hack_open), source, user, tool) + return COMPONENT_BLOCK_TOOL_ATTACK + +///Does a do_after to hack the storage open, takes a long time cause idk. +/datum/component/lockable_storage/proc/hack_open(atom/source, mob/user, obj/item/tool) + if(!tool.use_tool(parent, user, 40 SECONDS)) + return + source.balloon_alert(user, "hacked") + lock_code = null + +///Updates the icon state depending on if we're locked or not. +/datum/component/lockable_storage/proc/on_update_icon_state(obj/source) + SIGNAL_HANDLER + source.icon_state = "[source.base_icon_state][source.atom_storage.locked ? "_locked" : null]" + +///Called when interacted with in-hand or on attack, opens the UI. +/datum/component/lockable_storage/proc/on_interact(atom/source, mob/user) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(ui_interact), user) + +/datum/component/lockable_storage/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "LockedSafe", parent) + ui.open() + +/datum/component/lockable_storage/ui_data(mob/user) + var/list/data = list() + var/atom/source = parent + data["input_code"] = numeric_input || "*****" + data["locked"] = source.atom_storage.locked + data["lock_code"] = !!lock_code //we just need to know if it has one. + return data + +/datum/component/lockable_storage/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(action != "keypad") + return TRUE + var/digit = params["digit"] + switch(digit) + //locking it back up + if("C") + var/atom/source = parent + numeric_input = "" + //you can't lock it if it's already locked or lacks a lock code. + if(source.atom_storage.locked || isnull(lock_code)) + return TRUE + source.atom_storage.locked = STORAGE_FULLY_LOCKED + source.atom_storage.hide_contents(usr) + source.update_appearance(UPDATE_ICON) + return TRUE + //setting a password & unlocking + if("E") + //inputting a new code if there isn't one set. + if(!lock_code) + if(length(numeric_input) != 5) + return TRUE + lock_code = numeric_input + numeric_input = "" + return TRUE + //unlocking the current code. + if(numeric_input != lock_code) + return TRUE + var/atom/source = parent + source.atom_storage.locked = STORAGE_NOT_LOCKED + numeric_input = "" + source.update_appearance(UPDATE_ICON) + return TRUE + //putting digits in. + if("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") + if(length(numeric_input) == 5) + return + numeric_input += digit + return TRUE diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm index 8b7a751ef27..f03f28b8d6a 100644 --- a/code/datums/components/omen.dm +++ b/code/datums/components/omen.dm @@ -31,6 +31,8 @@ if(!isnull(damage_mod)) src.damage_mod = damage_mod + ADD_TRAIT(parent, TRAIT_CURSED, SMITE_TRAIT) + /** * This is a omen eat omen world! The stronger omen survives. */ @@ -50,6 +52,7 @@ /datum/component/omen/Destroy(force) var/mob/living/person = parent + REMOVE_TRAIT(person, TRAIT_CURSED, SMITE_TRAIT) to_chat(person, span_nicegreen("You feel a horrible omen lifted off your shoulders!")) if(vessel) diff --git a/code/datums/components/orbit_poll.dm b/code/datums/components/orbit_poll.dm index d9563aaab95..ceb85d16d64 100644 --- a/code/datums/components/orbit_poll.dm +++ b/code/datums/components/orbit_poll.dm @@ -47,13 +47,13 @@ var/message = custom_message || "[capitalize(src.title)] is looking for volunteers" - notify_ghosts("[message]. An orbiter will be chosen in [DisplayTimeText(timeout)].\n", \ - action = NOTIFY_ORBIT, \ - enter_link = "(Ignore)", \ - flashwindow = FALSE, \ - header = "Volunteers requested", \ - ignore_key = ignore_key, \ - source = parent \ + notify_ghosts( + "[message]. An orbiter will be chosen in [DisplayTimeText(timeout)].\n", + source = parent, + header = "Volunteers requested", + custom_link = " (Ignore)", + ignore_key = ignore_key, + notify_flags = NOTIFY_CATEGORY_NOFLASH, ) addtimer(CALLBACK(src, PROC_REF(end_poll)), timeout, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE|TIMER_DELETE_ME) @@ -84,22 +84,47 @@ return for(var/mob/dead/observer/ghost as anything in orbiter_comp.orbiter_list) - if(QDELETED(ghost) || isnull(ghost.client)) + var/client/ghost_client = ghost.client + + if(QDELETED(ghost) || isnull(ghost_client)) continue + if(is_banned_from(ghost.ckey, job_bans)) continue + var/datum/preferences/ghost_prefs = ghost_client.prefs + if(isnull(ghost_prefs)) + candidates += ghost // we'll assume they wanted to be picked despite prefs being null for whatever fucked up reason + continue + + if(!ghost_prefs.read_preference(/datum/preference/toggle/ghost_roles)) + continue + if(!isnull(ghost_client.holder) && !ghost_prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) + continue + candidates += ghost - if(!length(candidates)) + pick_and_offer(candidates) + +/// Takes a list, picks a candidate, and offers the role to them. +/datum/component/orbit_poll/proc/pick_and_offer(list/volunteers) + if(length(volunteers) <= 0) phone_home() return - var/mob/dead/observer/chosen = pick(candidates) + var/mob/dead/observer/chosen = pick(volunteers) - if(chosen) - deadchat_broadcast("[key_name(chosen, include_name = FALSE)] was selected for the role ([title]).", "Ghost Poll: ", parent) + if(isnull(chosen)) + phone_home() + return + SEND_SOUND(chosen, 'sound/misc/notice2.ogg') + var/response = tgui_alert(chosen, "Do you want to assume the role of [title]?", "Orbit Polling", list("Yes", "No"), 10 SECONDS) + if(response != "Yes") + var/reusable_list = volunteers - chosen + return pick_and_offer(reusable_list) + + deadchat_broadcast("[key_name(chosen, include_name = FALSE)] was selected for the role ([title]).", "Ghost Poll: ", parent) phone_home(chosen) /// Make sure to call your parents my dude diff --git a/code/datums/components/pet_commands/fetch.dm b/code/datums/components/pet_commands/fetch.dm index ae33983e1d0..fa0b3193a44 100644 --- a/code/datums/components/pet_commands/fetch.dm +++ b/code/datums/components/pet_commands/fetch.dm @@ -3,7 +3,7 @@ * Watch for someone throwing or pointing at something and then go get it and bring it back. * If it's food we might eat it instead. */ -/datum/pet_command/point_targetting/fetch +/datum/pet_command/point_targeting/fetch command_name = "Fetch" command_desc = "Command your pet to retrieve something you throw or point at." radial_icon = 'icons/mob/actions/actions_spells.dmi' @@ -16,22 +16,22 @@ /// If true, this is a poorly trained pet who will eat food you throw instead of bringing it back var/will_eat_targets = TRUE -/datum/pet_command/point_targetting/fetch/New(mob/living/parent) +/datum/pet_command/point_targeting/fetch/New(mob/living/parent) . = ..() if(isnull(parent)) return parent.AddElement(/datum/element/ai_held_item) // We don't remove this on destroy because they might still be holding something -/datum/pet_command/point_targetting/fetch/add_new_friend(mob/living/tamer) +/datum/pet_command/point_targeting/fetch/add_new_friend(mob/living/tamer) . = ..() RegisterSignal(tamer, COMSIG_MOB_THROW, PROC_REF(listened_throw)) -/datum/pet_command/point_targetting/fetch/remove_friend(mob/living/unfriended) +/datum/pet_command/point_targeting/fetch/remove_friend(mob/living/unfriended) . = ..() UnregisterSignal(unfriended, COMSIG_MOB_THROW) /// A friend has thrown something, if we're listening or at least not busy then go get it -/datum/pet_command/point_targetting/fetch/proc/listened_throw(mob/living/carbon/thrower) +/datum/pet_command/point_targeting/fetch/proc/listened_throw(mob/living/carbon/thrower) SIGNAL_HANDLER var/mob/living/parent = weak_parent.resolve() @@ -57,7 +57,7 @@ RegisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(listen_throw_land)) /// A throw we were listening to has finished, see if it's in range for us to try grabbing it -/datum/pet_command/point_targetting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwing_datum) +/datum/pet_command/point_targeting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwing_datum) SIGNAL_HANDLER UnregisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED) @@ -74,7 +74,7 @@ parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, throwing_datum.thrower) // Don't try and fetch turfs or anchored objects if someone points at them -/datum/pet_command/point_targetting/fetch/look_for_target(mob/living/pointing_friend, obj/item/pointed_atom) +/datum/pet_command/point_targeting/fetch/look_for_target(mob/living/pointing_friend, obj/item/pointed_atom) if (!istype(pointed_atom)) return FALSE if (pointed_atom.anchored) @@ -87,7 +87,7 @@ parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, pointing_friend) // Finally, plan our actions -/datum/pet_command/point_targetting/fetch/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/fetch/execute_action(datum/ai_controller/controller) controller.queue_behavior(/datum/ai_behavior/forget_failed_fetches) var/atom/target = controller.blackboard[BB_CURRENT_PET_TARGET] diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm index 7899ffce40a..7762b9b2aa8 100644 --- a/code/datums/components/pet_commands/pet_command.dm +++ b/code/datums/components/pet_commands/pet_command.dm @@ -109,25 +109,25 @@ CRASH("Pet command execute action not implemented.") /** - * # Point Targetting Pet Command + * # Point Targeting Pet Command * As above but also listens for you pointing at something and marks it as a target */ -/datum/pet_command/point_targetting +/datum/pet_command/point_targeting /// Text describing an action we perform upon receiving a new target var/pointed_reaction - /// Blackboard key for targetting datum, this is likely going to need it - var/targetting_datum_key = BB_PET_TARGETTING_DATUM + /// Blackboard key for targeting strategy, this is likely going to need it + var/targeting_strategy_key = BB_PET_TARGETING_STRATEGY -/datum/pet_command/point_targetting/add_new_friend(mob/living/tamer) +/datum/pet_command/point_targeting/add_new_friend(mob/living/tamer) . = ..() RegisterSignal(tamer, COMSIG_MOB_POINTED, PROC_REF(look_for_target)) -/datum/pet_command/point_targetting/remove_friend(mob/living/unfriended) +/datum/pet_command/point_targeting/remove_friend(mob/living/unfriended) . = ..() UnregisterSignal(unfriended, COMSIG_MOB_POINTED) /// Target the pointed atom for actions -/datum/pet_command/point_targetting/proc/look_for_target(mob/living/friend, atom/pointed_atom) +/datum/pet_command/point_targeting/proc/look_for_target(mob/living/friend, atom/pointed_atom) SIGNAL_HANDLER var/mob/living/parent = weak_parent.resolve() diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 68a20fa77f2..f77dad1d8bb 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -98,11 +98,27 @@ parent.emote("spin") return SUBTREE_RETURN_FINISH_PLANNING +/** + * # Pet Command: Use ability + * Use an an ability that does not require any targets + */ +/datum/pet_command/untargeted_ability + ///untargeted ability we will use + var/ability_key + +/datum/pet_command/untargeted_ability/execute_action(datum/ai_controller/controller) + var/datum/action/cooldown/ability = controller.blackboard[ability_key] + if(!ability?.IsAvailable()) + return + controller.queue_behavior(/datum/ai_behavior/use_mob_ability, ability_key) + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) + return SUBTREE_RETURN_FINISH_PLANNING + /** * # Pet Command: Attack * Tells a pet to chase and bite the next thing you point at */ -/datum/pet_command/point_targetting/attack +/datum/pet_command/point_targeting/attack command_name = "Attack" command_desc = "Command your pet to attack things that you point out to it." radial_icon = 'icons/effects/effects.dmi' @@ -117,13 +133,13 @@ var/attack_behaviour = /datum/ai_behavior/basic_melee_attack // Refuse to target things we can't target, chiefly other friends -/datum/pet_command/point_targetting/attack/set_command_target(mob/living/parent, atom/target) +/datum/pet_command/point_targeting/attack/set_command_target(mob/living/parent, atom/target) if (!target) return var/mob/living/living_parent = parent if (!living_parent.ai_controller) return - var/datum/targetting_datum/targeter = living_parent.ai_controller.blackboard[targetting_datum_key] + var/datum/targeting_strategy/targeter = GET_TARGETING_STRATEGY(living_parent.ai_controller.blackboard[targeting_strategy_key]) if (!targeter) return if (!targeter.can_attack(living_parent, target)) @@ -131,21 +147,52 @@ return return ..() -/// Display feedback about not targetting something -/datum/pet_command/point_targetting/attack/proc/refuse_target(mob/living/parent, atom/target) +/// Display feedback about not targeting something +/datum/pet_command/point_targeting/attack/proc/refuse_target(mob/living/parent, atom/target) var/mob/living/living_parent = parent living_parent.balloon_alert_to_viewers("[refuse_reaction]") living_parent.visible_message(span_notice("[living_parent] refuses to attack [target].")) -/datum/pet_command/point_targetting/attack/execute_action(datum/ai_controller/controller) - controller.queue_behavior(attack_behaviour, BB_CURRENT_PET_TARGET, targetting_datum_key) +/datum/pet_command/point_targeting/attack/execute_action(datum/ai_controller/controller) + controller.queue_behavior(attack_behaviour, BB_CURRENT_PET_TARGET, targeting_strategy_key) + return SUBTREE_RETURN_FINISH_PLANNING + +/** + * # Breed command. breed with a partner! + */ +/datum/pet_command/point_targeting/breed + command_name = "Breed" + command_desc = "Command your pet to attempt to breed with a partner." + radial_icon = 'icons/mob/simple/animal.dmi' + radial_icon_state = "heart" + speech_commands = list("breed", "consummate") + var/datum/ai_behavior/reproduce_behavior = /datum/ai_behavior/make_babies + +/datum/pet_command/point_targeting/breed/set_command_target(mob/living/parent, atom/target) + if(isnull(target) || !isliving(target)) + return + if(!HAS_TRAIT(parent, TRAIT_MOB_BREEDER) || !HAS_TRAIT(target, TRAIT_MOB_BREEDER)) + return + if(isnull(parent.ai_controller)) + return + if(!parent.ai_controller.blackboard[BB_BREED_READY] || isnull(parent.ai_controller.blackboard[BB_BABIES_PARTNER_TYPES])) + return + var/mob/living/living_target = target + if(!living_target.ai_controller?.blackboard[BB_BREED_READY]) + return + return ..() + +/datum/pet_command/point_targeting/breed/execute_action(datum/ai_controller/controller) + if(is_type_in_list(controller.blackboard[BB_CURRENT_PET_TARGET], controller.blackboard[BB_BABIES_PARTNER_TYPES])) + controller.queue_behavior(reproduce_behavior, BB_CURRENT_PET_TARGET) + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return SUBTREE_RETURN_FINISH_PLANNING /** * # Pet Command: Targetted Ability * Tells a pet to use some kind of ability on the next thing you point at */ -/datum/pet_command/point_targetting/use_ability +/datum/pet_command/point_targeting/use_ability command_name = "Use ability" command_desc = "Command your pet to use one of its special skills on something that you point out to it." radial_icon = 'icons/mob/actions/actions_spells.dmi' @@ -156,7 +203,7 @@ /// Blackboard key where a reference to some kind of mob ability is stored var/pet_ability_key -/datum/pet_command/point_targetting/use_ability/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/use_ability/execute_action(datum/ai_controller/controller) if (!pet_ability_key) return var/datum/action/cooldown/using_action = controller.blackboard[pet_ability_key] @@ -191,7 +238,7 @@ if(victim.stat > controller.blackboard[BB_TARGET_MINIMUM_STAT]) controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return - controller.queue_behavior(protect_behavior, BB_CURRENT_PET_TARGET, BB_PET_TARGETTING_DATUM) + controller.queue_behavior(protect_behavior, BB_CURRENT_PET_TARGET, BB_PET_TARGETING_STRATEGY) return SUBTREE_RETURN_FINISH_PLANNING /datum/pet_command/protect_owner/set_command_active(mob/living/parent, mob/living/victim) diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 00976c6c39d..245f8f969a9 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -20,8 +20,6 @@ var/ducting_layer = DUCT_LAYER_DEFAULT ///In-case we don't want the main machine to get the reagents, but perhaps whoever is buckled to it var/recipient_reagents_holder - ///How do we apply the new reagents to the receiver? Generally doesn't matter, but some stuff, like people, does care if its injected or whatevs - var/methods ///What color is our demand connect? var/demand_color = COLOR_RED ///What color is our supply connect? @@ -100,7 +98,7 @@ //find the duct to take from var/datum/ductnet/net if(!ducts.Find(num2text(dir))) - return + return FALSE net = ducts[num2text(dir)] //find all valid suppliers in the duct @@ -110,7 +108,7 @@ valid_suppliers += supplier var/suppliersLeft = valid_suppliers.len if(!suppliersLeft) - return + return FALSE //take an equal amount from each supplier var/currentRequest @@ -119,6 +117,7 @@ currentRequest = (target_volume - reagents.total_volume) / suppliersLeft give.transfer_to(src, currentRequest, reagent, net) suppliersLeft-- + return TRUE ///returns TRUE when they can give the specified amount and reagent. called by process request /datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) @@ -138,10 +137,8 @@ /datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) if(!reagents || !target || !target.reagents) return FALSE - if(reagent) - reagents.trans_id_to(target.recipient_reagents_holder, reagent, amount) - else - reagents.trans_to(target.recipient_reagents_holder, amount, methods = methods) + + reagents.trans_to(target.recipient_reagents_holder, amount, target_id = reagent) ///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize() /datum/component/plumbing/proc/create_overlays(atom/movable/parent_movable, list/overlays) @@ -214,8 +211,11 @@ STOP_PROCESSING(SSplumbing, src) - for(var/duct_dir in ducts) - var/datum/ductnet/duct = ducts[duct_dir] + //remove_plumber() can remove all ducts at once if they all belong to the same pipenet + //for e.g. in case of circular connections + //so we check if we have ducts to remove after each iteration + while(ducts.len) + var/datum/ductnet/duct = ducts[ducts[1]] //for maps index 1 will return the 1st key duct.remove_plumber(src) active = FALSE diff --git a/code/datums/components/plumbing/filter.dm b/code/datums/components/plumbing/filter.dm index 4b8dd8d54a6..30e36c05788 100644 --- a/code/datums/components/plumbing/filter.dm +++ b/code/datums/components/plumbing/filter.dm @@ -31,7 +31,7 @@ direction = get_original_direction(text2num(A)) break if(reagent) - reagents.trans_id_to(target.parent, reagent, amount) + reagents.trans_to(target.parent, amount, target_id = reagent) else for(var/A in reagents.reagent_list) var/datum/reagent/R = A @@ -40,7 +40,7 @@ var/new_amount if(R.volume < amount) new_amount = amount - R.volume - reagents.trans_id_to(target.parent, R.type, amount) + reagents.trans_to(target.parent, amount, target_id = R.type) amount = new_amount if(amount <= 0) break diff --git a/code/datums/components/plumbing/reaction_chamber.dm b/code/datums/components/plumbing/reaction_chamber.dm index e76fb69ec1f..d0aff2f5070 100644 --- a/code/datums/components/plumbing/reaction_chamber.dm +++ b/code/datums/components/plumbing/reaction_chamber.dm @@ -18,20 +18,21 @@ if(chamber.emptying) return + //take in reagents var/present_amount var/diff for(var/required_reagent in chamber.required_reagents) - //find how much amount is already present if at all + //find how much amount is already present if at all and get the reagent reference present_amount = 0 - for(var/datum/reagent/containg_reagent as anything in reagents.reagent_list) - if(required_reagent == containg_reagent.type) - present_amount = containg_reagent.volume + for(var/datum/reagent/present_reagent as anything in reagents.reagent_list) + if(required_reagent == present_reagent.type) + present_amount = present_reagent.volume break - //compute how much more is needed and round it - diff = chamber.required_reagents[required_reagent] - present_amount - if(diff >= 0.01) - process_request(min(diff, MACHINE_REAGENT_TRANSFER), required_reagent, dir) + //compute how much more is needed + diff = min(chamber.required_reagents[required_reagent] - present_amount, MACHINE_REAGENT_TRANSFER) + if(diff >= CHEMICAL_QUANTISATION_LEVEL) // the closest we can ask for so values like 0.9999 become 1 + process_request(diff, required_reagent, dir) return reagents.flags &= ~NO_REACT diff --git a/code/datums/components/ranged_mob_full_auto.dm b/code/datums/components/ranged_mob_full_auto.dm new file mode 100644 index 00000000000..a33b705d548 --- /dev/null +++ b/code/datums/components/ranged_mob_full_auto.dm @@ -0,0 +1,203 @@ +#define AUTOFIRE_MOUSEUP 1 +#define AUTOFIRE_MOUSEDOWN 0 + +/// Allows a mob to autofire by holding down the cursor +/datum/component/ranged_mob_full_auto + /// Delay before attempting to fire again, note that this is just when we make attempts and is separate from mob's actual firing cooldown + var/autofire_shot_delay + /// Our client for click tracking + var/client/clicker + /// Are we currently firing? + var/is_firing = FALSE + /// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. + var/awaiting_status = AUTOFIRE_MOUSEDOWN + /// What are we currently shooting at? + var/atom/target + /// Where are we currently shooting at? + var/turf/target_loc + /// When will we next try to shoot? + COOLDOWN_DECLARE(next_shot_cooldown) + +/datum/component/ranged_mob_full_auto/Initialize(autofire_shot_delay = 0.5 SECONDS) + . = ..() + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.autofire_shot_delay = autofire_shot_delay + + var/mob/living/living_parent = parent + if (isnull(living_parent.client)) + return + on_gained_client(parent) + +/datum/component/ranged_mob_full_auto/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_gained_client)) + RegisterSignal(parent, COMSIG_MOB_LOGOUT, PROC_REF(on_lost_client)) + +/datum/component/ranged_mob_full_auto/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) + +/datum/component/ranged_mob_full_auto/process(seconds_per_tick) + if (!try_shooting()) + return PROCESS_KILL + +/// Try and take a shot, returns false if we are unable to do so and should stop trying +/datum/component/ranged_mob_full_auto/proc/try_shooting() + if (!is_firing) + return FALSE + if (!COOLDOWN_FINISHED(src, next_shot_cooldown)) + return TRUE // Don't fire but also keep processing + + var/mob/living/living_parent = parent + + if (isnull(target) || get_turf(target) != target_loc) // Target moved or got destroyed since we last aimed. + set_target(target_loc) + target = target_loc // So we keep firing on the emptied tile until we move our mouse and find a new target. + if (get_dist(living_parent, target) <= 0) + set_target(get_step(living_parent, living_parent.dir)) // Shoot in the direction faced if the mouse is on the same tile as we are. + target_loc = target + else if (!in_view_range(living_parent, target)) + stop_firing() + return FALSE // Can't see shit + + living_parent.face_atom(target) + COOLDOWN_START(src, next_shot_cooldown, autofire_shot_delay) + living_parent.RangedAttack(target) + return TRUE + +/// Setter for reference handling +/datum/component/ranged_mob_full_auto/proc/set_target(atom/new_target) + if (!isnull(target)) + UnregisterSignal(target, COMSIG_QDELETING) + target = new_target + if (!isnull(target)) + RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_deleted)) + +/// Don't hang references +/datum/component/ranged_mob_full_auto/proc/on_target_deleted() + SIGNAL_HANDLER + set_target(null) + +/// When we gain a client, start tracking clicks +/datum/component/ranged_mob_full_auto/proc/on_gained_client(mob/living/source) + SIGNAL_HANDLER + clicker = source.client + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down)) + +/// When we lose our client, stop functioning +/datum/component/ranged_mob_full_auto/proc/on_lost_client(mob/living/source) + SIGNAL_HANDLER + if (!isnull(clicker)) + UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) + stop_firing() + clicker = null + +/// On mouse down start shooting! +/datum/component/ranged_mob_full_auto/proc/on_mouse_down(client/source, atom/target, turf/location, control, params) + SIGNAL_HANDLER + if (awaiting_status != AUTOFIRE_MOUSEDOWN) + return // Avoid a double mousedown with no mouseup + var/list/modifiers = params2list(params) + + if (LAZYACCESS(modifiers, SHIFT_CLICK)) + return + if (LAZYACCESS(modifiers, CTRL_CLICK)) + return + if (LAZYACCESS(modifiers, MIDDLE_CLICK)) + return + if (LAZYACCESS(modifiers, RIGHT_CLICK)) + return + if (LAZYACCESS(modifiers, ALT_CLICK)) + return + var/mob/living/living_parent = parent + if (!isturf(living_parent.loc) || living_parent.Adjacent(target)) + return + + if (isnull(location) || istype(target, /atom/movable/screen)) // Clicking on a screen object. + if (target.plane != CLICKCATCHER_PLANE) // The clickcatcher is a special case. We want the click to trigger then, under it. + return // If we click and drag on our worn backpack, for example, we want it to open instead. + set_target(parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)) + params = list2params(modifiers) + if (isnull(target)) + CRASH("Failed to get the turf under clickcatcher") + + awaiting_status = AUTOFIRE_MOUSEUP + source.click_intercept_time = world.time // From this point onwards Click() will no longer be triggered. + if (is_firing) + stop_firing() + + set_target(target) + target_loc = get_turf(target) + INVOKE_ASYNC(src, PROC_REF(start_firing)) + +/// Start tracking mouse movement and processing our shots +/datum/component/ranged_mob_full_auto/proc/start_firing() + if (is_firing) + return + + is_firing = TRUE + if (!try_shooting()) // First one is immediate + stop_firing() + return + + clicker.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi' + clicker.mouse_pointer_icon = clicker.mouse_override_icon + + START_PROCESSING(SSprojectiles, src) + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up)) + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag)) + +/// When the mouse moved let's try and shift our aim +/datum/component/ranged_mob_full_auto/proc/on_mouse_drag(client/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER + if (!isnull(over_location)) + set_target(over_object) + target_loc = get_turf(over_object) + return + + //This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example. + var/list/modifiers = params2list(params) + var/new_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source) + params = list2params(modifiers) + + if (!isnull(new_target)) + set_target(new_target) + target_loc = new_target + return + + if (QDELETED(target)) //No new target acquired, and old one was deleted, get us out of here. + stop_firing() + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]. Old target was incidentally QDELETED.") + + + set_target(get_turf(target)) //If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target. + target_loc = target + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]") + +/// When the mouse is released we should stop +/datum/component/ranged_mob_full_auto/proc/on_mouse_up() + SIGNAL_HANDLER + if (awaiting_status != AUTOFIRE_MOUSEUP) + return + stop_firing() + return COMPONENT_CLIENT_MOUSEUP_INTERCEPT + +/// Stop watching our mouse and processing shots +/datum/component/ranged_mob_full_auto/proc/stop_firing() + if (!is_firing) + return + + is_firing = FALSE + set_target(null) + target_loc = null + STOP_PROCESSING(SSprojectiles, src) + awaiting_status = AUTOFIRE_MOUSEDOWN + + if (isnull(clicker)) + return + UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) + clicker.mouse_override_icon = null + clicker.mouse_pointer_icon = null + +#undef AUTOFIRE_MOUSEUP +#undef AUTOFIRE_MOUSEDOWN diff --git a/code/datums/components/reagent_refiller.dm b/code/datums/components/reagent_refiller.dm index 4e2da58c79b..ffb451b83ac 100644 --- a/code/datums/components/reagent_refiller.dm +++ b/code/datums/components/reagent_refiller.dm @@ -51,15 +51,15 @@ . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM var/obj/item/reagent_containers/container = parent - var/refill = container.reagents.get_master_reagent_id() var/amount = min((container.amount_per_transfer_from_this + container.reagents.total_volume), container.reagents.total_volume) - if (amount == 0) return - if (!is_path_in_list(refill, whitelisted_reagents)) + + var/datum/reagent/refill = container.reagents.get_master_reagent() + if (!is_path_in_list(refill?.type, whitelisted_reagents)) return - addtimer(CALLBACK(src, PROC_REF(add_reagents), container, container.loc, refill, amount), time_to_refill) + addtimer(CALLBACK(src, PROC_REF(add_reagents), container, container.loc, refill.type, amount), time_to_refill) /// Refills the reagent container, and uses cell power if applicable /datum/component/reagent_refiller/proc/add_reagents(obj/item/reagent_containers/target, oldloc, reagent_to_refill, amount) diff --git a/code/datums/components/revenge_ability.dm b/code/datums/components/revenge_ability.dm index f03bc992276..8d9faec52e0 100644 --- a/code/datums/components/revenge_ability.dm +++ b/code/datums/components/revenge_ability.dm @@ -8,7 +8,7 @@ /// The ability to use when we are attacked var/datum/action/cooldown/ability /// Optional datum for validating targets - var/datum/targetting_datum/targetting + var/datum/targeting_strategy/targeting /// Trigger only if target is at least this far away var/min_range /// Trigger only if target is at least this close @@ -16,12 +16,12 @@ /// Target the ability at ourself instead of at the offender var/target_self -/datum/component/revenge_ability/Initialize(datum/action/cooldown/ability, datum/targetting_datum/targetting, min_range = 0, max_range = INFINITY, target_self = FALSE) +/datum/component/revenge_ability/Initialize(datum/action/cooldown/ability, datum/targeting_strategy/targeting, min_range = 0, max_range = INFINITY, target_self = FALSE) . = ..() if (!isliving(parent)) return COMPONENT_INCOMPATIBLE src.ability = ability - src.targetting = targetting + src.targeting = targeting src.min_range = min_range src.max_range = max_range src.target_self = target_self @@ -45,7 +45,7 @@ var/distance = get_dist(ability_user, attacker) if (distance < min_range || distance > max_range) return - if (targetting && !targetting.can_attack(victim, attacker)) + if (targeting && !targeting.can_attack(victim, attacker)) return INVOKE_ASYNC(ability, TYPE_PROC_REF(/datum/action/cooldown, InterceptClickOn), ability_user, null, (target_self) ? ability_user : attacker) diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm index 14358a5c5a3..c8c969a8c6b 100644 --- a/code/datums/components/riding/riding.dm +++ b/code/datums/components/riding/riding.dm @@ -26,12 +26,16 @@ var/list/directional_vehicle_layers = list() /// same as above but instead of layer you have a list(px, py) var/list/directional_vehicle_offsets = list() + /// planes of the rider + var/list/directional_rider_planes = list() /// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence. var/list/allowed_turf_typecache /// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence. var/list/forbid_turf_typecache /// We don't need roads where we're going if this is TRUE, allow normal movement in space tiles var/override_allow_spacemove = FALSE + /// can anyone other than the rider unbuckle the rider? + var/can_force_unbuckle = TRUE /** * Ride check flags defined for the specific riding component types, so we know if we need arms, legs, or whatever. @@ -55,7 +59,6 @@ if(potion_boost) vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 0.85, 0.01) - /datum/component/riding/RegisterWithParent() . = ..() RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(vehicle_turned)) @@ -64,6 +67,10 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(vehicle_moved)) RegisterSignal(parent, COMSIG_MOVABLE_BUMP, PROC_REF(vehicle_bump)) RegisterSignal(parent, COMSIG_BUCKLED_CAN_Z_MOVE, PROC_REF(riding_can_z_move)) + RegisterSignals(parent, GLOB.movement_type_addtrait_signals, PROC_REF(on_movement_type_trait_gain)) + RegisterSignals(parent, GLOB.movement_type_removetrait_signals, PROC_REF(on_movement_type_trait_loss)) + if(!can_force_unbuckle) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(force_unbuckle)) /** * This proc handles all of the proc calls to things like set_vehicle_dir_layer() that a type of riding datum needs to call on creation @@ -79,11 +86,18 @@ /datum/component/riding/proc/vehicle_mob_unbuckle(datum/source, mob/living/rider, force = FALSE) SIGNAL_HANDLER + handle_unbuckle(rider) + +/datum/component/riding/proc/handle_unbuckle(mob/living/rider) var/atom/movable/movable_parent = parent restore_position(rider) unequip_buckle_inhands(rider) rider.updating_glide_size = TRUE UnregisterSignal(rider, COMSIG_LIVING_TRY_PULL) + for (var/trait in GLOB.movement_type_trait_to_flag) + if (HAS_TRAIT(parent, trait)) + REMOVE_TRAIT(rider, trait, REF(src)) + REMOVE_TRAIT(rider, TRAIT_NO_FLOATING_ANIM, REF(src)) if(!movable_parent.has_buckled_mobs()) qdel(src) @@ -94,11 +108,17 @@ var/atom/movable/movable_parent = parent handle_vehicle_layer(movable_parent.dir) handle_vehicle_offsets(movable_parent.dir) + handle_rider_plane(movable_parent.dir) if(rider.pulling == source) rider.stop_pulling() RegisterSignal(rider, COMSIG_LIVING_TRY_PULL, PROC_REF(on_rider_try_pull)) + for (var/trait in GLOB.movement_type_trait_to_flag) + if (HAS_TRAIT(parent, trait)) + ADD_TRAIT(rider, trait, REF(src)) + ADD_TRAIT(rider, TRAIT_NO_FLOATING_ANIM, REF(src)) + /// This proc is called when the rider attempts to grab the thing they're riding, preventing them from doing so. /datum/component/riding/proc/on_rider_try_pull(mob/living/rider_pulling, atom/movable/target, force) SIGNAL_HANDLER @@ -118,9 +138,20 @@ . = AM.layer AM.layer = . +/datum/component/riding/proc/handle_rider_plane(dir) + var/atom/movable/movable_parent = parent + var/target_plane = directional_rider_planes["[dir]"] + if(isnull(target_plane)) + return + for(var/mob/buckled_mob in movable_parent.buckled_mobs) + SET_PLANE_EXPLICIT(buckled_mob, target_plane, movable_parent) + /datum/component/riding/proc/set_vehicle_dir_layer(dir, layer) directional_vehicle_layers["[dir]"] = layer +/datum/component/riding/proc/set_rider_dir_plane(dir, plane) + directional_rider_planes["[dir]"] = plane + /// This is called after the ridden atom is successfully moved and is used to handle icon stuff /datum/component/riding/proc/vehicle_moved(datum/source, oldloc, dir, forced) SIGNAL_HANDLER @@ -135,6 +166,7 @@ return // runtimed with piggy's without this, look into this more handle_vehicle_offsets(dir) handle_vehicle_layer(dir) + handle_rider_plane(dir) /// Turning is like moving /datum/component/riding/proc/vehicle_turned(datum/source, _old_dir, new_dir) @@ -222,11 +254,14 @@ //BUCKLE HOOKS /datum/component/riding/proc/restore_position(mob/living/buckled_mob) - if(buckled_mob) - buckled_mob.pixel_x = buckled_mob.base_pixel_x - buckled_mob.pixel_y = buckled_mob.base_pixel_y - if(buckled_mob.client) - buckled_mob.client.view_size.resetToDefault() + if(isnull(buckled_mob)) + return + buckled_mob.pixel_x = buckled_mob.base_pixel_x + buckled_mob.pixel_y = buckled_mob.base_pixel_y + var/atom/source = parent + SET_PLANE_EXPLICIT(buckled_mob, initial(buckled_mob.plane), source) + if(buckled_mob.client) + buckled_mob.client.view_size.resetToDefault() //MOVEMENT /datum/component/riding/proc/turf_check(turf/next, turf/current) @@ -273,3 +308,24 @@ /datum/component/riding/proc/riding_can_z_move(atom/movable/movable_parent, direction, turf/start, turf/destination, z_move_flags, mob/living/rider) SIGNAL_HANDLER return COMPONENT_RIDDEN_ALLOW_Z_MOVE + +/// Called when our vehicle gains a movement trait, so we can apply it to the riders +/datum/component/riding/proc/on_movement_type_trait_gain(atom/movable/source, trait) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + for (var/mob/rider in movable_parent.buckled_mobs) + ADD_TRAIT(rider, trait, REF(src)) + +/// Called when our vehicle loses a movement trait, so we can remove it from the riders +/datum/component/riding/proc/on_movement_type_trait_loss(atom/movable/source, trait) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + for (var/mob/rider in movable_parent.buckled_mobs) + REMOVE_TRAIT(rider, trait, REF(src)) + +/datum/component/riding/proc/force_unbuckle(atom/movable/source, mob/living/living_hitter) + SIGNAL_HANDLER + + if((living_hitter in source.buckled_mobs)) + return + return COMPONENT_CANCEL_ATTACK_CHAIN diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index 85aaee4ab7c..0ad6c1e4c7f 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -11,7 +11,8 @@ var/can_be_driven = TRUE /// If TRUE, this creature's abilities can be triggered by the rider while mounted var/can_use_abilities = FALSE - var/list/shared_action_buttons = list() + /// list of blacklisted abilities that cant be shared + var/list/blacklist_abilities = list() /datum/component/riding/creature/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE) if(!isliving(parent)) @@ -66,6 +67,8 @@ // for fireman carries, check if the ridden is stunned/restrained else if((ride_check_flags & CARRIER_NEEDS_ARM) && (HAS_TRAIT(living_parent, TRAIT_RESTRAINED) || living_parent.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB))) . = FALSE + else if((ride_check_flags & JUST_FRIEND_RIDERS) && !(living_parent.faction.Find(REF(rider)))) + . = FALSE if(. || !consequences) return @@ -162,6 +165,7 @@ for(var/mob/yeet_mob in user.buckled_mobs) force_dismount(yeet_mob, (!user.combat_mode)) // gentle on help, byeeee if not + /// If the ridden creature has abilities, and some var yet to be made is set to TRUE, the rider will be able to control those abilities /datum/component/riding/creature/proc/setup_abilities(mob/living/rider) if(!isliving(parent)) @@ -170,6 +174,8 @@ var/mob/living/ridden_creature = parent for(var/datum/action/action as anything in ridden_creature.actions) + if(is_type_in_list(action, blacklist_abilities)) + continue action.GiveAction(rider) /// Takes away the riding parent's abilities from the rider @@ -497,7 +503,7 @@ set_vehicle_dir_layer(WEST, ABOVE_MOB_LAYER) /datum/component/riding/creature/guardian/ride_check(mob/living/user, consequences = TRUE) - var/mob/living/simple_animal/hostile/guardian/charger = parent + var/mob/living/basic/guardian/charger = parent if(!istype(charger)) return ..() return charger.summoner == user @@ -512,6 +518,38 @@ set_vehicle_dir_layer(EAST, OBJ_LAYER) set_vehicle_dir_layer(WEST, OBJ_LAYER) +/datum/component/riding/creature/leaper + can_force_unbuckle = FALSE + can_use_abilities = TRUE + blacklist_abilities = list(/datum/action/cooldown/toggle_seethrough) + ride_check_flags = JUST_FRIEND_RIDERS + +/datum/component/riding/creature/leaper/handle_specials() + . = ..() + set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(17, 46), TEXT_SOUTH = list(17,51), TEXT_EAST = list(27, 46), TEXT_WEST = list(6, 46))) + set_rider_dir_plane(SOUTH, GAME_PLANE_UPPER) + set_rider_dir_plane(NORTH, GAME_PLANE) + set_rider_dir_plane(EAST, GAME_PLANE_UPPER) + set_rider_dir_plane(WEST, GAME_PLANE_UPPER) + +/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE) + . = ..() + RegisterSignal(riding_mob, COMSIG_MOB_POINTED, PROC_REF(attack_pointed)) + +/datum/component/riding/creature/leaper/proc/attack_pointed(mob/living/rider, atom/pointed) + SIGNAL_HANDLER + if(!isclosedturf(pointed)) + return + var/mob/living/basic/basic_parent = parent + if(!basic_parent.CanReach(pointed)) + return + basic_parent.melee_attack(pointed) + + +/datum/component/riding/leaper/handle_unbuckle(mob/living/rider) + . = ..() + UnregisterSignal(rider, COMSIG_MOB_POINTED) + //SKYRAT EDIT START: Human Riding Defines #undef OVERSIZED_OFFSET #undef OVERSIZED_SIDE_OFFSET diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index b33f3d986fd..0265148c8b5 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -3,6 +3,7 @@ */ /datum/component/shielded + dupe_mode = COMPONENT_DUPE_UNIQUE /// The person currently wearing us var/mob/living/wearer /// How many charges we can have max, and how many we start with @@ -113,7 +114,7 @@ if((slot & ITEM_SLOT_HANDS) && !shield_inhand) lost_wearer(source, user) return - set_wearer(source, user) + set_wearer(user) /// Either we've been dropped or our wearer has been QDEL'd. Either way, they're no longer our problem /datum/component/shielded/proc/lost_wearer(datum/source, mob/user) @@ -125,6 +126,11 @@ wearer = null /datum/component/shielded/proc/set_wearer(mob/user) + if(wearer == user) + return + if(!isnull(wearer)) + CRASH("[type] called set_wearer with [user] but [wearer] was already the wearer!") + wearer = user RegisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) RegisterSignal(wearer, COMSIG_QDELETING, PROC_REF(lost_wearer)) diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm index bc6f022ab86..9cbff17c0a3 100644 --- a/code/datums/components/shuttle_cling.dm +++ b/code/datums/components/shuttle_cling.dm @@ -90,9 +90,9 @@ return //Do pause/unpause/nothing for the hyperloop - if(should_loop && hyperloop.paused) + if(should_loop && hyperloop.status & MOVELOOP_STATUS_PAUSED) hyperloop.resume_loop() - else if(!should_loop && !hyperloop.paused) + else if(!should_loop && !(hyperloop.status & MOVELOOP_STATUS_PAUSED)) hyperloop.pause_loop() ///Check if we're "holding on" to the shuttle diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index be1d674eb4d..2119c8ad7e1 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -1,17 +1,33 @@ -/// Slippery component, for making anything slippery. Of course. +/** + * # Slip behaviour component + * + * Add this component to an object to make it a slippery object, slippery objects make mobs that cross them fall over. + * Items with this component that get picked up may give their parent mob the slip behaviour. + * + * Here is a simple example of adding the component behaviour to an object.area + * + * AddComponent(/datum/component/slippery, 80, (NO_SLIP_WHEN_WALKING | SLIDE)) + * + * This adds slippery behaviour to the parent atom, with a 80 decisecond (~8 seconds) knockdown + * The lube flags control how the slip behaves, in this case, the mob wont slip if it's in walking mode (NO_SLIP_WHEN_WALKING) + * and if they do slip, they will slide a few tiles (SLIDE) + * + * + * This component has configurable behaviours, see the [Initialize proc for the argument listing][/datum/component/slippery/proc/Initialize]. + */ /datum/component/slippery dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - /// If the slip forces you to drop held items. + /// If the slip forces the crossing mob to drop held items. var/force_drop_items = FALSE - /// How long the slip keeps you knocked down. + /// How long the slip keeps the crossing mob knocked over (they can still crawl and use weapons) for. var/knockdown_time = 0 - /// How long the slip paralyzes for. + /// How long the slip paralyzes (prevents the crossing mob doing anything) for. var/paralyze_time = 0 /// Flags for how slippery the parent is. See [__DEFINES/mobs.dm] var/lube_flags - /// Optional callback providing an additional chance to prevent slippage + /// Optional callback allowing you to define custom conditions for slipping var/datum/callback/can_slip_callback - /// A proc callback to call on slip. + /// Optional call back that is called when a mob slips on this component var/datum/callback/on_slip_callback /// If parent is an item, this is the person currently holding/wearing the parent (or the parent if no one is holding it) var/mob/living/holder @@ -30,6 +46,20 @@ /// The connect_loc_behalf component for the holder_connections list. var/datum/weakref/holder_connect_loc_behalf +/** + * Initialize the slippery component behaviour + * + * When applied to any atom in the game this will apply slipping behaviours to that atom + * + * Arguments: + * * knockdown - Length of time the knockdown applies (Deciseconds) + * * lube_flags - Controls the slip behaviour, they are listed starting [here][SLIDE] + * * datum/callback/on_slip_callback - Callback to define further custom controls on when slipping is applied + * * paralyze - length of time to paralyze the crossing mob for (Deciseconds) + * * force_drop - should the crossing mob drop items in it's hands or not + * * slot_whitelist - flags controlling where on a mob this item can be equipped to make the parent mob slippery full list [here][ITEM_SLOT_OCLOTHING] + * * datum/callback/on_slip_callback - Callback to add custom behaviours as the crossing mob is slipped + */ /datum/component/slippery/Initialize( knockdown, lube_flags = NONE, @@ -115,11 +145,12 @@ src.can_slip_callback = can_slip_callback if(slot_whitelist) src.slot_whitelist = slot_whitelist -/* +/** * The proc that does the sliping. Invokes the slip callback we have set. * - * source - the source of the signal - * AM - the atom/movable that is being slipped. + * Arguments + * * source - the source of the signal + * * arrived - the atom/movable that is being slipped. */ /datum/component/slippery/proc/Slip(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER @@ -137,14 +168,15 @@ if(victim.slip(knockdown_time, parent, lube_flags, paralyze_time, force_drop_items)) on_slip_callback?.Invoke(victim) -/* +/** * Gets called when COMSIG_ITEM_EQUIPPED is sent to parent. * This proc register slip signals to the equipper. * If we have a slot whitelist, we only register the signals if the slot is valid (ex: clown PDA only slips in ID or belt slot). * - * source - the source of the signal - * equipper - the mob we're equipping the slippery thing to - * slot - the slot we're equipping the slippery thing to on the equipper. + * Arguments + * * source - the source of the signal + * * equipper - the mob we're equipping the slippery thing to + * * slot - the slot we're equipping the slippery thing to on the equipper. */ /datum/component/slippery/proc/on_equip(datum/source, mob/equipper, slot) SIGNAL_HANDLER @@ -155,12 +187,13 @@ AddComponent(/datum/component/connect_loc_behalf, holder, holder_connections) RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(holder_deleted)) -/* +/** * Detects if the holder mob is deleted. * If our holder mob is the holder set in this component, we null it. * - * source - the source of the signal - * possible_holder - the mob being deleted. + * Arguments: + * * source - the source of the signal + * * possible_holder - the mob being deleted. */ /datum/component/slippery/proc/holder_deleted(datum/source, datum/possible_holder) SIGNAL_HANDLER @@ -168,12 +201,13 @@ if(possible_holder == holder) holder = null -/* +/** * Gets called when COMSIG_ITEM_DROPPED is sent to parent. * Makes our holder mob un-slippery. * - * source - the source of the signal - * user - the mob that was formerly wearing our slippery item. + * Arguments: + * * source - the source of the signal + * * user - the mob that was formerly wearing our slippery item. */ /datum/component/slippery/proc/on_drop(datum/source, mob/user) SIGNAL_HANDLER @@ -185,12 +219,13 @@ holder = null -/* +/** * The slip proc, but for equipped items. * Slips the person who crossed us if we're lying down and unbuckled. * - * source - the source of the signal - * AM - the atom/movable that slipped on us. + * Arguments: + * * source - the source of the signal + * * arrived - the atom/movable that slipped on us. */ /datum/component/slippery/proc/Slip_on_wearer(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm index 82c37e8f26b..37186825d62 100644 --- a/code/datums/components/spirit_holding.dm +++ b/code/datums/components/spirit_holding.dm @@ -7,7 +7,7 @@ ///bool on if this component is currently polling for observers to inhabit the item var/attempting_awakening = FALSE ///mob contained in the item. - var/mob/living/simple_animal/shade/bound_spirit + var/mob/living/basic/shade/bound_spirit /datum/component/spirit_holding/Initialize() if(!ismovable(parent)) //you may apply this to mobs, i take no responsibility for how that works out @@ -37,44 +37,40 @@ ///signal fired on self attacking parent /datum/component/spirit_holding/proc/on_attack_self(datum/source, mob/user) SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(attempt_spirit_awaken), user) -/** - * attempt_spirit_awaken: called from on_attack_self, polls ghosts to possess the item in the form - * of a mob sitting inside the item itself - * - * Arguments: - * * awakener: user who interacted with the blade - */ -/datum/component/spirit_holding/proc/attempt_spirit_awaken(mob/awakener) + var/atom/thing = parent + if(attempting_awakening) - to_chat(awakener, span_warning("You are already trying to awaken [parent]!")) + thing.balloon_alert(user, "already channeling!") return if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE)) - to_chat(awakener, span_warning("Anomalous otherworldly energies block you from awakening [parent]!")) + thing.balloon_alert(user, "spirits are unwilling!") + to_chat(user, span_warning("Anomalous otherworldly energies block you from awakening [parent]!")) return attempting_awakening = TRUE - to_chat(awakener, span_notice("You attempt to wake the spirit of [parent]...")) + thing.balloon_alert(user, "channeling...") - var/datum/callback/to_call = CALLBACK(src, PROC_REF(affix_spirit), awakener) + var/datum/callback/to_call = CALLBACK(src, PROC_REF(affix_spirit), user) parent.AddComponent(/datum/component/orbit_poll, \ ignore_key = POLL_IGNORE_POSSESSED_BLADE, \ job_bans = ROLE_PAI, \ to_call = to_call, \ - title = "Spirit of [awakener.real_name]'s blade", \ + title = "Spirit of [user.real_name]'s blade", \ ) - //Immediately unregister to prevent making a new spirit - UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) - /// On conclusion of the ghost poll /datum/component/spirit_holding/proc/affix_spirit(mob/awakener, mob/dead/observer/ghost) + var/atom/thing = parent + if(isnull(ghost)) - to_chat(awakener, span_warning("[parent] is dormant. Maybe you can try again later.")) + thing.balloon_alert(awakener, "silence...") attempting_awakening = FALSE return + // Immediately unregister to prevent making a new spirit + UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) + if(QDELETED(parent)) //if the thing that we're conjuring a spirit in has been destroyed, don't create a spirit to_chat(ghost, span_userdanger("The new vessel for your spirit has been destroyed! You remain an unbound ghost.")) return diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 38968d1e3d1..3138f07c5ec 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -302,7 +302,11 @@ consumed_mob.investigate_log("has been dusted by [atom_source].", INVESTIGATE_DEATHS) if(istype(consumed_mob, /mob/living/simple_animal/parrot/poly)) // Dusting Poly creates a power surge force_event(/datum/round_event_control/supermatter_surge/poly, "Poly's revenge") - notify_ghosts("[consumed_mob] has been dusted by [atom_source]!", source = atom_source, action = NOTIFY_JUMP, header = "Polytechnical Difficulties") + notify_ghosts( + "[consumed_mob] has been dusted by [atom_source]!", + source = atom_source, + header = "Polytechnical Difficulties", + ) consumed_mob.dust(force = TRUE) matter_increase += 100 * object_size if(is_clown_job(consumed_mob.mind?.assigned_role)) diff --git a/code/datums/components/torn_wall.dm b/code/datums/components/torn_wall.dm index ebe0fe9a0a6..566275bdfa6 100644 --- a/code/datums/components/torn_wall.dm +++ b/code/datums/components/torn_wall.dm @@ -15,7 +15,7 @@ /datum/component/torn_wall/Initialize() . = ..() - if (!iswallturf(parent) || isindestructiblewall(parent)) + if (!isclosedturf(parent) || isindestructiblewall(parent)) return COMPONENT_INCOMPATIBLE /datum/component/torn_wall/RegisterWithParent() @@ -53,6 +53,12 @@ return var/turf/closed/wall/attached_wall = parent playsound(attached_wall, 'sound/effects/meteorimpact.ogg', 100, vary = TRUE) + + if(ismineralturf(attached_wall)) + var/turf/closed/mineral/mineral_turf = attached_wall + mineral_turf.gets_drilled() + return + attached_wall.dismantle_wall(devastated = TRUE) /// Fix it up on weld diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index 0fca7b2c5f5..48ccdcd9e62 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -372,7 +372,7 @@ in_use = FALSE if(!isopenspaceturf(target_turf)) // second check to make sure nothing changed during constructions return - var/turf/new_turf = target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + var/turf/new_turf = target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) new_turf.AddComponent(/datum/component/trapdoor, starts_open = FALSE, conspicuous = TRUE) balloon_alert(user, "trapdoor constructed") qdel(src) diff --git a/code/datums/components/udder.dm b/code/datums/components/udder.dm index c1f0ff03245..7a2f7b56b7b 100644 --- a/code/datums/components/udder.dm +++ b/code/datums/components/udder.dm @@ -13,7 +13,8 @@ /datum/component/udder/Initialize(udder_type = /obj/item/udder, datum/callback/on_milk_callback, datum/callback/on_generate_callback, reagent_produced_typepath = /datum/reagent/consumable/milk) if(!isliving(parent)) //technically is possible to drop this on carbons... but you wouldn't do that to me, would you? return COMPONENT_INCOMPATIBLE - udder = new udder_type(null, parent, on_generate_callback, reagent_produced_typepath) + udder = new udder_type(null) + udder.add_features(parent, on_generate_callback, reagent_produced_typepath) src.on_milk_callback = on_milk_callback /datum/component/udder/RegisterWithParent() @@ -70,14 +71,68 @@ var/mob/living/udder_mob ///optional proc to callback to when the udder generates milk var/datum/callback/on_generate_callback + ///do we require some food to generate milk? + var/require_consume_type + ///how long does each food consumption allow us to make milk + var/require_consume_timer = 2 MINUTES + ///hunger key we set to look for food + var/hunger_key = BB_CHECK_HUNGRY -/obj/item/udder/Initialize(mapload, udder_mob, on_generate_callback, reagent_produced_typepath = /datum/reagent/consumable/milk) - src.udder_mob = udder_mob - src.on_generate_callback = on_generate_callback +/obj/item/udder/proc/add_features(parent, callback, reagent = /datum/reagent/consumable/milk) + udder_mob = parent + on_generate_callback = callback create_reagents(size, REAGENT_HOLDER_ALIVE) - src.reagent_produced_typepath = reagent_produced_typepath + reagent_produced_typepath = reagent initial_conditions() + if(isnull(require_consume_type)) + return + RegisterSignal(udder_mob, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_mob_consume)) + RegisterSignal(udder_mob, COMSIG_ATOM_ATTACKBY, PROC_REF(on_mob_feed)) + udder_mob.ai_controller?.set_blackboard_key(BB_CHECK_HUNGRY, TRUE) + +/obj/item/udder/proc/on_mob_consume(datum/source, atom/feed) + SIGNAL_HANDLER + + if(!istype(feed, require_consume_type)) + return + INVOKE_ASYNC(src, PROC_REF(handle_consumption), feed) + return COMPONENT_HOSTILE_NO_ATTACK + +/obj/item/udder/proc/on_mob_feed(datum/source, atom/used_item, mob/living/user) + SIGNAL_HANDLER + + if(!istype(used_item, require_consume_type)) + return + INVOKE_ASYNC(src, PROC_REF(handle_consumption), used_item, user) + return COMPONENT_NO_AFTERATTACK + +/obj/item/udder/proc/handle_consumption(atom/movable/food, mob/user) + if(locate(food.type) in src) + if(user) + user.balloon_alert(user, "already full!") + return + playsound(udder_mob.loc,'sound/items/eatfood.ogg', 50, TRUE) + udder_mob.visible_message(span_notice("[udder_mob] gobbles up [food]!"), span_notice("You gobble up [food]!")) + var/atom/movable/final_food = food + if(isstack(food)) //if stack, only consume 1 + var/obj/item/stack/food_stack = food + final_food = food_stack.split_stack(udder_mob, 1) + final_food.forceMove(src) + +/obj/item/udder/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(!istype(arrived, require_consume_type)) + return ..() + + udder_mob.ai_controller?.set_blackboard_key(hunger_key, FALSE) + QDEL_IN(arrived, require_consume_timer) + return ..() + +/obj/item/udder/Exited(atom/movable/gone, direction) . = ..() + if(!istype(gone, require_consume_type)) + return + udder_mob.ai_controller?.set_blackboard_key(hunger_key, TRUE) + /obj/item/udder/Destroy() . = ..() @@ -101,10 +156,13 @@ * Proc called every 2 seconds from SSMobs to add whatever reagent the udder is generating. */ /obj/item/udder/proc/generate() - if(prob(5)) - reagents.add_reagent(reagent_produced_typepath, rand(5, 10), added_purity = 1) - if(on_generate_callback) - on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) + if(!isnull(require_consume_type) && !(locate(require_consume_type) in src)) + return + if(prob(95)) + return + reagents.add_reagent(reagent_produced_typepath, rand(5, 10), added_purity = 1) + if(on_generate_callback) + on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) /** * Proc called from attacking the component parent with the correct item, moves reagents into the glass basically. @@ -125,48 +183,20 @@ /** * # gutlunch udder subtype - * - * Used by gutlunches, and generates healing reagents instead of milk on eating gibs instead of a process. Starts empty! - * Female gutlunches (ahem, guthens if you will) make babies when their udder is full under processing, instead of milk generation */ + /obj/item/udder/gutlunch name = "nutrient sac" - -/obj/item/udder/gutlunch/initial_conditions() - if(!udder_mob) - return - if(udder_mob.gender == FEMALE) - START_PROCESSING(SSobj, src) - RegisterSignal(udder_mob, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_mob_attacking)) - -/obj/item/udder/gutlunch/process(seconds_per_tick) - var/mob/living/simple_animal/hostile/asteroid/gutlunch/gutlunch = udder_mob - if(reagents.total_volume != reagents.maximum_volume) - return - if(gutlunch.make_babies()) - reagents.clear_reagents() - //usually this would be a callback but this is a specifically gutlunch feature so fuck it, gutlunch specific proccall - gutlunch.regenerate_icons(reagents.total_volume, reagents.maximum_volume) - -/** - * signal called on parent attacking an atom -*/ -/obj/item/udder/gutlunch/proc/on_mob_attacking(mob/living/simple_animal/hostile/gutlunch, atom/target) - SIGNAL_HANDLER - - if(is_type_in_typecache(target, gutlunch.wanted_objects)) //we eats - generate() - gutlunch.visible_message(span_notice("[udder_mob] slurps up [target].")) - qdel(target) - return COMPONENT_HOSTILE_NO_ATTACK //there is no longer a target to attack + require_consume_type = /obj/item/stack/ore + reagent_produced_typepath = /datum/reagent/medicine/mine_salve /obj/item/udder/gutlunch/generate() - var/made_something = FALSE - if(prob(60)) + . = ..() + if(!.) + return + if(locate(/obj/item/stack/ore/gold) in src) reagents.add_reagent(/datum/reagent/consumable/cream, rand(2, 5), added_purity = 1) - made_something = TRUE - if(prob(45)) + if(locate(/obj/item/stack/ore/bluespace_crystal) in src) reagents.add_reagent(/datum/reagent/medicine/salglu_solution, rand(2,5)) - made_something = TRUE - if(made_something && on_generate_callback) + if(on_generate_callback) on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index fa9f86abbaa..79c4909d277 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -51,7 +51,7 @@ M.adjust_confusion(-2 SECONDS) if(purge_alcohol) - M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3) + M.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3, include_subtypes = TRUE) M.adjust_drunk_effect(-5) if(A.stage >= 4) diff --git a/code/datums/ductnet.dm b/code/datums/ductnet.dm index e4dd3959c22..e97add695d9 100644 --- a/code/datums/ductnet.dm +++ b/code/datums/ductnet.dm @@ -43,6 +43,7 @@ for(var/dir in P.ducts) if(P.ducts[dir] == src) P.ducts -= dir + if(!ducts.len) //there were no ducts, so it was a direct connection. we destroy ourselves since a ductnet with only one plumber and no ducts is worthless destroy_network() diff --git a/code/datums/elements/chemical_transfer.dm b/code/datums/elements/chemical_transfer.dm index 9802f0cc059..01296d97ade 100644 --- a/code/datums/elements/chemical_transfer.dm +++ b/code/datums/elements/chemical_transfer.dm @@ -58,7 +58,7 @@ return var/built_attacker_message = replacetext(attacker_message, "%VICTIM", transfer_victim) var/built_victim_message = replacetext(attacker_message, "%ATTACKER", transfer_attacker) - transfer_attacker.reagents?.trans_to(transfer_victim, transfer_attacker.reagents.total_volume, multiplier = 1, preserve_data = 1, no_react = 0, transferred_by = transfer_attacker) + transfer_attacker.reagents?.trans_to(transfer_victim, transfer_attacker.reagents.total_volume, transferred_by = transfer_attacker) to_chat(transfer_attacker, built_attacker_message) to_chat(transfer_victim, built_victim_message) diff --git a/code/datums/elements/cuffsnapping.dm b/code/datums/elements/cuffsnapping.dm index c0dfdcf6091..df445f4acc9 100644 --- a/code/datums/elements/cuffsnapping.dm +++ b/code/datums/elements/cuffsnapping.dm @@ -7,7 +7,7 @@ * cuffsnapping attacks have a wounding bonus between severe and critical+10 wound thresholds. Without some serious wound protecting * armour this all but guarantees a wound of some sort. The attack is directed specifically at a limb and the limb takes the damage. * - * Requires the cutter_user to be aiming for either leg zone, which will be targetted specifically. They will than have a 3-second long + * Requires the cutter_user to be aiming for either leg zone, which will be targeted specifically. They will than have a 3-second long * do_after before executing the attack. * * cuffsnapping requires the target to either be on the floor, immobilised or buckled to something. And also to have an appropriate leg. diff --git a/code/datums/elements/damage_threshold.dm b/code/datums/elements/damage_threshold.dm new file mode 100644 index 00000000000..918c984b066 --- /dev/null +++ b/code/datums/elements/damage_threshold.dm @@ -0,0 +1,51 @@ +/// Applied to living mobs. +/// Adds a force threshold for which attacks will be blocked entirely. +/// IE, if they are hit with an attack that deals less than X damage, the attack does nothing. +/datum/element/damage_threshold + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// Incoming attacks beneath this threshold, inclusive, will be blocked entirely + var/force_threshold = -1 + +/datum/element/damage_threshold/Attach(datum/target, threshold) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + if(!isnum(threshold) || threshold <= 0) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) + force_threshold = threshold + +/datum/element/damage_threshold/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_LIVING_CHECK_BLOCK) + +/datum/element/damage_threshold/proc/check_block( + mob/living/source, + atom/hitby, + damage, + attack_text, + attack_type, + armour_penetration, + damage_type, + attack_flag, +) + SIGNAL_HANDLER + + if(damage <= 0) // Already handled + return NONE + + if(damage <= force_threshold) + var/obj/item/item_hitting = hitby + var/tap_vol = istype(item_hitting) ? item_hitting.get_clamped_volume() : 50 + source.visible_message( + span_warning("[src] looks unharmed!"), + span_warning("[attack_text] deals no damage to you!"), + span_hear("You hear a thud."), + COMBAT_MESSAGE_RANGE, + ) + playsound(source, 'sound/weapons/tap.ogg', tap_vol, TRUE, -1) + return SUCCESSFUL_BLOCK + + return NONE diff --git a/code/datums/elements/dextrous.dm b/code/datums/elements/dextrous.dm index 526dfa974af..681e2a9488d 100644 --- a/code/datums/elements/dextrous.dm +++ b/code/datums/elements/dextrous.dm @@ -50,8 +50,10 @@ /// Try picking up items /datum/element/dextrous/proc/on_hand_clicked(mob/living/hand_haver, atom/target, proximity, modifiers) SIGNAL_HANDLER - if(!proximity) - return NONE + if (!proximity && target.loc != hand_haver) + var/obj/item/obj_item = target + if (istype(obj_item) && !obj_item.atom_storage && !(obj_item.item_flags & IN_STORAGE)) + return NONE if (!isitem(target) && hand_haver.combat_mode) return NONE if (LAZYACCESS(modifiers, RIGHT_CLICK)) diff --git a/code/datums/elements/door_pryer.dm b/code/datums/elements/door_pryer.dm index a17687407e3..b7f213b3856 100644 --- a/code/datums/elements/door_pryer.dm +++ b/code/datums/elements/door_pryer.dm @@ -22,7 +22,7 @@ . = ..() UnregisterSignal(source, COMSIG_LIVING_UNARMED_ATTACK) -/// If we're targetting an airlock, open it +/// If we're targeting an airlock, open it /datum/element/door_pryer/proc/on_attack(mob/living/basic/attacker, atom/target, proximity_flag) SIGNAL_HANDLER if(!proximity_flag || !istype(target, /obj/machinery/door/airlock)) diff --git a/code/datums/elements/food/fried_item.dm b/code/datums/elements/food/fried_item.dm index 0db91b89378..2afab84d1cb 100644 --- a/code/datums/elements/food/fried_item.dm +++ b/code/datums/elements/food/fried_item.dm @@ -47,6 +47,7 @@ food_flags = FOOD_FINGER_FOOD, \ junkiness = 10, \ foodtypes = FRIED, \ + volume = this_food.reagents?.maximum_volume, \ ) /datum/element/fried_item/Detach(atom/source, ...) diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index ebecd16217e..74961552496 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -98,9 +98,9 @@ return . = list(FOOTSTEP_MOB_SHOE = turf.footstep, FOOTSTEP_MOB_BAREFOOT = turf.barefootstep, FOOTSTEP_MOB_HEAVY = turf.heavyfootstep, FOOTSTEP_MOB_CLAW = turf.clawfootstep, STEP_SOUND_PRIORITY = STEP_SOUND_NO_PRIORITY) - SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, .) + var/overriden = SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, .) & FOOTSTEP_OVERRIDEN //The turf has no footstep sound (e.g. open space) and none of the objects on that turf (e.g. catwalks) overrides it - if(isnull(turf.footstep)) + if(!overriden && isnull(turf.footstep)) return null return . diff --git a/code/datums/elements/footstep_override.dm b/code/datums/elements/footstep_override.dm index 4e0c346c5be..43d73113280 100644 --- a/code/datums/elements/footstep_override.dm +++ b/code/datums/elements/footstep_override.dm @@ -78,3 +78,4 @@ steps[FOOTSTEP_MOB_HEAVY] = heavyfootstep steps[FOOTSTEP_MOB_CLAW] = clawfootstep steps[STEP_SOUND_PRIORITY] = priority + return FOOTSTEP_OVERRIDEN diff --git a/code/datums/elements/kneecapping.dm b/code/datums/elements/kneecapping.dm index 340938c430c..977268e94a1 100644 --- a/code/datums/elements/kneecapping.dm +++ b/code/datums/elements/kneecapping.dm @@ -7,7 +7,7 @@ * Kneecapping attacks have a wounding bonus between severe and critical+10 wound thresholds. Without some serious wound protecting * armour this all but guarantees a wound of some sort. The attack is directed specifically at a limb and the limb takes the damage. * - * Requires the attacker to be aiming for either leg zone, which will be targetted specifically. They will than have a 3-second long + * Requires the attacker to be aiming for either leg zone, which will be targeted specifically. They will than have a 3-second long * do_after before executing the attack. * * Kneecapping requires the target to either be on the floor, immobilised or buckled to something. And also to have an appropriate leg. diff --git a/code/datums/elements/light_eater.dm b/code/datums/elements/light_eater.dm index b4f7cf1042f..50f88cb9e9b 100644 --- a/code/datums/elements/light_eater.dm +++ b/code/datums/elements/light_eater.dm @@ -4,6 +4,10 @@ * The temporary equivalent is [/datum/component/light_eater] */ /datum/element/light_eater + var/static/list/blacklisted_areas = typecacheof(list( + /turf/open/space, + /turf/open/lava, + )) /datum/element/light_eater/Attach(datum/target) if(isatom(target)) @@ -83,8 +87,9 @@ * - [eater][/datum]: The light eater eating the morsel. This is the datum that the element is attached to that started this chain. */ /datum/element/light_eater/proc/devour(atom/morsel, datum/eater) - var/static/list/undevourable = typecacheof(list(/turf/open/space)) - if(is_type_in_typecache(morsel, undevourable)) + if(is_type_in_typecache(morsel, blacklisted_areas)) + return FALSE + if(istransparentturf(morsel)) return FALSE if(morsel.light_power <= 0 || morsel.light_range <= 0 || !morsel.light_on) return FALSE diff --git a/code/datums/elements/loomable.dm b/code/datums/elements/loomable.dm index cfd0b4bc834..76ee071a9a2 100644 --- a/code/datums/elements/loomable.dm +++ b/code/datums/elements/loomable.dm @@ -71,23 +71,33 @@ /// If a do_after of the specified loom_time passes, will create a new one of resulting_atom and either delete the item, or .use the required amount if its a stack /datum/element/loomable/proc/loom_me(obj/item/source, mob/living/user, atom/target) - if(!do_after(user, loom_time, target)) - user.balloon_alert(user, "interrupted!") - return - - ///we need to perform another check in case a stack somehow got diminished in the middle of the do_after - var/successful = TRUE + //this allows us to count the amount of times it has successfully used the stack's required amount + var/spawning_amount = 0 if(isstack(source)) var/obj/item/stack/stack_we_use = source - if(!stack_we_use.use(required_amount)) - successful = FALSE - else - qdel(source) + while(stack_we_use.amount >= required_amount) + if(!do_after(user, loom_time, target)) + break - //ripbozo - if(!successful) - user.balloon_alert(user, "need [required_amount] of [source]!") + if(!stack_we_use.use(required_amount)) + user.balloon_alert(user, "need [required_amount] of [source]!") + break + + spawning_amount++ + + else + if(!do_after(user, loom_time, target)) + user.balloon_alert(user, "interrupted!") + return + + qdel(source) + spawning_amount++ + + if(spawning_amount == 0) return - var/new_thing = new resulting_atom(target.drop_location()) + var/new_thing + for(var/repeated in 1 to spawning_amount) + new_thing = new resulting_atom(target.drop_location()) + user.balloon_alert_to_viewers("[process_completion_verb] [new_thing]") diff --git a/code/datums/elements/movement_turf_changer.dm b/code/datums/elements/movement_turf_changer.dm index c42ef287f81..4f60257d510 100644 --- a/code/datums/elements/movement_turf_changer.dm +++ b/code/datums/elements/movement_turf_changer.dm @@ -29,4 +29,4 @@ if(!isturf(destination) || istype(destination, turf_type) || isgroundlessturf(destination)) return - destination.PlaceOnTop(turf_type) + destination.place_on_top(turf_type) diff --git a/code/datums/elements/ore_collecting.dm b/code/datums/elements/ore_collecting.dm new file mode 100644 index 00000000000..30c9ecc7598 --- /dev/null +++ b/code/datums/elements/ore_collecting.dm @@ -0,0 +1,26 @@ +/* + * A component to allow us to collect ore + */ +/datum/element/ore_collecting + + +/datum/element/ore_collecting/Attach(datum/target) + . = ..() + + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(collect_ore)) + +/datum/element/ore_collecting/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + +/datum/element/ore_collecting/proc/collect_ore(mob/living/source, atom/target) + SIGNAL_HANDLER + + if(!istype(target, /obj/item/stack/ore)) + return + + var/atom/movable/movable_target = target + movable_target.forceMove(source) + return COMPONENT_HOSTILE_NO_ATTACK diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm index 9f134daf71b..a6c319d7bc9 100644 --- a/code/datums/elements/relay_attackers.dm +++ b/code/datums/elements/relay_attackers.dm @@ -33,8 +33,10 @@ )) REMOVE_TRAIT(source, TRAIT_RELAYING_ATTACKER, REF(src)) -/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker) +/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, proximity_flag, click_parameters) SIGNAL_HANDLER + if(!proximity_flag) // we don't care about someone clicking us with a piece of metal from across the room + return if(weapon.force) relay_attacker(target, attacker, weapon.damtype == STAMINA ? ATTACKER_STAMINA_ATTACK : ATTACKER_DAMAGING_ATTACK) diff --git a/code/datums/elements/tear_wall.dm b/code/datums/elements/tear_wall.dm deleted file mode 100644 index 0d24bbda289..00000000000 --- a/code/datums/elements/tear_wall.dm +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Attached to a basic mob that will then be able to tear down a wall after some time. - */ -/datum/element/tear_wall - element_flags = ELEMENT_BESPOKE - argument_hash_start_idx = 3 - /// The rate at which we can break regular walls - var/regular_tear_time - /// The rate at which we can break reinforced walls - var/reinforced_tear_time - -/datum/element/tear_wall/Attach(datum/target, regular_tear_time = 2 SECONDS, reinforced_tear_time = 4 SECONDS) - . = ..() - if(!isbasicmob(target)) - return ELEMENT_INCOMPATIBLE - - src.regular_tear_time = regular_tear_time - src.reinforced_tear_time = reinforced_tear_time - RegisterSignal(target, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(attack_wall)) - -/datum/element/bonus_damage/Detach(datum/source) - UnregisterSignal(source, COMSIG_HOSTILE_POST_ATTACKINGTARGET) - return ..() - -/// Checks if we are attacking a wall -/datum/element/tear_wall/proc/attack_wall(mob/living/basic/attacker, atom/target, success) - SIGNAL_HANDLER - - if(!iswallturf(target)) - return - var/turf/closed/wall/thewall = target - var/prying_time = regular_tear_time - if(istype(thewall, /turf/closed/wall/r_wall)) - prying_time = reinforced_tear_time - INVOKE_ASYNC(src, PROC_REF(async_attack_wall), attacker, thewall, prying_time) - -/// Performs taking down the wall -/datum/element/tear_wall/proc/async_attack_wall(mob/living/basic/attacker, turf/closed/wall/thewall, prying_time) - if(DOING_INTERACTION_WITH_TARGET(attacker, thewall)) - attacker.balloon_alert(attacker, "busy!") - return - to_chat(attacker, span_warning("You begin tearing through the wall...")) - playsound(attacker, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) - if(do_after(attacker, prying_time, target = thewall)) - if(isopenturf(thewall)) - return - thewall.dismantle_wall(1) - playsound(attacker, 'sound/effects/meteorimpact.ogg', 100, TRUE) diff --git a/code/datums/elements/wall_tearer.dm b/code/datums/elements/wall_tearer.dm index e7ca4b3be96..2c9ff5416d5 100644 --- a/code/datums/elements/wall_tearer.dm +++ b/code/datums/elements/wall_tearer.dm @@ -20,7 +20,7 @@ /// What interaction key do we use for our interaction var/do_after_key -/datum/element/wall_tearer/Attach(datum/target, allow_reinforced = TRUE, tear_time = 4 SECONDS, reinforced_multiplier = 3, do_after_key = null) +/datum/element/wall_tearer/Attach(datum/target, allow_reinforced = TRUE, tear_time = 2 SECONDS, reinforced_multiplier = 2, do_after_key = null) . = ..() if (!isliving(target)) return ELEMENT_INCOMPATIBLE @@ -28,17 +28,15 @@ src.tear_time = tear_time src.reinforced_multiplier = reinforced_multiplier src.do_after_key = do_after_key - RegisterSignal(target, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attacked_wall)) + RegisterSignals(target, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK), PROC_REF(on_attacked_wall)) /datum/element/wall_tearer/Detach(datum/source) . = ..() - UnregisterSignal(source, COMSIG_LIVING_UNARMED_ATTACK) + UnregisterSignal(source, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK)) /// Try to tear up a wall /datum/element/wall_tearer/proc/on_attacked_wall(mob/living/tearer, atom/target, proximity_flag) SIGNAL_HANDLER - if (!proximity_flag) - return NONE if (DOING_INTERACTION_WITH_TARGET(tearer, target) || (!isnull(do_after_key) && DOING_INTERACTION(tearer, do_after_key))) tearer.balloon_alert(tearer, "busy!") return COMPONENT_HOSTILE_NO_ATTACK @@ -62,6 +60,7 @@ var/is_valid = validate_target(target, tearer) if (is_valid != WALL_TEAR_ALLOWED) return + tearer.do_attack_animation(target) target.AddComponent(/datum/component/torn_wall) is_valid = validate_target(target, tearer) // And now we might have just destroyed it if (is_valid == WALL_TEAR_ALLOWED) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 88db5948d53..9a4a2f263e6 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -14,6 +14,8 @@ var/key = "" /// This will also call the emote. var/key_third_person = "" + /// Needed for more user-friendly emote names, so emotes with keys like "aflap" will show as "flap angry". Defaulted to key. + var/name = "" /// Message displayed when emote is used. var/message = "" /// Message displayed if the user is a mime. @@ -77,6 +79,9 @@ mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache) mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache) + if(!name) + name = key + /** * Handles the modifications and execution of emotes. * diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm index a4c7c372525..250eba9a0d5 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm @@ -39,3 +39,9 @@ name = "Pony" icon_file = 'icons/mob/simple/animal.dmi' json_config = 'code/datums/greyscale/json_configs/pony.json' + +/datum/greyscale_config/gutlunch + name = "Gutlunch" + icon_file = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + json_config = 'code/datums/greyscale/json_configs/gutlunch.json' + diff --git a/code/datums/greyscale/json_configs/gutlunch.json b/code/datums/greyscale/json_configs/gutlunch.json new file mode 100644 index 00000000000..0b930338163 --- /dev/null +++ b/code/datums/greyscale/json_configs/gutlunch.json @@ -0,0 +1,15 @@ +{ + "gutlunch": [ + { + "type": "icon_state", + "icon_state": "gutlunch", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gutlunch_face", + "blend_mode": "overlay" + } + ] +} diff --git a/code/datums/id_trim/outfits.dm b/code/datums/id_trim/outfits.dm index 2a06434ecdb..87f3a5d63a6 100644 --- a/code/datums/id_trim/outfits.dm +++ b/code/datums/id_trim/outfits.dm @@ -65,7 +65,7 @@ /// Trim for cyber police in the Virtual Domain. /datum/id_trim/cyber_police - assignment = "Cyber Police" + assignment = ROLE_CYBER_POLICE trim_state = "trim_deathcommando" department_color = COLOR_BLACK subdepartment_color = COLOR_GREEN diff --git a/code/datums/mapgen/_MapGenerator.dm b/code/datums/mapgen/_MapGenerator.dm deleted file mode 100644 index cecc0c65d1b..00000000000 --- a/code/datums/mapgen/_MapGenerator.dm +++ /dev/null @@ -1,10 +0,0 @@ -///This type is responsible for any map generation behavior that is done in areas, override this to allow for area-specific map generation. This generation is ran by areas in initialize. -/datum/map_generator - -///This proc will be ran by areas on Initialize, and provides the areas turfs as argument to allow for generation. -/datum/map_generator/proc/generate_terrain(list/turfs, area/generate_in) - return - -/// Populate terrain with flora, fauna, features and basically everything that isn't a turf -/datum/map_generator/proc/populate_terrain(list/turfs, area/generate_in) - return diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index c91ae511788..2af604cd8fe 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -5,7 +5,6 @@ var/max_streak_length = 6 var/current_target var/datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary - var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. var/help_verb var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts var/smashes_tables = FALSE //If the martial art smashes tables when performing table slams and head smashes diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index cae4cdf14b2..a8cae64cd0d 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -8,18 +8,20 @@ name = "CQC" id = MARTIALART_CQC help_verb = /mob/living/proc/CQC_help - block_chance = 75 smashes_tables = TRUE display_combos = TRUE var/old_grab_state = null var/mob/restraining_mob + /// Probability of successfully blocking attacks while on throw mode + var/block_chance = 75 /datum/martial_art/cqc/teach(mob/living/cqc_user, make_temporary) . = ..() RegisterSignal(cqc_user, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(cqc_user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) /datum/martial_art/cqc/on_remove(mob/living/cqc_user) - UnregisterSignal(cqc_user, COMSIG_ATOM_ATTACKBY) + UnregisterSignal(cqc_user, list(COMSIG_ATOM_ATTACKBY, COMSIG_LIVING_CHECK_BLOCK)) . = ..() ///Signal from getting attacked with an item, for a special interaction with touch spells @@ -41,6 +43,31 @@ INVOKE_ASYNC(touch_spell, TYPE_PROC_REF(/datum/action/cooldown/spell/touch, do_hand_hit), touch_weapon, attacker, attacker) return COMPONENT_NO_AFTERATTACK +/datum/martial_art/cqc/proc/check_block(mob/living/cqc_user, atom/movable/hitby, damage, attack_text, attack_type, ...) + SIGNAL_HANDLER + + if(!can_use(cqc_user) || !cqc_user.throw_mode || cqc_user.incapacitated(IGNORE_GRAB)) + return NONE + if(attack_type == PROJECTILE_ATTACK) + return NONE + if(!prob(block_chance)) + return NONE + + var/mob/living/attacker = GET_ASSAILANT(hitby) + if(istype(attacker) && cqc_user.Adjacent(attacker)) + cqc_user.visible_message( + span_danger("[cqc_user] blocks [attack_text] and twists [attacker]'s arm behind [attacker.p_their()] back!"), + span_userdanger("You block [attack_text]!"), + ) + attacker.Stun(4 SECONDS) + else + cqc_user.visible_message( + span_danger("[cqc_user] blocks [attack_text]!"), + span_userdanger("You block [attack_text]!"), + ) + return SUCCESSFUL_BLOCK + + /datum/martial_art/cqc/reset_streak(mob/living/new_target) if(new_target && new_target != restraining_mob) restraining_mob = null diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 42eed265aff..fcc432d41f8 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -116,12 +116,6 @@ log_combat(attacker, defender, "neck chopped") return TRUE -/datum/martial_art/krav_maga/grab_act(mob/living/attacker, mob/living/defender) - if(check_streak(attacker, defender)) - return TRUE - log_combat(attacker, defender, "grabbed (Krav Maga)") - ..() - /datum/martial_art/krav_maga/harm_act(mob/living/attacker, mob/living/defender) if(check_streak(attacker, defender)) return TRUE diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 1bc6659dfba..f8f05248b27 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -1,6 +1,6 @@ #define STRONG_PUNCH_COMBO "HH" #define LAUNCH_KICK_COMBO "HD" -#define DROP_KICK_COMBO "HG" +#define DROP_KICK_COMBO "DD" /datum/martial_art/the_sleeping_carp name = "The Sleeping Carp" @@ -8,18 +8,19 @@ allow_temp_override = FALSE help_verb = /mob/living/proc/sleeping_carp_help display_combos = TRUE + var/list/scarp_traits = list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER, TRAIT_HEAVY_SLEEPER) /datum/martial_art/the_sleeping_carp/teach(mob/living/target, make_temporary = FALSE) . = ..() if(!.) return - target.add_traits(list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER), SLEEPING_CARP_TRAIT) + target.add_traits(scarp_traits, SLEEPING_CARP_TRAIT) RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) target.faction |= FACTION_CARP //:D /datum/martial_art/the_sleeping_carp/on_remove(mob/living/target) - target.remove_traits(list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER), SLEEPING_CARP_TRAIT) + target.remove_traits(scarp_traits, SLEEPING_CARP_TRAIT) UnregisterSignal(target, COMSIG_ATOM_ATTACKBY) UnregisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT) target.faction -= FACTION_CARP //:( @@ -49,12 +50,12 @@ defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - playsound(get_turf(defender), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "strong punched (Sleeping Carp)") defender.apply_damage(20, attacker.get_attack_type(), affecting) return -///Crashing Wave Kick: Punch Shove combo, throws people seven tiles backwards +///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards /datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) defender.visible_message(span_warning("[attacker] kicks [defender] square in the chest, sending them flying!"), \ @@ -66,56 +67,80 @@ log_combat(attacker, defender, "launchkicked (Sleeping Carp)") return -///Keelhaul: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor +///Keelhaul: Disarm Disarm combo, knocks people down and deals substantial stamina damage, and also discombobulates them. Knocks objects out of their hands if they're already on the ground. /datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) if(defender.body_position == STANDING_UP) - defender.apply_damage(10, attacker.get_attack_type(), BODY_ZONE_HEAD, wound_bonus = CANT_WOUND) - defender.apply_damage(40, STAMINA, BODY_ZONE_HEAD) defender.Knockdown(4 SECONDS) defender.visible_message(span_warning("[attacker] kicks [defender] in the head, sending them face first into the floor!"), \ span_userdanger("You are kicked in the head by [attacker], sending you crashing to the floor!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) else - defender.apply_damage(5, attacker.get_attack_type(), BODY_ZONE_HEAD, wound_bonus = CANT_WOUND) - defender.apply_damage(40, STAMINA, BODY_ZONE_HEAD) defender.drop_all_held_items() defender.visible_message(span_warning("[attacker] kicks [defender] in the head!"), \ span_userdanger("You are kicked in the head by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + defender.apply_damage(40, STAMINA) + defender.adjust_dizzy_up_to(10 SECONDS, 10 SECONDS) + defender.adjust_temp_blindness_up_to(2 SECONDS, 10 SECONDS) log_combat(attacker, defender, "dropkicked (Sleeping Carp)") return /datum/martial_art/the_sleeping_carp/grab_act(mob/living/attacker, mob/living/defender) + if(!can_deflect(attacker)) //allows for deniability + return ..() + add_to_streak("G", defender) if(check_streak(attacker, defender)) return TRUE - log_combat(attacker, defender, "grabbed (Sleeping Carp)") + var/grab_log_description = "grabbed" + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + if(defender.stat != DEAD && !defender.IsUnconscious() && defender.getStaminaLoss() >= 80) //We put our target to sleep. + defender.visible_message( + span_danger("[attacker] carefully pinch a nerve in [defender]'s neck, knocking them out cold"), + span_userdanger("[attacker] pinches something in your neck, and you fall unconscious!"), + ) + grab_log_description = "grabbed and nerve pinched" + defender.Unconscious(10 SECONDS) + defender.apply_damage(20, STAMINA) + log_combat(attacker, defender, "[grab_log_description] (Sleeping Carp)") return ..() /datum/martial_art/the_sleeping_carp/harm_act(mob/living/attacker, mob/living/defender) add_to_streak("H", defender) if(check_streak(attacker, defender)) return TRUE + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("kick", "chop", "hit", "slam") defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - defender.apply_damage(rand(10,15), BRUTE, affecting, wound_bonus = CANT_WOUND) - playsound(get_turf(defender), 'sound/weapons/punch1.ogg', 25, TRUE, -1) + + defender.apply_damage(rand(10,15), attacker.get_attack_type(), affecting, wound_bonus = CANT_WOUND) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "punched (Sleeping Carp)") + return TRUE /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/attacker, mob/living/defender) + if(!can_deflect(attacker)) //allows for deniability + return ..() + add_to_streak("D", defender) if(check_streak(attacker, defender)) return TRUE + + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + defender.apply_damage(20, STAMINA) log_combat(attacker, defender, "disarmed (Sleeping Carp)") + return ..() /datum/martial_art/the_sleeping_carp/proc/can_deflect(mob/living/carp_user) - if(!can_use(carp_user) || !carp_user.throw_mode) + if(!can_use(carp_user) || !carp_user.combat_mode) return FALSE if(carp_user.incapacitated(IGNORE_GRAB)) //NO STUN return FALSE @@ -165,12 +190,13 @@ set category = "Sleeping Carp" to_chat(usr, "You retreat inward and recall the teachings of the Sleeping Carp...\n\ - [span_notice("Gnashing Teeth")]: Punch Punch. Deal additional damage every second (consecutive) punch!\n\ + [span_notice("Gnashing Teeth")]: Punch Punch. Deal additional damage every second (consecutive) punch! Very good chance to wound!\n\ [span_notice("Crashing Wave Kick")]: Punch Shove. Launch your opponent away from you with incredible force!\n\ - [span_notice("Keelhaul")]: Punch Grab. Kick an opponent to the floor, knocking them down! If your opponent is already prone, this move will disarm them and deal additional stamina damage to them.\n\ - While in throw mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \ - Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \ - You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \ + [span_notice("Keelhaul")]: Shove Shove. Nonlethally kick an opponent to the floor, knocking them down, discombobulating them and dealing substantial stamina damage. If they're already prone, disarm them as well.\n\ + [span_notice("Grabs and Shoves")]: While in combat mode, your typical grab and shove do decent stamina damage. If you grab someone who has substantial amounts of stamina damage, you knock them out!\n\ + While in combat mode (and not stunned, not a hulk, and not in a mech), you can reflect all projectiles that come your way, sending them back at the people who fired them! \n\ + Also, you are more resilient against suffering wounds in combat, and your limbs cannot be dismembered. This grants you extra staying power during extended combat, especially against slashing and other bleeding weapons. \n\ + You are not invincible, however- while you may not suffer debilitating wounds often, you must still watch your health and should have appropriate medical supplies for use during downtime. \n\ In addition, your training has imbued you with a loathing of guns, and you can no longer use them.") diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm index 8e09883ae21..418f5cfb8db 100644 --- a/code/datums/mocking/client.dm +++ b/code/datums/mocking/client.dm @@ -27,14 +27,24 @@ var/tgui_say var/typing_indicators +/datum/client_interface/New() + ..() + var/static/mock_client_uid = 0 + mock_client_uid++ + + src.key = "[key]_[mock_client_uid]" + ckey = ckey(key) + +#ifdef UNIT_TESTS // otherwise this shit can leak into production servers which is drather bad + GLOB.directory[ckey] = src +#endif + +/datum/client_interface/Destroy(force, ...) + GLOB.directory -= ckey + return ..() + /datum/client_interface/proc/IsByondMember() return FALSE -/datum/client_interface/New(key) - ..() - if(key) - src.key = key - ckey = ckey(key) - /datum/client_interface/proc/set_macros() return diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index b897c4c81a6..176fb9d8388 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -177,7 +177,7 @@ * returns an instance of a power if modification was complete */ /datum/mutation/human/proc/modify() - if(modified || !power_path || !owner) + if(modified || !power_path || QDELETED(owner)) return var/datum/action/cooldown/modified_power = locate(power_path) in owner.actions if(!modified_power) diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm index 5d210c344b5..b33b78d7d1b 100644 --- a/code/datums/mutations/tongue_spike.dm +++ b/code/datums/mutations/tongue_spike.dm @@ -173,7 +173,7 @@ return FALSE to_chat(transferred, span_warning("You feel a tiny prick!")) - transferer.reagents.trans_to(transferred, transferer.reagents.total_volume, 1, 1, 0, transferred_by = transferer) + transferer.reagents.trans_to(transferred, transferer.reagents.total_volume, transferred_by = transferer) var/obj/item/hardened_spike/chem/chem_spike = target var/obj/item/bodypart/spike_location = chem_spike.check_embedded() diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index 7fad290fc74..86ea41aee01 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -36,7 +36,7 @@ for(var/mob/living/to_check in GLOB.player_list) if(HAS_TRAIT(to_check, TRAIT_TIME_STOP_IMMUNE)) immune[to_check] = TRUE - for(var/mob/living/simple_animal/hostile/guardian/stand in GLOB.parasites) + for(var/mob/living/basic/guardian/stand in GLOB.parasites) if(stand.summoner && HAS_TRAIT(stand.summoner, TRAIT_TIME_STOP_IMMUNE)) //It would only make sense that a person's stand would also be immune. immune[stand] = TRUE if(start) diff --git a/code/datums/quirks/_quirk_constant_data.dm b/code/datums/quirks/_quirk_constant_data.dm new file mode 100644 index 00000000000..977c52a6837 --- /dev/null +++ b/code/datums/quirks/_quirk_constant_data.dm @@ -0,0 +1,72 @@ +GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, generate_quirk_constant_data()) + +/// Constructs [GLOB.all_quirk_constant_data] by iterating through a typecache of pregen data, ignoring abstract types, and instantiating the rest. +/proc/generate_quirk_constant_data() + RETURN_TYPE(/list/datum/quirk_constant_data) + + var/list/datum/quirk_constant_data/all_constant_data = list() + + for (var/datum/quirk_constant_data/iterated_path as anything in typecacheof(path = /datum/quirk_constant_data, ignore_root_path = TRUE)) + if (initial(iterated_path.abstract_type) == iterated_path) + continue + + if (!isnull(all_constant_data[initial(iterated_path.associated_typepath)])) + stack_trace("pre-existing pregen data for [initial(iterated_path.associated_typepath)] when [iterated_path] was being considered: [all_constant_data[initial(iterated_path.associated_typepath)]]. \ + this is definitely a bug, and is probably because one of the two pregen data have the wrong quirk typepath defined. [iterated_path] will not be instantiated") + + continue + + var/datum/quirk_constant_data/pregen_data = new iterated_path + all_constant_data[pregen_data.associated_typepath] = pregen_data + + return all_constant_data + +/// A singleton datum representing constant data and procs used by quirks. +/datum/quirk_constant_data + /// Abstract in OOP terms. If this is our type, we will not be instantiated. + var/abstract_type = /datum/quirk_constant_data + + /// The typepath of the quirk we will be associated with in the global list. This is what we represent. + var/datum/quirk/associated_typepath + + /// A lazylist of preference datum typepaths. Any character pref put in here will be rendered in the quirks page under a dropdown. + var/list/datum/preference/customization_options + +/datum/quirk_constant_data/New() + . = ..() + + ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occured on: [src.type]") + +/// Returns a list of savefile_keys derived from the preference typepaths in [customization_options]. Used in quirks middleware to supply the preferences to render. +/datum/quirk_constant_data/proc/get_customization_data() + RETURN_TYPE(/list) + + var/list/customization_data = list() + + for (var/datum/preference/pref_type as anything in customization_options) + var/datum/preference/pref_instance = GLOB.preference_entries[pref_type] + if (isnull(pref_instance)) + stack_trace("get_customization_data was called before instantiation of [pref_type]!") + continue // just in case its a fluke and its only this one thats not instantiated, we'll check the other pref entries + + customization_data += pref_instance.savefile_key + + return customization_data + +/// Is this quirk customizable? If true, a button will appear within the quirk's description box in the quirks page, and upon clicking it, +/// will open a customization menu for the quirk. +/datum/quirk_constant_data/proc/is_customizable() + return LAZYLEN(customization_options) > 0 + +/datum/quirk_constant_data/Destroy(force, ...) + var/error_message = "[src], a singleton quirk constant data instance, was destroyed! This should not happen!" + if (force) + error_message += " NOTE: This Destroy() was called with force == TRUE. This instance will be deleted and replaced with a new one." + stack_trace(error_message) + + if (!force) + return QDEL_HINT_LETMELIVE + + . = ..() + + GLOB.all_quirk_constant_data[associated_typepath] = new src.type //recover diff --git a/code/datums/quirks/negative_quirks/family_heirloom.dm b/code/datums/quirks/negative_quirks/family_heirloom.dm index 0fd08c68f21..235913120a3 100644 --- a/code/datums/quirks/negative_quirks/family_heirloom.dm +++ b/code/datums/quirks/negative_quirks/family_heirloom.dm @@ -8,7 +8,7 @@ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED /// A weak reference to our heirloom. var/datum/weakref/heirloom - mail_goodies = list(/obj/item/storage/secure/briefcase) + mail_goodies = list(/obj/item/storage/briefcase/secure) /datum/quirk/item_quirk/family_heirloom/add_unique(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/negative_quirks/food_allergy.dm b/code/datums/quirks/negative_quirks/food_allergy.dm index c2f4eae4d0e..0b81dece085 100644 --- a/code/datums/quirks/negative_quirks/food_allergy.dm +++ b/code/datums/quirks/negative_quirks/food_allergy.dm @@ -25,6 +25,10 @@ GLOBAL_LIST_INIT(possible_food_allergies, list( /// Footype flags that will trigger the allergy var/target_foodtypes = NONE +/datum/quirk_constant_data/food_allergy + associated_typepath = /datum/quirk/item_quirk/food_allergic + customization_options = list(/datum/preference/choiced/food_allergy) + /datum/quirk/item_quirk/food_allergic/add(client/client_source) if(target_foodtypes != NONE) // Already set, don't care return diff --git a/code/datums/quirks/negative_quirks/nearsighted.dm b/code/datums/quirks/negative_quirks/nearsighted.dm index 6a5397b6504..452971a7ad0 100644 --- a/code/datums/quirks/negative_quirks/nearsighted.dm +++ b/code/datums/quirks/negative_quirks/nearsighted.dm @@ -10,6 +10,10 @@ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/clothing/glasses/regular) // extra pair if orginal one gets broken by somebody mean +/datum/quirk_constant_data/nearsighted + associated_typepath = /datum/quirk/item_quirk/nearsighted + customization_options = list(/datum/preference/choiced/glasses) + /datum/quirk/item_quirk/nearsighted/add_unique(client/client_source) var/glasses_name = client_source?.prefs.read_preference(/datum/preference/choiced/glasses) || "Regular" var/obj/item/clothing/glasses/glasses_type diff --git a/code/datums/quirks/negative_quirks/prosthetic_limb.dm b/code/datums/quirks/negative_quirks/prosthetic_limb.dm index e7ea4d75788..791837b04d9 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_limb.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_limb.dm @@ -11,6 +11,10 @@ /// the original limb from before the prosthetic was applied var/obj/item/bodypart/old_limb +/datum/quirk_constant_data/prosthetic_limb + associated_typepath = /datum/quirk/prosthetic_limb + customization_options = list(/datum/preference/choiced/prosthetic) + /datum/quirk/prosthetic_limb/add_unique(client/client_source) var/limb_type = GLOB.limb_choice[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] if(isnull(limb_type)) //Client gone or they chose a random prosthetic diff --git a/code/datums/quirks/neutral_quirks/phobia.dm b/code/datums/quirks/neutral_quirks/phobia.dm index 224401f0670..0375c69b522 100644 --- a/code/datums/quirks/neutral_quirks/phobia.dm +++ b/code/datums/quirks/neutral_quirks/phobia.dm @@ -6,6 +6,10 @@ medical_record_text = "Patient has an irrational fear of something." mail_goodies = list(/obj/item/clothing/glasses/blindfold, /obj/item/storage/pill_bottle/psicodine) +/datum/quirk_constant_data/phobia + associated_typepath = /datum/quirk/phobia + customization_options = list(/datum/preference/choiced/phobia) + // Phobia will follow you between transfers /datum/quirk/phobia/add(client/client_source) var/phobia = client_source?.prefs.read_preference(/datum/preference/choiced/phobia) diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index 324054198b8..408a952cfe1 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -8,6 +8,10 @@ medical_record_text = "Patient speaks multiple languages." mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) +/datum/quirk_constant_data/bilingual + associated_typepath = /datum/quirk/bilingual + customization_options = list(/datum/preference/choiced/language) + /datum/quirk/bilingual/add_unique(client/client_source) var/wanted_language = client_source?.prefs.read_preference(/datum/preference/choiced/language) var/datum/language/language_type diff --git a/code/datums/quirks/positive_quirks/tagger.dm b/code/datums/quirks/positive_quirks/tagger.dm index 5aba24d850a..4b0f48a1ca8 100644 --- a/code/datums/quirks/positive_quirks/tagger.dm +++ b/code/datums/quirks/positive_quirks/tagger.dm @@ -14,6 +14,10 @@ /obj/item/canvas/twentythree_twentythree ) +/datum/quirk_constant_data/tagger + associated_typepath = /datum/quirk/item_quirk/tagger + customization_options = list(/datum/preference/color/paint_color) + /datum/quirk/item_quirk/tagger/add_unique(client/client_source) var/obj/item/toy/crayon/spraycan/can = new can.set_painting_tool_color(client_source?.prefs.read_preference(/datum/preference/color/paint_color)) diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index d739ecab3c6..545414ab8e4 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -493,3 +493,28 @@ BUBBERSTATION REMOVAL END */ suffix = "infested_frigate.dmm" name = "SYN-C Brutus" description = "This wasn't an outbreak, this was a repelled attack." + +/datum/map_template/ruin/space/garbagetruck1 + id = "garbagetruck1" + suffix = "garbagetruck1.dmm" + name = "Decommissioned Garbage Truck NX1" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of kitchen waste, and rodents." + +/datum/map_template/ruin/space/garbagetruck2 + id = "garbagetruck2" + suffix = "garbagetruck2.dmm" + name = "Decommissioned Garbage Truck NX2" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of medical waste, and a syndicate agent." + +/datum/map_template/ruin/space/garbagetruck3 + id = "garbagetruck3" + suffix = "garbagetruck3.dmm" + name = "Decommissioned Garbage Truck NX3" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of industrial garbage, and a russian drug den." + +/datum/map_template/ruin/space/garbagetruck4 + id = "garbagetruck4" + suffix = "garbagetruck4.dmm" + name = "Decommissioned Garbage Truck NX4" + description = "An NX-760 interstellar transport barge. At the end of their life cycle, they are often filled with trash and launched into unexplored space to become someone else's problem. This one is full of commercial trash, and spiders." + diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm index e0e84baa190..44f77fc1d76 100644 --- a/code/datums/sprite_accessories.dm +++ b/code/datums/sprite_accessories.dm @@ -2110,11 +2110,11 @@ name = "Long + Membrane" icon_state = "longmeme" -/datum/sprite_accessory/spines/aqautic +/datum/sprite_accessory/spines/aquatic name = "Aquatic" icon_state = "aqua" -/datum/sprite_accessory/spines_animated/aqautic +/datum/sprite_accessory/spines_animated/aquatic name = "Aquatic" icon_state = "aqua" diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 1205673c565..8e8303c0366 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -65,9 +65,9 @@ qdel(src) ///Called by decals if they can be colored, to see if we got some cool colors for them. Only takes the first station trait -/proc/request_station_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/proc/request_station_colors(atom/thing_to_color, pattern) for(var/datum/station_trait/trait in SSstation.station_traits) - var/decal_color = trait.get_decal_color(thing_to_color, pattern) + var/decal_color = trait.get_decal_color(thing_to_color, pattern || PATTERN_DEFAULT) if(decal_color) return decal_color return null diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 027711e20ac..a8c09dbb12e 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -558,7 +558,7 @@ owner.AddElement(/datum/element/forced_gravity, 0) owner.AddElement(/datum/element/simple_flying) owner.add_stun_absorption(source = id, priority = 4) - add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) owner.playsound_local(get_turf(owner), 'sound/chemistry/ahaha.ogg', vol = 100, vary = TRUE, use_reverb = TRUE) return TRUE @@ -576,7 +576,7 @@ owner.RemoveElement(/datum/element/forced_gravity, 0) owner.RemoveElement(/datum/element/simple_flying) owner.remove_stun_absorption(id) - remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) + owner.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAD_WIZARD_TRAIT) /// Gives you a brief period of anti-gravity /datum/status_effect/jump_jet diff --git a/code/datums/status_effects/buffs/stop_drop_roll.dm b/code/datums/status_effects/buffs/stop_drop_roll.dm new file mode 100644 index 00000000000..43d37654e61 --- /dev/null +++ b/code/datums/status_effects/buffs/stop_drop_roll.dm @@ -0,0 +1,66 @@ +/datum/status_effect/stop_drop_roll + id = "stop_drop_roll" + alert_type = null + + tick_interval = 0.8 SECONDS + +/datum/status_effect/stop_drop_roll/on_apply() + if(!iscarbon(owner)) + return FALSE + + var/actual_interval = initial(tick_interval) + if(!owner.Knockdown(actual_interval * 2, ignore_canstun = TRUE) || owner.body_position != LYING_DOWN) + to_chat(owner, span_warning("You try to stop, drop, and roll - but you can't get on the ground!")) + return FALSE + + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(stop_rolling)) + RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(body_position_changed)) + ADD_TRAIT(owner, TRAIT_HANDS_BLOCKED, id) // they're kinda busy! + + owner.visible_message( + span_danger("[owner] rolls on the floor, trying to put [owner.p_them()]self out!"), + span_notice("You stop, drop, and roll!"), + ) + // Start with one weaker roll + owner.spin(spintime = actual_interval, speed = actual_interval / 4) + owner.adjust_fire_stacks(-0.25) + return TRUE + +/datum/status_effect/stop_drop_roll/on_remove() + UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_SET_BODY_POSITION)) + REMOVE_TRAIT(owner, TRAIT_HANDS_BLOCKED, id) + +/datum/status_effect/stop_drop_roll/tick(seconds_between_ticks) + if(HAS_TRAIT(owner, TRAIT_IMMOBILIZED) || HAS_TRAIT(owner, TRAIT_INCAPACITATED)) + qdel(src) + return + + var/actual_interval = initial(tick_interval) + if(!owner.Knockdown(actual_interval * 1.2, ignore_canstun = TRUE)) + stop_rolling() + return + + owner.spin(spintime = actual_interval, speed = actual_interval / 4) + owner.adjust_fire_stacks(-1) + + if(owner.fire_stacks > 0) + return + + owner.visible_message( + span_danger("[owner] successfully extinguishes [owner.p_them()]self!"), + span_notice("You extinguish yourself."), + ) + qdel(src) + +/datum/status_effect/stop_drop_roll/proc/stop_rolling(datum/source, ...) + SIGNAL_HANDLER + + if(!QDELING(owner)) + to_chat(owner, span_notice("You stop rolling around.")) + qdel(src) + +/datum/status_effect/stop_drop_roll/proc/body_position_changed(datum/source, new_value, old_value) + SIGNAL_HANDLER + + if(new_value != LYING_DOWN) + stop_rolling() diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 8f52165cdbb..4a6e7b6b730 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -201,14 +201,19 @@ var/mob/living/carbon/human/victim = owner var/thermal_protection = victim.get_thermal_protection() - if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection) - return + if(!no_protection) + if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT) + return + if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT) + victim.adjust_bodytemperature(5.5 * seconds_per_tick) + return - if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection) - victim.adjust_bodytemperature(5.5 * seconds_per_tick) - return + var/amount_to_heat = (BODYTEMP_HEATING_MAX + (stacks * 12)) * 0.5 * seconds_per_tick + if(owner.bodytemperature > BODYTEMP_FIRE_TEMP_SOFTCAP) + // Apply dimishing returns upon temp beyond the soft cap + amount_to_heat = amount_to_heat ** (BODYTEMP_FIRE_TEMP_SOFTCAP / owner.bodytemperature) - victim.adjust_bodytemperature((BODYTEMP_HEATING_MAX + (stacks * 12)) * 0.5 * seconds_per_tick) + victim.adjust_bodytemperature(amount_to_heat) victim.add_mood_event("on_fire", /datum/mood_event/on_fire) victim.add_mob_memory(/datum/memory/was_burning) @@ -233,10 +238,10 @@ qdel(moblight) moblight = new moblight_type(owner) - SEND_SIGNAL(owner, COMSIG_LIVING_IGNITED, owner) cache_stacks() update_overlay() update_particles() + SEND_SIGNAL(owner, COMSIG_LIVING_IGNITED, owner) return TRUE /** diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index bcc0a50e707..f06a289da78 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -33,11 +33,9 @@ /datum/status_effect/freon/proc/do_resist() to_chat(owner, span_notice("You start breaking out of the ice cube...")) - if(do_after(owner, owner, 4 SECONDS)) - if(!QDELETED(src)) - to_chat(owner, span_notice("You break out of the ice cube!")) - owner.remove_status_effect(/datum/status_effect/freon) - + if(do_after(owner, 4 SECONDS, target = owner)) + to_chat(owner, span_notice("You break out of the ice cube!")) + qdel(src) /datum/status_effect/freon/on_remove() if(!owner.stat) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index a2aa81ebb69..48b14f36cd0 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -149,9 +149,16 @@ /atom/movable/screen/alert/status_effect/holdup name = "Holding Up" - desc = "You're currently pointing a gun at someone." + desc = "You're currently pointing a gun at someone. Click to cancel." icon_state = "aimed" +/atom/movable/screen/alert/status_effect/holdup/Click(location, control, params) + . = ..() + if(!.) + return + var/datum/component/gunpoint/gunpoint = owner.GetComponent(/datum/component/gunpoint) + gunpoint?.cancel() + // this status effect is used to negotiate the high-fiving capabilities of all concerned parties /datum/status_effect/offering id = "offering" @@ -334,6 +341,22 @@ owner.emote("surrender") +///For when you need to make someone be prompted for surrender, but not forever +/datum/status_effect/surrender_timed + id = "surrender_timed" + duration = 30 SECONDS + status_type = STATUS_EFFECT_UNIQUE + alert_type = null + +/datum/status_effect/surrender_timed/on_apply() + owner.apply_status_effect(/datum/status_effect/grouped/surrender, REF(src)) + return ..() + +/datum/status_effect/surrender_timed/on_remove() + owner.remove_status_effect(/datum/status_effect/grouped/surrender, REF(src)) + return ..() + + /* * A status effect used for preventing caltrop message spam * diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index b5a7777e326..f91a7654b54 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -690,3 +690,13 @@ //SYN-C Brutus, derelict frigate /area/ruin/space/has_grav/infested_frigate name = "SYN-C Brutus" + +//garbage trucks +/area/ruin/space/has_grav/garbagetruck + name = "decommissioned garbage truck" + sound_environment = SOUND_AREA_SMALL_ENCLOSED + ambience_index = AMBIENCE_MAINT +/area/ruin/space/has_grav/garbagetruck/foodwaste +/area/ruin/space/has_grav/garbagetruck/medicalwaste +/area/ruin/space/has_grav/garbagetruck/squat +/area/ruin/space/has_grav/garbagetruck/toystore diff --git a/code/game/area/areas/station/security.dm b/code/game/area/areas/station/security.dm index 918cf30ceb8..93629f35628 100644 --- a/code/game/area/areas/station/security.dm +++ b/code/game/area/areas/station/security.dm @@ -106,6 +106,10 @@ /area/station/security/execution/education name = "\improper Prisoner Education Chamber" +/area/station/security/mechbay + name = "Security Mechbay" + icon_state = "sec_mechbay" + /* * Security Checkpoints */ @@ -173,9 +177,6 @@ name = "Security Post - Third Floor" icon_state = "checkpoint_3" -/* -* Prison Areas -*/ /area/station/security/prison name = "\improper Prison Wing" diff --git a/code/game/atom/README.md b/code/game/atom/README.md new file mode 100644 index 00000000000..3ce4f9b0cf9 --- /dev/null +++ b/code/game/atom/README.md @@ -0,0 +1,3 @@ +# Core /atom Systems + +This is a folder of basic systems that apply to all /atom types, split into relevant files. Keep the files named fittingly and don't put anything in `_atom.dm` if you can avoid it. diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm new file mode 100644 index 00000000000..e1185949dc8 --- /dev/null +++ b/code/game/atom/_atom.dm @@ -0,0 +1,959 @@ +/** + * The base type for nearly all physical objects in SS13 + + * Lots and lots of functionality lives here, although in general we are striving to move + * as much as possible to the components/elements system + */ +/atom + layer = TURF_LAYER + plane = GAME_PLANE + appearance_flags = TILE_BOUND|LONG_GLIDE + + /// pass_flags that we are. If any of this matches a pass_flag on a moving thing, by default, we let them through. + var/pass_flags_self = NONE + + ///First atom flags var + var/flags_1 = NONE + ///Intearaction flags + var/interaction_flags_atom = NONE + + var/flags_ricochet = NONE + + ///When a projectile tries to ricochet off this atom, the projectile ricochet chance is multiplied by this + var/receive_ricochet_chance_mod = 1 + ///When a projectile ricochets off this atom, it deals the normal damage * this modifier to this atom + var/receive_ricochet_damage_coeff = 0.33 + + ///Reagents holder + var/datum/reagents/reagents = null + + ///all of this atom's HUD (med/sec, etc) images. Associative list of the form: list(hud category = hud image or images for that category). + ///most of the time hud category is associated with a single image, sometimes its associated with a list of images. + ///not every hud in this list is actually used. for ones available for others to see, look at active_hud_list. + var/list/image/hud_list = null + ///all of this atom's HUD images which can actually be seen by players with that hud + var/list/image/active_hud_list = null + ///HUD images that this atom can provide. + var/list/hud_possible + + ///How much this atom resists explosions by, in the end + var/explosive_resistance = 0 + + ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays. + var/list/managed_vis_overlays + + /// Lazylist of all images (or atoms, I'm sorry) (hopefully attached to us) to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + var/list/image/update_on_z + + /// Lazylist of all overlays attached to us to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + /// Oh and note, if order of addition is important this WILL break that. so mind yourself + var/list/image/update_overlays_on_z + + ///Cooldown tick timer for buckle messages + var/buckle_message_cooldown = 0 + ///Last fingerprints to touch this atom + var/fingerprintslast + + /// Radiation insulation types + var/rad_insulation = RAD_NO_INSULATION + + /// The icon state intended to be used for the acid component. Used to override the default acid overlay icon state. + var/custom_acid_overlay = null + + var/datum/wires/wires = null + + ///Light systems, both shouldn't be active at the same time. + var/light_system = STATIC_LIGHT + ///Range of the light in tiles. Zero means no light. + var/light_range = 0 + ///Intensity of the light. The stronger, the less shadows you will see on the lit area. + var/light_power = 1 + ///Hexadecimal RGB string representing the colour of the light. White by default. + var/light_color = COLOR_WHITE + /// Angle of light to show in light_dir + /// 360 is a circle, 90 is a cone, etc. + var/light_angle = 360 + /// What angle to project light in + var/light_dir = NORTH + ///Boolean variable for toggleable lights. Has no effect without the proper light_system, light_range and light_power values. + var/light_on = TRUE + /// How many tiles "up" this light is. 1 is typical, should only really change this if it's a floor light + var/light_height = LIGHTING_HEIGHT + ///Bitflags to determine lighting-related atom properties. + var/light_flags = NONE + ///Our light source. Don't fuck with this directly unless you have a good reason! + var/tmp/datum/light_source/light + ///Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. + var/tmp/list/light_sources + + /// Last name used to calculate a color for the chatmessage overlays + var/chat_color_name + /// Last color calculated for the the chatmessage overlays + var/chat_color + /// A luminescence-shifted value of the last color calculated for chatmessage overlays + var/chat_color_darkened + + // Use SET_BASE_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_x and y for you + ///Default pixel x shifting for the atom's icon. + var/base_pixel_x = 0 + ///Default pixel y shifting for the atom's icon. + var/base_pixel_y = 0 + // Use SET_BASE_VISUAL_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_w and z for you + ///Default pixel w shifting for the atom's icon. + var/base_pixel_w = 0 + ///Default pixel z shifting for the atom's icon. + var/base_pixel_z = 0 + ///Used for changing icon states for different base sprites. + var/base_icon_state + + ///Icon-smoothing behavior. + var/smoothing_flags = NONE + ///What directions this is currently smoothing with. IMPORTANT: This uses the smoothing direction flags as defined in icon_smoothing.dm, instead of the BYOND flags. + var/smoothing_junction = null //This starts as null for us to know when it's first set, but after that it will hold a 8-bit mask ranging from 0 to 255. + ///Smoothing variable + var/top_left_corner + ///Smoothing variable + var/top_right_corner + ///Smoothing variable + var/bottom_left_corner + ///Smoothing variable + var/bottom_right_corner + ///What smoothing groups does this atom belongs to, to match canSmoothWith. If null, nobody can smooth with it. Must be sorted. + var/list/smoothing_groups = null + ///List of smoothing groups this atom can smooth with. If this is null and atom is smooth, it smooths only with itself. Must be sorted. + var/list/canSmoothWith = null + + ///AI controller that controls this atom. type on init, then turned into an instance during runtime + var/datum/ai_controller/ai_controller + + /// forensics datum, contains fingerprints, fibres, blood_dna and hiddenprints on this atom + var/datum/forensics/forensics + + /// How this atom should react to having its astar blocking checked + var/can_astar_pass = CANASTARPASS_DENSITY + +/** + * Top level of the destroy chain for most atoms + * + * Cleans up the following: + * * Removes alternate apperances from huds that see them + * * qdels the reagent holder from atoms if it exists + * * clears the orbiters list + * * clears overlays and priority overlays + * * clears the light object + */ +/atom/Destroy(force) + if(alternate_appearances) + for(var/current_alternate_appearance in alternate_appearances) + var/datum/atom_hud/alternate_appearance/selected_alternate_appearance = alternate_appearances[current_alternate_appearance] + selected_alternate_appearance.remove_atom_from_hud(src) + + if(reagents) + QDEL_NULL(reagents) + + if(forensics) + QDEL_NULL(forensics) + + if(atom_storage) + QDEL_NULL(atom_storage) + + orbiters = null // The component is attached to us normaly and will be deleted elsewhere + + // Checking length(overlays) before cutting has significant speed benefits + if (length(overlays)) + overlays.Cut() + + LAZYNULL(managed_overlays) + if(ai_controller) + QDEL_NULL(ai_controller) + if(light) + QDEL_NULL(light) + if (length(light_sources)) + light_sources.Cut() + + if(smoothing_flags & SMOOTH_QUEUED) + SSicon_smooth.remove_from_queues(src) + + return ..() + +/atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) + var/turf/p_turf = get_turf(ricocheting_projectile) + var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile) + var/face_angle = dir2angle(face_direction) + var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)) + var/a_incidence_s = abs(incidence_s) + if(a_incidence_s > 90 && a_incidence_s < 270) + return FALSE + if((ricocheting_projectile.armor_flag in list(BULLET, BOMB)) && ricocheting_projectile.ricochet_incidence_leeway) + if((a_incidence_s < 90 && a_incidence_s < 90 - ricocheting_projectile.ricochet_incidence_leeway) || (a_incidence_s > 270 && a_incidence_s -270 > ricocheting_projectile.ricochet_incidence_leeway)) + return FALSE + var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) + ricocheting_projectile.set_angle(new_angle_s) + return TRUE + +/// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. +/atom/proc/CanPass(atom/movable/mover, border_dir) + SHOULD_CALL_PARENT(TRUE) + SHOULD_BE_PURE(TRUE) + if(SEND_SIGNAL(src, COMSIG_ATOM_TRIED_PASS, mover, border_dir) & COMSIG_COMPONENT_PERMIT_PASSAGE) + return TRUE + if(mover.movement_type & PHASING) + return TRUE + . = CanAllowThrough(mover, border_dir) + // This is cheaper than calling the proc every time since most things dont override CanPassThrough + if(!mover.generic_canpass) + return mover.CanPassThrough(src, REVERSE_DIR(border_dir), .) + +/// Returns true or false to allow the mover to move through src +/atom/proc/CanAllowThrough(atom/movable/mover, border_dir) + SHOULD_CALL_PARENT(TRUE) + //SHOULD_BE_PURE(TRUE) + if(mover.pass_flags & pass_flags_self) + return TRUE + if(mover.throwing && (pass_flags_self & LETPASSTHROW)) + return TRUE + return !density + +/** + * Is this atom currently located on centcom (or riding off into the sunset on a shuttle) + * + * Specifically, is it on the z level and within the centcom areas. + * You can also be in a shuttle during endgame transit. + * + * Used in gamemode to identify mobs who have escaped and for some other areas of the code + * who don't want atoms where they shouldn't be + * + * Returns TRUE if this atom is on centcom or an escape shuttle, or FALSE if not + */ +/atom/proc/onCentCom() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + // This doesn't necessarily check that we're at central command, + // but it checks for any shuttles which have finished are still in hyperspace + // (IE, stuff like the whiteship which fly off into the sunset and "escape") + if(is_reserved_level(current_turf.z)) + return on_escaped_shuttle(ENDGAME_TRANSIT) + + // From here on we only concern ourselves with people actually on the centcom Z + if(!is_centcom_level(current_turf.z)) + return FALSE + + if(istype(current_turf.loc, /area/centcom)) + return TRUE + + // Finally, check if we're on an escaped shuttle + return on_escaped_shuttle() + +/** + * Is the atom in any of the syndicate areas + * + * Either in the syndie base, or any of their shuttles + * + * Also used in gamemode code for win conditions + * + * Returns TRUE if this atom is on the syndicate recon base, any of its shuttles, or an escape shuttle, or FALSE if not + */ +/atom/proc/onSyndieBase() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + // Syndicate base is loaded in a reserved level. If not reserved, we don't care. + if(!is_reserved_level(current_turf.z)) + return FALSE + + var/static/list/syndie_typecache = typecacheof(list( + /area/centcom/syndicate_mothership, // syndicate base itself + /area/shuttle/assault_pod, // steel rain + /area/shuttle/syndicate, // infiltrator + )) + + if(is_type_in_typecache(current_turf.loc, syndie_typecache)) + return TRUE + + // Finally, check if we're on an escaped shuttle + return on_escaped_shuttle() + +/** + * Checks that we're on a shuttle that's escaped + * + * * check_for_launch_status - What launch status do we check for? Generally the two you want to check for are ENDGAME_LAUNCHED or ENDGAME_TRANSIT + * + * Returns TRUE if this atom is on a shuttle which is escaping or has escaped, or FALSE otherwise + */ +/atom/proc/on_escaped_shuttle(check_for_launch_status = ENDGAME_LAUNCHED) + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + for(var/obj/docking_port/mobile/mobile_docking_port as anything in SSshuttle.mobile_docking_ports) + if(mobile_docking_port.launch_status != check_for_launch_status) + continue + for(var/area/shuttle/shuttle_area as anything in mobile_docking_port.shuttle_areas) + if(current_turf in shuttle_area.get_contained_turfs()) + return TRUE + + return FALSE + +/** + * Is the atom in an away mission + * + * Must be in the away mission z-level to return TRUE + * + * Also used in gamemode code for win conditions + */ +/atom/proc/onAwayMission() + var/turf/current_turf = get_turf(src) + if(!current_turf) + return FALSE + + if(is_away_level(current_turf.z)) + return TRUE + + return FALSE + +/** + * Ensure a list of atoms/reagents exists inside this atom + * + * Goes throught he list of passed in parts, if they're reagents, adds them to our reagent holder + * creating the reagent holder if it exists. + * + * If the part is a moveable atom and the previous location of the item was a mob/living, + * it calls the inventory handler transferItemToLoc for that mob/living and transfers the part + * to this atom + * + * Otherwise it simply forceMoves the atom into this atom + */ +/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/current_recipe) + SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, current_recipe) + if(!parts_list) + return + for(var/part in parts_list) + if(istype(part, /datum/reagent)) + if(!reagents) + reagents = new() + reagents.reagent_list.Add(part) + reagents.conditional_update() + else if(ismovable(part)) + var/atom/movable/object = part + if(isliving(object.loc)) + var/mob/living/living = object.loc + living.transferItemToLoc(object, src) + else + object.forceMove(src) + SEND_SIGNAL(object, COMSIG_ATOM_USED_IN_CRAFT, src) + parts_list.Cut() + +///Take air from the passed in gas mixture datum +/atom/proc/assume_air(datum/gas_mixture/giver) + return null + +///Remove air from this atom +/atom/proc/remove_air(amount) + return null + +///Return the current air environment in this atom +/atom/proc/return_air() + if(loc) + return loc.return_air() + else + return null + +///Return the air if we can analyze it +/atom/proc/return_analyzable_air() + return null + +///Check if this atoms eye is still alive (probably) +/atom/proc/check_eye(mob/user) + SIGNAL_HANDLER + return + +/atom/proc/Bumped(atom/movable/bumped_atom) + set waitfor = FALSE + SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) + +/// Convenience proc to see if a container is open for chemistry handling +/atom/proc/is_open_container() + return is_refillable() && is_drainable() + +/// Is this atom injectable into other atoms +/atom/proc/is_injectable(mob/user, allowmobs = TRUE) + return reagents && (reagents.flags & (INJECTABLE | REFILLABLE)) + +/// Can we draw from this atom with an injectable atom +/atom/proc/is_drawable(mob/user, allowmobs = TRUE) + return reagents && (reagents.flags & (DRAWABLE | DRAINABLE)) + +/// Can this atoms reagents be refilled +/atom/proc/is_refillable() + return reagents && (reagents.flags & REFILLABLE) + +/// Is this atom drainable of reagents +/atom/proc/is_drainable() + return reagents && (reagents.flags & DRAINABLE) + +/** Handles exposing this atom to a list of reagents. + * + * Sends COMSIG_ATOM_EXPOSE_REAGENTS + * Calls expose_atom() for every reagent in the reagent list. + * + * Arguments: + * - [reagents][/list]: The list of reagents the atom is being exposed to. + * - [source][/datum/reagents]: The reagent holder the reagents are being sourced from. + * - methods: How the atom is being exposed to the reagents. Bitflags. + * - volume_modifier: Volume multiplier. + * - show_message: Whether to display anything to mobs when they are exposed. + */ +/atom/proc/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) + . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) + if(. & COMPONENT_NO_EXPOSE_REAGENTS) + return + + SEND_SIGNAL(source, COMSIG_REAGENTS_EXPOSE_ATOM, src, reagents, methods, volume_modifier, show_message) + for(var/datum/reagent/current_reagent as anything in reagents) + . |= current_reagent.expose_atom(src, reagents[current_reagent]) + SEND_SIGNAL(src, COMSIG_ATOM_AFTER_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) + +/// Are you allowed to drop this atom +/atom/proc/AllowDrop() + return FALSE + +///Is this atom within 1 tile of another atom +/atom/proc/HasProximity(atom/movable/proximity_check_mob as mob|obj) + return + +/// Sets the wire datum of an atom +/atom/proc/set_wires(datum/wires/new_wires) + wires = new_wires + +///Return true if we're inside the passed in atom +/atom/proc/in_contents_of(container)//can take class or object instance as argument + if(ispath(container)) + if(istype(src.loc, container)) + return TRUE + else if(src in container) + return TRUE + return FALSE + +/** + * Checks the atom's loc and calls update_held_items on it if it is a mob. + * + * This should only be used in situations when you are unable to use /datum/element/update_icon_updates_onmob for whatever reason. + * Check code/datums/elements/update_icon_updates_onmob.dm before using this. Adding that to the atom and calling update_appearance will work for most cases. + * + * Arguments: + * * mob/target - The mob to update the icons of. Optional argument, use if the atom's loc is not the mob you want to update. + */ +/atom/proc/update_inhand_icon(mob/target = loc) + SHOULD_CALL_PARENT(TRUE) + if(!istype(target)) + return + + target.update_held_items() + + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_INHAND_ICON, target) + +/** + * An atom we are buckled or is contained within us has tried to move + * + * Default behaviour is to send a warning that the user can't move while buckled as long + * as the [buckle_message_cooldown][/atom/var/buckle_message_cooldown] has expired (50 ticks) + */ +/atom/proc/relaymove(mob/living/user, direction) + if(SEND_SIGNAL(src, COMSIG_ATOM_RELAYMOVE, user, direction) & COMSIG_BLOCK_RELAYMOVE) + return + if(buckle_message_cooldown <= world.time) + buckle_message_cooldown = world.time + 25 + balloon_alert(user, "can't move while buckled!") + return + +/** + * A special case of relaymove() in which the person relaying the move may be "driving" this atom + * + * This is a special case for vehicles and ridden animals where the relayed movement may be handled + * by the riding component attached to this atom. Returns TRUE as long as there's nothing blocking + * the movement, or FALSE if the signal gets a reply that specifically blocks the movement + */ +/atom/proc/relaydrive(mob/living/user, direction) + return !(SEND_SIGNAL(src, COMSIG_RIDDEN_DRIVER_MOVE, user, direction) & COMPONENT_DRIVER_BLOCK_MOVE) + +///returns the mob's dna info as a list, to be inserted in an object's blood_DNA list +/mob/living/proc/get_blood_dna_list() + if(get_blood_id() != /datum/reagent/blood) + return + return list("ANIMAL DNA" = "Y-") + +///Get the mobs dna list +/mob/living/carbon/get_blood_dna_list() + if(get_blood_id() != /datum/reagent/blood) + return + var/list/blood_dna = list() + if(dna) + blood_dna[dna.unique_enzymes] = dna.blood_type + else + blood_dna["UNKNOWN DNA"] = "X*" + return blood_dna + +/mob/living/carbon/alien/get_blood_dna_list() + return list("UNKNOWN DNA" = "X*") + +/mob/living/silicon/get_blood_dna_list() + return + +///to add a mob's dna info into an object's blood_dna list. +/atom/proc/transfer_mob_blood_dna(mob/living/injected_mob) + // Returns 0 if we have that blood already + var/new_blood_dna = injected_mob.get_blood_dna_list() + if(!new_blood_dna) + return FALSE + var/old_length = GET_ATOM_BLOOD_DNA_LENGTH(src) + add_blood_DNA(new_blood_dna) + if(GET_ATOM_BLOOD_DNA_LENGTH(src) == old_length) + return FALSE + return TRUE + +///to add blood from a mob onto something, and transfer their dna info +/atom/proc/add_mob_blood(mob/living/injected_mob) + var/list/blood_dna = injected_mob.get_blood_dna_list() + if(!blood_dna) + return FALSE + return add_blood_DNA(blood_dna) + +///Is this atom in space +/atom/proc/isinspace() + if(isspaceturf(get_turf(src))) + return TRUE + else + return FALSE + +/** + * If someone's trying to dump items onto our atom, where should they be dumped to? + * + * Return a loc to place objects, or null to stop dumping. + */ +/atom/proc/get_dumping_location() + return null + +/** + * the vision impairment to give to the mob whose perspective is set to that atom + * + * (e.g. an unfocused camera giving you an impaired vision when looking through it) + */ +/atom/proc/get_remote_view_fullscreens(mob/user) + return + +/** + * the sight changes to give to the mob whose perspective is set to that atom + * + * (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) + */ +/atom/proc/update_remote_sight(mob/living/user) + return + + +/** + * Hook for running code when a dir change occurs + * + * Not recommended to use, listen for the [COMSIG_ATOM_DIR_CHANGE] signal instead (sent by this proc) + */ +/atom/proc/setDir(newdir) + SHOULD_CALL_PARENT(TRUE) + if (SEND_SIGNAL(src, COMSIG_ATOM_PRE_DIR_CHANGE, dir, newdir) & COMPONENT_ATOM_BLOCK_DIR_CHANGE) + newdir = dir + return + SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) + dir = newdir + SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, dir, newdir) + if(smoothing_flags & SMOOTH_BORDER_OBJECT) + QUEUE_SMOOTH_NEIGHBORS(src) + +/** + * Wash this atom + * + * This will clean it off any temporary stuff like blood. Override this in your item to add custom cleaning behavior. + * Returns true if any washing was necessary and thus performed + * Arguments: + * * clean_types: any of the CLEAN_ constants + */ +/atom/proc/wash(clean_types) + SHOULD_CALL_PARENT(TRUE) + if(SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, clean_types) & COMPONENT_CLEANED) + return TRUE + + // Basically "if has washable coloration" + if(length(atom_colours) >= WASHABLE_COLOUR_PRIORITY && atom_colours[WASHABLE_COLOUR_PRIORITY]) + remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + return TRUE + return FALSE + +///Where atoms should drop if taken from this atom +/atom/proc/drop_location() + var/atom/location = loc + if(!location) + return null + return location.AllowDrop() ? location : location.drop_location() + +/** + * An atom has entered this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_ENTERED] + */ +/atom/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, arrived, old_loc, old_locs) + SEND_SIGNAL(arrived, COMSIG_ATOM_ENTERING, src, old_loc, old_locs) + +/** + * An atom is attempting to exit this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_EXIT] + */ +/atom/Exit(atom/movable/leaving, direction) + // Don't call `..()` here, otherwise `Uncross()` gets called. + // See the doc comment on `Uncross()` to learn why this is bad. + + if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, leaving, direction) & COMPONENT_ATOM_BLOCK_EXIT) + return FALSE + + return TRUE + +/** + * An atom has exited this atom's contents + * + * Default behaviour is to send the [COMSIG_ATOM_EXITED] + */ +/atom/Exited(atom/movable/gone, direction) + SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction) + +///Return atom temperature +/atom/proc/return_temperature() + return + +/atom/proc/process_recipes(mob/living/user, obj/item/processed_object, list/processing_recipes) + //Only one recipe? use the first + if(processing_recipes.len == 1) + StartProcessingAtom(user, processed_object, processing_recipes[1]) + return + //Otherwise, select one with a radial + ShowProcessingGui(user, processed_object, processing_recipes) + +///Creates the radial and processes the selected option +/atom/proc/ShowProcessingGui(mob/living/user, obj/item/processed_object, list/possible_options) + var/list/choices_to_options = list() //Dict of object name | dict of object processing settings + var/list/choices = list() + + for(var/list/current_option as anything in possible_options) + var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT] + choices_to_options[initial(current_option_type.name)] = current_option + var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state)) + choices += list("[initial(current_option_type.name)]" = option_image) + + var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE) + if(!pick) + return + + StartProcessingAtom(user, processed_object, choices_to_options[pick]) + + +/atom/proc/StartProcessingAtom(mob/living/user, obj/item/process_item, list/chosen_option) + var/processing_time = chosen_option[TOOL_PROCESSING_TIME] + to_chat(user, span_notice("You start working on [src].")) + if(process_item.use_tool(src, user, processing_time, volume=50)) + var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] + var/list/atom/created_atoms = list() + var/amount_to_create = chosen_option[TOOL_PROCESSING_AMOUNT] + for(var/i = 1 to amount_to_create) + var/atom/created_atom = new atom_to_create(drop_location()) + if(custom_materials) + created_atom.set_custom_materials(custom_materials, 1 / amount_to_create) + created_atom.pixel_x = pixel_x + created_atom.pixel_y = pixel_y + if(i > 1) + created_atom.pixel_x += rand(-8,8) + created_atom.pixel_y += rand(-8,8) + created_atom.OnCreatedFromProcessing(user, process_item, chosen_option, src) + created_atoms.Add(created_atom) + to_chat(user, span_notice("You manage to create [amount_to_create] [initial(atom_to_create.gender) == PLURAL ? "[initial(atom_to_create.name)]" : "[initial(atom_to_create.name)][plural_s(initial(atom_to_create.name))]"] from [src].")) + SEND_SIGNAL(src, COMSIG_ATOM_PROCESSED, user, process_item, created_atoms) + UsedforProcessing(user, process_item, chosen_option) + return + +/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option) + qdel(src) + return + +/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) + SHOULD_CALL_PARENT(TRUE) + + SEND_SIGNAL(src, COMSIG_ATOM_CREATEDBY_PROCESSING, original_atom, chosen_option) + if(user.mind) + ADD_TRAIT(src, TRAIT_FOOD_CHEF_MADE, REF(user.mind)) + +///Connect this atom to a shuttle +/atom/proc/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + return + +/atom/proc/intercept_zImpact(list/falling_movables, levels = 1) + SHOULD_CALL_PARENT(TRUE) + . |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, falling_movables, levels) + +///Setter for the `density` variable to append behavior related to its changing. +/atom/proc/set_density(new_value) + SHOULD_CALL_PARENT(TRUE) + if(density == new_value) + return + . = density + density = new_value + + +///Setter for the `base_pixel_x` variable to append behavior related to its changing. +/atom/proc/set_base_pixel_x(new_value) + if(base_pixel_x == new_value) + return + . = base_pixel_x + base_pixel_x = new_value + + pixel_x = pixel_x + base_pixel_x - . + + +///Setter for the `base_pixel_y` variable to append behavior related to its changing. +/atom/proc/set_base_pixel_y(new_value) + if(base_pixel_y == new_value) + return + . = base_pixel_y + base_pixel_y = new_value + + pixel_y = pixel_y + base_pixel_y - . + +// Not a valid operation, turfs and movables handle block differently +/atom/proc/set_explosion_block(explosion_block) + return + +/** + * Returns true if this atom has gravity for the passed in turf + * + * Sends signals [COMSIG_ATOM_HAS_GRAVITY] and [COMSIG_TURF_HAS_GRAVITY], both can force gravity with + * the forced gravity var. + * + * micro-optimized to hell because this proc is very hot, being called several times per movement every movement. + * + * HEY JACKASS, LISTEN + * IF YOU ADD SOMETHING TO THIS PROC, MAKE SURE /mob/living ACCOUNTS FOR IT + * Living mobs treat gravity in an event based manner. We've decomposed this proc into different checks + * for them to use. If you add more to it, make sure you do that, or things will behave strangely + * + * Gravity situations: + * * No gravity if you're not in a turf + * * No gravity if this atom is in is a space turf + * * Gravity if the area it's in always has gravity + * * Gravity if there's a gravity generator on the z level + * * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY + * * otherwise no gravity + */ +/atom/proc/has_gravity(turf/gravity_turf) + if(!isturf(gravity_turf)) + gravity_turf = get_turf(src) + + if(!gravity_turf)//no gravity in nullspace + return FALSE + + var/list/forced_gravity = list() + SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, gravity_turf, forced_gravity) + SEND_SIGNAL(gravity_turf, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity) + if(length(forced_gravity)) + var/positive_grav = max(forced_gravity) + var/negative_grav = min(min(forced_gravity), 0) //negative grav needs to be below or equal to 0 + + //our gravity is sum of the most massive positive and negative numbers returned by the signal + //so that adding two forced_gravity elements with an effect size of 1 each doesnt add to 2 gravity + //but negative force gravity effects can cancel out positive ones + + return (positive_grav + negative_grav) + + var/area/turf_area = gravity_turf.loc + + return !gravity_turf.force_no_gravity && (SSmapping.gravity_by_z_level[gravity_turf.z] || turf_area.has_gravity) + +/** + * Used to set something as 'open' if it's being used as a supplypod + * + * Override this if you want an atom to be usable as a supplypod. + */ +/atom/proc/setOpened() + return + +/** + * Used to set something as 'closed' if it's being used as a supplypod + * + * Override this if you want an atom to be usable as a supplypod. + */ +/atom/proc/setClosed() + return + +/** + * Used to attempt to charge an object with a payment component. + * + * Use this if an atom needs to attempt to charge another atom. + */ +/atom/proc/attempt_charge(atom/sender, atom/target, extra_fees = 0) + return SEND_SIGNAL(sender, COMSIG_OBJ_ATTEMPT_CHARGE, target, extra_fees) + +///Passes Stat Browser Panel clicks to the game and calls client click on an atom +/atom/Topic(href, list/href_list) + . = ..() + if(!usr?.client) + return + var/client/usr_client = usr.client + var/list/paramslist = list() + + if(href_list["statpanel_item_click"]) + switch(href_list["statpanel_item_click"]) + if("left") + paramslist[LEFT_CLICK] = "1" + if("right") + paramslist[RIGHT_CLICK] = "1" + if("middle") + paramslist[MIDDLE_CLICK] = "1" + else + return + + if(href_list["statpanel_item_shiftclick"]) + paramslist[SHIFT_CLICK] = "1" + if(href_list["statpanel_item_ctrlclick"]) + paramslist[CTRL_CLICK] = "1" + if(href_list["statpanel_item_altclick"]) + paramslist[ALT_CLICK] = "1" + + var/mouseparams = list2params(paramslist) + usr_client.Click(src, loc, null, mouseparams) + return TRUE + +/atom/MouseEntered(location, control, params) + SSmouse_entered.hovers[usr.client] = src + +/// Fired whenever this atom is the most recent to be hovered over in the tick. +/// Preferred over MouseEntered if you do not need information such as the position of the mouse. +/// Especially because this is deferred over a tick, do not trust that `client` is not null. +/atom/proc/on_mouse_enter(client/client) + SHOULD_NOT_SLEEP(TRUE) + + var/mob/user = client?.mob + if (isnull(user)) + return + ///SKYRAT EDIT ADDITION BEGIN + // Face directions on combat mode. No procs, no typechecks, just a var for speed + if(user.face_mouse) + user.face_atom(src) + ///SKYRAT EDIT ADDITION END + + // Screentips + var/datum/hud/active_hud = user.hud_used + if(!active_hud) + return + + var/screentips_enabled = active_hud.screentips_enabled + if(screentips_enabled == SCREENTIP_PREFERENCE_DISABLED || flags_1 & NO_SCREENTIPS_1) + active_hud.screentip_text.maptext = "" + return + + active_hud.screentip_text.maptext_y = 10 // 10px lines us up with the action buttons top left corner + var/lmb_rmb_line = "" + var/ctrl_lmb_ctrl_rmb_line = "" + var/alt_lmb_alt_rmb_line = "" + var/shift_lmb_ctrl_shift_lmb_line = "" + var/extra_lines = 0 + var/extra_context = "" + + if (isliving(user) || isovermind(user) || isaicamera(user)) + var/obj/item/held_item = user.get_active_held_item() + + if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS) + var/list/context = list() + + var/contextual_screentip_returns = \ + SEND_SIGNAL(src, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, context, held_item, user) \ + | (held_item && SEND_SIGNAL(held_item, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, context, src, user)) + + if (contextual_screentip_returns & CONTEXTUAL_SCREENTIP_SET) + var/screentip_images = active_hud.screentip_images + // LMB and RMB on one line... + var/lmb_text = build_context(context, SCREENTIP_CONTEXT_LMB, screentip_images) + var/rmb_text = build_context(context, SCREENTIP_CONTEXT_RMB, screentip_images) + + if (lmb_text != "") + lmb_rmb_line = lmb_text + if (rmb_text != "") + lmb_rmb_line += " | [rmb_text]" + else if (rmb_text != "") + lmb_rmb_line = rmb_text + + // Ctrl-LMB, Ctrl-RMB on one line... + if (lmb_rmb_line != "") + lmb_rmb_line += "
" + extra_lines++ + if (SCREENTIP_CONTEXT_CTRL_LMB in context) + ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_LMB, screentip_images) + + if (SCREENTIP_CONTEXT_CTRL_RMB in context) + if (ctrl_lmb_ctrl_rmb_line != "") + ctrl_lmb_ctrl_rmb_line += " | " + ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_RMB, screentip_images) + + // Alt-LMB, Alt-RMB on one line... + if (ctrl_lmb_ctrl_rmb_line != "") + ctrl_lmb_ctrl_rmb_line += "
" + extra_lines++ + if (SCREENTIP_CONTEXT_ALT_LMB in context) + alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_LMB, screentip_images) + if (SCREENTIP_CONTEXT_ALT_RMB in context) + if (alt_lmb_alt_rmb_line != "") + alt_lmb_alt_rmb_line += " | " + alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_RMB, screentip_images) + + // Shift-LMB, Ctrl-Shift-LMB on one line... + if (alt_lmb_alt_rmb_line != "") + alt_lmb_alt_rmb_line += "
" + extra_lines++ + if (SCREENTIP_CONTEXT_SHIFT_LMB in context) + shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_SHIFT_LMB, screentip_images) + if (SCREENTIP_CONTEXT_CTRL_SHIFT_LMB in context) + if (shift_lmb_ctrl_shift_lmb_line != "") + shift_lmb_ctrl_shift_lmb_line += " | " + shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_SHIFT_LMB, screentip_images) + + if (shift_lmb_ctrl_shift_lmb_line != "") + extra_lines++ + + if(extra_lines) + extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]" + //first extra line pushes atom name line up 11px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place + active_hud.screentip_text.maptext_y = -1 + (extra_lines - 1) * -9 + + if (screentips_enabled == SCREENTIP_PREFERENCE_CONTEXT_ONLY && extra_context == "") + active_hud.screentip_text.maptext = "" + else + //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this + active_hud.screentip_text.maptext = "[name][extra_context]" + +/** + * This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system. + * + * Trying to generate one long path across the station will call this proc on every single object on every single tile that we're seeing if we can move through, likely + * multiple times per tile since we're likely checking if we can access said tile from multiple directions, so keep these as lightweight as possible. + * + * For turfs this will only be used if pathing_pass_method is TURF_PATHING_PASS_PROC + * + * Arguments: + * * to_dir - What direction we're trying to move in, relevant for things like directional windows that only block movement in certain directions + * * pass_info - Datum that stores info about the thing that's trying to pass us + * + * IMPORTANT NOTE: /turf/proc/LinkBlockedWithAccess assumes that overrides of CanAStarPass will always return true if density is FALSE + * If this is NOT you, ensure you edit your can_astar_pass variable. Check __DEFINES/path.dm + **/ +/atom/proc/CanAStarPass(to_dir, datum/can_pass_info/pass_info) + if(pass_info.pass_flags & pass_flags_self) + return TRUE + . = !density diff --git a/code/game/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm similarity index 99% rename from code/game/alternate_appearance.dm rename to code/game/atom/alternate_appearance.dm index 9f3da121b12..86732dd9ed4 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -1,5 +1,8 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) +/atom + var/list/alternate_appearances + /atom/proc/remove_alt_appearance(key) if(alternate_appearances) for(var/K in alternate_appearances) diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm new file mode 100644 index 00000000000..4c4ec04d667 --- /dev/null +++ b/code/game/atom/atom_act.dm @@ -0,0 +1,226 @@ +/* + * +++++++++++++++++++++++++++++++++++++++++ ABOUT THIS FILE +++++++++++++++++++++++++++++++++++++++++++++ + * Not everything here necessarily has the name pattern of [x]_act() + * This is a file for various atom procs that simply get called when something is happening to that atom. + * If you're adding something here, you likely want a signal and SHOULD_CALL_PARENT(TRUE) + * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + */ + +/** + * Respond to fire being used on our atom + * + * Default behaviour is to send [COMSIG_ATOM_FIRE_ACT] and return + */ +/atom/proc/fire_act(exposed_temperature, exposed_volume) + SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) + return FALSE + +/** + * Sends [COMSIG_ATOM_EXTINGUISH] signal, which properly removes burning component if it is present. + * + * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return + */ +/atom/proc/extinguish() + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_EXTINGUISH) + +/** + * React to being hit by an explosion + * + * Should be called through the [EX_ACT] wrapper macro. + * The wrapper takes care of the [COMSIG_ATOM_EX_ACT] signal. + * as well as calling [/atom/proc/contents_explosion]. + * + * Returns TRUE by default, and behavior should be implemented on children procs on a per-atom basis. Should only return FALSE if we resist the explosion for any reason. + * We assume that the default is TRUE because all atoms should be considered destructible in some manner unless they explicitly opt out (in our current framework). + * However, the return value itself doesn't have any external consumers, it's only so children procs can listen to the value from their parent procs (due to the nature of the [EX_ACT] macro). + * Thus, the return value only matters on overrides of this proc, and the only thing that truly matters is the code that is executed (applying damage, calling damage procs, etc.) + * + */ +/atom/proc/ex_act(severity, target) + set waitfor = FALSE + return TRUE + +/// Handle what happens when your contents are exploded by a bomb +/atom/proc/contents_explosion(severity, target) + return //For handling the effects of explosions on contents that would not normally be effected + +/** + * React to a hit by a blob objecd + * + * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal + */ +/atom/proc/blob_act(obj/structure/blob/attacking_blob) + var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) + if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) + return FALSE + return TRUE + +/** + * React to an EMP of the given severity + * + * Default behaviour is to send the [COMSIG_ATOM_PRE_EMP_ACT] and [COMSIG_ATOM_EMP_ACT] signal + * + * If the pre-signal does not return protection, and there are attached wires then we call + * [emp_pulse][/datum/wires/proc/emp_pulse] on the wires + * + * We then return the protection value + */ +/atom/proc/emp_act(severity) + var/protection = SEND_SIGNAL(src, COMSIG_ATOM_PRE_EMP_ACT, severity) + if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) + wires.emp_pulse() + + SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity, protection) + return protection // Pass the protection value collected here upwards + +/** + * React to a hit by a projectile object + * + * @params + * * hitting_projectile - projectile + * * def_zone - zone hit + * * piercing_hit - is this hit piercing or normal? + */ +/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + SHOULD_CALL_PARENT(TRUE) + + var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone) + if(sigreturn & COMPONENT_BULLET_PIERCED) + return BULLET_ACT_FORCE_PIERCE + if(sigreturn & COMPONENT_BULLET_BLOCKED) + return BULLET_ACT_BLOCK + if(sigreturn & COMPONENT_BULLET_ACTED) + return BULLET_ACT_HIT + + SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone) + if(QDELETED(hitting_projectile)) // Signal deleted it? + return BULLET_ACT_BLOCK + + return hitting_projectile.on_hit( + target = src, + // This armor check only matters for the visuals and messages in on_hit(), it's not actually used to reduce damage since + // only living mobs use armor to reduce damage, but on_hit() is going to need the value no matter what is shot. + blocked = check_projectile_armor(def_zone, hitting_projectile), + pierce_hit = piercing_hit, + ) + +/** + * React to being hit by a thrown object + * + * Default behaviour is to call [hitby_react][/atom/proc/hitby_react] on ourselves after 2 seconds if we are dense + * and under normal gravity. + * + * Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is + * deleted shortly after hitting something (during explosions or other massive events that + * throw lots of items around - singularity being a notable example) + */ +/atom/proc/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + SEND_SIGNAL(src, COMSIG_ATOM_HITBY, hitting_atom, skipcatch, hitpush, blocked, throwingdatum) + if(density && !has_gravity(hitting_atom)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). + addtimer(CALLBACK(src, PROC_REF(hitby_react), hitting_atom), 2) + +/** + * We have have actually hit the passed in atom + * + * Default behaviour is to move back from the item that hit us + */ +/atom/proc/hitby_react(atom/movable/harmed_atom) + if(harmed_atom && isturf(harmed_atom.loc)) + step(harmed_atom, REVERSE_DIR(harmed_atom.dir)) + +///Handle the atom being slipped over +/atom/proc/handle_slip(mob/living/carbon/slipped_carbon, knockdown_amount, obj/slipping_object, lube, paralyze, force_drop) + return + +///Used for making a sound when a mob involuntarily falls into the ground. +/atom/proc/handle_fall(mob/faller) + return + +///Respond to the singularity eating this atom +/atom/proc/singularity_act() + return + +/** + * Respond to the singularity pulling on us + * + * Default behaviour is to send [COMSIG_ATOM_SING_PULL] and return + */ +/atom/proc/singularity_pull(obj/singularity/singularity, current_size) + SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, singularity, current_size) + +/** + * Respond to acid being used on our atom + * + * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return + */ +/atom/proc/acid_act(acidpwr, acid_volume) + SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) + return FALSE + +/** + * Respond to an emag being used on our atom + * + * Args: + * * mob/user: The mob that used the emag. Nullable. + * * obj/item/card/emag/emag_card: The emag that was used. Nullable. + * + * Returns: + * TRUE if the emag had any effect, falsey otherwise. + */ +/atom/proc/emag_act(mob/user, obj/item/card/emag/emag_card) + return (SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user, emag_card)) + +/** + * Respond to narsie eating our atom + * + * Default behaviour is to send [COMSIG_ATOM_NARSIE_ACT] and return + */ +/atom/proc/narsie_act() + SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) + +/** + * Respond to an electric bolt action on our item + * + * Default behaviour is to return, we define here to allow for cleaner code later on + */ +/atom/proc/zap_act(power, zap_flags) + return + +/** + * Called when the atom log's in or out + * + * Default behaviour is to call on_log on the location this atom is in + */ +/atom/proc/on_log(login) + if(loc) + loc.on_log(login) + +/** + * Causes effects when the atom gets hit by a rust effect from heretics + * + * Override this if you want custom behaviour in whatever gets hit by the rust + */ +/atom/proc/rust_heretic_act() + return + +///Called when something resists while this atom is its loc +/atom/proc/container_resist_act(mob/living/user) + return + +/** + * Respond to an RCD acting on our item + * + * Default behaviour is to send [COMSIG_ATOM_RCD_ACT] and return FALSE + */ +/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) + SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, rcd_data["[RCD_DESIGN_MODE]"]) + return FALSE + +///Return the values you get when an RCD eats you? +/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) + return FALSE + +///This atom has been hit by a hulkified mob in hulk mode (user) +/atom/proc/attack_hulk(mob/living/carbon/human/user) + SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) diff --git a/code/game/atom/atom_appearance.dm b/code/game/atom/atom_appearance.dm new file mode 100644 index 00000000000..d3e0a64d69c --- /dev/null +++ b/code/game/atom/atom_appearance.dm @@ -0,0 +1,112 @@ +/atom + ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. + var/list/managed_overlays + +/** + * Updates the appearence of the icon + * + * Mostly delegates to update_name, update_desc, and update_icon + * + * Arguments: + * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] + */ +/atom/proc/update_appearance(updates=ALL) + SHOULD_NOT_SLEEP(TRUE) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) + if(updates & UPDATE_NAME) + . |= update_name(updates) + if(updates & UPDATE_DESC) + . |= update_desc(updates) + if(updates & UPDATE_ICON) + . |= update_icon(updates) + +/// Updates the name of the atom +/atom/proc/update_name(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) + +/// Updates the description of the atom +/atom/proc/update_desc(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) + +/// Updates the icon of the atom +/atom/proc/update_icon(updates=ALL) + SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) + if(updates & UPDATE_ICON_STATE) + update_icon_state() + . |= UPDATE_ICON_STATE + + if(updates & UPDATE_OVERLAYS) + if(LAZYLEN(managed_vis_overlays)) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + + var/list/new_overlays = update_overlays(updates) + var/nulls = 0 + for(var/i in 1 to length(new_overlays)) + var/atom/maybe_not_an_atom = new_overlays[i] + if(isnull(maybe_not_an_atom)) + nulls++ + continue + if(istext(maybe_not_an_atom) || isicon(maybe_not_an_atom)) + continue + new_overlays[i] = maybe_not_an_atom.appearance + if(nulls) + for(var/i in 1 to nulls) + new_overlays -= null + + var/identical = FALSE + var/new_length = length(new_overlays) + if(!managed_overlays && !new_length) + identical = TRUE + else if(!islist(managed_overlays)) + if(new_length == 1 && managed_overlays == new_overlays[1]) + identical = TRUE + else if(length(managed_overlays) == new_length) + identical = TRUE + for(var/i in 1 to length(managed_overlays)) + if(managed_overlays[i] != new_overlays[i]) + identical = FALSE + break + + if(!identical) + var/full_control = FALSE + if(managed_overlays) + full_control = length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1) + if(full_control) + overlays = null + else + cut_overlay(managed_overlays) + + switch(length(new_overlays)) + if(0) + if(full_control) + POST_OVERLAY_CHANGE(src) + managed_overlays = null + if(1) + add_overlay(new_overlays) + managed_overlays = new_overlays[1] + else + add_overlay(new_overlays) + managed_overlays = new_overlays + + . |= UPDATE_OVERLAYS + + . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) + +/// Updates the icon state of the atom +/atom/proc/update_icon_state() + SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) + +/// Updates the overlays of the atom +/atom/proc/update_overlays() + SHOULD_CALL_PARENT(TRUE) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) diff --git a/code/game/atom/atom_color.dm b/code/game/atom/atom_color.dm new file mode 100644 index 00000000000..e5b52460aa0 --- /dev/null +++ b/code/game/atom/atom_color.dm @@ -0,0 +1,71 @@ +/* + Atom Colour Priority System + A System that gives finer control over which atom colour to colour the atom with. + The "highest priority" one is always displayed as opposed to the default of + "whichever was set last is displayed" +*/ + +/atom + /** + * used to store the different colors on an atom + * + * its inherent color, the colored paint applied on it, special color effect etc... + */ + var/list/atom_colours + +///Adds an instance of colour_type to the atom's atom_colours list +/atom/proc/add_atom_colour(coloration, colour_priority) + if(!atom_colours || !atom_colours.len) + atom_colours = list() + atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. + if(!coloration) + return + if(colour_priority > atom_colours.len) + return + atom_colours[colour_priority] = coloration + update_atom_colour() + + +///Removes an instance of colour_type from the atom's atom_colours list +/atom/proc/remove_atom_colour(colour_priority, coloration) + if(!atom_colours) + return + if(colour_priority > atom_colours.len) + return + if(coloration && atom_colours[colour_priority] != coloration) + return //if we don't have the expected color (for a specific priority) to remove, do nothing + atom_colours[colour_priority] = null + update_atom_colour() + +/** + * Checks if this atom has the passed color + * Can optionally be supplied with a range of priorities, IE only checking "washable" or above + */ +/atom/proc/is_atom_colour(looking_for_color, min_priority_index = 1, max_priority_index = COLOUR_PRIORITY_AMOUNT) + // make sure uppertext hex strings don't mess with lowertext hex strings + looking_for_color = lowertext(looking_for_color) + + if(!LAZYLEN(atom_colours)) + // no atom colors list has been set up, just check the color var + return lowertext(color) == looking_for_color + + for(var/i in min_priority_index to max_priority_index) + if(lowertext(atom_colours[i]) == looking_for_color) + return TRUE + + return FALSE + +///Resets the atom's color to null, and then sets it to the highest priority colour available +/atom/proc/update_atom_colour() + color = null + if(!atom_colours) + return + for(var/checked_color in atom_colours) + if(islist(checked_color)) + var/list/color_list = checked_color + if(color_list.len) + color = color_list + return + else if(checked_color) + color = checked_color + return diff --git a/code/game/atom_defense.dm b/code/game/atom/atom_defense.dm similarity index 87% rename from code/game/atom_defense.dm rename to code/game/atom/atom_defense.dm index 889aaba1101..409b5a9e40b 100644 --- a/code/game/atom_defense.dm +++ b/code/game/atom/atom_defense.dm @@ -1,3 +1,17 @@ +/atom + ///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error + var/uses_integrity = FALSE + + VAR_PROTECTED/datum/armor/armor_type = /datum/armor/none + VAR_PRIVATE/datum/armor/armor + + VAR_PRIVATE/atom_integrity //defaults to max_integrity + var/max_integrity = 500 + var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50% + ///Damage under this value will be completely ignored + var/damage_deflection = 0 + + var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF /// The essential proc to call when an atom must receive damage of any kind. /atom/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) @@ -19,14 +33,18 @@ . = damage_amount + var/previous_atom_integrity = atom_integrity + update_integrity(atom_integrity - damage_amount) + var/integrity_failure_amount = integrity_failure * max_integrity + //BREAKING FIRST - if(integrity_failure && atom_integrity <= integrity_failure * max_integrity) + if(integrity_failure && previous_atom_integrity > integrity_failure_amount && atom_integrity <= integrity_failure_amount) atom_break(damage_flag) //DESTROYING SECOND - if(atom_integrity <= 0) + if(atom_integrity <= 0 && previous_atom_integrity > 0) atom_destruction(damage_flag) /// Proc for recovering atom_integrity. Returns the amount repaired by diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm new file mode 100644 index 00000000000..a00f485391d --- /dev/null +++ b/code/game/atom/atom_examine.dm @@ -0,0 +1,110 @@ +/atom + ///If non-null, overrides a/an/some in all cases + var/article + +/** + * Called when a mob examines (shift click or verb) this atom + * + * Default behaviour is to get the name and icon of the object and it's reagents where + * the [TRANSPARENT] flag is set on the reagents holder + * + * Produces a signal [COMSIG_ATOM_EXAMINE] + */ +/atom/proc/examine(mob/user) + var/examine_string = get_examine_string(user, thats = TRUE) + if(examine_string) + . = list("[examine_string].", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE + else + . = list() + + . += get_name_chaser(user) + if(desc) + . += desc + + if(custom_materials) + // SKYRAT EDIT ADDITION BEGIN - HR sections + if(length(custom_materials) > 1) + . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION + //SKYRAT EDIT ADDITION END + var/list/materials_list = list() + for(var/custom_material in custom_materials) + var/datum/material/current_material = GET_MATERIAL_REF(custom_material) + materials_list += "[current_material.name]" + . += "It is made out of [english_list(materials_list)]." + // SKYRAT EDIT ADDITION BEGIN - HR sections + if(length(custom_materials) > 1) + . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION + //SKYRAT EDIT ADDITION END + + if(reagents) + var/user_sees_reagents = user.can_see_reagents() + var/reagent_sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_REAGENT_EXAMINE, user, ., user_sees_reagents) + if(!(reagent_sigreturn & STOP_GENERIC_REAGENT_EXAMINE)) + if(reagents.flags & TRANSPARENT) + if(reagents.total_volume) + . += "It contains [reagents.total_volume] units of various reagents[user_sees_reagents ? ":" : "."]" + if(user_sees_reagents) //Show each individual reagent for detailed examination + for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) + . += "• [round(current_reagent.volume, CHEMICAL_VOLUME_ROUNDING)] units of [current_reagent.name]" + if(reagents.is_reacting) + . += span_warning("It is currently reacting!") + . += span_notice("The solution's pH is [round(reagents.ph, 0.01)] and has a temperature of [reagents.chem_temp]K.") + + else + . += "It contains:
Nothing." + else if(reagents.flags & AMOUNT_VISIBLE) + if(reagents.total_volume) + . += span_notice("It has [reagents.total_volume] unit\s left.") + else + . += span_danger("It's empty.") + + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) + +/** + * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) + * + * This is where you can put extra information on something that may be superfluous or not important in critical gameplay + * moments, while allowing people to manually double-examine to take a closer look + * + * Produces a signal [COMSIG_ATOM_EXAMINE_MORE] + */ +/atom/proc/examine_more(mob/user) + SHOULD_CALL_PARENT(TRUE) + RETURN_TYPE(/list) + + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_MORE, user, .) + SEND_SIGNAL(user, COMSIG_MOB_EXAMINING_MORE, src, .) + +/** + * Get the name of this object for examine + * + * You can override what is returned from this proc by registering to listen for the + * [COMSIG_ATOM_GET_EXAMINE_NAME] signal + */ +/atom/proc/get_examine_name(mob/user) + . = "\a [src]" + var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") + if(article) + . = "[article] [src]" + override[EXAMINE_POSITION_ARTICLE] = article + if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) + . = override.Join("") + +///Generate the full examine string of this atom (including icon for goonchat) +/atom/proc/get_examine_string(mob/user, thats = FALSE) + return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" + +/** + * Returns an extended list of examine strings for any contained ID cards. + * + * Arguments: + * * user - The user who is doing the examining. + */ +/atom/proc/get_id_examine_strings(mob/user) + . = list() + return + +///Used to insert text after the name but before the description in examine() +/atom/proc/get_name_chaser(mob/user, list/name_chaser = list()) + return name_chaser diff --git a/code/game/atom/atom_greyscale.dm b/code/game/atom/atom_greyscale.dm new file mode 100644 index 00000000000..51d24b8528b --- /dev/null +++ b/code/game/atom/atom_greyscale.dm @@ -0,0 +1,30 @@ +/atom + ///The config type to use for greyscaled sprites. Both this and greyscale_colors must be assigned to work. + var/greyscale_config + ///A string of hex format colors to be used by greyscale sprites, ex: "#0054aa#badcff" + var/greyscale_colors + +/// Handles updates to greyscale value updates. +/// The colors argument can be either a list or the full color string. +/// Child procs should call parent last so the update happens after all changes. +/atom/proc/set_greyscale(list/colors, new_config) + SHOULD_CALL_PARENT(TRUE) + if(istype(colors)) + colors = colors.Join("") + if(!isnull(colors) && greyscale_colors != colors) // If you want to disable greyscale stuff then give a blank string + greyscale_colors = colors + + if(!isnull(new_config) && greyscale_config != new_config) + greyscale_config = new_config + + update_greyscale() + +/// Checks if this atom uses the GAGS system and if so updates the icon +/atom/proc/update_greyscale() + SHOULD_CALL_PARENT(TRUE) + if(greyscale_colors && greyscale_config) + icon = SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) + if(!smoothing_flags) // This is a bitfield but we're just checking that some sort of smoothing is happening + return + update_atom_colour() + QUEUE_SMOOTH(src) diff --git a/code/game/atom/atom_invisibility.dm b/code/game/atom/atom_invisibility.dm new file mode 100644 index 00000000000..53fbe895817 --- /dev/null +++ b/code/game/atom/atom_invisibility.dm @@ -0,0 +1,72 @@ +// Index defines +#define INVISIBILITY_VALUE 1 +#define INVISIBILITY_PRIORITY 2 + +/atom + VAR_PRIVATE/list/invisibility_sources + VAR_PRIVATE/current_invisibility_priority = -INFINITY + +/atom/proc/RecalculateInvisibility() + PRIVATE_PROC(TRUE) + + if(!invisibility_sources) + current_invisibility_priority = -INFINITY + invisibility = initial(invisibility) + return + + var/highest_priority + var/list/highest_priority_invisibility_data + for(var/entry in invisibility_sources) + var/list/priority_data + if(islist(entry)) + priority_data = entry + else + priority_data = invisibility_sources[entry] + + var/priority = priority_data[INVISIBILITY_PRIORITY] + if(highest_priority > priority) // In the case of equal priorities, we use the last thing in the list so that more recent changes apply first + continue + + highest_priority = priority + highest_priority_invisibility_data = priority_data + + current_invisibility_priority = highest_priority + invisibility = highest_priority_invisibility_data[INVISIBILITY_VALUE] + +/** + * Sets invisibility according to priority. + * If you want to be able to undo the value you set back to what it would be otherwise, + * you should provide an id here and remove it using RemoveInvisibility(id) + */ +/atom/proc/SetInvisibility(desired_value, id, priority=0) + if(!invisibility_sources) + invisibility_sources = list() + + if(id) + invisibility_sources[id] = list(desired_value, priority) + else + invisibility_sources += list(list(desired_value, priority)) + + if(current_invisibility_priority > priority) + return + + RecalculateInvisibility() + +/// Removes the specified invisibility source from the tracker +/atom/proc/RemoveInvisibility(id) + if(!invisibility_sources) + return + + var/list/priority_data = invisibility_sources[id] + invisibility_sources -= id + + if(length(invisibility_sources) == 0) + invisibility_sources = null + + if(current_invisibility_priority > priority_data[INVISIBILITY_PRIORITY]) + return + + RecalculateInvisibility() + +#undef INVISIBILITY_VALUE +#undef INVISIBILITY_PRIORITY diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm new file mode 100644 index 00000000000..ae9a5b3a18e --- /dev/null +++ b/code/game/atom/atom_materials.dm @@ -0,0 +1,128 @@ +/atom + ///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.) + ///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials]. + var/list/datum/material/custom_materials + ///Bitfield for how the atom handles materials. + var/material_flags = NONE + ///Modifier that raises/lowers the effect of the amount of a material, prevents small and easy to get items from being death machines. + var/material_modifier = 1 + +/// Sets the custom materials for an item. +/atom/proc/set_custom_materials(list/materials, multiplier = 1) + if(custom_materials && material_flags & MATERIAL_EFFECTS) //Only runs if custom materials existed at first and affected src. + for(var/current_material in custom_materials) + var/datum/material/custom_material = GET_MATERIAL_REF(current_material) + custom_material.on_removed(src, custom_materials[current_material] * material_modifier, material_flags) //Remove the current materials + + if(!length(materials)) + custom_materials = null + return + + if(material_flags & MATERIAL_EFFECTS) + for(var/current_material in materials) + var/datum/material/custom_material = GET_MATERIAL_REF(current_material) + custom_material.on_applied(src, materials[current_material] * multiplier * material_modifier, material_flags) + + custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) + +/** + * Returns the material composition of the atom. + * + * Used when recycling items, specifically to turn alloys back into their component mats. + * + * Exists because I'd need to add a way to un-alloy alloys or otherwise deal + * with people converting the entire stations material supply into alloys. + * + * Arguments: + * - flags: A set of flags determining how exactly the materials are broken down. + */ +/atom/proc/get_material_composition(breakdown_flags=NONE) + . = list() + if(!(breakdown_flags & BREAKDOWN_INCLUDE_ALCHEMY) && HAS_TRAIT(src, TRAIT_MAT_TRANSMUTED)) + return + + var/list/cached_materials = custom_materials + for(var/mat in cached_materials) + var/datum/material/material = GET_MATERIAL_REF(mat) + var/list/material_comp = material.return_composition(cached_materials[mat], breakdown_flags) + for(var/comp_mat in material_comp) + .[comp_mat] += material_comp[comp_mat] + +/** + * Fetches a list of all of the materials this object has of the desired type. Returns null if there is no valid materials of the type + * + * Arguments: + * - [required_material][/datum/material]: The type of material we are checking for + * - mat_amount: The minimum required amount of material + */ +/atom/proc/has_material_type(datum/material/required_material, mat_amount = 0) + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/materials_of_type + for(var/current_material in cached_materials) + if(cached_materials[current_material] < mat_amount) + continue + var/datum/material/material = GET_MATERIAL_REF(current_material) + if(!istype(material, required_material)) + continue + LAZYSET(materials_of_type, material, cached_materials[current_material]) + + return materials_of_type + +/** + * Fetches a list of all of the materials this object has with the desired material category. + * + * Arguments: + * - category: The category to check for + * - any_flags: Any bitflags that must be present for the category + * - all_flags: All bitflags that must be present for the category + * - no_flags: Any bitflags that must not be present for the category + * - mat_amount: The minimum amount of materials that must be present + */ +/atom/proc/has_material_category(category, any_flags=0, all_flags=0, no_flags=0, mat_amount=0) + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/materials_of_category + for(var/current_material in cached_materials) + if(cached_materials[current_material] < mat_amount) + continue + var/datum/material/material = GET_MATERIAL_REF(current_material) + var/category_flags = material?.categories[category] + if(isnull(category_flags)) + continue + if(any_flags && !(category_flags & any_flags)) + continue + if(all_flags && (all_flags != (category_flags & all_flags))) + continue + if(no_flags && (category_flags & no_flags)) + continue + LAZYSET(materials_of_category, material, cached_materials[current_material]) + return materials_of_category + +/** + * Gets the most common material in the object. + */ +/atom/proc/get_master_material() + var/list/cached_materials = custom_materials + if(!length(cached_materials)) + return null + + var/most_common_material = null + var/max_amount = 0 + for(var/material in cached_materials) + if(cached_materials[material] > max_amount) + most_common_material = material + max_amount = cached_materials[material] + + if(most_common_material) + return GET_MATERIAL_REF(most_common_material) + +/** + * Gets the total amount of materials in this atom. + */ +/atom/proc/get_custom_material_amount() + return isnull(custom_materials) ? 0 : counterlist_sum(custom_materials) diff --git a/code/game/atom/atom_merger.dm b/code/game/atom/atom_merger.dm new file mode 100644 index 00000000000..1787d51675b --- /dev/null +++ b/code/game/atom/atom_merger.dm @@ -0,0 +1,14 @@ +/atom + ///Holds merger groups currently active on the atom. Do not access directly, use GetMergeGroup() instead. + var/list/datum/merger/mergers + +/// Gets a merger datum representing the connected blob of objects in the allowed_types argument +/atom/proc/GetMergeGroup(id, list/allowed_types) + RETURN_TYPE(/datum/merger) + var/datum/merger/candidate + if(mergers) + candidate = mergers[id] + if(!candidate) + new /datum/merger(id, allowed_types, src) + candidate = mergers[id] + return candidate diff --git a/code/game/atom/atom_orbit.dm b/code/game/atom/atom_orbit.dm new file mode 100644 index 00000000000..8eecddd952d --- /dev/null +++ b/code/game/atom/atom_orbit.dm @@ -0,0 +1,33 @@ +/atom + ///Reference to atom being orbited + var/atom/orbit_target + ///The orbiter component, if there's anything orbiting this atom + var/datum/component/orbiter/orbiters + +/** + * Recursive getter method to return a list of all ghosts orbitting this atom + * + * This will work fine without manually passing arguments. + * * processed - The list of atoms we've already convered + * * source - Is this the atom for who we're counting up all the orbiters? + * * ignored_stealthed_admins - If TRUE, don't count admins who are stealthmoded and orbiting this + */ +/atom/proc/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + var/list/output = list() + if(!processed) + processed = list() + else if(src in processed) + return output + + if(!source) + output += src + + processed += src + for(var/atom/atom_orbiter as anything in orbiters?.orbiter_list) + output += atom_orbiter.get_all_orbiters(processed, source = FALSE) + return output + +/mob/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + if(!source && ignore_stealthed_admins && client?.holder?.fakekey) + return list() + return ..() diff --git a/code/game/atom/atom_storage.dm b/code/game/atom/atom_storage.dm new file mode 100644 index 00000000000..6273c28fc2e --- /dev/null +++ b/code/game/atom/atom_storage.dm @@ -0,0 +1,41 @@ +/atom + /// the datum handler for our contents - see create_storage() for creation method + var/datum/storage/atom_storage + +/// A quick and easy way to create a storage datum for an atom +/atom/proc/create_storage( + max_slots, + max_specific_storage, + max_total_storage, + numerical_stacking = FALSE, + allow_quick_gather = FALSE, + allow_quick_empty = FALSE, + collection_mode = COLLECT_ONE, + attack_hand_interact = TRUE, + list/canhold, + list/canthold, + storage_type = /datum/storage, +) + + if(atom_storage) + QDEL_NULL(atom_storage) + + atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, collection_mode, attack_hand_interact) + + if(canhold || canthold) + atom_storage.set_holdable(canhold, canthold) + + return atom_storage + +/// A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) +/atom/proc/clone_storage(datum/storage/cloning) + if(atom_storage) + QDEL_NULL(atom_storage) + + atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage, cloning.numerical_stacking, cloning.allow_quick_gather, cloning.collection_mode, cloning.attack_hand_interact) + + if(cloning.can_hold || cloning.cant_hold) + if(!atom_storage.can_hold && !atom_storage.cant_hold) //In the event that the can/can't hold lists are already in place (such as from storage objects added on initialize). + atom_storage.set_holdable(cloning.can_hold, cloning.cant_hold) + + return atom_storage diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm new file mode 100644 index 00000000000..f6ce7eb96c7 --- /dev/null +++ b/code/game/atom/atom_tool_acts.dm @@ -0,0 +1,120 @@ +/** + *Tool behavior procedure. Redirects to tool-specific procs by default. + * + * You can override it to catch all tool interactions, for use in complex deconstruction procs. + * + * Must return parent proc ..() in the end if overridden + */ +/atom/proc/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) + var/act_result + var/signal_result + + var/is_left_clicking = !is_right_clicking + + if(is_left_clicking) // Left click first for sensibility + var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal + signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) + if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act + return TOOL_ACT_SIGNAL_BLOCKING + if(processing_recipes.len) + process_recipes(user, tool, processing_recipes) + if(QDELETED(tool)) + return TRUE + else + signal_result = SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) + if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act + return TOOL_ACT_SIGNAL_BLOCKING + + switch(tool_type) + if(TOOL_CROWBAR) + act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) + if(TOOL_MULTITOOL) + act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) + if(TOOL_SCREWDRIVER) + act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) + if(TOOL_WRENCH) + act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) + if(TOOL_WIRECUTTER) + act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) + if(TOOL_WELDER) + act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) + if(TOOL_ANALYZER) + act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) + if(!act_result) + return + + // A tooltype_act has completed successfully + if(is_left_clicking) + log_tool("[key_name(user)] used [tool] on [src] at [AREACOORD(src)]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) + else + log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") + SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) + return TOOL_ACT_TOOLTYPE_SUCCESS + +//! Tool-specific behavior procs. +/// + +/// Called on an object when a tool with crowbar capabilities is used to left click an object +/atom/proc/crowbar_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with crowbar capabilities is used to right click an object +/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to left click an object +/atom/proc/multitool_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with multitool capabilities is used to right click an object +/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) + return + +///Check if an item supports a data buffer (is a multitool) +/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE) + if(!istype(multitool, /obj/item/multitool)) + if(user && !silent) + to_chat(user, span_warning("[multitool] has no data buffer!")) + return FALSE + return TRUE + +/// Called on an object when a tool with screwdriver capabilities is used to left click an object +/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with screwdriver capabilities is used to right click an object +/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to left click an object +/atom/proc/wrench_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wrench capabilities is used to right click an object +/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to left click an object +/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with wirecutter capabilities is used to right click an object +/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to left click an object +/atom/proc/welder_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with welder capabilities is used to right click an object +/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to left click an object +/atom/proc/analyzer_act(mob/living/user, obj/item/tool) + return + +/// Called on an object when a tool with analyzer capabilities is used to right click an object +/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) + return diff --git a/code/game/atom/atom_vv.dm b/code/game/atom/atom_vv.dm new file mode 100644 index 00000000000..8393ecabcfd --- /dev/null +++ b/code/game/atom/atom_vv.dm @@ -0,0 +1,271 @@ +/** + * Return the markup to for the dropdown list for the VV panel for this atom + * + * Override in subtypes to add custom VV handling in the VV panel + */ +/atom/vv_get_dropdown() + . = ..() + VV_DROPDOWN_OPTION("", "---------") + if(!ismovable(src)) + var/turf/curturf = get_turf(src) + if(curturf) + . += "" + VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") + VV_DROPDOWN_OPTION(VV_HK_SPIN_ANIMATION, "SpinAnimation") + VV_DROPDOWN_OPTION(VV_HK_STOP_ALL_ANIMATIONS, "Stop All Animations") + VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log") + VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") + VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") + VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") + VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") + VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") + VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices") + VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") + VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor") + if(greyscale_colors) + VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors") + +/atom/vv_do_topic(list/href_list) + . = ..() + if(href_list[VV_HK_ADD_REAGENT] && check_rights(R_VAREDIT)) + if(!reagents) + var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num|null + if(amount) + create_reagents(amount) + + if(reagents) + var/chosen_id + switch(tgui_alert(usr, "Choose a method.", "Add Reagents", list("Search", "Choose from a list", "I'm feeling lucky"))) + if("Search") + var/valid_id + while(!valid_id) + chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text + if(isnull(chosen_id)) //Get me out of here! + break + if (!ispath(text2path(chosen_id))) + chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent))) + if (ispath(chosen_id)) + valid_id = TRUE + else + valid_id = TRUE + if(!valid_id) + to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) + if("Choose from a list") + chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in sort_list(subtypesof(/datum/reagent), GLOBAL_PROC_REF(cmp_typepaths_asc)) + if("I'm feeling lucky") + chosen_id = pick(subtypesof(/datum/reagent)) + if(chosen_id) + var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num|null + if(amount) + reagents.add_reagent(chosen_id, amount) + log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]") + message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")) + + if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN)) + usr.client.cmd_admin_explosion(src) + + if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN)) + usr.client.cmd_admin_emp(src) + + if(href_list[VV_HK_SHOW_HIDDENPRINTS] && check_rights(R_ADMIN)) + usr.client.cmd_show_hiddenprints(src) + + if(href_list[VV_HK_ARMOR_MOD]) + var/list/pickerlist = list() + var/list/armorlist = get_armor().get_rating_list() + + for (var/i in armorlist) + pickerlist += list(list("value" = armorlist[i], "name" = i)) + + var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist) + var/list/armor_all = ARMOR_LIST_ALL() + + if (islist(result)) + if (result["button"] != 2) // If the user pressed the cancel button + // text2num conveniently returns a null on invalid values + var/list/converted = list() + for(var/armor_key in armor_all) + converted[armor_key] = text2num(result["values"][armor_key]) + set_armor(get_armor().generate_new_with_specific(converted)) + var/message = "[key_name(usr)] modified the armor on [src] ([type]) to: " + for(var/armor_key in armor_all) + message += "[armor_key]=[get_armor_rating(armor_key)]," + message = copytext(message, 1, -1) + log_admin(span_notice(message)) + message_admins(span_notice(message)) + + if(href_list[VV_HK_ADD_AI]) + if(!check_rights(R_VAREDIT)) + return + var/result = input(usr, "Choose the AI controller to apply to this atom WARNING: Not all AI works on all atoms.", "AI controller") as null|anything in subtypesof(/datum/ai_controller) + if(!result) + return + ai_controller = new result(src) + + if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT)) + var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate","Shear") + var/matrix/M = transform + if(!result) + return + switch(result) + if("Scale") + var/x = input(usr, "Choose x mod","Transform Mod") as null|num + var/y = input(usr, "Choose y mod","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Scale(x,y) + if("Translate") + var/x = input(usr, "Choose x mod (negative = left, positive = right)","Transform Mod") as null|num + var/y = input(usr, "Choose y mod (negative = down, positive = up)","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Translate(x,y) + if("Shear") + var/x = input(usr, "Choose x mod","Transform Mod") as null|num + var/y = input(usr, "Choose y mod","Transform Mod") as null|num + if(isnull(x) || isnull(y)) + return + transform = M.Shear(x,y) + if("Rotate") + var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num + if(isnull(angle)) + return + transform = M.Turn(angle) + + SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM) + + if(href_list[VV_HK_SPIN_ANIMATION] && check_rights(R_VAREDIT)) + var/num_spins = input(usr, "Do you want infinite spins?", "Spin Animation") in list("Yes", "No") + if(num_spins == "No") + num_spins = input(usr, "How many spins?", "Spin Animation") as null|num + else + num_spins = -1 + if(!num_spins) + return + var/spin_speed = input(usr, "How fast?", "Spin Animation") as null|num + if(!spin_speed) + return + var/direction = input(usr, "Which direction?", "Spin Animation") in list("Clockwise", "Counter-clockwise") + switch(direction) + if("Clockwise") + direction = 1 + if("Counter-clockwise") + direction = 0 + else + return + SpinAnimation(spin_speed, num_spins, direction) + + if(href_list[VV_HK_STOP_ALL_ANIMATIONS] && check_rights(R_VAREDIT)) + var/result = input(usr, "Are you sure?", "Stop Animating") in list("Yes", "No") + if(result == "Yes") + animate(src, transform = null, flags = ANIMATION_END_NOW) // Literally just fucking stop animating entirely because admin said so + return + + if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT)) + var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text + // Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm. + if(newname && !(is_ic_filtered(newname) || is_soft_ic_filtered(newname) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) != "Confirm")) + vv_auto_rename(newname) + + if(href_list[VV_HK_EDIT_FILTERS] && check_rights(R_VAREDIT)) + usr.client?.open_filter_editor(src) + + if(href_list[VV_HK_EDIT_COLOR_MATRIX] && check_rights(R_VAREDIT)) + usr.client?.open_color_matrix_editor(src) + + if(href_list[VV_HK_TEST_MATRIXES] && check_rights(R_VAREDIT)) + usr.client?.open_matrix_tester(src) + +/atom/vv_get_header() + . = ..() + var/refid = REF(src) + . += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "[src]")]" + . += "
<< [dir2text(dir) || dir] >>" + +/** + * call back when a var is edited on this atom + * + * Can be used to implement special handling of vars + * + * At the atom level, if you edit a var named "color" it will add the atom colour with + * admin level priority to the atom colours list + * + * Also, if GLOB.Debug2 is FALSE, it sets the [ADMIN_SPAWNED_1] flag on [flags_1][/atom/var/flags_1], which signifies + * the object has been admin edited + */ +/atom/vv_edit_var(var_name, var_value) + var/old_light_flags = light_flags + // Disable frozen lights for now, so we can actually modify it + light_flags &= ~LIGHT_FROZEN + switch(var_name) + if(NAMEOF(src, light_range)) + if(light_system == STATIC_LIGHT) + set_light(l_range = var_value) + else + set_light_range(var_value) + . = TRUE + if(NAMEOF(src, light_power)) + if(light_system == STATIC_LIGHT) + set_light(l_power = var_value) + else + set_light_power(var_value) + . = TRUE + if(NAMEOF(src, light_color)) + if(light_system == STATIC_LIGHT) + set_light(l_color = var_value) + else + set_light_color(var_value) + . = TRUE + if(NAMEOF(src, light_angle)) + if(light_system == STATIC_LIGHT) + set_light(l_angle = var_value) + . = TRUE + if(NAMEOF(src, light_dir)) + if(light_system == STATIC_LIGHT) + set_light(l_dir = var_value) + . = TRUE + if(NAMEOF(src, light_height)) + if(light_system == STATIC_LIGHT) + set_light(l_height = var_value) + . = TRUE + if(NAMEOF(src, light_on)) + if(light_system == STATIC_LIGHT) + set_light(l_on = var_value) + else + set_light_on(var_value) + . = TRUE + if(NAMEOF(src, light_flags)) + set_light_flags(var_value) + // I'm sorry + old_light_flags = var_value + . = TRUE + if(NAMEOF(src, smoothing_junction)) + set_smoothed_icon_state(var_value) + . = TRUE + if(NAMEOF(src, opacity)) + set_opacity(var_value) + . = TRUE + if(NAMEOF(src, base_pixel_x)) + set_base_pixel_x(var_value) + . = TRUE + if(NAMEOF(src, base_pixel_y)) + set_base_pixel_y(var_value) + . = TRUE + + light_flags = old_light_flags + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + + if(!GLOB.Debug2) + flags_1 |= ADMIN_SPAWNED_1 + + . = ..() + + switch(var_name) + if(NAMEOF(src, color)) + add_atom_colour(color, ADMIN_COLOUR_PRIORITY) + update_appearance() + +/atom/proc/vv_auto_rename(newname) + name = newname diff --git a/code/game/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm similarity index 76% rename from code/game/atoms_initializing_EXPENSIVE.dm rename to code/game/atom/atoms_initializing_EXPENSIVE.dm index 1ecc6390edc..2a3a442e04d 100644 --- a/code/game/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -52,6 +52,27 @@ return qdeleted || QDELING(A) +/** + * Called when an atom is created in byond (built in engine proc) + * + * Not a lot happens here in SS13 code, as we offload most of the work to the + * [Intialization][/atom/proc/Initialize] proc, mostly we run the preloader + * if the preloader is being used and then call [InitAtom][/datum/controller/subsystem/atoms/proc/InitAtom] of which the ultimate + * result is that the Intialize proc is called. + * + */ +/atom/New(loc, ...) + //atom creation method that preloads variables at creation + if(GLOB.use_preloader && src.type == GLOB._preloader_path)//in case the instanciated atom is creating other atoms in New() + world.preloader_load(src) + + var/do_initialize = SSatoms.initialized + if(do_initialize != INITIALIZATION_INSSATOMS) + args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD + if(SSatoms.InitAtom(src, FALSE, args)) + //we were deleted + return + /** * The primary method that objects are setup in SS13 with * @@ -126,3 +147,17 @@ ai_controller = new ai_controller(src) return INITIALIZE_HINT_NORMAL + +/** + * Late Intialization, for code that should run after all atoms have run Intialization + * + * To have your LateIntialize proc be called, your atoms [Initalization][/atom/proc/Initialize] + * proc must return the hint + * [INITIALIZE_HINT_LATELOAD] otherwise it will never be called. + * + * useful for doing things like finding other machines on GLOB.machines because you can guarantee + * that all atoms will actually exist in the "WORLD" at this time and that all their Intialization + * code has been run + */ +/atom/proc/LateInitialize() + set waitfor = FALSE diff --git a/code/game/atoms.dm b/code/game/atoms.dm deleted file mode 100644 index 74bbb3f7cba..00000000000 --- a/code/game/atoms.dm +++ /dev/null @@ -1,2323 +0,0 @@ -/** - * The base type for nearly all physical objects in SS13 - - * Lots and lots of functionality lives here, although in general we are striving to move - * as much as possible to the components/elements system - */ -/atom - layer = TURF_LAYER - plane = GAME_PLANE - appearance_flags = TILE_BOUND|LONG_GLIDE - - /// pass_flags that we are. If any of this matches a pass_flag on a moving thing, by default, we let them through. - var/pass_flags_self = NONE - - ///If non-null, overrides a/an/some in all cases - var/article - - ///First atom flags var - var/flags_1 = NONE - ///Intearaction flags - var/interaction_flags_atom = NONE - - var/flags_ricochet = NONE - - ///When a projectile tries to ricochet off this atom, the projectile ricochet chance is multiplied by this - var/receive_ricochet_chance_mod = 1 - ///When a projectile ricochets off this atom, it deals the normal damage * this modifier to this atom - var/receive_ricochet_damage_coeff = 0.33 - - ///Reagents holder - var/datum/reagents/reagents = null - - ///all of this atom's HUD (med/sec, etc) images. Associative list of the form: list(hud category = hud image or images for that category). - ///most of the time hud category is associated with a single image, sometimes its associated with a list of images. - ///not every hud in this list is actually used. for ones available for others to see, look at active_hud_list. - var/list/image/hud_list = null - ///all of this atom's HUD images which can actually be seen by players with that hud - var/list/image/active_hud_list = null - ///HUD images that this atom can provide. - var/list/hud_possible - - ///How much this atom resists explosions by, in the end - var/explosive_resistance = 0 - - /** - * used to store the different colors on an atom - * - * its inherent color, the colored paint applied on it, special color effect etc... - */ - var/list/atom_colours - - - /// a very temporary list of overlays to remove - var/list/remove_overlays - /// a very temporary list of overlays to add - var/list/add_overlays - - ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays. - var/list/managed_vis_overlays - ///overlays managed by [update_overlays][/atom/proc/update_overlays] to prevent removing overlays that weren't added by the same proc. Single items are stored on their own, not in a list. - var/list/managed_overlays - - /// Lazylist of all images (or atoms, I'm sorry) (hopefully attached to us) to update when we change z levels - /// You will need to manage adding/removing from this yourself, but I'll do the updating for you - var/list/image/update_on_z - - /// Lazylist of all overlays attached to us to update when we change z levels - /// You will need to manage adding/removing from this yourself, but I'll do the updating for you - /// Oh and note, if order of addition is important this WILL break that. so mind yourself - var/list/image/update_overlays_on_z - - ///Cooldown tick timer for buckle messages - var/buckle_message_cooldown = 0 - ///Last fingerprints to touch this atom - var/fingerprintslast - - //List of datums orbiting this atom - var/datum/component/orbiter/orbiters - - /// Radiation insulation types - var/rad_insulation = RAD_NO_INSULATION - - /// The icon state intended to be used for the acid component. Used to override the default acid overlay icon state. - var/custom_acid_overlay = null - - ///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.) - ///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials]. - var/list/datum/material/custom_materials - ///Bitfield for how the atom handles materials. - var/material_flags = NONE - ///Modifier that raises/lowers the effect of the amount of a material, prevents small and easy to get items from being death machines. - var/material_modifier = 1 - - var/datum/wires/wires = null - - var/list/alternate_appearances - - ///Light systems, both shouldn't be active at the same time. - var/light_system = STATIC_LIGHT - ///Range of the light in tiles. Zero means no light. - var/light_range = 0 - ///Intensity of the light. The stronger, the less shadows you will see on the lit area. - var/light_power = 1 - ///Hexadecimal RGB string representing the colour of the light. White by default. - var/light_color = COLOR_WHITE - /// Angle of light to show in light_dir - /// 360 is a circle, 90 is a cone, etc. - var/light_angle = 360 - /// What angle to project light in - var/light_dir = NORTH - ///Boolean variable for toggleable lights. Has no effect without the proper light_system, light_range and light_power values. - var/light_on = TRUE - /// How many tiles "up" this light is. 1 is typical, should only really change this if it's a floor light - var/light_height = LIGHTING_HEIGHT - ///Bitflags to determine lighting-related atom properties. - var/light_flags = NONE - ///Our light source. Don't fuck with this directly unless you have a good reason! - var/tmp/datum/light_source/light - ///Any light sources that are "inside" of us, for example, if src here was a mob that's carrying a flashlight, that flashlight's light source would be part of this list. - var/tmp/list/light_sources - - /// Last name used to calculate a color for the chatmessage overlays - var/chat_color_name - /// Last color calculated for the the chatmessage overlays - var/chat_color - /// A luminescence-shifted value of the last color calculated for chatmessage overlays - var/chat_color_darkened - - // Use SET_BASE_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_x and y for you - ///Default pixel x shifting for the atom's icon. - var/base_pixel_x = 0 - ///Default pixel y shifting for the atom's icon. - var/base_pixel_y = 0 - // Use SET_BASE_VISUAL_PIXEL(x, y) to set these in typepath definitions, it'll handle pixel_w and z for you - ///Default pixel w shifting for the atom's icon. - var/base_pixel_w = 0 - ///Default pixel z shifting for the atom's icon. - var/base_pixel_z = 0 - ///Used for changing icon states for different base sprites. - var/base_icon_state - - ///The config type to use for greyscaled sprites. Both this and greyscale_colors must be assigned to work. - var/greyscale_config - ///A string of hex format colors to be used by greyscale sprites, ex: "#0054aa#badcff" - var/greyscale_colors - - ///Holds merger groups currently active on the atom. Do not access directly, use GetMergeGroup() instead. - var/list/datum/merger/mergers - - ///Icon-smoothing behavior. - var/smoothing_flags = NONE - ///What directions this is currently smoothing with. IMPORTANT: This uses the smoothing direction flags as defined in icon_smoothing.dm, instead of the BYOND flags. - var/smoothing_junction = null //This starts as null for us to know when it's first set, but after that it will hold a 8-bit mask ranging from 0 to 255. - ///Smoothing variable - var/top_left_corner - ///Smoothing variable - var/top_right_corner - ///Smoothing variable - var/bottom_left_corner - ///Smoothing variable - var/bottom_right_corner - ///What smoothing groups does this atom belongs to, to match canSmoothWith. If null, nobody can smooth with it. Must be sorted. - var/list/smoothing_groups = null - ///List of smoothing groups this atom can smooth with. If this is null and atom is smooth, it smooths only with itself. Must be sorted. - var/list/canSmoothWith = null - ///Reference to atom being orbited - var/atom/orbit_target - ///AI controller that controls this atom. type on init, then turned into an instance during runtime - var/datum/ai_controller/ai_controller - - ///any atom that uses integrity and can be damaged must set this to true, otherwise the integrity procs will throw an error - var/uses_integrity = FALSE - - VAR_PROTECTED/datum/armor/armor_type = /datum/armor/none - VAR_PRIVATE/datum/armor/armor - - VAR_PRIVATE/atom_integrity //defaults to max_integrity - var/max_integrity = 500 - var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the atom breaks. 0.5 being 50% - ///Damage under this value will be completely ignored - var/damage_deflection = 0 - - var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF - /// forensics datum, contains fingerprints, fibres, blood_dna and hiddenprints on this atom - var/datum/forensics/forensics - - /// the datum handler for our contents - see create_storage() for creation method - var/datum/storage/atom_storage - /// How this atom should react to having its astar blocking checked - var/can_astar_pass = CANASTARPASS_DENSITY - - VAR_PRIVATE/list/invisibility_sources - VAR_PRIVATE/current_invisibility_priority = -INFINITY - -/** - * Called when an atom is created in byond (built in engine proc) - * - * Not a lot happens here in SS13 code, as we offload most of the work to the - * [Intialization][/atom/proc/Initialize] proc, mostly we run the preloader - * if the preloader is being used and then call [InitAtom][/datum/controller/subsystem/atoms/proc/InitAtom] of which the ultimate - * result is that the Intialize proc is called. - * - */ -/atom/New(loc, ...) - //atom creation method that preloads variables at creation - if(GLOB.use_preloader && src.type == GLOB._preloader_path)//in case the instanciated atom is creating other atoms in New() - world.preloader_load(src) - - var/do_initialize = SSatoms.initialized - if(do_initialize != INITIALIZATION_INSSATOMS) - args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD - if(SSatoms.InitAtom(src, FALSE, args)) - //we were deleted - return - -/** - * Late Intialization, for code that should run after all atoms have run Intialization - * - * To have your LateIntialize proc be called, your atoms [Initalization][/atom/proc/Initialize] - * proc must return the hint - * [INITIALIZE_HINT_LATELOAD] otherwise it will never be called. - * - * useful for doing things like finding other machines on GLOB.machines because you can guarantee - * that all atoms will actually exist in the "WORLD" at this time and that all their Intialization - * code has been run - */ -/atom/proc/LateInitialize() - set waitfor = FALSE - -/** - * Top level of the destroy chain for most atoms - * - * Cleans up the following: - * * Removes alternate apperances from huds that see them - * * qdels the reagent holder from atoms if it exists - * * clears the orbiters list - * * clears overlays and priority overlays - * * clears the light object - */ -/atom/Destroy(force) - if(alternate_appearances) - for(var/current_alternate_appearance in alternate_appearances) - var/datum/atom_hud/alternate_appearance/selected_alternate_appearance = alternate_appearances[current_alternate_appearance] - selected_alternate_appearance.remove_atom_from_hud(src) - - if(reagents) - QDEL_NULL(reagents) - - if(forensics) - QDEL_NULL(forensics) - - if(atom_storage) - QDEL_NULL(atom_storage) - - orbiters = null // The component is attached to us normaly and will be deleted elsewhere - - // Checking length(overlays) before cutting has significant speed benefits - if (length(overlays)) - overlays.Cut() - - LAZYNULL(managed_overlays) - if(ai_controller) - QDEL_NULL(ai_controller) - if(light) - QDEL_NULL(light) - if (length(light_sources)) - light_sources.Cut() - - if(smoothing_flags & SMOOTH_QUEUED) - SSicon_smooth.remove_from_queues(src) - - return ..() - -/// A quick and easy way to create a storage datum for an atom -/atom/proc/create_storage( - max_slots, - max_specific_storage, - max_total_storage, - numerical_stacking = FALSE, - allow_quick_gather = FALSE, - allow_quick_empty = FALSE, - collection_mode = COLLECT_ONE, - attack_hand_interact = TRUE, - list/canhold, - list/canthold, - storage_type = /datum/storage, -) - - if(atom_storage) - QDEL_NULL(atom_storage) - - atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, collection_mode, attack_hand_interact) - - if(canhold || canthold) - atom_storage.set_holdable(canhold, canthold) - - return atom_storage - -/// A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) -/atom/proc/clone_storage(datum/storage/cloning) - if(atom_storage) - QDEL_NULL(atom_storage) - - atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage, cloning.numerical_stacking, cloning.allow_quick_gather, cloning.collection_mode, cloning.attack_hand_interact) - - if(cloning.can_hold || cloning.cant_hold) - if(!atom_storage.can_hold && !atom_storage.cant_hold) //In the event that the can/can't hold lists are already in place (such as from storage objects added on initialize). - atom_storage.set_holdable(cloning.can_hold, cloning.cant_hold) - - return atom_storage - -/atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) - var/turf/p_turf = get_turf(ricocheting_projectile) - var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile) - var/face_angle = dir2angle(face_direction) - var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)) - var/a_incidence_s = abs(incidence_s) - if(a_incidence_s > 90 && a_incidence_s < 270) - return FALSE - if((ricocheting_projectile.armor_flag in list(BULLET, BOMB)) && ricocheting_projectile.ricochet_incidence_leeway) - if((a_incidence_s < 90 && a_incidence_s < 90 - ricocheting_projectile.ricochet_incidence_leeway) || (a_incidence_s > 270 && a_incidence_s -270 > ricocheting_projectile.ricochet_incidence_leeway)) - return FALSE - var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s) - ricocheting_projectile.set_angle(new_angle_s) - return TRUE - -/// Whether the mover object can avoid being blocked by this atom, while arriving from (or leaving through) the border_dir. -/atom/proc/CanPass(atom/movable/mover, border_dir) - SHOULD_CALL_PARENT(TRUE) - SHOULD_BE_PURE(TRUE) - if(SEND_SIGNAL(src, COMSIG_ATOM_TRIED_PASS, mover, border_dir) & COMSIG_COMPONENT_PERMIT_PASSAGE) - return TRUE - if(mover.movement_type & PHASING) - return TRUE - . = CanAllowThrough(mover, border_dir) - // This is cheaper than calling the proc every time since most things dont override CanPassThrough - if(!mover.generic_canpass) - return mover.CanPassThrough(src, REVERSE_DIR(border_dir), .) - -/// Returns true or false to allow the mover to move through src -/atom/proc/CanAllowThrough(atom/movable/mover, border_dir) - SHOULD_CALL_PARENT(TRUE) - //SHOULD_BE_PURE(TRUE) - if(mover.pass_flags & pass_flags_self) - return TRUE - if(mover.throwing && (pass_flags_self & LETPASSTHROW)) - return TRUE - return !density - -/** - * Is this atom currently located on centcom (or riding off into the sunset on a shuttle) - * - * Specifically, is it on the z level and within the centcom areas. - * You can also be in a shuttle during endgame transit. - * - * Used in gamemode to identify mobs who have escaped and for some other areas of the code - * who don't want atoms where they shouldn't be - * - * Returns TRUE if this atom is on centcom or an escape shuttle, or FALSE if not - */ -/atom/proc/onCentCom() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - // This doesn't necessarily check that we're at central command, - // but it checks for any shuttles which have finished are still in hyperspace - // (IE, stuff like the whiteship which fly off into the sunset and "escape") - if(is_reserved_level(current_turf.z)) - return on_escaped_shuttle(ENDGAME_TRANSIT) - - // From here on we only concern ourselves with people actually on the centcom Z - if(!is_centcom_level(current_turf.z)) - return FALSE - - if(istype(current_turf.loc, /area/centcom)) - return TRUE - - // Finally, check if we're on an escaped shuttle - return on_escaped_shuttle() - -/** - * Is the atom in any of the syndicate areas - * - * Either in the syndie base, or any of their shuttles - * - * Also used in gamemode code for win conditions - * - * Returns TRUE if this atom is on the syndicate recon base, any of its shuttles, or an escape shuttle, or FALSE if not - */ -/atom/proc/onSyndieBase() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - // Syndicate base is loaded in a reserved level. If not reserved, we don't care. - if(!is_reserved_level(current_turf.z)) - return FALSE - - var/static/list/syndie_typecache = typecacheof(list( - /area/centcom/syndicate_mothership, // syndicate base itself - /area/shuttle/assault_pod, // steel rain - /area/shuttle/syndicate, // infiltrator - )) - - if(is_type_in_typecache(current_turf.loc, syndie_typecache)) - return TRUE - - // Finally, check if we're on an escaped shuttle - return on_escaped_shuttle() - -/** - * Checks that we're on a shuttle that's escaped - * - * * check_for_launch_status - What launch status do we check for? Generally the two you want to check for are ENDGAME_LAUNCHED or ENDGAME_TRANSIT - * - * Returns TRUE if this atom is on a shuttle which is escaping or has escaped, or FALSE otherwise - */ -/atom/proc/on_escaped_shuttle(check_for_launch_status = ENDGAME_LAUNCHED) - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - for(var/obj/docking_port/mobile/mobile_docking_port as anything in SSshuttle.mobile_docking_ports) - if(mobile_docking_port.launch_status != check_for_launch_status) - continue - for(var/area/shuttle/shuttle_area as anything in mobile_docking_port.shuttle_areas) - if(current_turf in shuttle_area.get_contained_turfs()) - return TRUE - - return FALSE - -/** - * Is the atom in an away mission - * - * Must be in the away mission z-level to return TRUE - * - * Also used in gamemode code for win conditions - */ -/atom/proc/onAwayMission() - var/turf/current_turf = get_turf(src) - if(!current_turf) - return FALSE - - if(is_away_level(current_turf.z)) - return TRUE - - return FALSE - - - -///This atom has been hit by a hulkified mob in hulk mode (user) -/atom/proc/attack_hulk(mob/living/carbon/human/user) - SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) - -/** - * Ensure a list of atoms/reagents exists inside this atom - * - * Goes throught he list of passed in parts, if they're reagents, adds them to our reagent holder - * creating the reagent holder if it exists. - * - * If the part is a moveable atom and the previous location of the item was a mob/living, - * it calls the inventory handler transferItemToLoc for that mob/living and transfers the part - * to this atom - * - * Otherwise it simply forceMoves the atom into this atom - */ -/atom/proc/CheckParts(list/parts_list, datum/crafting_recipe/current_recipe) - SEND_SIGNAL(src, COMSIG_ATOM_CHECKPARTS, parts_list, current_recipe) - if(!parts_list) - return - for(var/part in parts_list) - if(istype(part, /datum/reagent)) - if(!reagents) - reagents = new() - reagents.reagent_list.Add(part) - reagents.conditional_update() - else if(ismovable(part)) - var/atom/movable/object = part - if(isliving(object.loc)) - var/mob/living/living = object.loc - living.transferItemToLoc(object, src) - else - object.forceMove(src) - SEND_SIGNAL(object, COMSIG_ATOM_USED_IN_CRAFT, src) - parts_list.Cut() - -///Take air from the passed in gas mixture datum -/atom/proc/assume_air(datum/gas_mixture/giver) - return null - -///Remove air from this atom -/atom/proc/remove_air(amount) - return null - -///Return the current air environment in this atom -/atom/proc/return_air() - if(loc) - return loc.return_air() - else - return null - -///Return the air if we can analyze it -/atom/proc/return_analyzable_air() - return null - -///Check if this atoms eye is still alive (probably) -/atom/proc/check_eye(mob/user) - SIGNAL_HANDLER - return - -/atom/proc/Bumped(atom/movable/bumped_atom) - set waitfor = FALSE - SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom) - -/// Convenience proc to see if a container is open for chemistry handling -/atom/proc/is_open_container() - return is_refillable() && is_drainable() - -/// Is this atom injectable into other atoms -/atom/proc/is_injectable(mob/user, allowmobs = TRUE) - return reagents && (reagents.flags & (INJECTABLE | REFILLABLE)) - -/// Can we draw from this atom with an injectable atom -/atom/proc/is_drawable(mob/user, allowmobs = TRUE) - return reagents && (reagents.flags & (DRAWABLE | DRAINABLE)) - -/// Can this atoms reagents be refilled -/atom/proc/is_refillable() - return reagents && (reagents.flags & REFILLABLE) - -/// Is this atom drainable of reagents -/atom/proc/is_drainable() - return reagents && (reagents.flags & DRAINABLE) - -/** Handles exposing this atom to a list of reagents. - * - * Sends COMSIG_ATOM_EXPOSE_REAGENTS - * Calls expose_atom() for every reagent in the reagent list. - * - * Arguments: - * - [reagents][/list]: The list of reagents the atom is being exposed to. - * - [source][/datum/reagents]: The reagent holder the reagents are being sourced from. - * - methods: How the atom is being exposed to the reagents. Bitflags. - * - volume_modifier: Volume multiplier. - * - show_message: Whether to display anything to mobs when they are exposed. - */ -/atom/proc/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE) - . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) - if(. & COMPONENT_NO_EXPOSE_REAGENTS) - return - - SEND_SIGNAL(source, COMSIG_REAGENTS_EXPOSE_ATOM, src, reagents, methods, volume_modifier, show_message) - for(var/datum/reagent/current_reagent as anything in reagents) - . |= current_reagent.expose_atom(src, reagents[current_reagent]) - SEND_SIGNAL(src, COMSIG_ATOM_AFTER_EXPOSE_REAGENTS, reagents, source, methods, volume_modifier, show_message) - -/// Are you allowed to drop this atom -/atom/proc/AllowDrop() - return FALSE - -///Is this atom within 1 tile of another atom -/atom/proc/HasProximity(atom/movable/proximity_check_mob as mob|obj) - return - -/// Sets the wire datum of an atom -/atom/proc/set_wires(datum/wires/new_wires) - wires = new_wires - -/** - * React to an EMP of the given severity - * - * Default behaviour is to send the [COMSIG_ATOM_PRE_EMP_ACT] and [COMSIG_ATOM_EMP_ACT] signal - * - * If the pre-signal does not return protection, and there are attached wires then we call - * [emp_pulse][/datum/wires/proc/emp_pulse] on the wires - * - * We then return the protection value - */ -/atom/proc/emp_act(severity) - var/protection = SEND_SIGNAL(src, COMSIG_ATOM_PRE_EMP_ACT, severity) - if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) - wires.emp_pulse() - - SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity, protection) - return protection // Pass the protection value collected here upwards - -/** - * React to a hit by a projectile object - * - * @params - * * hitting_projectile - projectile - * * def_zone - zone hit - * * piercing_hit - is this hit piercing or normal? - */ -/atom/proc/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) - SHOULD_CALL_PARENT(TRUE) - - var/sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_PRE_BULLET_ACT, hitting_projectile, def_zone) - if(sigreturn & COMPONENT_BULLET_PIERCED) - return BULLET_ACT_FORCE_PIERCE - if(sigreturn & COMPONENT_BULLET_BLOCKED) - return BULLET_ACT_BLOCK - if(sigreturn & COMPONENT_BULLET_ACTED) - return BULLET_ACT_HIT - - SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, hitting_projectile, def_zone) - if(QDELETED(hitting_projectile)) // Signal deleted it? - return BULLET_ACT_BLOCK - - return hitting_projectile.on_hit( - target = src, - // This armor check only matters for the visuals and messages in on_hit(), it's not actually used to reduce damage since - // only living mobs use armor to reduce damage, but on_hit() is going to need the value no matter what is shot. - blocked = check_projectile_armor(def_zone, hitting_projectile), - pierce_hit = piercing_hit, - ) - -///Return true if we're inside the passed in atom -/atom/proc/in_contents_of(container)//can take class or object instance as argument - if(ispath(container)) - if(istype(src.loc, container)) - return TRUE - else if(src in container) - return TRUE - return FALSE - -/** - * Get the name of this object for examine - * - * You can override what is returned from this proc by registering to listen for the - * [COMSIG_ATOM_GET_EXAMINE_NAME] signal - */ -/atom/proc/get_examine_name(mob/user) - . = "\a [src]" - var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]") - if(article) - . = "[article] [src]" - override[EXAMINE_POSITION_ARTICLE] = article - if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) - . = override.Join("") - -///Generate the full examine string of this atom (including icon for goonchat) -/atom/proc/get_examine_string(mob/user, thats = FALSE) - return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" - -/** - * Returns an extended list of examine strings for any contained ID cards. - * - * Arguments: - * * user - The user who is doing the examining. - */ -/atom/proc/get_id_examine_strings(mob/user) - . = list() - return - -///Used to insert text after the name but before the description in examine() -/atom/proc/get_name_chaser(mob/user, list/name_chaser = list()) - return name_chaser - -/** - * Called when a mob examines (shift click or verb) this atom - * - * Default behaviour is to get the name and icon of the object and it's reagents where - * the [TRANSPARENT] flag is set on the reagents holder - * - * Produces a signal [COMSIG_ATOM_EXAMINE] - */ -/atom/proc/examine(mob/user) - var/examine_string = get_examine_string(user, thats = TRUE) - if(examine_string) - . = list("[examine_string].", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE - else - . = list() - - . += get_name_chaser(user) - if(desc) - . += desc - - if(custom_materials) - // SKYRAT EDIT ADDITION BEGIN - HR sections - if(length(custom_materials) > 1) - . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION - //SKYRAT EDIT ADDITION END - - var/list/materials_list = list() - for(var/custom_material in custom_materials) - var/datum/material/current_material = GET_MATERIAL_REF(custom_material) - materials_list += "[current_material.name]" - . += "It is made out of [english_list(materials_list)]." - - // SKYRAT EDIT ADDITION BEGIN - HR sections - if(length(custom_materials) > 1) - . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION - //SKYRAT EDIT ADDITION END - if(reagents) - var/user_sees_reagents = user.can_see_reagents() - var/reagent_sigreturn = SEND_SIGNAL(src, COMSIG_ATOM_REAGENT_EXAMINE, user, ., user_sees_reagents) - if(!(reagent_sigreturn & STOP_GENERIC_REAGENT_EXAMINE)) - if(reagents.flags & TRANSPARENT) - if(reagents.total_volume) - . += "It contains [round(reagents.total_volume, 0.01)] units of various reagents[user_sees_reagents ? ":" : "."]" - if(user_sees_reagents) //Show each individual reagent for detailed examination - for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) - . += "• [round(current_reagent.volume, 0.01)] units of [current_reagent.name]" - if(reagents.is_reacting) - . += span_warning("It is currently reacting!") - . += span_notice("The solution's pH is [round(reagents.ph, 0.01)] and has a temperature of [reagents.chem_temp]K.") - - else - . += "It contains:
Nothing." - else if(reagents.flags & AMOUNT_VISIBLE) - if(reagents.total_volume) - . += span_notice("It has [reagents.total_volume] unit\s left.") - else - . += span_danger("It's empty.") - - SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) - -/** - * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) - * - * This is where you can put extra information on something that may be superfluous or not important in critical gameplay - * moments, while allowing people to manually double-examine to take a closer look - * - * Produces a signal [COMSIG_ATOM_EXAMINE_MORE] - */ -/atom/proc/examine_more(mob/user) - SHOULD_CALL_PARENT(TRUE) - RETURN_TYPE(/list) - - . = list() - SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_MORE, user, .) - SEND_SIGNAL(user, COMSIG_MOB_EXAMINING_MORE, src, .) - -/// Wrapper for _update_appearance that is only called when APPEARANCE_SUCCESS_TRACKING is defined -#ifdef APPEARANCE_SUCCESS_TRACKING -/atom/proc/wrap_update_appearance(file, line, updates) - INIT_COST_STATIC() - EXPORT_STATS_TO_CSV_LATER("appearance_efficency.csv", _costs, _counting) - var/old_appearance = appearance - - _update_appearance(updates) - // We're checking to see if update_appearance DID anything to our appearance - // If it didn't, or it produced the same thing, we'll mark it as such so it can potentially be opitmized - if(old_appearance == appearance) - SET_COST("SAME [file] [line]") - return FALSE - else - SET_COST("DIFFERENT [file] [line]") - return TRUE -#endif - -/** - * Updates the appearence of the icon - * - * Mostly delegates to update_name, update_desc, and update_icon - * - * Arguments: - * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] - */ -/atom/proc/update_appearance(updates=ALL) - SHOULD_NOT_SLEEP(TRUE) - SHOULD_CALL_PARENT(TRUE) - - . = NONE - updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) - if(updates & UPDATE_NAME) - . |= update_name(updates) - if(updates & UPDATE_DESC) - . |= update_desc(updates) - if(updates & UPDATE_ICON) - . |= update_icon(updates) - -/// Updates the name of the atom -/atom/proc/update_name(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) - -/// Updates the description of the atom -/atom/proc/update_desc(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) - -/// Updates the icon of the atom -/atom/proc/update_icon(updates=ALL) - SHOULD_CALL_PARENT(TRUE) - - . = NONE - updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) - if(updates & UPDATE_ICON_STATE) - update_icon_state() - . |= UPDATE_ICON_STATE - - if(updates & UPDATE_OVERLAYS) - if(LAZYLEN(managed_vis_overlays)) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - - var/list/new_overlays = update_overlays(updates) - var/nulls = 0 - for(var/i in 1 to length(new_overlays)) - var/atom/maybe_not_an_atom = new_overlays[i] - if(isnull(maybe_not_an_atom)) - nulls++ - continue - if(istext(maybe_not_an_atom) || isicon(maybe_not_an_atom)) - continue - new_overlays[i] = maybe_not_an_atom.appearance - if(nulls) - for(var/i in 1 to nulls) - new_overlays -= null - - var/identical = FALSE - var/new_length = length(new_overlays) - if(!managed_overlays && !new_length) - identical = TRUE - else if(!islist(managed_overlays)) - if(new_length == 1 && managed_overlays == new_overlays[1]) - identical = TRUE - else if(length(managed_overlays) == new_length) - identical = TRUE - for(var/i in 1 to length(managed_overlays)) - if(managed_overlays[i] != new_overlays[i]) - identical = FALSE - break - - if(!identical) - var/full_control = FALSE - if(managed_overlays) - full_control = length(overlays) == (islist(managed_overlays) ? length(managed_overlays) : 1) - if(full_control) - overlays = null - else - cut_overlay(managed_overlays) - - switch(length(new_overlays)) - if(0) - if(full_control) - POST_OVERLAY_CHANGE(src) - managed_overlays = null - if(1) - add_overlay(new_overlays) - managed_overlays = new_overlays[1] - else - add_overlay(new_overlays) - managed_overlays = new_overlays - - . |= UPDATE_OVERLAYS - - . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) - -/// Updates the icon state of the atom -/atom/proc/update_icon_state() - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) - -/// Updates the overlays of the atom -/atom/proc/update_overlays() - SHOULD_CALL_PARENT(TRUE) - . = list() - SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) - -/** - * Checks the atom's loc and calls update_held_items on it if it is a mob. - * - * This should only be used in situations when you are unable to use /datum/element/update_icon_updates_onmob for whatever reason. - * Check code/datums/elements/update_icon_updates_onmob.dm before using this. Adding that to the atom and calling update_appearance will work for most cases. - * - * Arguments: - * * mob/target - The mob to update the icons of. Optional argument, use if the atom's loc is not the mob you want to update. - */ -/atom/proc/update_inhand_icon(mob/target = loc) - SHOULD_CALL_PARENT(TRUE) - if(!istype(target)) - return - - target.update_held_items() - - SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_INHAND_ICON, target) - -/// Handles updates to greyscale value updates. -/// The colors argument can be either a list or the full color string. -/// Child procs should call parent last so the update happens after all changes. -/atom/proc/set_greyscale(list/colors, new_config) - SHOULD_CALL_PARENT(TRUE) - if(istype(colors)) - colors = colors.Join("") - if(!isnull(colors) && greyscale_colors != colors) // If you want to disable greyscale stuff then give a blank string - greyscale_colors = colors - - if(!isnull(new_config) && greyscale_config != new_config) - greyscale_config = new_config - - update_greyscale() - -/// Checks if this atom uses the GAGS system and if so updates the icon -/atom/proc/update_greyscale() - SHOULD_CALL_PARENT(TRUE) - if(greyscale_colors && greyscale_config) - icon = SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) - if(!smoothing_flags) // This is a bitfield but we're just checking that some sort of smoothing is happening - return - update_atom_colour() - QUEUE_SMOOTH(src) - -/** - * An atom we are buckled or is contained within us has tried to move - * - * Default behaviour is to send a warning that the user can't move while buckled as long - * as the [buckle_message_cooldown][/atom/var/buckle_message_cooldown] has expired (50 ticks) - */ -/atom/proc/relaymove(mob/living/user, direction) - if(SEND_SIGNAL(src, COMSIG_ATOM_RELAYMOVE, user, direction) & COMSIG_BLOCK_RELAYMOVE) - return - if(buckle_message_cooldown <= world.time) - buckle_message_cooldown = world.time + 25 - balloon_alert(user, "can't move while buckled!") - return - -/** - * A special case of relaymove() in which the person relaying the move may be "driving" this atom - * - * This is a special case for vehicles and ridden animals where the relayed movement may be handled - * by the riding component attached to this atom. Returns TRUE as long as there's nothing blocking - * the movement, or FALSE if the signal gets a reply that specifically blocks the movement - */ -/atom/proc/relaydrive(mob/living/user, direction) - return !(SEND_SIGNAL(src, COMSIG_RIDDEN_DRIVER_MOVE, user, direction) & COMPONENT_DRIVER_BLOCK_MOVE) - -/// Handle what happens when your contents are exploded by a bomb -/atom/proc/contents_explosion(severity, target) - return //For handling the effects of explosions on contents that would not normally be effected - -/** - * React to being hit by an explosion - * - * Should be called through the [EX_ACT] wrapper macro. - * The wrapper takes care of the [COMSIG_ATOM_EX_ACT] signal. - * as well as calling [/atom/proc/contents_explosion]. - * - * Returns TRUE by default, and behavior should be implemented on children procs on a per-atom basis. Should only return FALSE if we resist the explosion for any reason. - * We assume that the default is TRUE because all atoms should be considered destructible in some manner unless they explicitly opt out (in our current framework). - * However, the return value itself doesn't have any external consumers, it's only so children procs can listen to the value from their parent procs (due to the nature of the [EX_ACT] macro). - * Thus, the return value only matters on overrides of this proc, and the only thing that truly matters is the code that is executed (applying damage, calling damage procs, etc.) - * - */ -/atom/proc/ex_act(severity, target) - set waitfor = FALSE - return TRUE - -/** - * React to a hit by a blob objecd - * - * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal - */ -/atom/proc/blob_act(obj/structure/blob/attacking_blob) - var/blob_act_result = SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, attacking_blob) - if (blob_act_result & COMPONENT_CANCEL_BLOB_ACT) - return FALSE - return TRUE - -/** - * Respond to fire being used on our atom - * - * Default behaviour is to send [COMSIG_ATOM_FIRE_ACT] and return - */ -/atom/proc/fire_act(exposed_temperature, exposed_volume) - SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) - return FALSE - -/** - * Sends [COMSIG_ATOM_EXTINGUISH] signal, which properly removes burning component if it is present. - * - * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return - */ -/atom/proc/extinguish() - SHOULD_CALL_PARENT(TRUE) - return SEND_SIGNAL(src, COMSIG_ATOM_EXTINGUISH) - -/** - * React to being hit by a thrown object - * - * Default behaviour is to call [hitby_react][/atom/proc/hitby_react] on ourselves after 2 seconds if we are dense - * and under normal gravity. - * - * Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is - * deleted shortly after hitting something (during explosions or other massive events that - * throw lots of items around - singularity being a notable example) - */ -/atom/proc/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - SEND_SIGNAL(src, COMSIG_ATOM_HITBY, hitting_atom, skipcatch, hitpush, blocked, throwingdatum) - if(density && !has_gravity(hitting_atom)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). - addtimer(CALLBACK(src, PROC_REF(hitby_react), hitting_atom), 2) - -/** - * We have have actually hit the passed in atom - * - * Default behaviour is to move back from the item that hit us - */ -/atom/proc/hitby_react(atom/movable/harmed_atom) - if(harmed_atom && isturf(harmed_atom.loc)) - step(harmed_atom, REVERSE_DIR(harmed_atom.dir)) - -///Handle the atom being slipped over -/atom/proc/handle_slip(mob/living/carbon/slipped_carbon, knockdown_amount, obj/slipping_object, lube, paralyze, force_drop) - return - -///returns the mob's dna info as a list, to be inserted in an object's blood_DNA list -/mob/living/proc/get_blood_dna_list() - if(get_blood_id() != /datum/reagent/blood) - return - return list("ANIMAL DNA" = "Y-") - -///Get the mobs dna list -/mob/living/carbon/get_blood_dna_list() - if(get_blood_id() != /datum/reagent/blood) - return - var/list/blood_dna = list() - if(dna) - blood_dna[dna.unique_enzymes] = dna.blood_type - else - blood_dna["UNKNOWN DNA"] = "X*" - return blood_dna - -/mob/living/carbon/alien/get_blood_dna_list() - return list("UNKNOWN DNA" = "X*") - -/mob/living/silicon/get_blood_dna_list() - return - -///to add a mob's dna info into an object's blood_dna list. -/atom/proc/transfer_mob_blood_dna(mob/living/injected_mob) - // Returns 0 if we have that blood already - var/new_blood_dna = injected_mob.get_blood_dna_list() - if(!new_blood_dna) - return FALSE - var/old_length = GET_ATOM_BLOOD_DNA_LENGTH(src) - add_blood_DNA(new_blood_dna) - if(GET_ATOM_BLOOD_DNA_LENGTH(src) == old_length) - return FALSE - return TRUE - -///to add blood from a mob onto something, and transfer their dna info -/atom/proc/add_mob_blood(mob/living/injected_mob) - var/list/blood_dna = injected_mob.get_blood_dna_list() - if(!blood_dna) - return FALSE - return add_blood_DNA(blood_dna) - -///Is this atom in space -/atom/proc/isinspace() - if(isspaceturf(get_turf(src))) - return TRUE - else - return FALSE - -///Used for making a sound when a mob involuntarily falls into the ground. -/atom/proc/handle_fall(mob/faller) - return - -///Respond to the singularity eating this atom -/atom/proc/singularity_act() - return - -/** - * Respond to the singularity pulling on us - * - * Default behaviour is to send [COMSIG_ATOM_SING_PULL] and return - */ -/atom/proc/singularity_pull(obj/singularity/singularity, current_size) - SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, singularity, current_size) - - -/** - * Respond to acid being used on our atom - * - * Default behaviour is to send [COMSIG_ATOM_ACID_ACT] and return - */ -/atom/proc/acid_act(acidpwr, acid_volume) - SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume) - return FALSE - -/** - * Respond to an emag being used on our atom - * - * Args: - * * mob/user: The mob that used the emag. Nullable. - * * obj/item/card/emag/emag_card: The emag that was used. Nullable. - * - * Returns: - * TRUE if the emag had any effect, falsey otherwise. - */ -/atom/proc/emag_act(mob/user, obj/item/card/emag/emag_card) - return (SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user, emag_card)) - -/** - * Respond to narsie eating our atom - * - * Default behaviour is to send [COMSIG_ATOM_NARSIE_ACT] and return - */ -/atom/proc/narsie_act() - SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) - - -///Return the values you get when an RCD eats you? -/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE - - -/** - * Respond to an RCD acting on our item - * - * Default behaviour is to send [COMSIG_ATOM_RCD_ACT] and return FALSE - */ -/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) - SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, rcd_data["[RCD_DESIGN_MODE]"]) - return FALSE - -/** - * Respond to an electric bolt action on our item - * - * Default behaviour is to return, we define here to allow for cleaner code later on - */ -/atom/proc/zap_act(power, zap_flags) - return - -/** - * If someone's trying to dump items onto our atom, where should they be dumped to? - * - * Return a loc to place objects, or null to stop dumping. - */ -/atom/proc/get_dumping_location() - return null - -/** - * the vision impairment to give to the mob whose perspective is set to that atom - * - * (e.g. an unfocused camera giving you an impaired vision when looking through it) - */ -/atom/proc/get_remote_view_fullscreens(mob/user) - return - -/** - * the sight changes to give to the mob whose perspective is set to that atom - * - * (e.g. A mob with nightvision loses its nightvision while looking through a normal camera) - */ -/atom/proc/update_remote_sight(mob/living/user) - return - - -/** - * Hook for running code when a dir change occurs - * - * Not recommended to use, listen for the [COMSIG_ATOM_DIR_CHANGE] signal instead (sent by this proc) - */ -/atom/proc/setDir(newdir) - SHOULD_CALL_PARENT(TRUE) - if (SEND_SIGNAL(src, COMSIG_ATOM_PRE_DIR_CHANGE, dir, newdir) & COMPONENT_ATOM_BLOCK_DIR_CHANGE) - newdir = dir - return - SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) - dir = newdir - SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, dir, newdir) - if(smoothing_flags & SMOOTH_BORDER_OBJECT) - QUEUE_SMOOTH_NEIGHBORS(src) - -/** - * Called when the atom log's in or out - * - * Default behaviour is to call on_log on the location this atom is in - */ -/atom/proc/on_log(login) - if(loc) - loc.on_log(login) - - -/* - Atom Colour Priority System - A System that gives finer control over which atom colour to colour the atom with. - The "highest priority" one is always displayed as opposed to the default of - "whichever was set last is displayed" -*/ - - -///Adds an instance of colour_type to the atom's atom_colours list -/atom/proc/add_atom_colour(coloration, colour_priority) - if(!atom_colours || !atom_colours.len) - atom_colours = list() - atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. - if(!coloration) - return - if(colour_priority > atom_colours.len) - return - atom_colours[colour_priority] = coloration - update_atom_colour() - - -///Removes an instance of colour_type from the atom's atom_colours list -/atom/proc/remove_atom_colour(colour_priority, coloration) - if(!atom_colours) - return - if(colour_priority > atom_colours.len) - return - if(coloration && atom_colours[colour_priority] != coloration) - return //if we don't have the expected color (for a specific priority) to remove, do nothing - atom_colours[colour_priority] = null - update_atom_colour() - -/** - * Checks if this atom has the passed color - * Can optionally be supplied with a range of priorities, IE only checking "washable" or above - */ -/atom/proc/is_atom_colour(looking_for_color, min_priority_index = 1, max_priority_index = COLOUR_PRIORITY_AMOUNT) - // make sure uppertext hex strings don't mess with lowertext hex strings - looking_for_color = lowertext(looking_for_color) - - if(!LAZYLEN(atom_colours)) - // no atom colors list has been set up, just check the color var - return lowertext(color) == looking_for_color - - for(var/i in min_priority_index to max_priority_index) - if(lowertext(atom_colours[i]) == looking_for_color) - return TRUE - - return FALSE - -///Resets the atom's color to null, and then sets it to the highest priority colour available -/atom/proc/update_atom_colour() - color = null - if(!atom_colours) - return - for(var/checked_color in atom_colours) - if(islist(checked_color)) - var/list/color_list = checked_color - if(color_list.len) - color = color_list - return - else if(checked_color) - color = checked_color - return - - -/** - * Wash this atom - * - * This will clean it off any temporary stuff like blood. Override this in your item to add custom cleaning behavior. - * Returns true if any washing was necessary and thus performed - * Arguments: - * * clean_types: any of the CLEAN_ constants - */ -/atom/proc/wash(clean_types) - SHOULD_CALL_PARENT(TRUE) - if(SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, clean_types) & COMPONENT_CLEANED) - return TRUE - - // Basically "if has washable coloration" - if(length(atom_colours) >= WASHABLE_COLOUR_PRIORITY && atom_colours[WASHABLE_COLOUR_PRIORITY]) - remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - return TRUE - return FALSE - -/** - * call back when a var is edited on this atom - * - * Can be used to implement special handling of vars - * - * At the atom level, if you edit a var named "color" it will add the atom colour with - * admin level priority to the atom colours list - * - * Also, if GLOB.Debug2 is FALSE, it sets the [ADMIN_SPAWNED_1] flag on [flags_1][/atom/var/flags_1], which signifies - * the object has been admin edited - */ -/atom/vv_edit_var(var_name, var_value) - var/old_light_flags = light_flags - // Disable frozen lights for now, so we can actually modify it - light_flags &= ~LIGHT_FROZEN - switch(var_name) - if(NAMEOF(src, light_range)) - if(light_system == STATIC_LIGHT) - set_light(l_range = var_value) - else - set_light_range(var_value) - . = TRUE - if(NAMEOF(src, light_power)) - if(light_system == STATIC_LIGHT) - set_light(l_power = var_value) - else - set_light_power(var_value) - . = TRUE - if(NAMEOF(src, light_color)) - if(light_system == STATIC_LIGHT) - set_light(l_color = var_value) - else - set_light_color(var_value) - . = TRUE - if(NAMEOF(src, light_angle)) - if(light_system == STATIC_LIGHT) - set_light(l_angle = var_value) - . = TRUE - if(NAMEOF(src, light_dir)) - if(light_system == STATIC_LIGHT) - set_light(l_dir = var_value) - . = TRUE - if(NAMEOF(src, light_height)) - if(light_system == STATIC_LIGHT) - set_light(l_height = var_value) - . = TRUE - if(NAMEOF(src, light_on)) - if(light_system == STATIC_LIGHT) - set_light(l_on = var_value) - else - set_light_on(var_value) - . = TRUE - if(NAMEOF(src, light_flags)) - set_light_flags(var_value) - // I'm sorry - old_light_flags = var_value - . = TRUE - if(NAMEOF(src, smoothing_junction)) - set_smoothed_icon_state(var_value) - . = TRUE - if(NAMEOF(src, opacity)) - set_opacity(var_value) - . = TRUE - if(NAMEOF(src, base_pixel_x)) - set_base_pixel_x(var_value) - . = TRUE - if(NAMEOF(src, base_pixel_y)) - set_base_pixel_y(var_value) - . = TRUE - - light_flags = old_light_flags - if(!isnull(.)) - datum_flags |= DF_VAR_EDITED - return - - if(!GLOB.Debug2) - flags_1 |= ADMIN_SPAWNED_1 - - . = ..() - - switch(var_name) - if(NAMEOF(src, color)) - add_atom_colour(color, ADMIN_COLOUR_PRIORITY) - update_appearance() - - -/** - * Return the markup to for the dropdown list for the VV panel for this atom - * - * Override in subtypes to add custom VV handling in the VV panel - */ -/atom/vv_get_dropdown() - . = ..() - VV_DROPDOWN_OPTION("", "---------") - if(!ismovable(src)) - var/turf/curturf = get_turf(src) - if(curturf) - . += "" - VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") - VV_DROPDOWN_OPTION(VV_HK_SPIN_ANIMATION, "SpinAnimation") - VV_DROPDOWN_OPTION(VV_HK_STOP_ALL_ANIMATIONS, "Stop All Animations") - VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log") - VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") - VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") - VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") - VV_DROPDOWN_OPTION(VV_HK_EDIT_FILTERS, "Edit Filters") - VV_DROPDOWN_OPTION(VV_HK_EDIT_COLOR_MATRIX, "Edit Color as Matrix") - VV_DROPDOWN_OPTION(VV_HK_TEST_MATRIXES, "Test Matrices") - VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") - VV_DROPDOWN_OPTION(VV_HK_ARMOR_MOD, "Modify Armor") - if(greyscale_colors) - VV_DROPDOWN_OPTION(VV_HK_MODIFY_GREYSCALE, "Modify greyscale colors") - -/atom/vv_do_topic(list/href_list) - . = ..() - if(href_list[VV_HK_ADD_REAGENT] && check_rights(R_VAREDIT)) - if(!reagents) - var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num|null - if(amount) - create_reagents(amount) - - if(reagents) - var/chosen_id - switch(tgui_alert(usr, "Choose a method.", "Add Reagents", list("Search", "Choose from a list", "I'm feeling lucky"))) - if("Search") - var/valid_id - while(!valid_id) - chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text - if(isnull(chosen_id)) //Get me out of here! - break - if (!ispath(text2path(chosen_id))) - chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent))) - if (ispath(chosen_id)) - valid_id = TRUE - else - valid_id = TRUE - if(!valid_id) - to_chat(usr, span_warning("A reagent with that ID doesn't exist!")) - if("Choose from a list") - chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in sort_list(subtypesof(/datum/reagent), GLOBAL_PROC_REF(cmp_typepaths_asc)) - if("I'm feeling lucky") - chosen_id = pick(subtypesof(/datum/reagent)) - if(chosen_id) - var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num|null - if(amount) - reagents.add_reagent(chosen_id, amount) - log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]") - message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")) - - if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN)) - usr.client.cmd_admin_explosion(src) - - if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN)) - usr.client.cmd_admin_emp(src) - - if(href_list[VV_HK_SHOW_HIDDENPRINTS] && check_rights(R_ADMIN)) - usr.client.cmd_show_hiddenprints(src) - - if(href_list[VV_HK_ARMOR_MOD]) - var/list/pickerlist = list() - var/list/armorlist = get_armor().get_rating_list() - - for (var/i in armorlist) - pickerlist += list(list("value" = armorlist[i], "name" = i)) - - var/list/result = presentpicker(usr, "Modify armor", "Modify armor: [src]", Button1="Save", Button2 = "Cancel", Timeout=FALSE, inputtype = "text", values = pickerlist) - var/list/armor_all = ARMOR_LIST_ALL() - - if (islist(result)) - if (result["button"] != 2) // If the user pressed the cancel button - // text2num conveniently returns a null on invalid values - var/list/converted = list() - for(var/armor_key in armor_all) - converted[armor_key] = text2num(result["values"][armor_key]) - set_armor(get_armor().generate_new_with_specific(converted)) - var/message = "[key_name(usr)] modified the armor on [src] ([type]) to: " - for(var/armor_key in armor_all) - message += "[armor_key]=[get_armor_rating(armor_key)]," - message = copytext(message, 1, -1) - log_admin(span_notice(message)) - message_admins(span_notice(message)) - - if(href_list[VV_HK_ADD_AI]) - if(!check_rights(R_VAREDIT)) - return - var/result = input(usr, "Choose the AI controller to apply to this atom WARNING: Not all AI works on all atoms.", "AI controller") as null|anything in subtypesof(/datum/ai_controller) - if(!result) - return - ai_controller = new result(src) - - if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT)) - var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate","Shear") - var/matrix/M = transform - if(!result) - return - switch(result) - if("Scale") - var/x = input(usr, "Choose x mod","Transform Mod") as null|num - var/y = input(usr, "Choose y mod","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Scale(x,y) - if("Translate") - var/x = input(usr, "Choose x mod (negative = left, positive = right)","Transform Mod") as null|num - var/y = input(usr, "Choose y mod (negative = down, positive = up)","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Translate(x,y) - if("Shear") - var/x = input(usr, "Choose x mod","Transform Mod") as null|num - var/y = input(usr, "Choose y mod","Transform Mod") as null|num - if(isnull(x) || isnull(y)) - return - transform = M.Shear(x,y) - if("Rotate") - var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num - if(isnull(angle)) - return - transform = M.Turn(angle) - - SEND_SIGNAL(src, COMSIG_ATOM_VV_MODIFY_TRANSFORM) - - if(href_list[VV_HK_SPIN_ANIMATION] && check_rights(R_VAREDIT)) - var/num_spins = input(usr, "Do you want infinite spins?", "Spin Animation") in list("Yes", "No") - if(num_spins == "No") - num_spins = input(usr, "How many spins?", "Spin Animation") as null|num - else - num_spins = -1 - if(!num_spins) - return - var/spin_speed = input(usr, "How fast?", "Spin Animation") as null|num - if(!spin_speed) - return - var/direction = input(usr, "Which direction?", "Spin Animation") in list("Clockwise", "Counter-clockwise") - switch(direction) - if("Clockwise") - direction = 1 - if("Counter-clockwise") - direction = 0 - else - return - SpinAnimation(spin_speed, num_spins, direction) - - if(href_list[VV_HK_STOP_ALL_ANIMATIONS] && check_rights(R_VAREDIT)) - var/result = input(usr, "Are you sure?", "Stop Animating") in list("Yes", "No") - if(result == "Yes") - animate(src, transform = null, flags = ANIMATION_END_NOW) // Literally just fucking stop animating entirely because admin said so - return - - if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT)) - var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text - // Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm. - if(newname && !(is_ic_filtered(newname) || is_soft_ic_filtered(newname) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) != "Confirm")) - vv_auto_rename(newname) - - if(href_list[VV_HK_EDIT_FILTERS] && check_rights(R_VAREDIT)) - usr.client?.open_filter_editor(src) - - if(href_list[VV_HK_EDIT_COLOR_MATRIX] && check_rights(R_VAREDIT)) - usr.client?.open_color_matrix_editor(src) - - if(href_list[VV_HK_TEST_MATRIXES] && check_rights(R_VAREDIT)) - usr.client?.open_matrix_tester(src) - -/atom/vv_get_header() - . = ..() - var/refid = REF(src) - . += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "[src]")]" - . += "
<< [dir2text(dir) || dir] >>" - -///Where atoms should drop if taken from this atom -/atom/proc/drop_location() - var/atom/location = loc - if(!location) - return null - return location.AllowDrop() ? location : location.drop_location() - -/atom/proc/vv_auto_rename(newname) - name = newname - -/** - * An atom has entered this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_ENTERED] - */ -/atom/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, arrived, old_loc, old_locs) - SEND_SIGNAL(arrived, COMSIG_ATOM_ENTERING, src, old_loc, old_locs) - -/** - * An atom is attempting to exit this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_EXIT] - */ -/atom/Exit(atom/movable/leaving, direction) - // Don't call `..()` here, otherwise `Uncross()` gets called. - // See the doc comment on `Uncross()` to learn why this is bad. - - if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, leaving, direction) & COMPONENT_ATOM_BLOCK_EXIT) - return FALSE - - return TRUE - -/** - * An atom has exited this atom's contents - * - * Default behaviour is to send the [COMSIG_ATOM_EXITED] - */ -/atom/Exited(atom/movable/gone, direction) - SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction) - -///Return atom temperature -/atom/proc/return_temperature() - return - -/** - *Tool behavior procedure. Redirects to tool-specific procs by default. - * - * You can override it to catch all tool interactions, for use in complex deconstruction procs. - * - * Must return parent proc ..() in the end if overridden - */ -/atom/proc/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - var/act_result - var/signal_result - - var/is_left_clicking = !is_right_clicking - - if(is_left_clicking) // Left click first for sensibility - var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - if(processing_recipes.len) - process_recipes(user, tool, processing_recipes) - if(QDELETED(tool)) - return TRUE - else - signal_result = SEND_SIGNAL(src, COMSIG_ATOM_SECONDARY_TOOL_ACT(tool_type), user, tool) - if(signal_result & COMPONENT_BLOCK_TOOL_ATTACK) // The COMSIG_ATOM_TOOL_ACT signal is blocking the act - return TOOL_ACT_SIGNAL_BLOCKING - - switch(tool_type) - if(TOOL_CROWBAR) - act_result = is_left_clicking ? crowbar_act(user, tool) : crowbar_act_secondary(user, tool) - if(TOOL_MULTITOOL) - act_result = is_left_clicking ? multitool_act(user, tool) : multitool_act_secondary(user, tool) - if(TOOL_SCREWDRIVER) - act_result = is_left_clicking ? screwdriver_act(user, tool) : screwdriver_act_secondary(user, tool) - if(TOOL_WRENCH) - act_result = is_left_clicking ? wrench_act(user, tool) : wrench_act_secondary(user, tool) - if(TOOL_WIRECUTTER) - act_result = is_left_clicking ? wirecutter_act(user, tool) : wirecutter_act_secondary(user, tool) - if(TOOL_WELDER) - act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool) - if(TOOL_ANALYZER) - act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool) - if(!act_result) - return - - // A tooltype_act has completed successfully - if(is_left_clicking) - log_tool("[key_name(user)] used [tool] on [src] at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_PRIMARY(tool_type), src) - else - log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") - SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) - return TOOL_ACT_TOOLTYPE_SUCCESS - - -/atom/proc/process_recipes(mob/living/user, obj/item/processed_object, list/processing_recipes) - //Only one recipe? use the first - if(processing_recipes.len == 1) - StartProcessingAtom(user, processed_object, processing_recipes[1]) - return - //Otherwise, select one with a radial - ShowProcessingGui(user, processed_object, processing_recipes) - -///Creates the radial and processes the selected option -/atom/proc/ShowProcessingGui(mob/living/user, obj/item/processed_object, list/possible_options) - var/list/choices_to_options = list() //Dict of object name | dict of object processing settings - var/list/choices = list() - - for(var/list/current_option as anything in possible_options) - var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT] - choices_to_options[initial(current_option_type.name)] = current_option - var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state)) - choices += list("[initial(current_option_type.name)]" = option_image) - - var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE) - if(!pick) - return - - StartProcessingAtom(user, processed_object, choices_to_options[pick]) - - -/atom/proc/StartProcessingAtom(mob/living/user, obj/item/process_item, list/chosen_option) - var/processing_time = chosen_option[TOOL_PROCESSING_TIME] - to_chat(user, span_notice("You start working on [src].")) - if(process_item.use_tool(src, user, processing_time, volume=50)) - var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] - var/list/atom/created_atoms = list() - var/amount_to_create = chosen_option[TOOL_PROCESSING_AMOUNT] - for(var/i = 1 to amount_to_create) - var/atom/created_atom = new atom_to_create(drop_location()) - if(custom_materials) - created_atom.set_custom_materials(custom_materials, 1 / amount_to_create) - created_atom.pixel_x = pixel_x - created_atom.pixel_y = pixel_y - if(i > 1) - created_atom.pixel_x += rand(-8,8) - created_atom.pixel_y += rand(-8,8) - created_atom.OnCreatedFromProcessing(user, process_item, chosen_option, src) - created_atoms.Add(created_atom) - to_chat(user, span_notice("You manage to create [amount_to_create] [initial(atom_to_create.gender) == PLURAL ? "[initial(atom_to_create.name)]" : "[initial(atom_to_create.name)][plural_s(initial(atom_to_create.name))]"] from [src].")) - SEND_SIGNAL(src, COMSIG_ATOM_PROCESSED, user, process_item, created_atoms) - UsedforProcessing(user, process_item, chosen_option) - return - -/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option) - qdel(src) - return - -/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) - SHOULD_CALL_PARENT(TRUE) - - SEND_SIGNAL(src, COMSIG_ATOM_CREATEDBY_PROCESSING, original_atom, chosen_option) - if(user.mind) - ADD_TRAIT(src, TRAIT_FOOD_CHEF_MADE, REF(user.mind)) - -//! Tool-specific behavior procs. -/// - -/// Called on an object when a tool with crowbar capabilities is used to left click an object -/atom/proc/crowbar_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with crowbar capabilities is used to right click an object -/atom/proc/crowbar_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with multitool capabilities is used to left click an object -/atom/proc/multitool_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with multitool capabilities is used to right click an object -/atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) - return - -///Check if an item supports a data buffer (is a multitool) -/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE) - if(!istype(multitool, /obj/item/multitool)) - if(user && !silent) - to_chat(user, span_warning("[multitool] has no data buffer!")) - return FALSE - return TRUE - -/// Called on an object when a tool with screwdriver capabilities is used to left click an object -/atom/proc/screwdriver_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with screwdriver capabilities is used to right click an object -/atom/proc/screwdriver_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to left click an object -/atom/proc/wrench_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wrench capabilities is used to right click an object -/atom/proc/wrench_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wirecutter capabilities is used to left click an object -/atom/proc/wirecutter_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with wirecutter capabilities is used to right click an object -/atom/proc/wirecutter_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with welder capabilities is used to left click an object -/atom/proc/welder_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with welder capabilities is used to right click an object -/atom/proc/welder_act_secondary(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with analyzer capabilities is used to left click an object -/atom/proc/analyzer_act(mob/living/user, obj/item/tool) - return - -/// Called on an object when a tool with analyzer capabilities is used to right click an object -/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) - return - -///Connect this atom to a shuttle -/atom/proc/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) - return - -/atom/proc/intercept_zImpact(list/falling_movables, levels = 1) - SHOULD_CALL_PARENT(TRUE) - . |= SEND_SIGNAL(src, COMSIG_ATOM_INTERCEPT_Z_FALL, falling_movables, levels) - -/// Sets the custom materials for an item. -/atom/proc/set_custom_materials(list/materials, multiplier = 1) - if(custom_materials && material_flags & MATERIAL_EFFECTS) //Only runs if custom materials existed at first and affected src. - for(var/current_material in custom_materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_removed(src, custom_materials[current_material] * material_modifier, material_flags) //Remove the current materials - - if(!length(materials)) - custom_materials = null - return - - if(material_flags & MATERIAL_EFFECTS) - for(var/current_material in materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_applied(src, materials[current_material] * multiplier * material_modifier, material_flags) - - custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) - -/** - * Returns the material composition of the atom. - * - * Used when recycling items, specifically to turn alloys back into their component mats. - * - * Exists because I'd need to add a way to un-alloy alloys or otherwise deal - * with people converting the entire stations material supply into alloys. - * - * Arguments: - * - flags: A set of flags determining how exactly the materials are broken down. - */ -/atom/proc/get_material_composition(breakdown_flags=NONE) - . = list() - if(!(breakdown_flags & BREAKDOWN_INCLUDE_ALCHEMY) && HAS_TRAIT(src, TRAIT_MAT_TRANSMUTED)) - return - - var/list/cached_materials = custom_materials - for(var/mat in cached_materials) - var/datum/material/material = GET_MATERIAL_REF(mat) - var/list/material_comp = material.return_composition(cached_materials[mat], breakdown_flags) - for(var/comp_mat in material_comp) - .[comp_mat] += material_comp[comp_mat] - -/** - * Fetches a list of all of the materials this object has of the desired type. Returns null if there is no valid materials of the type - * - * Arguments: - * - [required_material][/datum/material]: The type of material we are checking for - * - mat_amount: The minimum required amount of material - */ -/atom/proc/has_material_type(datum/material/required_material, mat_amount = 0) - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/materials_of_type - for(var/current_material in cached_materials) - if(cached_materials[current_material] < mat_amount) - continue - var/datum/material/material = GET_MATERIAL_REF(current_material) - if(!istype(material, required_material)) - continue - LAZYSET(materials_of_type, material, cached_materials[current_material]) - - return materials_of_type - -/** - * Fetches a list of all of the materials this object has with the desired material category. - * - * Arguments: - * - category: The category to check for - * - any_flags: Any bitflags that must be present for the category - * - all_flags: All bitflags that must be present for the category - * - no_flags: Any bitflags that must not be present for the category - * - mat_amount: The minimum amount of materials that must be present - */ -/atom/proc/has_material_category(category, any_flags=0, all_flags=0, no_flags=0, mat_amount=0) - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/materials_of_category - for(var/current_material in cached_materials) - if(cached_materials[current_material] < mat_amount) - continue - var/datum/material/material = GET_MATERIAL_REF(current_material) - var/category_flags = material?.categories[category] - if(isnull(category_flags)) - continue - if(any_flags && !(category_flags & any_flags)) - continue - if(all_flags && (all_flags != (category_flags & all_flags))) - continue - if(no_flags && (category_flags & no_flags)) - continue - LAZYSET(materials_of_category, material, cached_materials[current_material]) - return materials_of_category - -/** - * Gets the most common material in the object. - */ -/atom/proc/get_master_material() - var/list/cached_materials = custom_materials - if(!length(cached_materials)) - return null - - var/most_common_material = null - var/max_amount = 0 - for(var/material in cached_materials) - if(cached_materials[material] > max_amount) - most_common_material = material - max_amount = cached_materials[material] - - if(most_common_material) - return GET_MATERIAL_REF(most_common_material) - -/** - * Gets the total amount of materials in this atom. - */ -/atom/proc/get_custom_material_amount() - return isnull(custom_materials) ? 0 : counterlist_sum(custom_materials) - - -///Setter for the `density` variable to append behavior related to its changing. -/atom/proc/set_density(new_value) - SHOULD_CALL_PARENT(TRUE) - if(density == new_value) - return - . = density - density = new_value - - -///Setter for the `base_pixel_x` variable to append behavior related to its changing. -/atom/proc/set_base_pixel_x(new_value) - if(base_pixel_x == new_value) - return - . = base_pixel_x - base_pixel_x = new_value - - pixel_x = pixel_x + base_pixel_x - . - - -///Setter for the `base_pixel_y` variable to append behavior related to its changing. -/atom/proc/set_base_pixel_y(new_value) - if(base_pixel_y == new_value) - return - . = base_pixel_y - base_pixel_y = new_value - - pixel_y = pixel_y + base_pixel_y - . - -// Not a valid operation, turfs and movables handle block differently -/atom/proc/set_explosion_block(explosion_block) - return - -/** - * Returns true if this atom has gravity for the passed in turf - * - * Sends signals [COMSIG_ATOM_HAS_GRAVITY] and [COMSIG_TURF_HAS_GRAVITY], both can force gravity with - * the forced gravity var. - * - * micro-optimized to hell because this proc is very hot, being called several times per movement every movement. - * - * HEY JACKASS, LISTEN - * IF YOU ADD SOMETHING TO THIS PROC, MAKE SURE /mob/living ACCOUNTS FOR IT - * Living mobs treat gravity in an event based manner. We've decomposed this proc into different checks - * for them to use. If you add more to it, make sure you do that, or things will behave strangely - * - * Gravity situations: - * * No gravity if you're not in a turf - * * No gravity if this atom is in is a space turf - * * Gravity if the area it's in always has gravity - * * Gravity if there's a gravity generator on the z level - * * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY - * * otherwise no gravity - */ -/atom/proc/has_gravity(turf/gravity_turf) - if(!isturf(gravity_turf)) - gravity_turf = get_turf(src) - - if(!gravity_turf)//no gravity in nullspace - return FALSE - - var/list/forced_gravity = list() - SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, gravity_turf, forced_gravity) - SEND_SIGNAL(gravity_turf, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity) - if(length(forced_gravity)) - var/positive_grav = max(forced_gravity) - var/negative_grav = min(min(forced_gravity), 0) //negative grav needs to be below or equal to 0 - - //our gravity is sum of the most massive positive and negative numbers returned by the signal - //so that adding two forced_gravity elements with an effect size of 1 each doesnt add to 2 gravity - //but negative force gravity effects can cancel out positive ones - - return (positive_grav + negative_grav) - - var/area/turf_area = gravity_turf.loc - - return !gravity_turf.force_no_gravity && (SSmapping.gravity_by_z_level[gravity_turf.z] || turf_area.has_gravity) - -/** - * Causes effects when the atom gets hit by a rust effect from heretics - * - * Override this if you want custom behaviour in whatever gets hit by the rust - */ -/atom/proc/rust_heretic_act() - return - -/** - * Used to set something as 'open' if it's being used as a supplypod - * - * Override this if you want an atom to be usable as a supplypod. - */ -/atom/proc/setOpened() - return - -/** - * Used to set something as 'closed' if it's being used as a supplypod - * - * Override this if you want an atom to be usable as a supplypod. - */ -/atom/proc/setClosed() - return - - -///Called when something resists while this atom is its loc -/atom/proc/container_resist_act(mob/living/user) - -/** - * Used to attempt to charge an object with a payment component. - * - * Use this if an atom needs to attempt to charge another atom. - */ -/atom/proc/attempt_charge(atom/sender, atom/target, extra_fees = 0) - return SEND_SIGNAL(sender, COMSIG_OBJ_ATTEMPT_CHARGE, target, extra_fees) - -///Passes Stat Browser Panel clicks to the game and calls client click on an atom -/atom/Topic(href, list/href_list) - . = ..() - if(!usr?.client) - return - var/client/usr_client = usr.client - var/list/paramslist = list() - - if(href_list["statpanel_item_click"]) - switch(href_list["statpanel_item_click"]) - if("left") - paramslist[LEFT_CLICK] = "1" - if("right") - paramslist[RIGHT_CLICK] = "1" - if("middle") - paramslist[MIDDLE_CLICK] = "1" - else - return - - if(href_list["statpanel_item_shiftclick"]) - paramslist[SHIFT_CLICK] = "1" - if(href_list["statpanel_item_ctrlclick"]) - paramslist[CTRL_CLICK] = "1" - if(href_list["statpanel_item_altclick"]) - paramslist[ALT_CLICK] = "1" - - var/mouseparams = list2params(paramslist) - usr_client.Click(src, loc, null, mouseparams) - return TRUE - -/** - * Recursive getter method to return a list of all ghosts orbitting this atom - * - * This will work fine without manually passing arguments. - * * processed - The list of atoms we've already convered - * * source - Is this the atom for who we're counting up all the orbiters? - * * ignored_stealthed_admins - If TRUE, don't count admins who are stealthmoded and orbiting this - */ -/atom/proc/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) - var/list/output = list() - if(!processed) - processed = list() - else if(src in processed) - return output - - if(!source) - output += src - - processed += src - for(var/atom/atom_orbiter as anything in orbiters?.orbiter_list) - output += atom_orbiter.get_all_orbiters(processed, source = FALSE) - return output - -/mob/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) - if(!source && ignore_stealthed_admins && client?.holder?.fakekey) - return list() - return ..() - -/atom/MouseEntered(location, control, params) - SSmouse_entered.hovers[usr.client] = src - -/// Fired whenever this atom is the most recent to be hovered over in the tick. -/// Preferred over MouseEntered if you do not need information such as the position of the mouse. -/// Especially because this is deferred over a tick, do not trust that `client` is not null. -/atom/proc/on_mouse_enter(client/client) - SHOULD_NOT_SLEEP(TRUE) - - var/mob/user = client?.mob - if (isnull(user)) - return - - ///SKYRAT EDIT ADDITION BEGIN - // Face directions on combat mode. No procs, no typechecks, just a var for speed - if(user.face_mouse) - user.face_atom(src) - ///SKYRAT EDIT ADDITION END - - // Screentips - var/datum/hud/active_hud = user.hud_used - if(!active_hud) - return - - var/screentips_enabled = active_hud.screentips_enabled - if(screentips_enabled == SCREENTIP_PREFERENCE_DISABLED || flags_1 & NO_SCREENTIPS_1) - active_hud.screentip_text.maptext = "" - return - - active_hud.screentip_text.maptext_y = 10 // 10px lines us up with the action buttons top left corner - var/lmb_rmb_line = "" - var/ctrl_lmb_ctrl_rmb_line = "" - var/alt_lmb_alt_rmb_line = "" - var/shift_lmb_ctrl_shift_lmb_line = "" - var/extra_lines = 0 - var/extra_context = "" - - if (isliving(user) || isovermind(user) || isaicamera(user)) - var/obj/item/held_item = user.get_active_held_item() - - if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS) - var/list/context = list() - - var/contextual_screentip_returns = \ - SEND_SIGNAL(src, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, context, held_item, user) \ - | (held_item && SEND_SIGNAL(held_item, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, context, src, user)) - - if (contextual_screentip_returns & CONTEXTUAL_SCREENTIP_SET) - var/screentip_images = active_hud.screentip_images - // LMB and RMB on one line... - var/lmb_text = build_context(context, SCREENTIP_CONTEXT_LMB, screentip_images) - var/rmb_text = build_context(context, SCREENTIP_CONTEXT_RMB, screentip_images) - - if (lmb_text != "") - lmb_rmb_line = lmb_text - if (rmb_text != "") - lmb_rmb_line += " | [rmb_text]" - else if (rmb_text != "") - lmb_rmb_line = rmb_text - - // Ctrl-LMB, Ctrl-RMB on one line... - if (lmb_rmb_line != "") - lmb_rmb_line += "
" - extra_lines++ - if (SCREENTIP_CONTEXT_CTRL_LMB in context) - ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_LMB, screentip_images) - - if (SCREENTIP_CONTEXT_CTRL_RMB in context) - if (ctrl_lmb_ctrl_rmb_line != "") - ctrl_lmb_ctrl_rmb_line += " | " - ctrl_lmb_ctrl_rmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_RMB, screentip_images) - - // Alt-LMB, Alt-RMB on one line... - if (ctrl_lmb_ctrl_rmb_line != "") - ctrl_lmb_ctrl_rmb_line += "
" - extra_lines++ - if (SCREENTIP_CONTEXT_ALT_LMB in context) - alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_LMB, screentip_images) - if (SCREENTIP_CONTEXT_ALT_RMB in context) - if (alt_lmb_alt_rmb_line != "") - alt_lmb_alt_rmb_line += " | " - alt_lmb_alt_rmb_line += build_context(context, SCREENTIP_CONTEXT_ALT_RMB, screentip_images) - - // Shift-LMB, Ctrl-Shift-LMB on one line... - if (alt_lmb_alt_rmb_line != "") - alt_lmb_alt_rmb_line += "
" - extra_lines++ - if (SCREENTIP_CONTEXT_SHIFT_LMB in context) - shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_SHIFT_LMB, screentip_images) - if (SCREENTIP_CONTEXT_CTRL_SHIFT_LMB in context) - if (shift_lmb_ctrl_shift_lmb_line != "") - shift_lmb_ctrl_shift_lmb_line += " | " - shift_lmb_ctrl_shift_lmb_line += build_context(context, SCREENTIP_CONTEXT_CTRL_SHIFT_LMB, screentip_images) - - if (shift_lmb_ctrl_shift_lmb_line != "") - extra_lines++ - - if(extra_lines) - extra_context = "
[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]" - //first extra line pushes atom name line up 11px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place - active_hud.screentip_text.maptext_y = -1 + (extra_lines - 1) * -9 - - if (screentips_enabled == SCREENTIP_PREFERENCE_CONTEXT_ONLY && extra_context == "") - active_hud.screentip_text.maptext = "" - else - //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this - active_hud.screentip_text.maptext = "[name][extra_context]" - -/// Gets a merger datum representing the connected blob of objects in the allowed_types argument -/atom/proc/GetMergeGroup(id, list/allowed_types) - RETURN_TYPE(/datum/merger) - var/datum/merger/candidate - if(mergers) - candidate = mergers[id] - if(!candidate) - new /datum/merger(id, allowed_types, src) - candidate = mergers[id] - return candidate - -/** - * This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system. - * - * Trying to generate one long path across the station will call this proc on every single object on every single tile that we're seeing if we can move through, likely - * multiple times per tile since we're likely checking if we can access said tile from multiple directions, so keep these as lightweight as possible. - * - * For turfs this will only be used if pathing_pass_method is TURF_PATHING_PASS_PROC - * - * Arguments: - * * to_dir - What direction we're trying to move in, relevant for things like directional windows that only block movement in certain directions - * * pass_info - Datum that stores info about the thing that's trying to pass us - * - * IMPORTANT NOTE: /turf/proc/LinkBlockedWithAccess assumes that overrides of CanAStarPass will always return true if density is FALSE - * If this is NOT you, ensure you edit your can_astar_pass variable. Check __DEFINES/path.dm - **/ -/atom/proc/CanAStarPass(to_dir, datum/can_pass_info/pass_info) - if(pass_info.pass_flags & pass_flags_self) - return TRUE - . = !density - -/// Makes this atom look like a "hologram" -/// So transparent, blue, with a scanline and an emissive glow -/// This is acomplished using a combination of filters and render steps/overlays -/// The degree of the opacity is optional, based off the opacity arg (0 -> 1) -/atom/proc/makeHologram(opacity = 0.5) - // First, we'll make things blue (roughly) and sorta transparent - add_filter("HOLO: Color and Transparent", 1, color_matrix_filter(rgb(125,180,225, opacity * 255))) - // Now we're gonna do a scanline effect - // Gonna take this atom and give it a render target, then use it as a source for a filter - // (We use an atom because it seems as if setting render_target on an MA is just invalid. I hate this engine) - var/atom/movable/scanline = new(null) - scanline.icon = 'icons/effects/effects.dmi' - scanline.icon_state = "scanline" - scanline.appearance_flags |= RESET_TRANSFORM - // * so it doesn't render - var/static/uid_scan = 0 - scanline.render_target = "*HoloScanline [uid_scan]" - uid_scan++ - // Now we add it as a filter, and overlay the appearance so the render source is always around - add_filter("HOLO: Scanline", 2, alpha_mask_filter(render_source = scanline.render_target)) - add_overlay(scanline) - qdel(scanline) - // Annd let's make the sucker emissive, so it glows in the dark - if(!render_target) - var/static/uid = 0 - render_target = "HOLOGRAM [uid]" - uid++ - // I'm using static here to reduce the overhead, it does mean we need to do plane stuff manually tho - var/static/atom/movable/render_step/emissive/glow = new(null) - glow.render_source = render_target - SET_PLANE_EXPLICIT(glow, initial(glow.plane), src) - // We're creating a render step that copies ourselves, and draws it to the emissive plane - // Then we overlay it, and release "ownership" back to this proc, since we get to keep the appearance it generates - // We can't just use an MA from the start cause render_source setting starts going fuckey REALLY quick - var/mutable_appearance/glow_appearance = new(glow) - add_overlay(glow_appearance) - LAZYADD(update_overlays_on_z, glow_appearance) - -/** - * Proc called when you want the atom to spin around the center of its icon (or where it would be if its transform var is translated) - * By default, it makes the atom spin forever and ever at a speed of 60 rpm. - * - * Arguments: - * * speed: how much it takes for the atom to complete one 360° rotation - * * loops: how many times do we want the atom to rotate - * * clockwise: whether the atom ought to spin clockwise or counter-clockwise - * * segments: in how many animate calls the rotation is split. Probably unnecessary, but you shouldn't set it lower than 3 anyway. - * * parallel: whether the animation calls have the ANIMATION_PARALLEL flag, necessary for it to run alongside concurrent animations. - */ -/atom/proc/SpinAnimation(speed = 1 SECONDS, loops = -1, clockwise = TRUE, segments = 3, parallel = TRUE) - if(!segments) - return - var/segment = 360/segments - if(!clockwise) - segment = -segment - SEND_SIGNAL(src, COMSIG_ATOM_SPIN_ANIMATION, speed, loops, segments, segment) - do_spin_animation(speed, loops, segments, segment, parallel) - -#define INVISIBILITY_VALUE 1 -#define INVISIBILITY_PRIORITY 2 - -/atom/proc/RecalculateInvisibility() - PRIVATE_PROC(TRUE) - - if(!invisibility_sources) - current_invisibility_priority = -INFINITY - invisibility = initial(invisibility) - return - - var/highest_priority - var/list/highest_priority_invisibility_data - for(var/entry in invisibility_sources) - var/list/priority_data - if(islist(entry)) - priority_data = entry - else - priority_data = invisibility_sources[entry] - - var/priority = priority_data[INVISIBILITY_PRIORITY] - if(highest_priority > priority) // In the case of equal priorities, we use the last thing in the list so that more recent changes apply first - continue - - highest_priority = priority - highest_priority_invisibility_data = priority_data - - current_invisibility_priority = highest_priority - invisibility = highest_priority_invisibility_data[INVISIBILITY_VALUE] - -/** - * Sets invisibility according to priority. - * If you want to be able to undo the value you set back to what it would be otherwise, - * you should provide an id here and remove it using RemoveInvisibility(id) - */ -/atom/proc/SetInvisibility(desired_value, id, priority=0) - if(!invisibility_sources) - invisibility_sources = list() - - if(id) - invisibility_sources[id] = list(desired_value, priority) - else - invisibility_sources += list(list(desired_value, priority)) - - if(current_invisibility_priority > priority) - return - - RecalculateInvisibility() - -/// Removes the specified invisibility source from the tracker -/atom/proc/RemoveInvisibility(source_id) - if(!invisibility_sources) - return - - var/list/priority_data = invisibility_sources[source_id] - invisibility_sources -= source_id - - if(length(invisibility_sources) == 0) - invisibility_sources = null - - if(current_invisibility_priority > priority_data[INVISIBILITY_PRIORITY]) - return - - RecalculateInvisibility() - -#undef INVISIBILITY_VALUE -#undef INVISIBILITY_PRIORITY diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index ef859db7fdd..01d4149369f 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) if(length(SScommunications.command_report_footnotes)) . += generate_report_footnote() - print_command_report(., "Central Command Status Summary", announce=FALSE) + print_command_report(., "[command_name()] Status Summary", announce=FALSE) if(greenshift) priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound()) else diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 73580f7200d..4f04c2c1aa4 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -61,9 +61,6 @@ if (isnull(creature.client)) // Are they connected? trimmed_list.Remove(creature) continue - if (isnull(creature.mind)) - trimmed_list.Remove(creature) - continue //SKYRAT EDIT ADDITION if(is_banned_from(creature.client.ckey, BAN_ANTAGONIST)) trimmed_list.Remove(creature) @@ -81,6 +78,10 @@ if (is_banned_from(creature.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE))) trimmed_list.Remove(creature) continue + + if (isnull(creature.mind)) + continue + if (restrict_ghost_roles && (creature.mind.assigned_role.title in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role? trimmed_list.Remove(creature) continue @@ -184,7 +185,10 @@ if(makeBody) new_character = generate_ruleset_body(applicant) finish_setup(new_character, i) - notify_ghosts("[applicant.name] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!") + notify_ghosts( + "[applicant.name] has been picked for the ruleset [name]!", + source = new_character, + ) /datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant) var/mob/living/carbon/human/new_character = make_body(applicant) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 8319e51b73d..39dcb81920a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -129,7 +129,7 @@ for(var/dead_dudes_job in reopened_jobs) reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]" - var/suicide_command_report = "Central Command Human Resources Board
\ + var/suicide_command_report = "[command_name()] Human Resources Board
\ Notice of Personnel Change

\ To personnel management staff aboard [station_name()]:

\ Our medical staff have detected a series of anomalies in the vital sensors \ diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index c9680744fcb..90cafd9180a 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -7,6 +7,7 @@ base_icon_state = "pdapainter" density = TRUE max_integrity = 200 + integrity_failure = 0.5 /// Current ID card inserted into the machine. var/obj/item/card/id/stored_id_card = null /// Current PDA inserted into the machine. @@ -160,9 +161,6 @@ eject_id_card(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/pdapainter/deconstruct(disassembled = TRUE) - atom_break() - /** * Insert a PDA into the machine. * diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index e72c2da00bb..b78b3263e98 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -131,7 +131,7 @@ var/subsystem_type = /datum/controller/subsystem/machines var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created - var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE + var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON var/fair_market_price = 69 var/market_verb = "Customer" var/payment_department = ACCOUNT_ENG @@ -512,19 +512,24 @@ return TRUE ///Get a valid powered area to reference for power use, mainly for wall-mounted machinery that isn't always mapped directly in a powered location. -/obj/machinery/proc/get_room_area(area/machine_room) +/obj/machinery/proc/get_room_area() var/area/machine_area = get_area(src) - if(!machine_area.always_unpowered) ///check our loc first to see if its a powered area - machine_room = machine_area - return machine_room - var/turf/mounted_wall = get_step(src,dir) - if (mounted_wall && istype(mounted_wall, /turf/closed)) + if(isnull(machine_area)) + return null // ?? + + // check our own loc first to see if its a powered area + if(!machine_area.always_unpowered) + return machine_area + + // loc area wasn't good, checking adjacent wall for a good area to use + var/turf/mounted_wall = get_step(src, dir) + if(isclosedturf(mounted_wall)) var/area/wall_area = get_area(mounted_wall) - if(!wall_area.always_unpowered) //loc area wasn't good, checking adjacent wall for a good area to use - machine_room = wall_area - return machine_room - machine_room = machine_area ///couldn't find a proper powered area on loc or adjacent wall, defaulting back to loc and blaming mappers - return machine_room + if(!wall_area.always_unpowered) + return wall_area + + // couldn't find a proper powered area on loc or adjacent wall, defaulting back to loc and blaming mappers + return machine_area ///makes this machine draw power from its area according to which use_power mode it is set to /obj/machinery/proc/update_current_power_usage() diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index 764bd99b4ff..64b104b4007 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -1,10 +1,7 @@ /obj/machinery/barsign // All Signs are 64 by 32 pixels, they take two tiles name = "bar sign" desc = "A bar sign which has not been initialized, somehow. Complain at a coder!" - //SKYRAT EDIT CHANGE BEGIN - BARSIGNS - //icon = 'icons/obj/machines/barsigns.dmi' - icon = 'modular_skyrat/modules/barsigns/icons/barsigns.dmi' - //SKYRAT EDIT CHANGE END + icon = 'icons/obj/machines/barsigns.dmi' icon_state = "empty" req_access = list(ACCESS_BAR) max_integrity = 500 @@ -40,8 +37,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) update_appearance() /obj/machinery/barsign/update_icon_state() - if(!(machine_stat & (NOPOWER|BROKEN)) && chosen_sign && chosen_sign.icon) - icon_state = chosen_sign.icon + if(!(machine_stat & BROKEN) && (!(machine_stat & NOPOWER) || machine_stat & EMPED) && chosen_sign && chosen_sign.icon_state) + icon_state = chosen_sign.icon_state else icon_state = "empty" @@ -63,11 +60,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/update_overlays() . = ..() - if(machine_stat & (NOPOWER|BROKEN)) + if(((machine_stat & NOPOWER) && !(machine_stat & EMPED)) || (machine_stat & BROKEN)) return if(chosen_sign && chosen_sign.light_mask) - . += emissive_appearance(icon, "[chosen_sign.icon]-light-mask", src) + . += emissive_appearance(icon, "[chosen_sign.icon_state]-light-mask", src) /obj/machinery/barsign/update_appearance(updates=ALL) . = ..() @@ -205,7 +202,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /// User-visible name of the sign. var/name /// Icon state associated with this sign - var/icon + var/icon_state /// Description shown in the sign's examine text. var/desc /// Hidden from list of selectable options. @@ -225,172 +222,208 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /datum/barsign/maltesefalcon name = "Maltese Falcon" - icon = "maltesefalcon" + icon_state = "maltesefalcon" desc = "The Maltese Falcon, Space Bar and Grill." neon_color = "#5E8EAC" /datum/barsign/thebark name = "The Bark" - icon = "thebark" + icon_state = "thebark" desc = "Ian's bar of choice." neon_color = "#f7a604" /datum/barsign/harmbaton name = "The Harmbaton" - icon = "theharmbaton" + icon_state = "theharmbaton" desc = "A great dining experience for both security members and assistants." neon_color = "#ff7a4d" /datum/barsign/thesingulo name = "The Singulo" - icon = "thesingulo" + icon_state = "thesingulo" desc = "Where people go that'd rather not be called by their name." neon_color = "#E600DB" /datum/barsign/thedrunkcarp name = "The Drunk Carp" - icon = "thedrunkcarp" + icon_state = "thedrunkcarp" desc = "Don't drink and swim." neon_color = "#a82196" /datum/barsign/scotchservinwill name = "Scotch Servin Willy's" - icon = "scotchservinwill" + icon_state = "scotchservinwill" desc = "Willy sure moved up in the world from clown to bartender." neon_color = "#fee4bf" /datum/barsign/officerbeersky name = "Officer Beersky's" - icon = "officerbeersky" + icon_state = "officerbeersky" desc = "Man eat a dong, these drinks are great." neon_color = "#16C76B" /datum/barsign/thecavern name = "The Cavern" - icon = "thecavern" + icon_state = "thecavern" desc = "Fine drinks while listening to some fine tunes." neon_color = "#0fe500" /datum/barsign/theouterspess name = "The Outer Spess" - icon = "theouterspess" + icon_state = "theouterspess" desc = "This bar isn't actually located in outer space." neon_color = "#30f3cc" /datum/barsign/slipperyshots name = "Slippery Shots" - icon = "slipperyshots" + icon_state = "slipperyshots" desc = "Slippery slope to drunkeness with our shots!" neon_color = "#70DF00" /datum/barsign/thegreytide name = "The Grey Tide" - icon = "thegreytide" + icon_state = "thegreytide" desc = "Abandon your toolboxing ways and enjoy a lazy beer!" neon_color = "#00F4D6" /datum/barsign/honkednloaded name = "Honked 'n' Loaded" - icon = "honkednloaded" + icon_state = "honkednloaded" desc = "Honk." neon_color = "#FF998A" +/datum/barsign/le_cafe_silencieux + name = "Le Café Silencieux" + icon_state = "le_cafe_silencieux" + desc = "..." + neon_color = "#ffffff" + /datum/barsign/thenest name = "The Nest" - icon = "thenest" + icon_state = "thenest" desc = "A good place to retire for a drink after a long night of crime fighting." neon_color = "#4d6796" /datum/barsign/thecoderbus name = "The Coderbus" - icon = "thecoderbus" + icon_state = "thecoderbus" desc = "A very controversial bar known for its wide variety of constantly-changing drinks." neon_color = "#ffffff" /datum/barsign/theadminbus name = "The Adminbus" - icon = "theadminbus" + icon_state = "theadminbus" desc = "An establishment visited mainly by space-judges. It isn't bombed nearly as much as court hearings." neon_color = "#ffffff" /datum/barsign/oldcockinn name = "The Old Cock Inn" - icon = "oldcockinn" + icon_state = "oldcockinn" desc = "Something about this sign fills you with despair." neon_color = "#a4352b" /datum/barsign/thewretchedhive name = "The Wretched Hive" - icon = "thewretchedhive" + icon_state = "thewretchedhive" desc = "Legally obligated to instruct you to check your drinks for acid before consumption." neon_color = "#26b000" /datum/barsign/robustacafe name = "The Robusta Cafe" - icon = "robustacafe" + icon_state = "robustacafe" desc = "Holder of the 'Most Lethal Barfights' record 5 years uncontested." neon_color = "#c45f7a" /datum/barsign/emergencyrumparty name = "The Emergency Rum Party" - icon = "emergencyrumparty" + icon_state = "emergencyrumparty" desc = "Recently relicensed after a long closure." neon_color = "#f90011" /datum/barsign/combocafe name = "The Combo Cafe" - icon = "combocafe" + icon_state = "combocafe" desc = "Renowned system-wide for their utterly uncreative drink combinations." neon_color = "#33ca40" /datum/barsign/vladssaladbar name = "Vlad's Salad Bar" - icon = "vladssaladbar" + icon_state = "vladssaladbar" desc = "Under new management. Vlad was always a bit too trigger happy with that shotgun." neon_color = "#306900" /datum/barsign/theshaken name = "The Shaken" - icon = "theshaken" + icon_state = "theshaken" desc = "This establishment does not serve stirred drinks." neon_color = "#dcd884" /datum/barsign/thealenath name = "The Ale' Nath" - icon = "thealenath" + icon_state = "thealenath" desc = "All right, buddy. I think you've had EI NATH. Time to get a cab." neon_color = "#ed0000" /datum/barsign/thealohasnackbar name = "The Aloha Snackbar" - icon = "alohasnackbar" + icon_state = "alohasnackbar" desc = "A tasteful, inoffensive tiki bar sign." neon_color = "" /datum/barsign/thenet name = "The Net" - icon = "thenet" + icon_state = "thenet" desc = "You just seem to get caught up in it for hours." neon_color = "#0e8a00" /datum/barsign/maidcafe name = "Maid Cafe" - icon = "maidcafe" + icon_state = "maidcafe" desc = "Welcome back, master!" neon_color = "#ff0051" /datum/barsign/the_lightbulb name = "The Lightbulb" - icon = "the_lightbulb" + icon_state = "the_lightbulb" desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms." neon_color = "#faff82" /datum/barsign/goose name = "The Loose Goose" - icon = "goose" + icon_state = "goose" desc = "Drink till you puke and/or break the laws of reality!" neon_color = "#00cc33" +/datum/barsign/maltroach + name = "Maltroach" + icon_state = "maltroach" + desc = "Mothroaches politely greet you into the bar, or are they greeting eachother?" + neon_color = "#649e8a" + +/datum/barsign/rock_bottom + name = "Rock Bottom" + icon_state = "rock-bottom" + desc = "When it feels like you're stuck in a pit, might as well have a drink." + neon_color = "#aa2811" + +/datum/barsign/orangejuice + name = "Oranges' Juicery" + icon_state = "orangejuice" + desc = "For those who wish to be optimally tactful to the non-alcoholic population." + neon_color = COLOR_ORANGE + +/datum/barsign/tearoom + name = "Little Treats Tea Room" + icon_state = "little_treats" + desc = "A delightfully relaxing tearoom for all the fancy lads in the cosmos." + neon_color = COLOR_LIGHT_ORANGE + +/datum/barsign/assembly_line + name = "The Assembly Line" + icon_state = "the-assembly-line" + desc = "Where every drink is masterfully crafted with industrial efficiency!" + neon_color = "#ffffff" + // Hidden signs list below this point /datum/barsign/hiddensigns @@ -398,19 +431,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /datum/barsign/hiddensigns/empbarsign name = "EMP'd" - icon = "empbarsign" + icon_state = "empbarsign" desc = "Something has gone very wrong." rename_area = FALSE /datum/barsign/hiddensigns/syndibarsign name = "Syndi Cat" - icon = "syndibarsign" + icon_state = "syndibarsign" desc = "Syndicate or die." neon_color = "#ff0000" /datum/barsign/hiddensigns/signoff name = "Off" - icon = "empty" + icon_state = "empty" desc = "This sign doesn't seem to be on." rename_area = FALSE light_mask = FALSE diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 042f442fa33..246c4b0e4a8 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -6,7 +6,7 @@ max_integrity = 200 integrity_failure = 0.5 armor_type = /datum/armor/machinery_computer - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY /// How bright we are when turned on. var/brightness_on = 1 /// Icon_state of the keyboard overlay. diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm index 178cef2fd87..3da52763449 100644 --- a/code/game/machinery/computer/arcade/arcade.dm +++ b/code/game/machinery/computer/arcade/arcade.dm @@ -79,7 +79,7 @@ BUBBERSTATION CHANGE END. */ icon_keyboard = null icon_screen = "invaders" light_color = LIGHT_COLOR_GREEN - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE // we don't need to be literate to play video games fam + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON var/list/prize_override /obj/machinery/computer/arcade/proc/Reset() @@ -167,6 +167,8 @@ BUBBERSTATION CHANGE END. */ icon_state = "arcade" circuit = /obj/item/circuitboard/computer/arcade/battle + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE // we don't need to be literate to play video games fam + var/enemy_name = "Space Villain" ///Enemy health/attack points var/enemy_hp = 100 diff --git a/code/game/machinery/computer/arcade/orion_event.dm b/code/game/machinery/computer/arcade/orion_event.dm index 97590059a52..f1050e9a8e2 100644 --- a/code/game/machinery/computer/arcade/orion_event.dm +++ b/code/game/machinery/computer/arcade/orion_event.dm @@ -172,7 +172,7 @@ game.say("A new floor suddenly appears around [game]. What the hell?") playsound(game, 'sound/weapons/genhit.ogg', 100, TRUE) for(var/turf/open/space/fixed in orange(1, game)) - fixed.PlaceOnTop(/turf/open/floor/plating) + fixed.place_on_top(/turf/open/floor/plating) #define BUTTON_EXPLORE_SHIP "Explore Ship" #define BUTTON_LEAVE_THE_DERELICT "Leave the Derelict" diff --git a/code/game/machinery/computer/arena.dm b/code/game/machinery/computer/arena.dm index 39b39af197b..1ba000fa5da 100644 --- a/code/game/machinery/computer/arena.dm +++ b/code/game/machinery/computer/arena.dm @@ -21,6 +21,9 @@ /// Controller for admin event arenas /obj/machinery/computer/arena name = "arena controller" + + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + /// Arena ID var/arena_id = ARENA_DEFAULT_ID /// Enables/disables spawning diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 6bc5c6f60d2..a1a1fe0ada2 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -19,7 +19,7 @@ /// All the plane masters that need to be applied. var/atom/movable/screen/background/cam_background - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_SIGHT + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_SIGHT /obj/machinery/computer/security/Initialize(mapload) . = ..() diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 870f64dd575..4750feb3b9b 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -24,7 +24,7 @@ ///Should we supress any view changes? var/should_supress_view_changes = TRUE - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_SET_MACHINE | INTERACT_MACHINE_REQUIRES_SIGHT + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_REQUIRES_SIGHT /obj/machinery/computer/camera_advanced/Initialize(mapload) . = ..() @@ -76,12 +76,10 @@ /obj/machinery/computer/camera_advanced/remove_eye_control(mob/living/user) if(!user) return - for(var/V in actions) - var/datum/action/A = V - A.Remove(user) - for(var/V in eyeobj.visibleCameraChunks) - var/datum/camerachunk/C = V - C.remove(eyeobj) + for(var/datum/action/actions_removed as anything in actions) + actions_removed.Remove(user) + for(var/datum/camerachunk/camerachunks_gone as anything in eyeobj.visibleCameraChunks) + camerachunks_gone.remove(eyeobj) if(user.client) user.reset_perspective(null) if(eyeobj.visible_icon && user.client) @@ -91,12 +89,12 @@ eyeobj.eye_user = null user.remote_control = null current_user = null - user.unset_machine() + unset_machine(user) playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) /obj/machinery/computer/camera_advanced/check_eye(mob/user) if(!can_use(user) || (issilicon(user) && !user.has_unlimited_silicon_privilege)) - user.unset_machine() + unset_machine(user) /obj/machinery/computer/camera_advanced/Destroy() if(eyeobj) @@ -105,7 +103,7 @@ current_user = null return ..() -/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M) +/obj/machinery/computer/camera_advanced/proc/unset_machine(mob/M) if(M == current_user) remove_eye_control(M) @@ -155,7 +153,7 @@ give_eye_control(L) eyeobj.setLoc(camera_location) else - user.unset_machine() + unset_machine(user) else give_eye_control(L) eyeobj.setLoc(eyeobj.loc) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 6502ecbf530..c3510afce73 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -400,7 +400,6 @@ . = TRUE add_fingerprint(usr) - usr.set_machine(src) switch(action) // Connect this DNA Console to a nearby DNA Scanner diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm index c680974e4c1..2ba9e00d9f5 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -41,7 +41,7 @@ cost = get_total_cost(), \ contains = things_to_order, ) - var/datum/supply_order/new_order = new( + var/datum/supply_order/disposable/new_order = new( pack = mining_pack, orderer = purchaser, orderer_rank = "Mining Vendor", diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 05bb4042c8b..970b5f4f9be 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -1,4 +1,5 @@ /obj/machinery/computer/prisoner + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY var/obj/item/card/id/advanced/prisoner/contained_id /obj/machinery/computer/prisoner/Destroy() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 79ec5e1861a..6f08275d95e 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -80,7 +80,7 @@ if(do_after(user, 50, target=src)) W.use(5) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal) + T.place_on_top(/turf/closed/wall/mineral/wood/nonmetal) qdel(src) return return ..() diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index 97b80b91969..cbe6e1c31c7 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -60,7 +60,7 @@ var/obj/item/bodypart/head/head = human_receiver.get_bodypart(BODY_ZONE_HEAD) head.unarmed_damage_low = 10 head.unarmed_damage_high = 15 - head.unarmed_stun_threshold = 15 + head.unarmed_effectiveness = 15 /obj/item/organ/internal/tongue/carp/on_remove(mob/living/carbon/tongue_owner) . = ..() @@ -74,7 +74,7 @@ var/obj/item/bodypart/head/head = human_receiver.get_bodypart(BODY_ZONE_HEAD) head.unarmed_damage_low = initial(head.unarmed_damage_low) head.unarmed_damage_high = initial(head.unarmed_damage_high) - head.unarmed_stun_threshold = initial(head.unarmed_stun_threshold) + head.unarmed_effectiveness = initial(head.unarmed_effectiveness) /obj/item/organ/internal/tongue/carp/on_life(seconds_per_tick, times_fired) . = ..() diff --git a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm index 5d4568a535c..e7551394131 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm @@ -78,10 +78,7 @@ name = odd_organ_name() icon_state = FLY_INFUSED_ORGAN_ICON AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly) - -/obj/item/organ/internal/heart/fly/update_icon_state() - SHOULD_CALL_PARENT(FALSE) - return //don't set icon thank you + AddElement(/datum/element/update_icon_blocker) /obj/item/organ/internal/lungs/fly desc = FLY_INFUSED_ORGAN_DESC diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index dedac8ad25d..e8d7b50ec75 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -272,6 +272,7 @@ /obj/machinery/door/firedoor/proc/adjacent_change(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) SIGNAL_HANDLER post_change_callbacks += CALLBACK(src, PROC_REF(CalculateAffectingAreas)) + post_change_callbacks += CALLBACK(src, PROC_REF(process_results), changed) //check the atmosphere of the changed turf so we don't hold onto alarm if a wall is built /* BUBBERSTATION CHANGE: FIRELOCKS ARE NO LONGER ARE FREE-THINKERS. /obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf) diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 0b66fd391b1..1e2287a0492 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -106,6 +106,7 @@ base_icon_state = "access_control" name = "access console" desc = "A small console that can cycle opening between two airlocks." + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/obj/machinery/door/airlock/interiorAirlock var/obj/machinery/door/airlock/exteriorAirlock var/idInterior diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 1a16c00e42d..2d34c6214f3 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -103,7 +103,6 @@ "[occupant] is about to be ground up by a malfunctioning organ harvester!", source = src, header = "Gruesome!", - action = NOTIFY_ORBIT, ) operation_order = reverseList(carbon_occupant.bodyparts) //Chest and head are first in bodyparts, so we invert it to make them suffer more diff --git a/code/game/machinery/incident_display.dm b/code/game/machinery/incident_display.dm index 97557c5611c..9e6a3fe8124 100644 --- a/code/game/machinery/incident_display.dm +++ b/code/game/machinery/incident_display.dm @@ -215,12 +215,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) var/mutable_appearance/delam_base_emissive = emissive_appearance(icon, "delam_base_emissive", src, alpha = src.alpha) var/delam_display_color . += delam_base_emissive - if(!last_delam) + if(last_delam <= 0) delam_display_color = COLOR_DISPLAY_RED else delam_display_color = COLOR_DISPLAY_YELLOW - var/delam_pos1 = last_delam % 10 + var/delam_pos1 = clamp(last_delam, 0, 199) % 10 var/mutable_appearance/delam_pos1_overlay = mutable_appearance(icon, "num_[delam_pos1]") var/mutable_appearance/delam_pos1_emissive = emissive_appearance(icon, "num_[delam_pos1]_e", src, alpha = src.alpha) delam_pos1_overlay.color = delam_display_color @@ -231,7 +231,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) . += delam_pos1_overlay . += delam_pos1_emissive - var/delam_pos2 = (last_delam / 10) % 10 + var/delam_pos2 = (clamp(last_delam, 0, 199) / 10) % 10 var/mutable_appearance/delam_pos2_overlay = mutable_appearance(icon, "num_[delam_pos2]") var/mutable_appearance/delam_pos2_emissive = emissive_appearance(icon, "num_[delam_pos2]_e", src, alpha = src.alpha) delam_pos2_overlay.color = delam_display_color @@ -327,24 +327,25 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) . = ..() if(sign_features & DISPLAY_DELAM) - . += span_info("It has been [last_delam] shift\s since the last delamination event at this Nanotrasen facility.") - switch (last_delam) - if(0) - . += span_info("In case you didn't notice.
") - if(1) - . += span_info("Let's do better today.
") - if(2 to 5) - . += span_info("There's room for improvement.
") - if(6 to 10) - . += span_info("Good work!
") - if(69) - . += span_info("Nice.
") - else - . += span_info("Incredible!
") + if(last_delam >= 0) + . += span_info("It has been [last_delam] shift\s since the last delamination event at this Nanotrasen facility.") + switch(last_delam) + if(0) + . += span_info("Let's do better today.
") + if(1 to 5) + . += span_info("There's room for improvement.
") + if(6 to 10) + . += span_info("Good work!
") + if(69) + . += span_info("Nice.
") + else + . += span_info("Incredible!
") + else + . += span_info("The supermatter crystal has delaminated, in case you didn't notice.") if(sign_features & DISPLAY_TRAM) . += span_info("The station has had [hit_count] tram incident\s this shift.") - switch (hit_count) + switch(hit_count) if(0) . += span_info("Fantastic! Champions of safety.
") if(1) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index c9b220bb0cd..6e16beb494e 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -12,6 +12,8 @@ var/area/area = null ///Range of the light emitted when powered, but off var/light_on_range = 1 + /// Should this lightswitch automatically rename itself to match the area it's in? + var/autoname = TRUE MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) @@ -29,12 +31,22 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) area = GLOB.areas_by_type[area] if(!area) area = get_area(src) - if(!name) + if(autoname) name = "light switch ([area.name])" find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(deconstruct), TRUE)) - + register_context() update_appearance() +/obj/machinery/light_switch/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = area.lightswitch ? "Flick off" : "Flick on" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour != TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + return . + /obj/machinery/light_switch/update_appearance(updates=ALL) . = ..() luminosity = (machine_stat & NOPOWER) ? 0 : 1 @@ -62,6 +74,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) . = ..() set_lights(!area.lightswitch) +/obj/machinery/light_switch/attackby_secondary(obj/item/weapon, mob/user, params) + if(weapon.tool_behaviour == TOOL_SCREWDRIVER) + to_chat(user, "You pop \the [src] off the wall.") + deconstruct() + return COMPONENT_CANCEL_ATTACK_CHAIN + return ..() + /obj/machinery/light_switch/proc/set_lights(status) if(area.lightswitch == status) return diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index 1ae08c066f0..fc908a98840 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -12,7 +12,7 @@ armor_type = /datum/armor/machinery_newscaster max_integrity = 200 integrity_failure = 0.25 - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY ///Reference to the currently logged in user. var/datum/bank_account/current_user ///Name of the logged in user. diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index cf4e4d1e7e7..11f4bb1dd55 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -326,7 +326,7 @@ DEFINE_BITFIELD(turret_flags, list( //This code handles moving the turret around. After all, it's a portable turret! if(!anchored && !isinspace()) set_anchored(TRUE) - SetInvisibility(INVISIBILITY_MAXIMUM, id=type) + RemoveInvisibility(id=type) update_appearance() to_chat(user, span_notice("You secure the exterior bolts on the turret.")) if(has_cover) @@ -336,7 +336,7 @@ DEFINE_BITFIELD(turret_flags, list( set_anchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) power_change() - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. else if(I.GetID()) @@ -407,7 +407,7 @@ DEFINE_BITFIELD(turret_flags, list( . = ..() if(.) power_change() - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) spark_system.start() //creates some sparks because they look cool qdel(cover) //deletes the cover - no need on keeping it there! @@ -514,7 +514,7 @@ DEFINE_BITFIELD(turret_flags, list( return if(machine_stat & BROKEN) return - RemoveInvisibility(type) + SetInvisibility(INVISIBILITY_NONE, id=type) raising = 1 if(cover) flick("popup", cover) diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index a4582875574..082881fc2fa 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -43,12 +43,12 @@ if(!parent_turret.anchored) parent_turret.set_anchored(TRUE) to_chat(user, span_notice("You secure the exterior bolts on the turret.")) - parent_turret.RemoveInvisibility(type) + parent_turret.SetInvisibility(INVISIBILITY_NONE, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() else parent_turret.set_anchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) + parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() qdel(src) return diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index ad6adae767c..458faba35f4 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -3,6 +3,7 @@ desc = "An energy shield used to contain hull breaches." icon = 'icons/effects/effects.dmi' icon_state = "shield-old" + integrity_failure = 0.5 density = TRUE move_resist = INFINITY opacity = FALSE @@ -183,11 +184,6 @@ if(deployed_shields.len && SPT_PROB(2.5, seconds_per_tick)) qdel(pick(deployed_shields)) - -/obj/machinery/shieldgen/deconstruct(disassembled = TRUE) - atom_break() - locked = pick(0,1) - /obj/machinery/shieldgen/interact(mob/user) . = ..() if(.) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 15c740a31e4..87be631edaf 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -143,7 +143,7 @@ /obj/machinery/suit_storage_unit/interdyne mask_type = /obj/item/clothing/mask/gas/syndicate - storage_type = /obj/item/tank/jetpack/oxygen/harness + storage_type = /obj/item/tank/internals/oxygen mod_type = /obj/item/mod/control/pre_equipped/interdyne /obj/machinery/suit_storage_unit/void_old @@ -380,6 +380,7 @@ choices, custom_check = CALLBACK(src, PROC_REF(check_interactable), user), require_near = !issilicon(user), + autopick_single_option = FALSE ) if (!choice) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 516f5ec8453..acd01f2488c 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -251,7 +251,11 @@ if(isnull(payload) || istype(payload, /obj/machinery/syndicatebomb/training)) return - notify_ghosts("\A [src] has been activated at [get_area(src)]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Bomb Planted") + notify_ghosts( + "\A [src] has been activated at [get_area(src)]!", + source = src, + header = "Bomb Planted", + ) user.add_mob_memory(/datum/memory/bomb_planted/syndicate, antagonist = src) log_bomber(user, "has primed a", src, "for detonation (Payload: [payload.name])") payload.adminlog = "The [name] that [key_name(user)] had primed detonated!" @@ -476,7 +480,7 @@ var/datum/reagents/reactants = new(time_release) reactants.my_atom = src for(var/obj/item/reagent_containers/RC in beakers) - RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, 1, 1, 1) + RC.reagents.trans_to(reactants, RC.reagents.total_volume * fraction, no_react = TRUE) chem_splash(get_turf(src), reagents, spread_range, list(reactants), temp_boost) // Detonate it again in one second, until it's out of juice. diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index 0c4b6d2a02d..def8384b139 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -20,9 +20,15 @@ if(!is_freq_listening(signal)) return - // send the signal to the hub if possible, or a bus otherwise - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/bus) + // Make a copy of the signal so that other recievers can still recieve this signal + var/datum/signal/subspace/signal_copy = signal.copy() + + // Signal has been recieved, so remove receiving levels. This list will be used later on to determine broadcasting levels. + signal_copy.levels = list() + + // Send the signal to a hub if possible, or a bus otherwise. + if(!relay_information(signal_copy, /obj/machinery/telecomms/hub)) + relay_information(signal_copy, /obj/machinery/telecomms/bus) use_power(idle_power_usage) diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index 998a5da9f5c..49d59b9bcf7 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -10,6 +10,10 @@ ///Distance we can teleport someone passively var/teleport_distance = 4 +/obj/effect/anomaly/bluespace/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/bluespace/anomalyEffect() ..() for(var/mob/living/M in range(teleport_range,src)) @@ -98,4 +102,3 @@ var/mob/living/living = bumpee living.apply_status_effect(/datum/status_effect/teleport_madness) - diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index 35b8bc388d7..91f09095d6f 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -14,6 +14,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + apply_wibbly_filters(src) /obj/effect/anomaly/flux/anomalyEffect() ..() diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index efd49ef502f..fa7c4f48a36 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -23,6 +23,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + apply_wibbly_filters(src) warp = new(src) vis_contents += warp diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index 83648601017..a6696070df1 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -15,6 +15,10 @@ span_warning("You are going insane!"), ) +/obj/effect/anomaly/hallucination/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/hallucination/anomalyEffect(seconds_per_tick) . = ..() ticks += seconds_per_tick diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index f97f3482e83..b290c23ac3f 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -7,6 +7,10 @@ var/releasedelay = 10 aSignal = /obj/item/assembly/signaler/anomaly/pyro +/obj/effect/anomaly/pyro/Initialize(mapload, new_lifespan, drops_core) + . = ..() + apply_wibbly_filters(src) + /obj/effect/anomaly/pyro/anomalyEffect(seconds_per_tick) ..() ticks += seconds_per_tick diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 2c6d01b5bc4..941034ec511 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -50,8 +50,8 @@ anchored = TRUE /// Does this decal change colors on holidays var/use_holiday_colors = FALSE - /// The pattern used when recoloring the decal - var/pattern = PATTERN_DEFAULT + /// The pattern used when recoloring the decal. If null, it'll use the def of the station or holiday. + var/pattern // This is with the intent of optimizing mapload // See spawners for more details since we use the same pattern diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 73e95ab48cd..9a13e68c1b1 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -361,7 +361,7 @@ return to_chat(user, span_notice("You add the plating.")) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/metal_foam_base) + T.place_on_top(/turf/closed/wall/metal_foam_base) transfer_fingerprints_to(T) qdel(src) return @@ -393,7 +393,7 @@ /obj/effect/particle_effect/fluid/foam/metal/smart/make_result() //Smart foam adheres to area borders for walls var/turf/open/location = loc if(isspaceturf(location)) - location.PlaceOnTop(/turf/open/floor/plating/foam) + location.place_on_top(/turf/open/floor/plating/foam) for(var/cardinal in GLOB.cardinals) var/turf/cardinal_turf = get_step(location, cardinal) diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index cd42f702ef9..4f31ffc0869 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -18,9 +18,6 @@ /particles/smoke/burning position = list(0, 0, 0) -/particles/smoke/burning/fireplace - position = list(0, 29, 0) - /particles/smoke/burning/small spawning = 1 scale = list(0.8, 0.8) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 591036b30d9..091b4700673 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -43,6 +43,8 @@ var/force_teleport = FALSE /// Does this portal create spark effect when teleporting? var/sparkless = FALSE + /// If FALSE, the wibble filter will not be applied to this portal (only a visual effect). + var/wibbles = TRUE /obj/effect/portal/anom name = "wormhole" @@ -53,6 +55,7 @@ mech_sized = TRUE teleport_channel = TELEPORT_CHANNEL_WORMHOLE light_on = FALSE + wibbles = FALSE /obj/effect/portal/Move(newloc) for(var/T in newloc) @@ -100,6 +103,8 @@ hardlinked = automatic_link if(isturf(hard_target_override)) hard_target = hard_target_override + if(wibbles) + apply_wibbly_filters(src) /obj/effect/portal/singularity_pull() return diff --git a/code/game/objects/effects/posters/contraband.dm b/code/game/objects/effects/posters/contraband.dm index 6881c52862c..2bb2fcce50e 100644 --- a/code/game/objects/effects/posters/contraband.dm +++ b/code/game/objects/effects/posters/contraband.dm @@ -509,7 +509,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/triumphal_arch . = ..() . += span_notice("You browse some of the poster's information...") . += "\t[span_info("Va Lümla Commissary Menu (Spring 335)")]" - . += "\t[span_info("Windgrass Cigarettes, Half-Pack (6): 1 Ticket")]" + . += "\t[span_info("Sparkweed Cigarettes, Half-Pack (6): 1 Ticket")]" . += "\t[span_info("Töchtaüse Schnapps, Bottle (4 Measures): 2 Tickets")]" . += "\t[span_info("Activin Gum, Pack (4): 1 Ticket")]" . += "\t[span_info("A18 Sustenance Bar, Breakfast, Bar (4): 1 Ticket")]" diff --git a/code/game/objects/effects/spawners/random/bureaucracy.dm b/code/game/objects/effects/spawners/random/bureaucracy.dm index af33169ff15..7a6b62618e6 100644 --- a/code/game/objects/effects/spawners/random/bureaucracy.dm +++ b/code/game/objects/effects/spawners/random/bureaucracy.dm @@ -54,7 +54,7 @@ icon_state = "briefcase" loot = list( /obj/item/storage/briefcase = 3, - /obj/item/storage/secure/briefcase = 1, + /obj/item/storage/briefcase/secure = 1, ) /obj/effect/spawner/random/bureaucracy/folder diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 33d13c4ec0d..5b9f5a5a06b 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -289,6 +289,10 @@ icon_state = "bluestream_fade" duration = 9 +/obj/effect/temp_visual/bluespace_fissure/Initialize(mapload) + . = ..() + apply_wibbly_filters(src) + /obj/effect/temp_visual/gib_animation icon = 'icons/mob/simple/mob.dmi' duration = 15 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9249a4a12da..d592cd0790b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -374,6 +374,8 @@ // SKYRAT EDIT ADD START if(greyscale_config_worn_digi) worn_icon_digi = SSgreyscale.GetColoredIconByType(greyscale_config_worn_digi, greyscale_colors) + if(greyscale_config_worn_muzzled) + worn_icon_muzzled = SSgreyscale.GetColoredIconByType(greyscale_config_worn_muzzled, greyscale_colors) if(greyscale_config_worn_monkey) worn_icon_monkey = SSgreyscale.GetColoredIconByType(greyscale_config_worn_monkey, greyscale_colors) if(greyscale_config_worn_vox) @@ -443,7 +445,7 @@ ///Separator between the items on the list var/sep = "" ///Nodes that can be boosted - var/list/boostable_nodes = techweb_item_boost_check(src) + var/list/boostable_nodes = techweb_item_unlock_check(src) if (boostable_nodes) for(var/id in boostable_nodes) var/datum/techweb_node/node = SSresearch.techweb_node_by_id(id) @@ -618,9 +620,6 @@ R.activate_module(src) R.hud_used.update_robot_modules_display() -/obj/item/proc/GetDeconstructableContents() - return get_all_contents() - src - // afterattack() and attack() prototypes moved to _onclick/item_attack.dm for consistency /obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) @@ -1221,7 +1220,7 @@ return src /** - * tryEmbed() is for when you want to try embedding something without dealing with the damage + hit messages of calling hitby() on the item while targetting the target. + * tryEmbed() is for when you want to try embedding something without dealing with the damage + hit messages of calling hitby() on the item while targeting the target. * * Really, this is used mostly with projectiles with shrapnel payloads, from [/datum/element/embed/proc/checkEmbedProjectile], and called on said shrapnel. Mostly acts as an intermediate between different embed elements. * diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 9dd7e125055..195895c44c3 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -654,10 +654,8 @@ return FALSE var/list/user_memories = user.mind.memories var/datum/memory/key/account/user_key = user_memories[/datum/memory/key/account] - var/user_account = 11111 - if(!isnull(user_key)) - user_account = user_key.remembered_id - var/new_bank_id = tgui_input_number(user, "Enter the account ID to associate with this card.", "Link Bank Account", user_account, 999999, 111111) + var/default_account = (istype(user_key) && user_key.remembered_id) || 11111 + var/new_bank_id = tgui_input_number(user, "Enter the account ID to associate with this card.", "Link Bank Account", default_account, 999999, 111111) if(!new_bank_id || QDELETED(user) || QDELETED(src) || issilicon(user) || !alt_click_can_use_id(user) || loc != user) return FALSE if(registered_account?.account_id == new_bank_id) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 94e9cb674b2..7ef4b4bd64a 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -847,6 +847,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM span_notice("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow."), span_notice("You quietly shut off [src] without even looking at what you're doing. Wow.") ) + playsound(src, 'modular_skyrat/master_files/sound/items/zippo_close.ogg', 50, TRUE) // SKYRAT EDIT ADDITION else user.visible_message( span_notice("[user] quietly shuts off [src]."), @@ -860,6 +861,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM span_notice("Without even breaking stride, [user] flips open and lights [src] in one smooth movement."), span_notice("Without even breaking stride, you flip open and light [src] in one smooth movement.") ) + playsound(src, 'modular_skyrat/master_files/sound/items/zippo_open.ogg', 50, TRUE) // SKYRAT EDIT ADDITION return var/hand_protected = FALSE @@ -1056,7 +1058,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM worn_icon_state = "vape_worn" greyscale_config = /datum/greyscale_config/vape greyscale_config_worn = /datum/greyscale_config/vape/worn - greyscale_config_worn_digi = /datum/greyscale_config/vape/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale (Digi? On a vape? What? How did we do this) + greyscale_config_worn_muzzled = /datum/greyscale_config/vape/worn/muzzled //SKYRAT EDIT ADDITION greyscale_colors = "#2e2e2e" inhand_icon_state = null w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index 1e12576f686..c32de5b336d 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -108,7 +108,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. . = ..() if(!LAZYLEN(req_components)) . += span_info("It requires no components.") - return . + return var/list/nice_list = list() for(var/component_path in req_components) @@ -118,27 +118,33 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. var/component_name var/component_amount = req_components[component_path] + //e.g. "glass sheet" vs. "glass" if(ispath(component_path, /obj/item/stack)) var/obj/item/stack/stack_path = component_path - if(initial(stack_path.singular_name)) - component_name = initial(stack_path.singular_name) //e.g. "glass sheet" vs. "glass" - else if(ispath(component_path, /obj/item/stock_parts) && !specific_parts) - var/obj/item/stock_parts/stock_part = component_path - component_name = initial(stock_part.base_name) || initial(stock_part.name) - else if(ispath(component_path, /obj/item/stock_parts)) - var/obj/item/stock_parts/stock_part = component_path - component_name = initial(stock_part.name) - else if(ispath(component_path, /datum/stock_part)) - var/datum/stock_part/stock_part = component_path - var/obj/item/stock_parts/physical_object_type = initial(stock_part.physical_object_type) - component_name = initial(physical_object_type.base_name) || initial(physical_object_type.name) + component_name = initial(stack_path.singular_name) + + //stock parts in datum or obj form + else if(ispath(component_path, /obj/item/stock_parts) || ispath(component_path, /datum/stock_part)) + var/obj/item/stock_parts/stock_part + if(ispath(component_path, /obj/item/stock_parts)) + stock_part = component_path + else + var/datum/stock_part/datum_part = component_path + stock_part = initial(datum_part.physical_object_type) + + if(!specific_parts) + component_name = initial(stock_part.base_name) + if(!component_name) + component_name = initial(stock_part.name) + + //beakers, any non conventional part else if(ispath(component_path, /atom)) var/atom/stock_part = component_path component_name = initial(stock_part.name) + //append decoded name to final result if (isnull(component_name)) stack_trace("[component_path] was an invalid component") - nice_list += list("[component_amount] [component_name]\s") . += span_info("It requires [english_list(nice_list)].") diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index c7ba71596a6..3795d43bb76 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -255,7 +255,8 @@ build_path = /obj/machinery/ntnet_relay req_components = list( /obj/item/stack/cable_coil = 2, - /datum/stock_part/filter = 1) + /datum/stock_part/filter = 1, + ) /obj/item/circuitboard/machine/pacman name = "PACMAN-type Generator" @@ -550,7 +551,7 @@ /obj/item/circuitboard/machine/smartfridge/apply_default_parts(obj/machinery/smartfridge/smartfridge) build_path = smartfridge.base_build_path - if(!fridges_name_paths.Find(build_path, fridges_name_paths)) + if(!fridges_name_paths.Find(build_path)) name = "[initial(smartfridge.name)]" //if it's a unique type, give it a unique name. is_special_type = TRUE return ..() @@ -967,7 +968,8 @@ req_components = list( /datum/stock_part/scanning_module = 1, /datum/stock_part/servo = 1, - /datum/stock_part/micro_laser = 1) + /datum/stock_part/micro_laser = 1, + ) /obj/item/circuitboard/machine/experimentor name = "E.X.P.E.R.I-MENTOR" diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm index 2c96d1844b1..03178604074 100644 --- a/code/game/objects/items/climbingrope.dm +++ b/code/game/objects/items/climbingrope.dm @@ -32,20 +32,23 @@ return if(!istype(target) || isopenspaceturf(target)) return - if(target.is_blocked_turf(exclude_mobs = TRUE)) - return + var/turf/user_turf = get_turf(user) var/turf/above = GET_TURF_ABOVE(user_turf) + if(target_blocked(target, above)) + return if(!isopenspaceturf(above) || !above.Adjacent(target)) //are we below a hole, is the target blocked, is the target adjacent to our hole balloon_alert(user, "blocked!") return + var/away_dir = get_dir(above, target) user.visible_message(span_notice("[user] begins climbing upwards with [src]."), span_notice("You get to work on properly hooking [src] and going upwards.")) playsound(target, 'sound/effects/picaxe1.ogg', 50) //plays twice so people above and below can hear playsound(user_turf, 'sound/effects/picaxe1.ogg', 50) var/list/effects = list(new /obj/effect/temp_visual/climbing_hook(target, away_dir), new /obj/effect/temp_visual/climbing_hook(user_turf, away_dir)) + if(do_after(user, climb_time, target)) - user.Move(target) + user.forceMove(target) uses-- if(uses <= 0) @@ -54,6 +57,23 @@ QDEL_LIST(effects) +// didnt want to mess up is_blocked_turf_ignore_climbable +/// checks if our target is blocked, also checks for border objects facing the above turf and climbable stuff +/obj/item/climbing_hook/proc/target_blocked(turf/target, turf/above) + if(target.density || above.density) + return TRUE + + for(var/atom/movable/atom_content as anything in target.contents) + if(isliving(atom_content)) + continue + if(HAS_TRAIT(atom_content, TRAIT_CLIMBABLE)) + continue + if((atom_content.flags_1 & ON_BORDER_1) && atom_content.dir != get_dir(target, above)) //if the border object is facing the hole then it is blocking us, likely + continue + if(atom_content.density) + return TRUE + return FALSE + /obj/item/climbing_hook/emergency name = "emergency climbing hook" desc = "An emergency climbing hook to scale up holes. The rope is EXTREMELY cheap and may not withstand extended use." diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index a20fcce5db8..1e43197c47e 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -197,7 +197,7 @@ if(!(B?.being_dumped)) accounts_to_rob -= B continue - var/amount = B.account_balance * percentage_lost + var/amount = round(B.account_balance * percentage_lost) // We don't want fractions of a credit stolen. That's just agony for everyone. var/datum/bank_account/account = bogdanoff?.get_bank_account() if (account) // get_bank_account() may return FALSE account.transfer_money(B, amount, "?VIVA¿: !LA CRABBE¡") diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 7f7f733ad86..af470ead50b 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -367,7 +367,8 @@ .["has_cap"] = has_cap .["is_capped"] = is_capped .["can_change_colour"] = can_change_colour - .["current_colour"] = paint_color + .["selected_color"] = GLOB.pipe_color_name[paint_color] || paint_color + .["paint_colors"] = GLOB.pipe_paint_colors /obj/item/toy/crayon/ui_act(action, list/params) . = ..() @@ -390,8 +391,14 @@ text_buffer = "" else paint_mode = PAINT_NORMAL - if("select_colour") + if("custom_color") . = can_change_colour && pick_painting_tool_color(usr, paint_color) + if("color") + if(!can_change_colour) + return + paint_color = GLOB.pipe_paint_colors[params["paint_color"]] + set_painting_tool_color(paint_color) + . = TRUE if("enter_text") var/txt = tgui_input_text(usr, "Choose what to write", "Scribbles", text_buffer) if(isnull(txt)) @@ -841,7 +848,6 @@ user.visible_message(span_notice("[user] coats [target] with spray paint!"), span_notice("You coat [target] with spray paint.")) return - if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1)) var/color_is_dark = FALSE if(actually_paints) @@ -851,7 +857,26 @@ to_chat(user, span_warning("A color that dark on an object like this? Surely not...")) return FALSE - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + if(istype(target, /obj/item/pipe)) + if(GLOB.pipe_color_name.Find(paint_color)) + var/obj/item/pipe/target_pipe = target + target_pipe.pipe_color = paint_color + target.add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) + balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") + else + balloon_alert(user, "invalid pipe color!") + return FALSE + else if(istype(target, /obj/machinery/atmospherics)) + if(GLOB.pipe_color_name.Find(paint_color)) + var/obj/machinery/atmospherics/target_pipe = target + target_pipe.paint(paint_color) + balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") + else + balloon_alert(user, "invalid pipe color!") + return FALSE + else + target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + if(isitem(target) && isliving(target.loc)) var/obj/item/target_item = target var/mob/living/holder = target.loc @@ -859,6 +884,7 @@ holder.update_held_items() else holder.update_clothing(target_item.slot_flags) + if(!(SEND_SIGNAL(target, COMSIG_OBJ_PAINTED, user, src, color_is_dark) & DONT_USE_SPRAYCAN_CHARGES)) use_charges(user, 2, requires_full = FALSE) reagents.trans_to(target, ., volume_multiplier, transferred_by = user, methods = VAPOR) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index ccf5b2d623f..f958f4c4af1 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -295,7 +295,7 @@ /obj/item/defibrillator/compact/combat name = "combat defibrillator" - desc = "A belt-equipped blood-red defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized in combat via applying the paddles in a disarming or aggressive manner." + desc = "A belt-equipped blood-red defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized as a weapon via applying the paddles while in a combat stance." icon_state = "defibcombat" //needs defib inhand sprites inhand_icon_state = null worn_icon_state = "defibcombat" @@ -322,7 +322,7 @@ /obj/item/defibrillator/compact/combat/loaded/nanotrasen name = "elite Nanotrasen defibrillator" - desc = "A belt-equipped state-of-the-art defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized in combat via applying the paddles in a disarming or aggressive manner." + desc = "A belt-equipped state-of-the-art defibrillator. Can revive through thick clothing, has an experimental self-recharging battery, and can be utilized as a weapon via applying the paddles while in a combat stance." icon_state = "defibnt" //needs defib inhand sprites inhand_icon_state = null worn_icon_state = "defibnt" diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 027595a38d8..9ba63151c7c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -295,25 +295,33 @@ w_class = WEIGHT_CLASS_TINY flags_1 = CONDUCT_1 light_range = 2 - var/holo_cooldown = 0 + COOLDOWN_DECLARE(holosign_cooldown) /obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) . = ..() - if(!proximity_flag) - if(holo_cooldown > world.time) - to_chat(user, span_warning("[src] is not ready yet!")) - return - var/T = get_turf(target) - if(locate(/mob/living) in T) - new /obj/effect/temp_visual/medical_holosign(T,user) //produce a holographic glow - holo_cooldown = world.time + 10 SECONDS - return + if(proximity_flag) + return + + if(!COOLDOWN_FINISHED(src, holosign_cooldown)) + balloon_alert(user, "not ready!") + return + + var/target_turf = get_turf(target) + var/mob/living/living_target = locate(/mob/living) in target_turf + + if(!living_target || (living_target == user)) + return + + to_chat(living_target, span_boldnotice("[user] is offering medical assistance; please halt your actions.")) + new /obj/effect/temp_visual/medical_holosign(target_turf, user) //produce a holographic glow + COOLDOWN_START(src, holosign_cooldown, 10 SECONDS) // see: [/datum/wound/burn/flesh/proc/uv()] /obj/item/flashlight/pen/paramedic name = "paramedic penlight" desc = "A high-powered UV penlight intended to help stave off infection in the field on serious burned patients. Probably really bad to look into." icon_state = "penlight_surgical" + light_color = LIGHT_COLOR_PURPLE /// Our current UV cooldown COOLDOWN_DECLARE(uv_cooldown) /// How long between UV fryings diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 63ae58a0ae3..3a3b9055725 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -9,19 +9,24 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT) -/obj/item/pipe_painter/afterattack(atom/A, mob/user, proximity_flag) +/obj/item/pipe_painter/afterattack(atom/target, mob/user, proximity_flag) . = ..() //Make sure we only paint adjacent items if(!proximity_flag) return - if(!istype(A, /obj/machinery/atmospherics/pipe)) - return - - var/obj/machinery/atmospherics/pipe/P = A - if(P.paint(GLOB.pipe_paint_colors[paint_color])) + if(istype(target, /obj/machinery/atmospherics)) + var/obj/machinery/atmospherics/target_pipe = target + target_pipe.paint(GLOB.pipe_paint_colors[paint_color]) playsound(src, 'sound/machines/click.ogg', 50, TRUE) - user.visible_message(span_notice("[user] paints \the [P] [paint_color]."),span_notice("You paint \the [P] [paint_color].")) + balloon_alert(user, "painted in [paint_color] color") + else if(istype(target, /obj/item/pipe)) + var/obj/item/pipe/target_pipe = target + var/color = GLOB.pipe_paint_colors[paint_color] + target_pipe.pipe_color = color + target.add_atom_colour(color, FIXED_COLOUR_PRIORITY) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + balloon_alert(user, "painted in [paint_color] color") /obj/item/pipe_painter/attack_self(mob/user) paint_color = tgui_input_list(user, "Which colour do you want to use?", "Pipe painter", GLOB.pipe_paint_colors) diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm deleted file mode 100644 index 18458f75697..00000000000 --- a/code/game/objects/items/devices/portable_chem_mixer.dm +++ /dev/null @@ -1,235 +0,0 @@ -/obj/item/storage/portable_chem_mixer - name = "Portable Chemical Mixer" - desc = "A portable device that dispenses and mixes chemicals. All necessary reagents need to be supplied with beakers. A label indicates that the 'CTRL'-button on the device may be used to open it for refills. This device can be worn as a belt. The letters 'S&T' are imprinted on the side." - icon = 'icons/obj/medical/chemical.dmi' - icon_state = "portablechemicalmixer_open" - worn_icon_state = "portable_chem_mixer" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BELT - equip_sound = 'sound/items/equip/toolbelt_equip.ogg' - custom_price = PAYCHECK_CREW * 10 - custom_premium_price = PAYCHECK_CREW * 14 - - var/obj/item/reagent_containers/beaker = null ///Creating an empty slot for a beaker that can be added to dispense into - var/amount = 30 ///The amount of reagent that is to be dispensed currently - - var/list/dispensable_reagents = list() ///List in which all currently dispensable reagents go - - ///If the UI has the pH meter shown - var/show_ph = TRUE - -/obj/item/storage/portable_chem_mixer/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 200 - atom_storage.max_slots = 50 - atom_storage.set_holdable(list( - /obj/item/reagent_containers/cup/beaker, - /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/cup/tube, - /obj/item/reagent_containers/cup/glass/waterbottle, - /obj/item/reagent_containers/condiment, - )) - -/obj/item/storage/portable_chem_mixer/Destroy() - QDEL_NULL(beaker) - return ..() - -/obj/item/storage/portable_chem_mixer/ex_act(severity, target) - if(severity > EXPLODE_LIGHT) - return ..() - - return FALSE - -/obj/item/storage/portable_chem_mixer/attackby(obj/item/I, mob/user, params) - if (is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container() && atom_storage.locked) - var/obj/item/reagent_containers/B = I - . = TRUE //no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - update_appearance() - ui_interact(user) - return - return ..() - -/** - * Updates the contents of the portable chemical mixer - * - * A list of dispensable reagents is created by iterating through each source beaker in the portable chemical beaker and reading its contents - */ -/obj/item/storage/portable_chem_mixer/proc/update_contents() - dispensable_reagents.Cut() - - for (var/obj/item/reagent_containers/B in contents) - var/key = B.reagents.get_master_reagent_id() - if (!(key in dispensable_reagents)) - dispensable_reagents[key] = list() - dispensable_reagents[key]["reagents"] = list() - dispensable_reagents[key]["reagents"] += B.reagents - - return - -/obj/item/storage/portable_chem_mixer/update_icon_state() - if(!atom_storage.locked) - icon_state = "portablechemicalmixer_open" - return ..() - if(beaker) - icon_state = "portablechemicalmixer_full" - return ..() - icon_state = "portablechemicalmixer_empty" - return ..() - - -/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) - if(!atom_storage.locked) - return ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - replace_beaker(user) - update_appearance() - -/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) - if(atom_storage.locked) - atom_storage.locked = STORAGE_NOT_LOCKED - else - atom_storage.locked = STORAGE_FULLY_LOCKED - if (!atom_storage.locked) - update_contents() - if (atom_storage.locked) - atom_storage.hide_contents(usr) - replace_beaker(user) - update_appearance() - playsound(src, 'sound/items/screwdriver2.ogg', 50) - return - -/** - * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently - * - * Checks if a valid user and a valid new beaker exist and attempts to replace the current beaker in the portable chemical mixer with the one in hand. Simply places the new beaker in if no beaker is currently loaded - * Arguments: - * * mob/living/user - The user who is trying to exchange beakers - * * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device - */ -/obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) - return FALSE - if(beaker) - user.put_in_hands(beaker) - beaker = null - if(new_beaker) - beaker = new_beaker - return TRUE - -/obj/item/storage/portable_chem_mixer/attack_hand(mob/user, list/modifiers) - if (loc != user) - return ..() - else - if (!atom_storage.locked) - return ..() - if(atom_storage?.locked) - ui_interact(user) - return - -/obj/item/storage/portable_chem_mixer/attack_self(mob/user) - if(loc == user) - if (atom_storage.locked) - ui_interact(user) - return - else - to_chat(user, span_notice("It looks like this device can be worn as a belt for increased accessibility. A label indicates that the 'CTRL'-button on the device may be used to close it after it has been filled with bottles and beakers of chemicals.")) - return - return - -/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) - . = ..() - if(ismob(loc)) - var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - -/obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PortableChemMixer", name) - - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - if(is_hallucinating) - // to not ruin the immersion by constantly changing the fake chemicals - ui.set_autoupdate(FALSE) - - ui.open() - -/obj/item/storage/portable_chem_mixer/ui_data(mob/user) - var/list/data = list() - data["amount"] = amount - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - data["beakerTransferAmounts"] = beaker ? list(1,5,10,30,50,100) : null - data["showpH"] = show_ph - var/chemicals[0] - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - for(var/re in dispensable_reagents) - var/value = dispensable_reagents[re] - var/datum/reagent/temp = GLOB.chemical_reagents_list[re] - if(temp) - var/chemname = temp.name - var/total_volume = 0 - var/total_ph = 0 - for (var/datum/reagents/rs in value["reagents"]) - total_volume += rs.total_volume - total_ph = rs.ph - if(is_hallucinating && prob(5)) - chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "volume" = total_volume, "pH" = total_ph))) - data["chemicals"] = chemicals - var/beakerContents[0] - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id" = ckey(R.name), "volume" = R.volume, "pH" = R.ph))) // list in a list because Byond merges the first list... - data["beakerCurrentpH"] = round(beaker.reagents.ph, 0.01) - data["beakerContents"] = beakerContents - - return data - -/obj/item/storage/portable_chem_mixer/ui_act(action, params) - . = ..() - if(.) - return - switch(action) - if("amount") - var/target = text2num(params["target"]) - amount = target - . = TRUE - if("dispense") - var/reagent_name = params["reagent"] - var/datum/reagent/reagent = GLOB.name2reagent[reagent_name] - var/entry = dispensable_reagents[reagent] - if(beaker && beaker.loc == src) - var/datum/reagents/R = beaker.reagents - var/actual = min(amount, 1000, R.maximum_volume - R.total_volume) - // todo: add check if we have enough reagent left - for (var/datum/reagents/source in entry["reagents"]) - var/to_transfer = min(source.total_volume, actual) - source.trans_to(beaker, to_transfer) - actual -= to_transfer - if (actual <= 0) - break - . = TRUE - if("remove") - var/amount = text2num(params["amount"]) - beaker.reagents.remove_all(amount) - . = TRUE - if("eject") - replace_beaker(usr) - update_appearance() - . = TRUE diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 6c0cd4017e3..0849c6c2b26 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -124,7 +124,11 @@ span_hear("You hear a click.")) message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(src)]") user.log_message("activated a powersink", LOG_GAME) - notify_ghosts("[user] has activated a power sink!", source = src, header = "Shocking News!") + notify_ghosts( + "[user] has activated a power sink!", + source = src, + header = "Shocking News!", + ) set_mode(OPERATING) if(OPERATING) @@ -188,7 +192,11 @@ if (!warning_given) warning_given = TRUE message_admins("Power sink at ([x],[y],[z] - JMP) has reached [ALERT]% of max heat. Explosion imminent.") - notify_ghosts("[src] is about to reach critical heat capacity!", source = src, header = "Power Sunk") + notify_ghosts( + "[src] is about to reach critical heat capacity!", + source = src, + header = "Power Sunk", + ) playsound(src, 'sound/effects/screech.ogg', 100, TRUE, TRUE) if(internal_heat >= max_heat) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 13a054ec8e4..d6dd9bcc3a7 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -357,7 +357,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( make_syndie() /obj/item/radio/headset/screwdriver_act(mob/living/user, obj/item/tool) - user.set_machine(src) if(keyslot || keyslot2) for(var/ch_name in channels) SSradio.remove_object(src, GLOB.radiochannels[ch_name]) @@ -379,8 +378,6 @@ GLOBAL_LIST_INIT(channel_tokens, list( return TRUE /obj/item/radio/headset/attackby(obj/item/W, mob/user, params) - user.set_machine(src) - if(istype(W, /obj/item/encryptionkey)) if(keyslot && keyslot2) to_chat(user, span_warning("The headset can't hold another key!")) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index c680056667b..1bc96c35122 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -531,7 +531,7 @@ subspace_transmission = TRUE subspace_switchable = TRUE dog_fashion = null - canhear_range = 0 // Skyrat Edit - Stops borgs being a loudspeaker and contains it to the tile they're on + canhear_range = 0 /obj/item/radio/borg/resetChannels() . = ..() diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index b5cbb985570..cc94deb7da9 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -107,7 +107,14 @@ user.dropItemToGround(src) target.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD) arm() - notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, ghost_sound = 'sound/machines/beep.ogg', notify_volume = 75, header = "Reverse bear trap armed") + notify_ghosts( + "[user] put a reverse bear trap on [target]!", + source = src, + header = "Reverse bear trap armed", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ghost_sound = 'sound/machines/beep.ogg', + notify_volume = 75, + ) /obj/item/reverse_bear_trap/proc/snap() reset() diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 22753d96e16..b041478b2b4 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -330,19 +330,9 @@ if(advanced && humantarget.has_dna()) render_list += "Genetic Stability: [humantarget.dna.stability]%.\n" - // Species and body temperature + // Hulk and body temperature var/datum/species/targetspecies = humantarget.dna.species - var/mutant = humantarget.dna.check_mutation(/datum/mutation/human/hulk) \ - || targetspecies.mutantlungs != initial(targetspecies.mutantlungs) \ - || targetspecies.mutantbrain != initial(targetspecies.mutantbrain) \ - || targetspecies.mutantheart != initial(targetspecies.mutantheart) \ - || targetspecies.mutanteyes != initial(targetspecies.mutanteyes) \ - || targetspecies.mutantears != initial(targetspecies.mutantears) \ - || targetspecies.mutanttongue != initial(targetspecies.mutanttongue) \ - || targetspecies.mutantliver != initial(targetspecies.mutantliver) \ - || targetspecies.mutantstomach != initial(targetspecies.mutantstomach) \ - || targetspecies.mutantappendix != initial(targetspecies.mutantappendix) \ - || istype(humantarget.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/external/wings/functional) + var/mutant = humantarget.dna.check_mutation(/datum/mutation/human/hulk) render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]\n" var/core_temperature_message = "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)" diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 4003f947b8d..719789b2a93 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -158,7 +158,12 @@ // notify ghosts that someone's shaking a haunted eightball // and inform them of the message, (hopefully a yes/no question) selected_message = last_message - notify_ghosts("[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", source = src, action = NOTIFY_PLAY, header = "Magic eightball") + notify_ghosts( + "[user] is shaking [src], hoping to get an answer to \"[selected_message]\"", + source = src, + header = "Magic eightball", + click_interact = TRUE, + ) /obj/item/toy/eightball/haunted/get_answer() var/top_amount = 0 diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 2b157181023..da07843dec3 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -432,6 +432,18 @@ . = ..() AddComponent(/datum/component/customizable_reagent_holder, /obj/item/food/sushi/empty, CUSTOM_INGREDIENT_ICON_FILL, max_ingredients = 6) +/obj/item/food/seaweedsheet/saltcane + name = "dried saltcane sheathe" + desc = "A dried sheet of saltcane sheathe can used for making sushi. Use an ingredient on it to start making custom sushi!" + icon_state = "seaweedsheet" + food_reagents = list( + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/nutriment/vitamin = 1, + ) + tastes = list("seaweed" = 1) + foodtypes = VEGETABLES + w_class = WEIGHT_CLASS_SMALL + /obj/item/food/granola_bar name = "granola bar" desc = "A dried mixture of oats, nuts, fruits, and chocolate condensed into a chewy bar. Makes a great snack while space-hiking." diff --git a/code/game/objects/items/frog_statue.dm b/code/game/objects/items/frog_statue.dm new file mode 100644 index 00000000000..4d1bf9b6aa5 --- /dev/null +++ b/code/game/objects/items/frog_statue.dm @@ -0,0 +1,165 @@ +#define STATUE_FILTER "statue_filter" +#define FILTER_COLOR "#34b347" +#define RECALL_DURATION 3 SECONDS +#define MINIMUM_COLOR_VALUE 60 + +/obj/item/frog_statue + name = "frog statue" + desc = "Are they really comfortable living in this thing?" + icon = 'icons/obj/weapons/guns/magic.dmi' + icon_state = "frog_statue" + item_flags = NOBLUDGEON + ///our pet frog + var/mob/living/contained_frog + ///the summon cooldown + COOLDOWN_DECLARE(summon_cooldown) + +/obj/item/frog_statue/attack_self(mob/user) + . = ..() + + if(.) + return TRUE + + if(!COOLDOWN_FINISHED(src, summon_cooldown)) + user.balloon_alert(user, "recharging!") + return TRUE + + COOLDOWN_START(src, summon_cooldown, 30 SECONDS) + if(isnull(contained_frog)) + user.balloon_alert(user, "no frog linked!") + return TRUE + if(contained_frog.loc == src) + release_frog(user) + return TRUE + recall_frog(user) + return TRUE + +/obj/item/frog_statue/examine(mob/user) + . = ..() + if(!IS_WIZARD(user)) + return + if(isnull(contained_frog)) + . += span_notice("There are currently no frogs linked to this statue!") + else + . += span_notice("Using it will [contained_frog in src ? "release" : "recall"] the beast!") + +///resummon the frog into its home +/obj/item/frog_statue/proc/recall_frog(mob/user) + playsound(src, 'sound/items/frog_statue_release.ogg', 20) + user.Beam(contained_frog, icon_state = "lichbeam", time = RECALL_DURATION) + animate(contained_frog, transform = matrix().Scale(0.3, 0.3), time = RECALL_DURATION) + addtimer(CALLBACK(contained_frog, TYPE_PROC_REF(/atom/movable, forceMove), src), RECALL_DURATION) + +///release the frog to wreak havoc +/obj/item/frog_statue/proc/release_frog(mob/user) + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(2, user)) + if(possible_turf.is_blocked_turf() || isopenspaceturf(possible_turf)) + continue + possible_turfs += possible_turf + playsound(src, 'sound/items/frog_statue_release.ogg', 50, TRUE) + var/turf/final_turf = length(possible_turfs) ? pick(possible_turfs) : get_turf(src) + user.Beam(final_turf, icon_state = "lichbeam", time = RECALL_DURATION) + contained_frog.forceMove(final_turf) + animate(contained_frog, transform = matrix(), time = RECALL_DURATION) + REMOVE_TRAIT(contained_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + +///set this frog as our inhabitor +/obj/item/frog_statue/proc/set_new_frog(mob/living/frog) + frog.transform = frog.transform.Scale(0.3, 0.3) + contained_frog = frog + animate_filter() + RegisterSignal(frog, COMSIG_QDELETING, PROC_REF(render_obsolete)) + +/// we have lost our frog, let out a scream! +/obj/item/frog_statue/proc/render_obsolete(datum/source) + SIGNAL_HANDLER + + contained_frog = null + playsound(src, 'sound/magic/demon_dies.ogg', 50, TRUE) + UnregisterSignal(source, COMSIG_QDELETING) + +/obj/item/frog_statue/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(arrived != contained_frog) + return + animate_filter() + ADD_TRAIT(contained_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + if(contained_frog.health < contained_frog.maxHealth) + START_PROCESSING(SSobj, src) + +/obj/item/frog_statue/process(seconds_per_tick) + if(isnull(contained_frog)) + return + if(contained_frog.health == contained_frog.maxHealth) + STOP_PROCESSING(SSobj, src) + return + if(contained_frog.stat == DEAD) + contained_frog.revive() + contained_frog.adjustBruteLoss(-5) + +/obj/item/frog_statue/proc/animate_filter(mob/living/frog) + add_filter(STATUE_FILTER, 2, list("type" = "outline", "color" = FILTER_COLOR, "size" = 1)) + var/filter = get_filter(STATUE_FILTER) + animate(filter, alpha = 230, time = 2 SECONDS, loop = -1) + animate(alpha = 30, time = 0.5 SECONDS) + +/obj/item/frog_statue/Exited(atom/movable/gone, direction) + . = ..() + if(gone != contained_frog) + return + clear_filters() + +/obj/item/frog_contract + name = "frog contract" + desc = "Create a pact with an elder frog! This great beast will be your mount, protector, but most importantly your friend." + icon = 'icons/obj/scrolls.dmi' + icon_state = "scroll" + +/obj/item/frog_contract/attack_self(mob/user) + . = ..() + if(.) + return TRUE + create_frog(user) + return TRUE + +///customize our own frog and trap it into the statue +/obj/item/frog_contract/proc/create_frog(mob/user) + var/obj/item/frog_statue/statue = new(null) + var/mob/living/basic/leaper/new_frog = new(statue) + statue.set_new_frog(new_frog) + new_frog.befriend(user) + ADD_TRAIT(new_frog, TRAIT_AI_PAUSED, MAGIC_TRAIT) + select_frog_name(user, new_frog) + select_frog_color(user, new_frog) + user.put_in_hands(statue) + qdel(src) + + + +/obj/item/frog_contract/proc/select_frog_name(mob/user, mob/new_frog) + var/frog_name = sanitize_name(tgui_input_text(user, "Choose your frog's name!", "Name pet toad", "leaper", MAX_NAME_LEN), allow_numbers = TRUE) + if(!frog_name) + to_chat(user, span_warning("Please enter a valid name.")) + select_frog_name(user, new_frog) + return + new_frog.name = frog_name + +/obj/item/frog_contract/proc/select_frog_color(mob/user, mob/living/basic/leaper/new_frog) + var/frog_color = input(user, "Select your frog's color!" , "Pet toad color", COLOR_GREEN) as color|null + if(isnull(frog_color)) + to_chat(user, span_warning("Please choose a valid color.")) + select_frog_color(user, new_frog) + return + var/temp_hsv = RGBtoHSV(frog_color) + if(ReadHSV(temp_hsv)[3] < MINIMUM_COLOR_VALUE) + to_chat(user, span_danger("This color is too dark!")) + select_frog_color(user, new_frog) + return + new_frog.set_color_overlay(frog_color) + + +#undef STATUE_FILTER +#undef FILTER_COLOR +#undef RECALL_DURATION +#undef MINIMUM_COLOR_VALUE diff --git a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm new file mode 100644 index 00000000000..fd38d4f4ccb --- /dev/null +++ b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm @@ -0,0 +1,13 @@ +/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo + name = "SYNDICATE REBAR CROSSBOW OWNERS MANUAL" + desc = "This book will self destruct upon being read a second time." + crafting_recipe_types = list( + /datum/crafting_recipe/rebarsyndie + ) + uses = 1 + remarks = list( + "AIM FOR THE LEGS TO CRIPPLE YOUR FOES", + "USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO", + "BE AWARE OF THE SCOPE'S BLIND SPOTS", + "READ THIS BOOK AGAIN TO DUST IT.", + ) diff --git a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm index ab3e343b28d..3c66ce8affa 100644 --- a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm +++ b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm @@ -4,7 +4,7 @@ martial_name = "sleeping carp" desc = "A scroll filled with strange markings. It seems to be drawings of some sort of martial art." greet = "You have learned the ancient martial art of the Sleeping Carp! Your hand-to-hand combat has become much more effective, and you are now able to deflect any projectiles \ - directed toward you while in Throw Mode. Your body has also hardened itself, granting extra protection against lasting wounds that would otherwise mount during extended combat. \ + directed toward you while in Combat Mode. Your body has also hardened itself, granting extra protection against lasting wounds that would otherwise mount during extended combat. \ However, you are also unable to use any ranged weaponry. You can learn more about your newfound art by using the Recall Teachings verb in the Sleeping Carp tab." icon = 'icons/obj/scrolls.dmi' icon_state = "sleepingcarp" diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 49304446c0b..f8ac3748de9 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -313,11 +313,11 @@ var/container_ratio = available_extract_volume / beaker_total_volume var/datum/reagents/tmp_holder = new/datum/reagents(beaker_total_volume) for(var/obj/item/container as anything in other_containers) - container.reagents.trans_to(tmp_holder, container.reagents.total_volume * container_ratio, 1, preserve_data = TRUE, no_react = TRUE) + container.reagents.trans_to(tmp_holder, container.reagents.total_volume * container_ratio, no_react = TRUE) for(var/obj/item/slime_extract/extract as anything in extracts) var/available_volume = extract.reagents.maximum_volume - extract.reagents.total_volume - tmp_holder.trans_to(extract, beaker_total_volume * (available_volume / available_extract_volume), 1, preserve_data = TRUE, no_react = TRUE) + tmp_holder.trans_to(extract, beaker_total_volume * (available_volume / available_extract_volume), no_react = TRUE) extract.reagents.handle_reactions() // Reaction handling in the transfer proc is reciprocal and we don't want to blow up the tmp holder early. if(QDELETED(extract)) @@ -390,7 +390,12 @@ var/datum/reagents/reactants = new(unit_spread) reactants.my_atom = src for(var/obj/item/reagent_containers/reagent_container in beakers) - reagent_container.reagents.trans_to(reactants, reagent_container.reagents.total_volume*fraction, threatscale, 1, 1) + reagent_container.reagents.trans_to( + reactants, + reagent_container.reagents.total_volume * fraction, + threatscale, + no_react = TRUE + ) chem_splash(get_turf(src), reagents, affected_area, list(reactants), ignition_temp, threatscale) var/turf/detonated_turf = get_turf(src) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index d5f3b0dec9d..9b44b2ed4a2 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -119,7 +119,12 @@ message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") user.log_message("planted [name] on [target.name] with a [det_time] second fuse.", LOG_ATTACK) - notify_ghosts("[user] has planted \a [src] on [target] with a [det_time] second fuse!", source = bomb_target, action = (isturf(target) ? NOTIFY_JUMP : NOTIFY_ORBIT), flashwindow = FALSE, header = "Explosive Planted") + notify_ghosts( + "[user] has planted \a [src] on [target] with a [det_time] second fuse!", + source = bomb_target, + header = "Explosive Planted", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) moveToNullspace() //Yep diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 12c06e6916a..83af88f003b 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -149,7 +149,11 @@ gender = MALE adjust_bloodthirst(1) force_bonus = HIS_GRACE_FORCE_BONUS * LAZYLEN(contents) - notify_ghosts("[user] has awoken His Grace!", source = src, action = NOTIFY_ORBIT, header = "All Hail His Grace!") + notify_ghosts( + "[user] has awoken His Grace!", + source = src, + header = "All Hail His Grace!", + ) playsound(user, 'sound/effects/pope_entry.ogg', 100) update_appearance() move_gracefully() diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 3f8bb3c41de..f491321090a 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -15,13 +15,16 @@ item_flags = NOBLUDGEON var/list/signs var/max_signs = 10 - var/creation_time = 0 //time to create a holosign in deciseconds. + //time to create a holosign in deciseconds. + var/creation_time = 0 + //holosign image that is projected var/holosign_type = /obj/structure/holosign/wetsign var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once /obj/item/holosign_creator/Initialize(mapload) . = ..() AddElement(/datum/element/openspace_item_click_handler) + RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/item/holosign_creator, on_color_change)) /obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) afterattack(target, user, proximity_flag, click_parameters) @@ -64,6 +67,9 @@ if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait. return . target_holosign = new holosign_type(get_turf(target), src) + target_holosign.add_hiddenprint(user) + if(color) + target_holosign.color = color return . /obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) @@ -71,16 +77,24 @@ /obj/item/holosign_creator/attack_self(mob/user) if(LAZYLEN(signs)) - for(var/H in signs) - qdel(H) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) balloon_alert(user, "holograms cleared") /obj/item/holosign_creator/Destroy() . = ..() if(LAZYLEN(signs)) - for(var/H in signs) - qdel(H) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) +/obj/item/holosign_creator/proc/on_color_change(obj/item/holosign_creator, mob/user, obj/item/toy/crayon/spraycan/spraycan, is_dark_color) + SIGNAL_HANDLER + if(!spraycan.actually_paints) + return + + if(LAZYLEN(signs)) + for(var/obj/structure/holosign/hologram as anything in signs) + hologram.color = color /obj/item/holosign_creator/janibarrier name = "custodial holobarrier projector" @@ -127,28 +141,28 @@ creation_time = 1.5 SECONDS max_signs = 9 holosign_type = /obj/structure/holosign/barrier/cyborg - var/shock = 0 + var/shock = FALSE /obj/item/holosign_creator/cyborg/attack_self(mob/user) if(iscyborg(user)) - var/mob/living/silicon/robot/R = user + var/mob/living/silicon/robot/borg = user if(shock) to_chat(user, span_notice("You clear all active holograms, and reset your projector to normal.")) holosign_type = /obj/structure/holosign/barrier/cyborg - creation_time = 5 - for(var/sign in signs) - qdel(sign) - shock = 0 + creation_time = 0.5 SECONDS + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) + shock = FALSE return - if(R.emagged && !shock) + if(borg.emagged && !shock) to_chat(user, span_warning("You clear all active holograms, and overload your energy projector!")) holosign_type = /obj/structure/holosign/barrier/cyborg/hacked - creation_time = 30 - for(var/sign in signs) - qdel(sign) - shock = 1 + creation_time = 3 SECONDS + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) + shock = TRUE return - for(var/sign in signs) - qdel(sign) + for(var/obj/structure/holosign/hologram as anything in signs) + qdel(hologram) balloon_alert(user, "holograms cleared") diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 1a801b0dcda..9a7da338885 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -150,7 +150,11 @@ log_bomber(null, null, src, "was primed for detonation (Timer:[delay],Explosive:[detonate_explosion],Range:[detonate_dev_range]/[detonate_heavy_range]/[detonate_light_range]/[detonate_fire_range])") active = TRUE if(detonate_explosion) //doesn't send a notification unless it's a genuine, exploding hot potato. - notify_ghosts("[user] has primed a Hot Potato!", source = src, action = NOTIFY_ORBIT, header = "Hot Hot Hot!") + notify_ghosts( + "[user] has primed a Hot Potato!", + source = src, + header = "Hot Hot Hot!", + ) /obj/item/hot_potato/proc/deactivate() update_appearance() diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index c9f961b594e..29627f377f2 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -124,11 +124,10 @@ notify_ghosts( "[imp_in] is about to detonate their explosive implant!", source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, - ghost_sound = 'sound/machines/warning-buzzer.ogg', header = "Tick Tick Tick...", - notify_volume = 75 + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ghost_sound = 'sound/machines/warning-buzzer.ogg', + notify_volume = 75, ) playsound(loc, 'sound/items/timer.ogg', 30, FALSE) diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index bfdc53ea916..538e4cac93d 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -11,8 +11,8 @@ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' //wow, lore - desc = "A hefty lead pipe.\nLead in an uncommon sight in this sector after being phased out due to employee health concerns. \ - \nThose of a more cynical disposition assume that the NT lead ban is a scheme to prevent divertion to Syndicate ammunition factories." + desc = "A hefty lead pipe.\nLead is an uncommon sight in this sector after being phased out due to employee health concerns. \ + \nThose of a more cynical disposition have claimed that the NT lead ban is a scheme to prevent diversion to Syndicate ammunition factories." force = 15 throwforce = 12 throw_range = 4 @@ -25,12 +25,12 @@ //Add lead material to this once implemented. /obj/item/stock_parts/cell/lead name = "lead-acid battery" - desc = "A type of primitive battery. It is quite large feels unexpectedly heavy." + desc = "A primitive battery. It is quite large and feels unexpectedly heavy." icon = 'icons/obj/maintenance_loot.dmi' icon_state = "lead_battery" throwforce = 10 maxcharge = 20000 //decent max charge - chargerate = 1400 //charging is about 30% less efficient compared lithium batteries. + chargerate = 1400 //charging is about 30% less efficient than lithium batteries. charge_light_type = null connector_type = "leadacid" rating = 2 //Kind of a mid-tier battery diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index 9d8cd8e9426..e89391f7887 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -232,228 +232,3 @@ Good luck! "} - -// Wiki books that are linked to the configured wiki link. - -// A book that links to the wiki -/obj/item/book/manual/wiki - var/page_link = "" - window_size = "970x710" - -/obj/item/book/manual/wiki/attack_self() - if(!book_data.content) - initialize_wikibook() - return ..() - -/obj/item/book/manual/wiki/proc/initialize_wikibook() - var/wikiurl = CONFIG_GET(string/wikiurl) - if(wikiurl) - var/wikiinfo = {" - - - - - - - - -

You start skimming through the manual...

- - - - - - "} - book_data.set_content(wikiinfo, trusted = TRUE) - -/obj/item/book/manual/wiki/chemistry - name = "Chemistry Textbook" - icon_state ="chemistrybook" - starting_author = "Nanotrasen" - starting_title = "Chemistry Textbook" - page_link = "Guide_to_chemistry" - -/obj/item/book/manual/wiki/engineering_construction - name = "Station Repairs and Construction" - icon_state ="bookEngineering" - starting_author = "Engineering Encyclopedia" - starting_title = "Station Repairs and Construction" - page_link = "Guide_to_construction" - -/obj/item/book/manual/wiki/engineering_guide - name = "Engineering Textbook" - icon_state ="bookEngineering2" - starting_author = "Engineering Encyclopedia" - starting_title = "Engineering Textbook" - page_link = "Guide_to_engineering" - -/obj/item/book/manual/wiki/security_space_law - name = "Corporate Regulations" //SKYRAT EDIT CHANGE - Original: "Space Law" - desc = "A set of Nanotrasen regulations for keeping law, order, and procedure followed within their space stations." //SKYRAT EDIT CHANGE - Original: "A set of Nanotrasen guidelines for keeping law and order on their space stations." - icon_state = "bookSpaceLaw" - starting_author = "Nanotrasen" - starting_title = "Corporate Regulations" //SKYRAT EDIT CHANGE - Original: "Space Law" - page_link = "Corporate_Regulations" //SKYRAT EDIT CHANGE - Original: "Space_Law" - -/obj/item/book/manual/wiki/security_space_law/suicide_act(mob/living/user) - user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) - return OXYLOSS - -/obj/item/book/manual/wiki/infections - name = "Infections - Making your own pandemic!" - icon_state = "bookInfections" - starting_author = "Infections Encyclopedia" - starting_title = "Infections - Making your own pandemic!" - page_link = "Infections" - -/obj/item/book/manual/wiki/telescience - name = "Teleportation Science - Bluespace for dummies!" - icon_state = "book7" - starting_author = "University of Bluespace" - starting_title = "Teleportation Science - Bluespace for dummies!" - page_link = "Guide_to_telescience" - -/obj/item/book/manual/wiki/engineering_hacking - name = "Hacking" - icon_state ="bookHacking" - starting_author = "Engineering Encyclopedia" - starting_title = "Hacking" - page_link = "Hacking" - -/obj/item/book/manual/wiki/detective - name = "The Film Noir: Proper Procedures for Investigations" - icon_state ="bookDetective" - starting_author = "Nanotrasen" - starting_title = "The Film Noir: Proper Procedures for Investigations" - page_link = "Detective" - -/obj/item/book/manual/wiki/barman_recipes - name = "Barman Recipes: Mixing Drinks and Changing Lives" - icon_state = "barbook" - starting_author = "Sir John Rose" - starting_title = "Barman Recipes: Mixing Drinks and Changing Lives" - page_link = "Guide_to_drinks" - -/obj/item/book/manual/wiki/robotics_cyborgs - name = "Robotics for Dummies" - icon_state = "borgbook" - starting_author = "XISC" - starting_title = "Robotics for Dummies" - page_link = "Guide_to_robotics" - -/obj/item/book/manual/wiki/research_and_development - name = "Research and Development 101" - icon_state = "rdbook" - starting_author = "Dr. L. Ight" - starting_title = "Research and Development 101" - page_link = "Guide_to_Research_and_Development" - -/obj/item/book/manual/wiki/experimentor - name = "Mentoring your Experiments" - icon_state = "rdbook" - starting_author = "Dr. H.P. Kritz" - starting_title = "Mentoring your Experiments" - page_link = "Experimentor" - -/obj/item/book/manual/wiki/cooking_to_serve_man - name = "To Serve Man" - desc = "It's a cookbook!" - icon_state ="cooked_book" - starting_author = "the Kanamitan Empire" - starting_title = "To Serve Man" - page_link = "Guide_to_food" - -/obj/item/book/manual/wiki/tcomms - name = "Subspace Telecommunications And You" - icon_state = "book3" - starting_author = "Engineering Encyclopedia" - starting_title = "Subspace Telecommunications And You" - page_link = "Guide_to_Telecommunications" - -/obj/item/book/manual/wiki/atmospherics - name = "Lexica Atmosia" - icon_state = "book5" - starting_author = "the City-state of Atmosia" - starting_title = "Lexica Atmosia" - page_link = "Guide_to_Atmospherics" - -/obj/item/book/manual/wiki/medicine - name = "Medical Space Compendium, Volume 638" - icon_state = "book8" - starting_author = "Medical Journal" - starting_title = "Medical Space Compendium, Volume 638" - page_link = "Guide_to_medicine" - -/obj/item/book/manual/wiki/surgery - name = "Brain Surgery for Dummies" - icon_state = "book4" - starting_author = "Dr. F. Fran" - starting_title = "Brain Surgery for Dummies" - page_link = "Surgery" - -/obj/item/book/manual/wiki/grenades - name = "DIY Chemical Grenades" - icon_state = "book2" - starting_author = "W. Powell" - starting_title = "DIY Chemical Grenades" - page_link = "Grenade" - -/obj/item/book/manual/wiki/ordnance - name = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" - icon_state = "book6" - starting_author = "Cuban Pete" - starting_title = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" - page_link = "Guide_to_toxins" - -/obj/item/book/manual/wiki/ordnance/suicide_act(mob/living/user) - var/mob/living/carbon/human/H = user - user.visible_message(span_suicide("[user] starts dancing to the Rhumba Beat! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/effects/spray.ogg', 10, TRUE, -3) - if (!QDELETED(H)) - H.emote("spin") - sleep(2 SECONDS) - for(var/obj/item/W in H) - H.dropItemToGround(W) - if(prob(50)) - step(W, pick(GLOB.alldirs)) - ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) - for(var/obj/item/bodypart/part as anything in H.bodyparts) - part.adjustBleedStacks(5) - H.gib_animation() - sleep(0.3 SECONDS) - H.adjustBruteLoss(1000) //to make the body super-bloody - // if we use gib() then the body gets deleted - H.spawn_gibs() - H.spill_organs(DROP_ALL_REMAINS) - H.spread_bodyparts(DROP_BRAIN) - return BRUTELOSS - -/obj/item/book/manual/wiki/plumbing - name = "Chemical Factories Without Narcotics" - icon_state ="plumbingbook" - starting_author = "Nanotrasen" - starting_title = "Chemical Factories Without Narcotics" - page_link = "Guide_to_plumbing" - -/obj/item/book/manual/wiki/cytology - name = "Unethically Grown Organics" - icon_state ="cytologybook" - starting_author = "Kryson" - starting_title = "Unethically Grown Organics" - page_link = "Guide_to_cytology" - -/obj/item/book/manual/wiki/tgc - name = "Tactical Game Cards - Player's Handbook" - icon_state = "tgcbook" - starting_author = "Nanotrasen Edu-tainment Division" - starting_title = "Tactical Game Cards - Player's Handbook" - page_link = "Tactical_Game_Cards" diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index 6777d7934ff..19a3c2bc39c 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -42,22 +42,22 @@ /// Boolean on whether people with chunky fingers can use this baton. var/chunky_finger_usable = FALSE - /// The context to show when the baton is active and targetting a living thing + /// The context to show when the baton is active and targeting a living thing var/context_living_target_active = "Stun" - /// The context to show when the baton is active and targetting a living thing in combat mode + /// The context to show when the baton is active and targeting a living thing in combat mode var/context_living_target_active_combat_mode = "Stun" - /// The context to show when the baton is inactive and targetting a living thing + /// The context to show when the baton is inactive and targeting a living thing var/context_living_target_inactive = "Prod" - /// The context to show when the baton is inactive and targetting a living thing in combat mode + /// The context to show when the baton is inactive and targeting a living thing in combat mode var/context_living_target_inactive_combat_mode = "Attack" - /// The RMB context to show when the baton is active and targetting a living thing + /// The RMB context to show when the baton is active and targeting a living thing var/context_living_rmb_active = "Attack" - /// The RMB context to show when the baton is inactive and targetting a living thing + /// The RMB context to show when the baton is inactive and targeting a living thing var/context_living_rmb_inactive = "Attack" /obj/item/melee/baton/Initialize(mapload) @@ -175,13 +175,10 @@ target.visible_message(desc["visible"], desc["local"]) /obj/item/melee/baton/proc/check_parried(mob/living/carbon/human/human_target, mob/living/user) - if(!ishuman(human_target)) - return - if (human_target.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + if (human_target.check_block(src, 0, "[user]'s [name]", MELEE_ATTACK)) playsound(human_target, 'sound/weapons/genhit.ogg', 50, TRUE) return TRUE - if(check_martial_counter(human_target, user)) - return TRUE + return FALSE /obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, modifiers, in_attack_chain = TRUE) if(!in_attack_chain && HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) @@ -632,7 +629,7 @@ /obj/item/melee/baton/security/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() - if(active && prob(throw_stun_chance) && isliving(hit_atom)) + if(!. && active && prob(throw_stun_chance) && isliving(hit_atom)) finalize_baton_attack(hit_atom, thrownby?.resolve(), in_attack_chain = FALSE) /obj/item/melee/baton/security/emp_act(severity) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 77f002c3f1e..2b15d9ddef2 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,14 +1,7 @@ +// Deprecated, you do not need to use this type for melee weapons. /obj/item/melee item_flags = NEEDS_PERMIT -/obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) - if(target.check_block()) - target.visible_message(span_danger("[target.name] blocks [src] and twists [user]'s arm behind [user.p_their()] back!"), - span_userdanger("You block the attack!")) - user.Stun(40) - return TRUE - - /obj/item/melee/chainofcommand name = "chain of command" desc = "A tool used by great men to placate the frothing masses." diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index cf859daf3f1..0b357c3c728 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -14,7 +14,7 @@ /// With what color will we paint with var/paint_color = COLOR_WHITE /// How many uses are left - var/paintleft = 10 + var/paintleft = 200 /obj/item/paint/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index 4db09ab3804..b8492b7ba30 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -28,7 +28,7 @@ return if(ishuman(attacked_mob)) var/mob/living/carbon/human/human = attacked_mob - if(human.check_shields(src, 0, "[attacked_mob]'s [name]", MELEE_ATTACK)) + if(human.check_block(src, 0, "[attacked_mob]'s [name]", MELEE_ATTACK)) playsound(attacked_mob, 'sound/weapons/genhit.ogg', 50, TRUE) return FALSE if(iscyborg(user)) diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index 26b5a4439ea..d34cb722763 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -364,7 +364,6 @@ /datum/status_effect/golem/titanium/proc/buff_arm(obj/item/bodypart/arm/arm) arm.unarmed_damage_low += damage_increase arm.unarmed_damage_high += damage_increase - arm.unarmed_stun_threshold += damage_increase // We don't want to make knockdown more likely RegisterSignal(arm, COMSIG_QDELETING, PROC_REF(on_arm_destroyed)) LAZYADD(modified_arms, arm) @@ -383,7 +382,6 @@ return arm.unarmed_damage_low -= damage_increase arm.unarmed_damage_high -= damage_increase - arm.unarmed_stun_threshold -= damage_increase UnregisterSignal(arm, COMSIG_QDELETING) /// Remove references to deleted arms diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index b5540a633f1..75c81f63b85 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -12,8 +12,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \ new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \ + new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \ )) - /obj/item/stack/rods name = "iron rod" desc = "Some rods. Can be used for building or something." diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 8b66bdb47d5..8eafe6d52e5 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -49,29 +49,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ /obj/item/stack/sheet/mineral/sandstone/thirty amount = 30 -/* - * Clay Bricks - */ - -GLOBAL_LIST_INIT(clay_recipes, list ( \ - new/datum/stack_recipe("clay stove", /obj/machinery/primitive_stove, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_MISC), \ - new/datum/stack_recipe("clay oven", /obj/machinery/oven/stone, 10, time = 5 SECONDS, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \ - )) - -/obj/item/stack/sheet/mineral/clay - name = "clay brick" - desc = "A heavy clay brick." - singular_name = "clay brick" - icon_state = "sheet-clay" - inhand_icon_state = null - throw_speed = 3 - throw_range = 5 - merge_type = /obj/item/stack/sheet/mineral/clay - -/obj/item/stack/sheet/mineral/clay/get_main_recipes() - . = ..() - . += GLOB.clay_recipes - /* * Sandbags */ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a8e20527b8c..9508730c8e7 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -303,6 +303,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7f789eaa514..d31dc5caea6 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -421,7 +421,7 @@ var/turf/covered_turf = builder.drop_location() if(!isturf(covered_turf)) return - var/turf/created_turf = covered_turf.PlaceOnTop(recipe.result_type, flags = CHANGETURF_INHERIT_AIR) + var/turf/created_turf = covered_turf.place_on_top(recipe.result_type, flags = CHANGETURF_INHERIT_AIR) builder.balloon_alert(builder, "placed [ispath(recipe.result_type, /turf/open) ? "floor" : "wall"]") if(recipe.applies_mats && LAZYLEN(mats_per_unit)) created_turf.set_custom_materials(mats_per_unit, recipe.req_amount / recipe.res_amount) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index ef19367d42a..67b260dcf09 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -81,7 +81,7 @@ if(!replace_plating) if(!use(1)) return - target_plating = target_plating.PlaceOnTop(placed_turf_path, flags = CHANGETURF_INHERIT_AIR) + target_plating = target_plating.place_on_top(placed_turf_path, flags = CHANGETURF_INHERIT_AIR) target_plating.setDir(turf_dir) playsound(target_plating, 'sound/weapons/genhit.ogg', 50, TRUE) return target_plating // Most executions should end here. diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 57c4a172017..01f075597c4 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -75,7 +75,7 @@ /obj/item/wirecutters, /obj/item/wrench, /obj/item/spess_knife, - /obj/item/melee/sickly_blade/knock, + /obj/item/melee/sickly_blade/lock, )) /obj/item/storage/belt/utility/chief @@ -725,19 +725,23 @@ /obj/item/storage/belt/bandolier name = "bandolier" - desc = "A bandolier for holding rifle and shotgun ammunition." + desc = "A bandolier for holding rifle shotgun, and bigger revolver caliber ammunition." icon_state = "bandolier" inhand_icon_state = "bandolier" worn_icon_state = "bandolier" /obj/item/storage/belt/bandolier/Initialize(mapload) . = ..() - atom_storage.max_slots = 18 - atom_storage.max_total_storage = 18 + atom_storage.max_slots = 24 + atom_storage.max_total_storage = 24 + atom_storage.numerical_stacking = TRUE + atom_storage.allow_quick_gather = TRUE + atom_storage.allow_quick_empty = TRUE atom_storage.numerical_stacking = TRUE atom_storage.set_holdable(list( /obj/item/ammo_casing/strilka310, /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/a357, )) /obj/item/storage/belt/fannypack diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 4d120b05a28..dc8357c3645 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -72,3 +72,41 @@ new /obj/item/ammo_box/magazine/sniper_rounds(src) new /obj/item/ammo_box/magazine/sniper_rounds(src) new /obj/item/ammo_box/magazine/sniper_rounds/disruptor(src) + +/** + * Secure briefcase + * Uses the lockable storage component to give it a lock. + */ +/obj/item/storage/briefcase/secure + name = "secure briefcase" + desc = "A large briefcase with a digital locking system." + icon_state = "secure" + base_icon_state = "secure" + inhand_icon_state = "sec-case" + +/obj/item/storage/briefcase/secure/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 21 + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + AddComponent(/datum/component/lockable_storage) + +///Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. +/obj/item/storage/briefcase/secure/syndie + force = 15 + +/obj/item/storage/briefcase/secure/syndie/PopulateContents() + . = ..() + for(var/iterator in 1 to 5) + new /obj/item/stack/spacecash/c1000(src) + +/// A briefcase that contains various sought-after spoils +/obj/item/storage/briefcase/secure/riches + +/obj/item/storage/briefcase/secure/riches/PopulateContents() + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/gun/ballistic/automatic/pistol(src) + new /obj/item/suppressor(src) + new /obj/item/melee/baton/telescopic(src) + new /obj/item/clothing/mask/balaclava(src) + new /obj/item/bodybag(src) + new /obj/item/soap/nanotrasen(src) diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm deleted file mode 100644 index 0d845b5254e..00000000000 --- a/code/game/objects/items/storage/secure.dm +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Absorbs /obj/item/secstorage. - * Reimplements it only slightly to use existing storage functionality. - * - * Contains: - * Secure Briefcase - * Wall Safe - */ - -///Generic Safe -/obj/item/storage/secure - name = "secstorage" - desc = "This shouldn't exist. If it does, create an issue report." - w_class = WEIGHT_CLASS_NORMAL - /// The code entered by the user - var/entered_code - /// The code that will open this safe - var/lock_code - /// Does this lock have a code set? - var/lock_set = FALSE - /// Is this lock currently being hacked? - var/lock_hacking = FALSE - /// Is the safe service panel open? - var/panel_open = FALSE - /// Is this door hackable? - var/can_hack_open = TRUE - -/obj/item/storage/secure/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL - atom_storage.max_total_storage = 14 - update_appearance() - -/obj/item/storage/secure/examine(mob/user) - . = ..() - if(can_hack_open) - . += "The service panel is currently [panel_open ? "unscrewed" : "screwed shut"]." - -/obj/item/storage/secure/update_icon_state() - . = ..() - icon_state = "[initial(icon_state)][atom_storage?.locked ? "_locked" : null]" - -/obj/item/storage/secure/tool_act(mob/living/user, obj/item/tool, tool_type, is_right_clicking) - if(can_hack_open && atom_storage.locked) - return ..() - else - return FALSE - -/obj/item/storage/secure/wirecutter_act(mob/living/user, obj/item/tool) - to_chat(user, span_danger("[src] is protected from this sort of tampering, yet it appears the internal memory wires can still be pulsed.")) - return - -/obj/item/storage/secure/screwdriver_act(mob/living/user, obj/item/tool) - if(tool.use_tool(src, user, 20)) - panel_open = !panel_open - balloon_alert(user, "panel [panel_open ? "opened" : "closed"]") - return TRUE - -/obj/item/storage/secure/multitool_act(mob/living/user, obj/item/tool) - . = TRUE - if(lock_hacking) - balloon_alert(user, "already hacking!") - return - if(panel_open) - balloon_alert(user, "hacking...") - lock_hacking = TRUE - if (tool.use_tool(src, user, 400)) - balloon_alert(user, "hacked") - lock_set = FALSE - - lock_hacking = FALSE - return - - balloon_alert(user, "unscrew panel!") - -/obj/item/storage/secure/attack_self(mob/user) - var/locked = atom_storage.locked - user.set_machine(src) - var/dat = "[src]
\n\nLock Status: [locked ? "LOCKED" : "UNLOCKED"]" - var/message = "Code" - if (!lock_set) - dat += "

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
" - message = "[entered_code]" - if (!locked) - message = "*****" - dat += "


\n>[message]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
" - user << browse(dat, "window=caselock;size=300x280") - -/obj/item/storage/secure/Topic(href, href_list) - ..() - if (usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || (get_dist(src, usr) > 1)) - return - if (href_list["type"]) - if (href_list["type"] == "E") - if (!lock_set && (length(entered_code) == 5) && (entered_code != "ERROR")) - lock_code = entered_code - lock_set = TRUE - else if ((entered_code == lock_code) && lock_set) - atom_storage.locked = STORAGE_NOT_LOCKED - update_appearance() - entered_code = null - else - entered_code = "ERROR" - else - if (href_list["type"] == "R") - atom_storage.locked = STORAGE_FULLY_LOCKED - update_appearance() - entered_code = null - atom_storage.hide_contents(usr) - else - entered_code += sanitize_text(href_list["type"]) - if (length(entered_code) > 5) - entered_code = "ERROR" - add_fingerprint(usr) - for(var/mob/M in viewers(1, loc)) - if ((M.client && M.machine == src)) - attack_self(M) - return - return - -///Secure Briefcase -/obj/item/storage/secure/briefcase - name = "secure briefcase" - icon = 'icons/obj/storage/case.dmi' - icon_state = "secure" - inhand_icon_state = "sec-case" - lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - desc = "A large briefcase with a digital locking system." - force = 8 - hitsound = SFX_SWING_HIT - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "whacks") - attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "whack") - -/obj/item/storage/secure/briefcase/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/briefcase/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 21 - atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL - -///Syndie variant of Secure Briefcase. Contains space cash, slightly more robust. -/obj/item/storage/secure/briefcase/syndie - force = 15 - -/obj/item/storage/secure/briefcase/syndie/PopulateContents() - ..() - for(var/iterator in 1 to 5) - new /obj/item/stack/spacecash/c1000(src) - -/// A briefcase that contains various sought-after spoils -/obj/item/storage/secure/briefcase/riches - -/obj/item/storage/secure/briefcase/riches/PopulateContents() - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/melee/baton/telescopic(src) - new /obj/item/clothing/mask/balaclava(src) - new /obj/item/bodybag(src) - new /obj/item/soap/nanotrasen(src) - -///Secure Safe -/obj/item/storage/secure/safe - name = "secure safe" - icon = 'icons/obj/storage/storage.dmi' - icon_state = "wall_safe" - desc = "Excellent for securing things away from grubby hands." - w_class = WEIGHT_CLASS_GIGANTIC - anchored = TRUE - density = FALSE - -MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe, 32) - -/obj/item/storage/secure/safe/Initialize(mapload) - . = ..() - atom_storage.set_holdable(cant_hold_list = list(/obj/item/storage/secure/briefcase)) - atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC - find_and_hang_on_wall() - -/obj/item/storage/secure/safe/PopulateContents() - new /obj/item/paper(src) - new /obj/item/pen(src) - -/obj/item/storage/secure/safe/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - return attack_self(user) - -/obj/item/storage/secure/safe/hos - name = "head of security's safe" - -/** - * This safe is meant to be damn robust. To break in, you're supposed to get creative, or use acid or an explosion. - * - * This makes the safe still possible to break in for someone who is prepared and capable enough, either through - * chemistry, botany or whatever else. - * - * The safe is also weak to explosions, so spending some early TC could allow an antag to blow it upen if they can - * get access to it. - */ -/obj/item/storage/secure/safe/caps_spare - name = "captain's spare ID safe" - desc = "In case of emergency, do not break glass. All Captains and Acting Captains are provided with codes to access this safe. \ -It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \ -There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\ -It remains quite flush against the wall, and there only seems to be enough room to fit something as slim as an ID card." - can_hack_open = FALSE - armor_type = /datum/armor/safe_caps_spare - max_integrity = 300 - color = "#ffdd33" - -MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/secure/safe/caps_spare, 32) - -/datum/armor/safe_caps_spare - melee = 100 - bullet = 100 - laser = 100 - energy = 100 - bomb = 70 - fire = 80 - acid = 70 - -/obj/item/storage/secure/safe/caps_spare/Initialize(mapload) - . = ..() - atom_storage.set_holdable(can_hold_list = list(/obj/item/card/id)) - lock_code = SSid_access.spare_id_safe_code - lock_set = TRUE - atom_storage.locked = STORAGE_FULLY_LOCKED - update_appearance() - -/obj/item/storage/secure/safe/caps_spare/PopulateContents() - new /obj/item/card/id/advanced/gold/captains_spare(src) - -/obj/item/storage/secure/safe/caps_spare/rust_heretic_act() - take_damage(damage_amount = 100, damage_type = BRUTE, damage_flag = MELEE, armour_penetration = 100) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index fd762510107..32bc3efc7a1 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -340,6 +340,14 @@ icon_state = "syndiebox" illustration = "writing_syndie" +/obj/item/storage/box/syndie_kit/rebarxbowsyndie + name = "Boxed Rebar Crossbow" + desc = "Now features instruction manual for making ammo." + +/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents() + new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) + new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src) + /obj/item/storage/box/syndie_kit/origami_bundle name = "origami kit" desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"." @@ -756,13 +764,13 @@ human_target.reagents.add_reagent(/datum/reagent/toxin, 2) return FALSE - /// If all the antag datums are 'fake', disallow induction! No self-antagging. + /// If all the antag datums are 'fake' or none exist, disallow induction! No self-antagging. var/faker for(var/datum/antagonist/antag_datum as anything in human_target.mind.antag_datums) if((antag_datum.antag_flags & FLAG_FAKE_ANTAG)) faker = TRUE - if(faker) // GTFO. Technically not foolproof but making a heartbreaker or a paradox clone a nuke op sounds hilarious + if(faker || isnull(human_target.mind.antag_datums)) // GTFO. Technically not foolproof but making a heartbreaker or a paradox clone a nuke op sounds hilarious to_chat(human_target, span_notice("Huh? Nothing happened? But you're starting to feel a little ill...")) human_target.reagents.add_reagent(/datum/reagent/toxin, 15) return FALSE diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 04eb28e236e..558c287e1e5 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -467,7 +467,7 @@ var/inj_am = injection_amount * seconds_per_tick var/used_amount = inj_am / usage_ratio - reagents.trans_to(user, used_amount, multiplier=usage_ratio, methods = INJECT) + reagents.trans_to(user, used_amount, usage_ratio, methods = INJECT) update_appearance() user.update_worn_back() //for overlays update diff --git a/code/game/objects/items/tongs.dm b/code/game/objects/items/tongs.dm index 8e7753bf488..81f71c6b345 100644 --- a/code/game/objects/items/tongs.dm +++ b/code/game/objects/items/tongs.dm @@ -73,7 +73,7 @@ update_appearance(UPDATE_ICON) /obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, params) - if (!isnull(tonged)) + if (!isnull(tonged) && tonged.force <= 0) // prevents tongs from giving food-weapons extra range attacked.attackby(tonged, user) return TRUE if (isliving(attacked)) @@ -86,6 +86,7 @@ attacked.do_pickup_animation(src) attacked.forceMove(src) update_appearance(UPDATE_ICON) + return TRUE /obj/item/kitchen/tongs/update_overlays() . = ..() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 11470620c49..485ff0863a8 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -70,6 +70,24 @@ desc = "It's a bulky crowbar. It almost seems deliberately designed to not be able to fit inside of a backpack." w_class = WEIGHT_CLASS_BULKY +/obj/item/crowbar/hammer + name = "claw hammer" + desc = "It's a heavy hammer with a pry bar on the back of its head. Nails aren't common in space, but this tool can still be used as a weapon or a crowbar." + force = 11 + w_class = WEIGHT_CLASS_NORMAL + icon = 'icons/obj/weapons/hammer.dmi' + icon_state = "clawhammer" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + inhand_icon_state = "clawhammer" + belt_icon_state = "clawhammer" + throwforce = 10 + throw_range = 5 + throw_speed = 3 + toolspeed = 2 + custom_materials = list(/datum/material/wood=SMALL_MATERIAL_AMOUNT*0.5, /datum/material/iron=SMALL_MATERIAL_AMOUNT*0.7) + wound_bonus = 35 + /obj/item/crowbar/large/heavy //from space ruin name = "heavy crowbar" desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.." diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8c949b36a79..b2cba11907a 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -113,6 +113,21 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_range = 5 armour_penetration = 35 +/obj/item/claymore/carrot + name = "carrot sword" + desc = "A full-sized carrot sword. Definitely \not\ good for the eyes, not anymore." + icon_state = "carrot_sword" + inhand_icon_state = "carrot_sword" + worn_icon_state = "carrot_sword" + flags_1 = NONE + force = 19 + throwforce = 7 + throw_speed = 3 + throw_range = 7 + armour_penetration = 5 + block_chance = 10 + resistance_flags = NONE + /obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." flags_1 = CONDUCT_1 diff --git a/code/game/objects/items/wiki_manuals.dm b/code/game/objects/items/wiki_manuals.dm new file mode 100644 index 00000000000..7209d76cc57 --- /dev/null +++ b/code/game/objects/items/wiki_manuals.dm @@ -0,0 +1,228 @@ +// Wiki books that are linked to the configured wiki link. + +/// The size of the window that the wiki books open in. +#define BOOK_WINDOW_BROWSE_SIZE "970x710" +/// This macro will resolve to code that will open up the associated wiki page in the window. +#define WIKI_PAGE_IFRAME(wikiurl, link_identifier) {" + + + + + + + +

You start skimming through the manual...

+ + + + "} + +// A book that links to the wiki +/obj/item/book/manual/wiki + starting_content = "Nanotrasen presently does not have any resources on this topic. If you would like to know more, contact your local Central Command representative." // safety + /// The ending URL of the page that we link to. + var/page_link = "" + +/obj/item/book/manual/wiki/display_content(mob/living/user) + var/wiki_url = CONFIG_GET(string/wikiurl) + if(!wiki_url) + user.balloon_alert(user, "this book is empty!") + return + + credit_book_to_reader(user) + DIRECT_OUTPUT(user, browse(WIKI_PAGE_IFRAME(wiki_url, page_link), "window=manual;size=[BOOK_WINDOW_BROWSE_SIZE]")) // if you change this GUARANTEE that it works. + +/obj/item/book/manual/wiki/chemistry + name = "Chemistry Textbook" + icon_state ="chemistrybook" + starting_author = "Nanotrasen" + starting_title = "Chemistry Textbook" + page_link = "Guide_to_chemistry" + +/obj/item/book/manual/wiki/engineering_construction + name = "Station Repairs and Construction" + icon_state ="bookEngineering" + starting_author = "Engineering Encyclopedia" + starting_title = "Station Repairs and Construction" + page_link = "Guide_to_construction" + +/obj/item/book/manual/wiki/engineering_guide + name = "Engineering Textbook" + icon_state ="bookEngineering2" + starting_author = "Engineering Encyclopedia" + starting_title = "Engineering Textbook" + page_link = "Guide_to_engineering" + +/obj/item/book/manual/wiki/security_space_law + name = "Space Law" + desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations." + icon_state = "bookSpaceLaw" + starting_author = "Nanotrasen" + starting_title = "Space Law" + page_link = "Space_Law" + +/obj/item/book/manual/wiki/security_space_law/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) + return OXYLOSS + +/obj/item/book/manual/wiki/infections + name = "Infections - Making your own pandemic!" + icon_state = "bookInfections" + starting_author = "Infections Encyclopedia" + starting_title = "Infections - Making your own pandemic!" + page_link = "Infections" + +/obj/item/book/manual/wiki/telescience + name = "Teleportation Science - Bluespace for dummies!" + icon_state = "book7" + starting_author = "University of Bluespace" + starting_title = "Teleportation Science - Bluespace for dummies!" + page_link = "Guide_to_telescience" + +/obj/item/book/manual/wiki/engineering_hacking + name = "Hacking" + icon_state ="bookHacking" + starting_author = "Engineering Encyclopedia" + starting_title = "Hacking" + page_link = "Hacking" + +/obj/item/book/manual/wiki/detective + name = "The Film Noir: Proper Procedures for Investigations" + icon_state ="bookDetective" + starting_author = "Nanotrasen" + starting_title = "The Film Noir: Proper Procedures for Investigations" + page_link = "Detective" + +/obj/item/book/manual/wiki/barman_recipes + name = "Barman Recipes: Mixing Drinks and Changing Lives" + icon_state = "barbook" + starting_author = "Sir John Rose" + starting_title = "Barman Recipes: Mixing Drinks and Changing Lives" + page_link = "Guide_to_drinks" + +/obj/item/book/manual/wiki/robotics_cyborgs + name = "Robotics for Dummies" + icon_state = "borgbook" + starting_author = "XISC" + starting_title = "Robotics for Dummies" + page_link = "Guide_to_robotics" + +/obj/item/book/manual/wiki/research_and_development + name = "Research and Development 101" + icon_state = "rdbook" + starting_author = "Dr. L. Ight" + starting_title = "Research and Development 101" + page_link = "Guide_to_Research_and_Development" + +/obj/item/book/manual/wiki/experimentor + name = "Mentoring your Experiments" + icon_state = "rdbook" + starting_author = "Dr. H.P. Kritz" + starting_title = "Mentoring your Experiments" + page_link = "Experimentor" + +/obj/item/book/manual/wiki/cooking_to_serve_man + name = "To Serve Man" + desc = "It's a cookbook!" + icon_state ="cooked_book" + starting_author = "the Kanamitan Empire" + starting_title = "To Serve Man" + page_link = "Guide_to_food" + +/obj/item/book/manual/wiki/tcomms + name = "Subspace Telecommunications And You" + icon_state = "book3" + starting_author = "Engineering Encyclopedia" + starting_title = "Subspace Telecommunications And You" + page_link = "Guide_to_Telecommunications" + +/obj/item/book/manual/wiki/atmospherics + name = "Lexica Atmosia" + icon_state = "book5" + starting_author = "the City-state of Atmosia" + starting_title = "Lexica Atmosia" + page_link = "Guide_to_Atmospherics" + +/obj/item/book/manual/wiki/medicine + name = "Medical Space Compendium, Volume 638" + icon_state = "book8" + starting_author = "Medical Journal" + starting_title = "Medical Space Compendium, Volume 638" + page_link = "Guide_to_medicine" + +/obj/item/book/manual/wiki/surgery + name = "Brain Surgery for Dummies" + icon_state = "book4" + starting_author = "Dr. F. Fran" + starting_title = "Brain Surgery for Dummies" + page_link = "Surgery" + +/obj/item/book/manual/wiki/grenades + name = "DIY Chemical Grenades" + icon_state = "book2" + starting_author = "W. Powell" + starting_title = "DIY Chemical Grenades" + page_link = "Grenade" + +/obj/item/book/manual/wiki/ordnance + name = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" + icon_state = "book6" + starting_author = "Cuban Pete" + starting_title = "Ordnance for Dummies or: How I Learned to Stop Worrying and Love the Maxcap" + page_link = "Guide_to_toxins" + +/obj/item/book/manual/wiki/ordnance/suicide_act(mob/living/user) + var/mob/living/carbon/human/H = user + user.visible_message(span_suicide("[user] starts dancing to the Rhumba Beat! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(loc, 'sound/effects/spray.ogg', 10, TRUE, -3) + if (!QDELETED(H)) + H.emote("spin") + sleep(2 SECONDS) + for(var/obj/item/W in H) + H.dropItemToGround(W) + if(prob(50)) + step(W, pick(GLOB.alldirs)) + ADD_TRAIT(H, TRAIT_DISFIGURED, TRAIT_GENERIC) + for(var/obj/item/bodypart/part as anything in H.bodyparts) + part.adjustBleedStacks(5) + H.gib_animation() + sleep(0.3 SECONDS) + H.adjustBruteLoss(1000) //to make the body super-bloody + // if we use gib() then the body gets deleted + H.spawn_gibs() + H.spill_organs(DROP_ALL_REMAINS) + H.spread_bodyparts(DROP_BRAIN) + return BRUTELOSS + +/obj/item/book/manual/wiki/plumbing + name = "Chemical Factories Without Narcotics" + icon_state ="plumbingbook" + starting_author = "Nanotrasen" + starting_title = "Chemical Factories Without Narcotics" + page_link = "Guide_to_plumbing" + +/obj/item/book/manual/wiki/cytology + name = "Unethically Grown Organics" + icon_state ="cytologybook" + starting_author = "Kryson" + starting_title = "Unethically Grown Organics" + page_link = "Guide_to_cytology" + +/obj/item/book/manual/wiki/tgc + name = "Tactical Game Cards - Player's Handbook" + icon_state = "tgcbook" + starting_author = "Nanotrasen Edu-tainment Division" + starting_title = "Tactical Game Cards - Player's Handbook" + page_link = "Tactical_Game_Cards" + +#undef BOOK_WINDOW_BROWSE_SIZE +#undef WIKI_PAGE_IFRAME diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/wizard_weapons.dm similarity index 98% rename from code/game/objects/items/singularityhammer.dm rename to code/game/objects/items/wizard_weapons.dm index 50a97c215d8..b16f5be5bfd 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/wizard_weapons.dm @@ -77,12 +77,12 @@ return . /obj/item/mjollnir - name = "Mjolnir" + name = "Mjollnir" desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." icon = 'icons/obj/weapons/hammer.dmi' icon_state = "mjollnir0" base_icon_state = "mjollnir" - worn_icon_state = "mjolnir" + worn_icon_state = "mjollnir" lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' flags_1 = CONDUCT_1 diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index 12fa04dbe0b..dea2864fabe 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -101,11 +101,11 @@ to_chat(user, span_warning("[powder_keg] doesn't have at least 15u of gunpowder to fill [src]!")) return if(has_enough_gunpowder) - powder_keg.reagents.trans_id_to(src, /datum/reagent/gunpowder, amount = charge_size) + powder_keg.reagents.trans_to(src, charge_size, target_id = /datum/reagent/gunpowder) balloon_alert(user, "[src] loaded with gunpowder") return if(has_enough_alt_fuel) - powder_keg.reagents.trans_id_to(src, /datum/reagent/fuel, amount = charge_size) + powder_keg.reagents.trans_to(src, charge_size, target_id = /datum/reagent/fuel) balloon_alert(user, "[src] loaded with welding fuel") return ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index db1122465f3..7585a3bd374 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -804,13 +804,13 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(!opened) return user.visible_message(span_notice("[user] slices apart \the [src]."), - span_notice("You cut \the [src] apart weaponith \the [weapon]."), - span_hear("You hear weaponelding.")) + span_notice("You cut \the [src] apart with \the [weapon]."), + span_hear("You hear welding.")) deconstruct(TRUE) return else // for example cardboard box is cut with wirecutters user.visible_message(span_notice("[user] cut apart \the [src]."), \ - span_notice("You cut \the [src] apart weaponith \the [weapon].")) + span_notice("You cut \the [src] apart with \the [weapon].")) deconstruct(TRUE) return if (user.combat_mode) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 556230808bc..af0718f3d64 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -21,6 +21,7 @@ new /obj/item/storage/box/gas_miner_beacons(src) // SKYRAT EDIT ADDITION new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION new /obj/item/circuitboard/machine/rodstopper(src) //SKYRAT EDIT ADDITION + new /obj/item/card/id/departmental_budget/eng(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/engineering_chief/populate_contents_immediate() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 80dfd65b71f..030d4640e85 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -93,6 +93,7 @@ new /obj/item/circuitboard/machine/techfab/department/medical(src) new /obj/item/storage/photo_album/cmo(src) new /obj/item/storage/lockbox/medal/med(src) + new /obj/item/card/id/departmental_budget/med(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/chief_medical/populate_contents_immediate() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 674529967fd..1329f213d65 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -18,6 +18,7 @@ new /obj/item/circuitboard/machine/techfab/department/science(src) new /obj/item/storage/photo_album/rd(src) new /obj/item/storage/box/skillchips/science(src) + new /obj/item/card/id/departmental_budget/sci(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/research_director/populate_contents_immediate() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index ec46756140c..f25c9cfec5d 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -20,6 +20,7 @@ new /obj/item/gun/energy/e_gun(src) new /obj/item/door_remote/captain(src) new /obj/item/storage/photo_album/captain(src) + new /obj/item/card/id/departmental_budget(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/hop name = "head of personnel's locker" @@ -44,6 +45,7 @@ new /obj/item/circuitboard/machine/techfab/department/service(src) new /obj/item/storage/photo_album/hop(src) new /obj/item/storage/lockbox/medal/hop(src) + new /obj/item/card/id/departmental_budget/srv(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/hos name = "head of security's locker" @@ -65,6 +67,7 @@ new /obj/item/storage/belt/security/full(src) new /obj/item/circuitboard/machine/techfab/department/security(src) new /obj/item/storage/photo_album/hos(src) + new /obj/item/card/id/departmental_budget/sec(src) //SKYRAT EDIT ADDITION /obj/structure/closet/secure_closet/hos/populate_contents_immediate() . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 1f8322ad5dc..34f09ad25e7 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -37,12 +37,18 @@ if(isnull(crate_paint_jobs)) crate_paint_jobs = list( "Internals" = list("icon_state" = "o2crate"), - "Medical" = list("icon_state" = "medicalcrate"), + "Medical" = list("icon_state" = "medical"), + "Medical Plus" = list("icon_state" = "medicalcrate"), "Radiation" = list("icon_state" = "radiation"), "Hydrophonics" = list("icon_state" = "hydrocrate"), "Science" = list("icon_state" = "scicrate"), + "Robotics" = list("icon_state" = "robo"), "Solar" = list("icon_state" = "engi_e_crate"), - "Engineering" = list("icon_state" = "engi_crate") + "Engineering" = list("icon_state" = "engi_crate"), + "Atmospherics" = list("icon_state" = "atmos"), + "Cargo" = list("icon_state" = "cargo"), + "Mining" = list("icon_state" = "mining"), + "Command" = list("icon_state" = "centcom") ) if(paint_jobs) paint_jobs = crate_paint_jobs @@ -203,6 +209,10 @@ icon_state = "medicalcrate" base_icon_state = "medicalcrate" +/obj/structure/closet/crate/medical/department + icon_state = "medical" + base_icon_state = "medical" + /obj/structure/closet/crate/freezer desc = "A freezer." name = "freezer" @@ -259,6 +269,11 @@ new /obj/item/bodypart/leg/right/robot/surplus(src) new /obj/item/bodypart/leg/right/robot/surplus(src) +/obj/structure/closet/crate/freezer/food + name = "food icebox" + icon_state = "food" + base_icon_state = "food" + /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." name = "radiation crate" @@ -271,6 +286,21 @@ icon_state = "hydrocrate" base_icon_state = "hydrocrate" +/obj/structure/closet/crate/centcom + name = "centcom crate" + icon_state = "centcom" + base_icon_state = "centcom" + +/obj/structure/closet/crate/cargo + name = "cargo crate" + icon_state = "cargo" + base_icon_state = "cargo" + +/obj/structure/closet/crate/cargo/mining + name = "mining crate" + icon_state = "mining" + base_icon_state = "mining" + /obj/structure/closet/crate/engineering name = "engineering crate" icon_state = "engi_crate" @@ -280,6 +310,11 @@ icon_state = "engi_e_crate" base_icon_state = "engi_e_crate" +/obj/structure/closet/crate/engineering/atmos + name = "atmospherics crate" + icon_state = "atmos" + base_icon_state = "atmos" + /obj/structure/closet/crate/rcd desc = "A crate for the storage of an RCD." name = "\improper RCD crate" @@ -298,10 +333,15 @@ icon_state = "scicrate" base_icon_state = "scicrate" +/obj/structure/closet/crate/science/robo + name = "robotics crate" + icon_state = "robo" + base_icon_state = "robo" + /obj/structure/closet/crate/mod name = "MOD crate" - icon_state = "scicrate" - base_icon_state = "scicrate" + icon_state = "robo" + base_icon_state = "robo" /obj/structure/closet/crate/mod/PopulateContents() ..() @@ -325,6 +365,8 @@ /obj/structure/closet/crate/goldcrate name = "gold crate" + icon_state = "gold" + base_icon_state = "gold" /obj/structure/closet/crate/goldcrate/PopulateContents() ..() @@ -338,6 +380,8 @@ /obj/structure/closet/crate/silvercrate name = "silver crate" + icon_state = "silver" + base_icon_state = "silver" /obj/structure/closet/crate/silvercrate/PopulateContents() ..() diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 595481b707c..81f7b97a3c1 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -63,8 +63,8 @@ base_icon_state = "hydrosecurecrate" /obj/structure/closet/crate/secure/freezer //for consistency with other "freezer" closets/crates - desc = "An insulated crate with a lock on it, used to secure perishables." - name = "secure kitchen crate" + desc = "An icebox with a lock on it, used to secure perishables." + name = "secure kitchen icebox" icon_state = "kitchen_secure_crate" base_icon_state = "kitchen_secure_crate" paint_jobs = null @@ -79,18 +79,49 @@ . = ..() new /obj/effect/spawner/random/food_or_drink/pizzaparty(src) +/obj/structure/closet/crate/secure/centcom + name = "secure centcom crate" + icon_state = "centcom_secure" + base_icon_state = "centcom_secure" + +/obj/structure/closet/crate/secure/cargo + name = "secure cargo crate" + icon_state = "cargo_secure" + base_icon_state = "cargo_secure" + +/obj/structure/closet/crate/secure/cargo/mining + name = "secure mining crate" + icon_state = "mining_secure" + base_icon_state = "mining_secure" + +/obj/structure/closet/crate/secure/radiation + name = "secure radioation crate" + icon_state = "radiation_secure" + base_icon_state = "radiation_secure" + /obj/structure/closet/crate/secure/engineering desc = "A crate with a lock on it, painted in the scheme of the station's engineers." name = "secure engineering crate" icon_state = "engi_secure_crate" base_icon_state = "engi_secure_crate" +/obj/structure/closet/crate/secure/engineering/atmos + name = "secure atmospherics crate" + desc = "A crate with a lock on it, painted in the scheme of the station's atmospherics engineers." + icon_state = "atmos_secure" + base_icon_state = "atmos_secure" + /obj/structure/closet/crate/secure/science name = "secure science crate" desc = "A crate with a lock on it, painted in the scheme of the station's scientists." icon_state = "scisecurecrate" base_icon_state = "scisecurecrate" +/obj/structure/closet/crate/secure/science/robo + name = "robotics science crate" + icon_state = "robo_secure" + base_icon_state = "robo_secure" + /obj/structure/closet/crate/secure/owned name = "private crate" desc = "A crate cover designed to only open for who purchased its contents." diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index ff7cf8df03b..8403f822135 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -1,4 +1,4 @@ -/obj/structure/closet/crate/syndicrate +/obj/structure/closet/crate/secure/syndicrate name = "surplus syndicrate" desc = "A conspicuous crate with the Syndicate logo on it. You don't know how to open it." icon_state = "syndicrate" @@ -20,7 +20,7 @@ laser = 50 energy = 100 -/obj/structure/closet/crate/syndicrate/before_open(mob/living/user, force) +/obj/structure/closet/crate/secure/syndicrate/before_open(mob/living/user, force) . = ..() if(!.) return FALSE @@ -31,7 +31,7 @@ return TRUE -/obj/structure/closet/crate/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) +/obj/structure/closet/crate/secure/syndicrate/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) if(created_items) return ..() if(damage_amount < DAMAGE_PRECISION) @@ -43,7 +43,7 @@ qdel(src) ///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key -/obj/structure/closet/crate/syndicrate/attackby(obj/item/item, mob/user, params) +/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, params) if(!istype(item, /obj/item/syndicrate_key) || created_items) return ..() created_items = TRUE @@ -53,17 +53,22 @@ qdel(item) to_chat(user, span_notice("You twist the key into both locks at once, opening the crate.")) playsound(src, 'sound/machines/boltsup.ogg', 50, vary = FALSE) - update_appearance(updates = UPDATE_OVERLAYS) togglelock(user) -/obj/structure/closet/crate/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/structure/closet/crate/secure/syndicrate/togglelock(mob/living/user, silent) + if(broken || !created_items) + return + if(iscarbon(user)) + add_fingerprint(user) + locked = !locked + user.visible_message( + span_notice("[user] [locked ? "locks" : "unlocks"] [src]."), + span_notice("You [locked ? "locked" : "unlocked"] [src]."), + ) + update_appearance() -///syndicrate has a unique overlay for being unlocked -/obj/structure/closet/crate/syndicrate/closet_update_overlays(list/new_overlays) - . = new_overlays - if(created_items) - . += "syndicrate_unlocked" +/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/syndicrate_key name = "syndicrate key" @@ -79,7 +84,7 @@ /obj/item/syndicrate_key/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - var/obj/structure/closet/crate/syndicrate/target_structure = target + var/obj/structure/closet/crate/secure/syndicrate/target_structure = target if(!istype(target_structure)) return NONE if(target_structure.created_items) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 8cb4b487c67..4f7b12e5303 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -79,7 +79,7 @@ /obj/structure/falsewall/proc/ChangeToWall(delete = 1) var/turf/T = get_turf(src) - T.PlaceOnTop(walltype) + T.place_on_top(walltype) if(delete) qdel(src) return T @@ -406,7 +406,7 @@ /obj/structure/falsewall/material/ChangeToWall(delete = 1) var/turf/current_turf = get_turf(src) - var/turf/closed/wall/material/new_wall = current_turf.PlaceOnTop(/turf/closed/wall/material) + var/turf/closed/wall/material/new_wall = current_turf.place_on_top(/turf/closed/wall/material) new_wall.set_custom_materials(custom_materials) if(delete) qdel(src) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 379e58fb64c..97a9ce8bd4d 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -167,7 +167,17 @@ fuel_added = 0 update_appearance() adjust_light() - particles = new /particles/smoke/burning/fireplace() + particles = new /particles/smoke/burning() + + switch(dir) + if(SOUTH) + particles.position = list(0, 29, 0) + if(EAST) + particles.position = list(-20, 9, 0) + if(WEST) + particles.position = list(20, 9, 0) + if(NORTH) // there is no icon state for SOUTH + QDEL_NULL(particles) /obj/structure/fireplace/proc/put_out() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 7b697368578..29381e2fe9e 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -99,7 +99,7 @@ return rod.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/iron) + T.place_on_top(/turf/closed/wall/mineral/iron) transfer_fingerprints_to(T) qdel(src) return @@ -149,7 +149,7 @@ return sheets.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall) + T.place_on_top(/turf/closed/wall) transfer_fingerprints_to(T) qdel(src) return @@ -194,7 +194,7 @@ return sheets.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/r_wall) + T.place_on_top(/turf/closed/wall/r_wall) transfer_fingerprints_to(T) qdel(src) return @@ -270,9 +270,9 @@ sheets.use(amount) var/turf/T = get_turf(src) if(sheets.walltype) - T.PlaceOnTop(sheets.walltype) + T.place_on_top(sheets.walltype) else - var/turf/newturf = T.PlaceOnTop(/turf/closed/wall/material) + var/turf/newturf = T.place_on_top(/turf/closed/wall/material) var/list/material_list = list() material_list[GET_MATERIAL_REF(sheets.material_type)] = SHEET_MATERIAL_AMOUNT * 2 if(material_list) @@ -452,7 +452,7 @@ return R.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/cult) + T.place_on_top(/turf/closed/wall/mineral/cult) qdel(src) else @@ -487,7 +487,7 @@ return FALSE var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall) + T.place_on_top(/turf/closed/wall) qdel(src) return TRUE if(RCD_DECONSTRUCT) @@ -524,7 +524,7 @@ return B.use(amount) var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/bronze) + T.place_on_top(/turf/closed/wall/mineral/bronze) qdel(src) else diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm index 4fe8e5edfc0..761db678b38 100644 --- a/code/game/objects/structures/gym/weight_machine.dm +++ b/code/game/objects/structures/gym/weight_machine.dm @@ -1,5 +1,6 @@ #define WORKOUT_XP 5 #define EXERCISE_STATUS_DURATION 20 SECONDS +#define SAFE_DRUNK_LEVEL 39 /obj/structure/weightmachine name = "chest press machine" @@ -18,6 +19,9 @@ ///The weight action we give to people that buckle themselves to us. var/datum/action/push_weights/weight_action + ///message when drunk user fails to use the machine + var/drunk_message = "You try for a new record and pull through! Through a muscle that is." + ///List of messages picked when using the machine. var/static/list/more_weight = list( "pushing it to the limit!", @@ -110,6 +114,14 @@ end_workout() return + // awlways a chance for a person not to fail horribly when drunk + if(user.get_drunk_amount() > SAFE_DRUNK_LEVEL && prob(min(user.get_drunk_amount(), 99))) + playsound(src,'sound/effects/bang.ogg', 50, TRUE) + to_chat(user, span_warning(drunk_message)) + user.take_bodypart_damage(rand(5, 10), wound_bonus = 10) + end_workout() + return + if(issilicon(user)) user.balloon_alert(user, pick(finished_silicon_message)) else @@ -157,5 +169,8 @@ pixel_shift_y = 5 + drunk_message = "You raise the bar over you trying to balance it with one hand, keyword tried." + #undef WORKOUT_XP #undef EXERCISE_STATUS_DURATION +#undef SAFE_DRUNK_LEVEL diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index f6d5b933494..e5eabc5defa 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -73,7 +73,7 @@ if(design_structure == /turf/open/floor/plating) var/turf/T = src.loc if(isgroundlessturf(T)) - T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + T.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) qdel(src) return TRUE if(design_structure == /obj/structure/lattice/catwalk) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 76363a1b07b..59ecf9a5327 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -26,7 +26,6 @@ integrity_failure = 0.5 max_integrity = 200 var/list/mirror_options = INERT_MIRROR_OPTIONS - var/magical_mirror = FALSE ///Flags this race must have to be selectable with this type of mirror. var/race_flags = MIRROR_MAGIC @@ -80,10 +79,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/attack_hand(mob/living/carbon/human/user) . = ..() - if(. || !ishuman(user) || broken || !magical_mirror) // SKYRAT EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken) + if(. || !ishuman(user) || broken || !istype(src, /obj/structure/mirror/magic)) // SKYRAT EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken) return TRUE - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH) && !magical_mirror) + if(!istype(src, /obj/structure/mirror/magic) && !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE //no tele-grooming (if nonmagical) return display_radial_menu(user) @@ -110,20 +109,26 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) return display_radial_menu(user) /obj/structure/mirror/proc/change_beard(mob/living/carbon/human/beard_dresser) - if(beard_dresser.physique != FEMALE && !magical_mirror) - var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) - if(isnull(new_style)) - return TRUE - if(HAS_TRAIT(beard_dresser, TRAIT_SHAVED)) - to_chat(beard_dresser, span_notice("If only growing back facial hair were that easy for you... The reminder makes you feel terrible.")) - beard_dresser.add_mood_event("bald_hair_day", /datum/mood_event/bald_reminder) - return TRUE - beard_dresser.set_facial_hairstyle(new_style, update = TRUE) - else + if(beard_dresser.physique == FEMALE) if(beard_dresser.facial_hairstyle == "Shaved") - to_chat(beard_dresser, span_notice("You realize you don't have any facial hair.")) - return - beard_dresser.set_facial_hairstyle("Shaved", update = TRUE) + balloon_alert(beard_dresser, "nothing to shave!") + return TRUE + var/shave_beard = tgui_alert(beard_dresser, "Shave your beard?", "Grooming", list("Yes", "No")) + if(shave_beard == "Yes") + beard_dresser.set_facial_hairstyle("Shaved", update = TRUE) + return TRUE + + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + + if(isnull(new_style)) + return TRUE + + if(HAS_TRAIT(beard_dresser, TRAIT_SHAVED)) + to_chat(beard_dresser, span_notice("If only growing back facial hair were that easy for you... The reminder makes you feel terrible.")) + beard_dresser.add_mood_event("bald_hair_day", /datum/mood_event/bald_reminder) + return TRUE + + beard_dresser.set_facial_hairstyle(new_style, update = TRUE) /obj/structure/mirror/proc/change_hair(mob/living/carbon/human/hairdresser) var/new_style = tgui_input_list(hairdresser, "Select a hairstyle", "Grooming", GLOB.hairstyles_list) @@ -317,7 +322,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) desc = "Turn and face the strange... face." icon_state = "magic_mirror" mirror_options = MAGIC_MIRROR_OPTIONS - magical_mirror = TRUE /obj/structure/mirror/magic/Initialize(mapload) . = ..() @@ -329,6 +333,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) selectable_races[initial(species_type.name)] = species_type selectable_races = sort_list(selectable_races) +/obj/structure/mirror/magic/change_beard(mob/living/carbon/human/beard_dresser) // magical mirrors do nothing but give you the damn beard + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + if(isnull(new_style)) + return TRUE + beard_dresser.set_facial_hairstyle(new_style, update = TRUE) + return TRUE + //Magic mirrors can change hair color as well /obj/structure/mirror/magic/change_hair(mob/living/carbon/human/user) var/hairchoice = tgui_alert(user, "Hairstyle or hair color?", "Change Hair", list("Style", "Color")) @@ -350,7 +361,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/magic/attack_hand(mob/living/carbon/human/user) . = ..() - if(!.) + if(.) return TRUE if(HAS_TRAIT(user, TRAIT_ADVANCEDTOOLUSER) && HAS_TRAIT(user, TRAIT_LITERATE)) @@ -378,11 +389,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) /obj/structure/mirror/magic/pride/attack_hand(mob/living/carbon/human/user) . = ..() - if(!.) + if(.) return TRUE - user.visible_message(span_danger("The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!"), \ - span_notice("Perfect. Much better! Now nobody will be able to resist yo-")) + user.visible_message( + span_bolddanger("The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!"), + span_notice("Perfect. Much better! Now nobody will be able to resist yo-"), + ) var/turf/user_turf = get_turf(user) var/list/levels = SSmapping.levels_by_trait(ZTRAIT_SPACE_RUINS) diff --git a/code/game/objects/structures/ore_containers.dm b/code/game/objects/structures/ore_containers.dm new file mode 100644 index 00000000000..6bc6f680116 --- /dev/null +++ b/code/game/objects/structures/ore_containers.dm @@ -0,0 +1,62 @@ +///structure to contain ores +/obj/structure/ore_container + +/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers) + if(istype(ore, /obj/item/stack/ore) && !user.combat_mode) + ore.forceMove(src) + return + return ..() + +/obj/structure/ore_container/Entered(atom/movable/mover) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/ore_container/Exited(atom/movable/mover) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/ore_container/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "OreContainer") + ui.open() + +/obj/structure/ore_container/ui_data(mob/user) + var/list/data = list() + data["ores"] = list() + for(var/obj/item/stack/ore/ore_item in contents) + data["ores"] += list(list( + "id" = REF(ore_item), + "name" = ore_item.name, + "amount" = ore_item.amount, + )) + return data + +/obj/structure/ore_container/ui_static_data(mob/user) + var/list/data = list() + data["ore_images"] = list() + for(var/obj/item/stack/ore_item as anything in subtypesof(/obj/item/stack/ore)) + data["ore_images"] += list(list( + "name" = initial(ore_item.name), + "icon" = icon2base64(getFlatIcon(image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state)), no_anim=TRUE)) + )) + return data + +/obj/structure/ore_container/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + + if(. || !isliving(ui.user)) + return TRUE + + var/mob/living/customer = ui.user + var/obj/item/stack_to_move + switch(action) + if("withdraw") + if(isnull(params["reference"])) + return TRUE + stack_to_move = locate(params["reference"]) in contents + if(isnull(stack_to_move)) + return TRUE + stack_to_move.forceMove(get_turf(customer)) + return TRUE diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 5aaed01e0b8..fa12148d330 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -17,6 +17,8 @@ var/climbable = TRUE ///Initial direction of the railing. var/ini_dir + ///item released when deconstructed + var/item_deconstruct = /obj/item/stack/rods /datum/armor/structure_railing melee = 35 @@ -98,13 +100,11 @@ return TRUE /obj/structure/railing/deconstruct(disassembled) - if(!(flags_1 & NODECONSTRUCT_1)) - if (istype(src,/obj/structure/railing/corner)) // Corner railings only cost 1 rod - var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 1) - transfer_fingerprints_to(rod) - else - var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 2) - transfer_fingerprints_to(rod) + if((flags_1 & NODECONSTRUCT_1)) + return ..() + var/rods_to_make = istype(src,/obj/structure/railing/corner) ? 1 : 2 + var/obj/rod = new item_deconstruct(drop_location(), rods_to_make) + transfer_fingerprints_to(rod) return ..() ///Implements behaviour that makes it possible to unanchor the railing. @@ -156,3 +156,35 @@ /obj/structure/railing/proc/check_anchored(checked_anchored) if(anchored == checked_anchored) return TRUE + + +/obj/structure/railing/wooden_fence + name = "wooden fence" + desc = "wooden fence meant to keep animals in." + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing" + item_deconstruct = /obj/item/stack/sheet/mineral/wood + plane = GAME_PLANE_FOV_HIDDEN + layer = ABOVE_MOB_LAYER + +/obj/structure/railing/wooden_fence/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_change_layer)) + adjust_dir_layer(dir) + +/obj/structure/railing/wooden_fence/proc/on_change_layer(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + adjust_dir_layer(new_dir) + +/obj/structure/railing/wooden_fence/proc/adjust_dir_layer(direction) + var/new_layer = (direction & NORTH) ? MOB_LAYER : ABOVE_MOB_LAYER + layer = new_layer + + +/obj/structure/railing/corner/end/wooden_fence + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing_corner" + +/obj/structure/railing/corner/end/flip/wooden_fence + icon = 'icons/obj/structures.dmi' + icon_state = "wooden_railing_corner_flipped" diff --git a/code/game/objects/structures/secure_safe.dm b/code/game/objects/structures/secure_safe.dm new file mode 100644 index 00000000000..c13fe9d6085 --- /dev/null +++ b/code/game/objects/structures/secure_safe.dm @@ -0,0 +1,73 @@ +/** + * Wall safes + * Holds items and uses the lockable storage component + * to allow people to lock items up. + */ +/obj/structure/secure_safe + name = "secure safe" + desc = "Excellent for securing things away from grubby hands." + icon = 'icons/obj/storage/storage.dmi' + icon_state = "wall_safe" + base_icon_state = "wall_safe" + anchored = TRUE + density = FALSE + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe, 32) + +/obj/structure/secure_safe/Initialize(mapload) + . = ..() + //this will create the storage for us. + AddComponent(/datum/component/lockable_storage) + find_and_hang_on_wall() + PopulateContents() + +/obj/structure/secure_safe/proc/PopulateContents() + new /obj/item/paper(src) + new /obj/item/pen(src) + +/obj/structure/secure_safe/hos + name = "head of security's safe" + +/** + * This safe is meant to be damn robust. To break in, you're supposed to get creative, or use acid or an explosion. + * + * This makes the safe still possible to break in for someone who is prepared and capable enough, either through + * chemistry, botany or whatever else. + * + * The safe is also weak to explosions, so spending some early TC could allow an antag to blow it upen if they can + * get access to it. + */ +/obj/structure/secure_safe/caps_spare + name = "captain's spare ID safe" + desc = "In case of emergency, do not break glass. All Captains and Acting Captains are provided with codes to access this safe. \ + It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \ + There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\ + It remains quite flush against the wall, and there only seems to be enough room to fit something as slim as an ID card." + armor_type = /datum/armor/safe_caps_spare + max_integrity = 300 + color = "#ffdd33" + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe/caps_spare, 32) + +/datum/armor/safe_caps_spare + melee = 100 + bullet = 100 + laser = 100 + energy = 100 + bomb = 70 + fire = 80 + acid = 70 + +/obj/structure/secure_safe/caps_spare/Initialize(mapload) + . = ..() + atom_storage.set_holdable(can_hold_list = list(/obj/item/card/id)) + AddComponent(/datum/component/lockable_storage, \ + lock_code = SSid_access.spare_id_safe_code, \ + can_hack_open = FALSE, \ + ) + +/obj/structure/secure_safe/caps_spare/PopulateContents() + new /obj/item/card/id/advanced/gold/captains_spare(src) + +/obj/structure/secure_safe/caps_spare/rust_heretic_act() + take_damage(damage_amount = 100, damage_type = BRUTE, damage_flag = MELEE, armour_penetration = 100) diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 2e6a2bd9a07..e8882251237 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -56,7 +56,11 @@ if(virgin) virgin = FALSE - notify_ghosts("Someone has begun playing with \a [src] in [get_area(src)]!", source = src, header = "Spirit board") + notify_ghosts( + "Someone has begun playing with \a [src] in [get_area(src)]!", + source = src, + header = "Spirit board", + ) var/new_planchette = tgui_input_list(ghost, "Choose the letter.", "Seance!", ghosty_options) if(isnull(new_planchette)) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 7219bb69c2e..c80e2da85d6 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -292,7 +292,7 @@ ..() return SECONDARY_ATTACK_CONTINUE_CHAIN -/obj/structure/table/proc/AfterPutItemOnTable(obj/item/I, mob/living/user) +/obj/structure/table/proc/AfterPutItemOnTable(obj/item/thing, mob/living/user) return /obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0) @@ -358,34 +358,52 @@ canSmoothWith = null icon = 'icons/obj/smooth_structures/rollingtable.dmi' icon_state = "rollingtable" - var/list/attached_items = list() + /// Lazylist of the items that we have on our surface. + var/list/attached_items = null /obj/structure/table/rolling/Initialize(mapload) . = ..() AddElement(/datum/element/noisy_movement) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_our_moved)) -/obj/structure/table/rolling/AfterPutItemOnTable(obj/item/I, mob/living/user) +/obj/structure/table/rolling/Destroy() + for(var/item in attached_items) + clear_item_reference(item) + LAZYNULL(attached_items) // safety + return ..() + +/obj/structure/table/rolling/AfterPutItemOnTable(obj/item/thing, mob/living/user) . = ..() - attached_items += I - RegisterSignal(I, COMSIG_MOVABLE_MOVED, PROC_REF(RemoveItemFromTable)) //Listen for the pickup event, unregister on pick-up so we aren't moved + LAZYADD(attached_items, thing) + RegisterSignal(thing, COMSIG_MOVABLE_MOVED, PROC_REF(on_item_moved)) -/obj/structure/table/rolling/proc/RemoveItemFromTable(datum/source, newloc, dir) +/// Handles cases where any attached item moves, with or without the table. If we get picked up or anything, unregister the signal so we don't move with the table after removal from the surface. +/obj/structure/table/rolling/proc/on_item_moved(datum/source, atom/old_loc, dir, forced, list/old_locs, momentum_change) SIGNAL_HANDLER - if(newloc != loc) //Did we not move with the table? because that shit's ok - return FALSE - attached_items -= source - UnregisterSignal(source, COMSIG_MOVABLE_MOVED) - -/obj/structure/table/rolling/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - if(!loc) + var/atom/thing = source // let it runtime if it doesn't work because that is mad wack + if(thing.loc == loc) // if we move with the table, move on return + + clear_item_reference(thing) + +/// Handles movement of the table itself, as well as moving along any atoms we have on our surface. +/obj/structure/table/rolling/proc/on_our_moved(datum/source, atom/old_loc, dir, forced, list/old_locs, momentum_change) + SIGNAL_HANDLER + if(isnull(loc)) // aw hell naw + return + for(var/mob/living/living_mob in old_loc.contents)//Kidnap everyone on top living_mob.forceMove(loc) + for(var/atom/movable/attached_movable as anything in attached_items) - if(!attached_movable.Move(loc)) - RemoveItemFromTable(attached_movable, attached_movable.loc) + if(!attached_movable.Move(loc)) // weird + clear_item_reference(attached_movable) // we check again in on_item_moved() just in case something's wacky tobaccy + +/// Removes the signal and the entrance from the list. +/obj/structure/table/rolling/proc/clear_item_reference(obj/item/thing) + UnregisterSignal(thing, COMSIG_MOVABLE_MOVED) + LAZYREMOVE(attached_items, thing) /* * Glass tables diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 124237fa597..1b6f1da06b6 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -8,7 +8,7 @@ alpha = 30 //initially quite hidden when not "recharging" var/flare_message = "the trap flares brightly!" var/last_trigger = 0 - var/time_between_triggers = 600 //takes a minute to recharge + var/time_between_triggers = 1 MINUTES var/charges = INFINITY var/antimagic_flags = MAGIC_RESISTANCE @@ -61,50 +61,50 @@ last_trigger = world.time charges-- if(charges <= 0) - animate(src, alpha = 0, time = 10) - QDEL_IN(src, 10) + animate(src, alpha = 0, time = 1 SECONDS) + QDEL_IN(src, 1 SECONDS) else animate(src, alpha = initial(alpha), time = time_between_triggers) -/obj/structure/trap/proc/on_entered(datum/source, atom/movable/AM) +/obj/structure/trap/proc/on_entered(datum/source, atom/movable/victim) SIGNAL_HANDLER if(last_trigger + time_between_triggers > world.time) return // Don't want the traps triggered by sparks, ghosts or projectiles. - if(is_type_in_typecache(AM, ignore_typecache)) + if(is_type_in_typecache(victim, ignore_typecache)) return - if(ismob(AM)) - var/mob/M = AM - if(M.mind in immune_minds) + if(ismob(victim)) + var/mob/mob_victim = victim + if(mob_victim.mind in immune_minds) return - if(M.can_block_magic(antimagic_flags)) + if(mob_victim.can_block_magic(antimagic_flags)) flare() return if(charges <= 0) return flare() - if(isliving(AM)) - trap_effect(AM) + if(isliving(victim)) + trap_effect(victim) -/obj/structure/trap/proc/trap_effect(mob/living/L) +/obj/structure/trap/proc/trap_effect(mob/living/victim) return /obj/structure/trap/stun name = "shock trap" desc = "A trap that will shock and render you immobile. You'd better avoid it." icon_state = "trap-shock" - var/stun_time = 100 + var/stun_time = 10 SECONDS -/obj/structure/trap/stun/trap_effect(mob/living/L) - L.electrocute_act(30, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. - L.Paralyze(stun_time) +/obj/structure/trap/stun/trap_effect(mob/living/victim) + victim.electrocute_act(30, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. + victim.Paralyze(stun_time) /obj/structure/trap/stun/hunter name = "bounty trap" desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. You'd better avoid it." icon = 'icons/obj/restraints.dmi' icon_state = "bounty_trap_on" - stun_time = 200 + stun_time = 20 SECONDS sparks = FALSE //the item version gives them off to prevent runtimes (see Destroy()) antimagic_flags = NONE var/obj/item/bountytrap/stored_item @@ -112,7 +112,7 @@ /obj/structure/trap/stun/hunter/Initialize(mapload) . = ..() - time_between_triggers = 10 + time_between_triggers = 1 SECONDS flare_message = "[src] snaps shut!" /obj/structure/trap/stun/hunter/Destroy() @@ -121,10 +121,10 @@ stored_item = null return ..() -/obj/structure/trap/stun/hunter/on_entered(datum/source, atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(!L.mind?.has_antag_datum(/datum/antagonist/fugitive)) +/obj/structure/trap/stun/hunter/on_entered(datum/source, atom/movable/victim) + if(isliving(victim)) + var/mob/living/living_victim = victim + if(!living_victim.mind?.has_antag_datum(/datum/antagonist/fugitive)) return caught = TRUE . = ..() @@ -169,11 +169,11 @@ radio.talk_into(src, "Fugitive has triggered this trap in the [get_area_name(src)]!", RADIO_CHANNEL_COMMON) /obj/item/bountytrap/attack_self(mob/living/user) - var/turf/T = get_turf(src) - if(!user || !user.transferItemToLoc(src, T))//visibly unequips + var/turf/target_turf = get_turf(src) + if(!user || !user.transferItemToLoc(src, target_turf))//visibly unequips return to_chat(user, span_notice("You set up [src]. Examine while close to disarm it.")) - stored_trap.forceMove(T)//moves trap to ground + stored_trap.forceMove(target_turf)//moves trap to ground forceMove(stored_trap)//moves item into trap /obj/item/bountytrap/Destroy() @@ -189,9 +189,9 @@ desc = "A trap that will set you ablaze. You'd better avoid it." icon_state = "trap-fire" -/obj/structure/trap/fire/trap_effect(mob/living/L) - to_chat(L, span_danger("Spontaneous combustion!")) - L.Paralyze(20) +/obj/structure/trap/fire/trap_effect(mob/living/victim) + to_chat(victim, span_danger("Spontaneous combustion!")) + victim.Paralyze(2 SECONDS) new /obj/effect/hotspot(get_turf(src)) /obj/structure/trap/chill @@ -199,11 +199,11 @@ desc = "A trap that will chill you to the bone. You'd better avoid it." icon_state = "trap-frost" -/obj/structure/trap/chill/trap_effect(mob/living/L) - to_chat(L, span_danger("You're frozen solid!")) - L.Paralyze(20) - L.adjust_bodytemperature(-300) - L.apply_status_effect(/datum/status_effect/freon) +/obj/structure/trap/chill/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("You're frozen solid!")) + victim.Paralyze(2 SECONDS) + victim.adjust_bodytemperature(-300) + victim.apply_status_effect(/datum/status_effect/freon) /obj/structure/trap/damage @@ -212,12 +212,12 @@ icon_state = "trap-earth" -/obj/structure/trap/damage/trap_effect(mob/living/L) - to_chat(L, span_danger("The ground quakes beneath your feet!")) - L.Paralyze(100) - L.adjustBruteLoss(35) +/obj/structure/trap/damage/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("The ground quakes beneath your feet!")) + victim.Paralyze(10 SECONDS) + victim.adjustBruteLoss(35) var/obj/structure/flora/rock/style_random/giant_rock = new(get_turf(src)) - QDEL_IN(giant_rock, 200) + QDEL_IN(giant_rock, 20 SECONDS) /obj/structure/trap/ward @@ -225,7 +225,7 @@ desc = "A divine barrier, It looks like you could destroy it with enough effort, or wait for it to dissipate..." icon_state = "ward" density = TRUE - time_between_triggers = 1200 //Exists for 2 minutes + time_between_triggers = 2 MINUTES /obj/structure/trap/ward/Initialize(mapload) . = ..() @@ -236,10 +236,10 @@ desc = "A trap that rings with unholy energy. You think you hear... chittering?" icon_state = "trap-cult" -/obj/structure/trap/cult/trap_effect(mob/living/L) - to_chat(L, span_danger("With a crack, the hostile constructs come out of hiding, stunning you!")) - L.electrocute_act(10, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. - L.Paralyze(20) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - QDEL_IN(src, 30) +/obj/structure/trap/cult/trap_effect(mob/living/victim) + to_chat(victim, span_bolddanger("With a crack, the hostile constructs come out of hiding, stunning you!")) + victim.electrocute_act(10, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. + victim.Paralyze(2 SECONDS) + new /mob/living/basic/construct/proteon/hostile(loc) + new /mob/living/basic/construct/proteon/hostile(loc) + QDEL_IN(src, 3 SECONDS) diff --git a/code/game/turfs/baseturfs.dm b/code/game/turfs/baseturfs.dm index 7eaac2f9ef0..ad016b63447 100644 --- a/code/game/turfs/baseturfs.dm +++ b/code/game/turfs/baseturfs.dm @@ -20,76 +20,49 @@ return ChangeTurf(baseturfs, baseturfs, flags) // The bottom baseturf will never go away -// Take the input as baseturfs and put it underneath the current baseturfs -// If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's -// If both or just new_baseturfs is provided they will be inserted below the existing baseturfs -/turf/proc/PlaceOnBottom(list/new_baseturfs, turf/fake_turf_type) - if(fake_turf_type) - if(!new_baseturfs) - if(!length(baseturfs)) - baseturfs = list(baseturfs) - var/list/old_baseturfs = baseturfs.Copy() - assemble_baseturfs(fake_turf_type) - if(!length(baseturfs)) - baseturfs = list(baseturfs) - baseturfs = baseturfs_string_list((baseturfs - (baseturfs & GLOB.blacklisted_automated_baseturfs)) + old_baseturfs, src) - return - else if(!length(new_baseturfs)) - new_baseturfs = list(new_baseturfs, fake_turf_type) - else - new_baseturfs += fake_turf_type - if(!length(baseturfs)) - baseturfs = list(baseturfs) - baseturfs = baseturfs_string_list(new_baseturfs + baseturfs, src) +/// Places the given turf on the bottom of the turf stack. +/turf/proc/place_on_bottom(turf/bottom_turf) + baseturfs = baseturfs_string_list( + list(initial(bottom_turf.baseturfs), bottom_turf) + baseturfs, + src + ) -// Make a new turf and put it on top -// The args behave identical to PlaceOnBottom except they go on top -// Things placed on top of closed turfs will ignore the topmost closed turf -// Returns the new turf -/turf/proc/PlaceOnTop(list/new_baseturfs, turf/fake_turf_type, flags) - var/area/turf_area = loc - if(new_baseturfs && !length(new_baseturfs)) - new_baseturfs = list(new_baseturfs) - flags = turf_area.PlaceOnTopReact(new_baseturfs, fake_turf_type, flags) // A hook so areas can modify the incoming args +/// Places a turf at the top of the stack +/turf/proc/place_on_top(turf/added_layer, flags) + var/list/turf/new_baseturfs = list() + + new_baseturfs.Add(baseturfs) + if(isopenturf(src)) + new_baseturfs.Add(type) + + return ChangeTurf(added_layer, new_baseturfs, flags) + +/// Places a turf on top - for map loading +/turf/proc/load_on_top(turf/added_layer, flags) + var/area/our_area = get_area(src) + flags = our_area.PlaceOnTopReact(list(baseturfs), added_layer, flags) - var/turf/newT if(flags & CHANGETURF_SKIP) // We haven't been initialized if(flags_1 & INITIALIZED_1) stack_trace("CHANGETURF_SKIP was used in a PlaceOnTop call for a turf that's initialized. This is a mistake. [src]([type])") assemble_baseturfs() - if(fake_turf_type) - if(!new_baseturfs) // If no baseturfs list then we want to create one from the turf type - if(!length(baseturfs)) - baseturfs = list(baseturfs) - var/list/old_baseturfs = baseturfs.Copy() - if(!isclosedturf(src)) - old_baseturfs += type - newT = ChangeTurf(fake_turf_type, null, flags) - newT.assemble_baseturfs(initial(fake_turf_type.baseturfs)) // The baseturfs list is created like roundstart - if(!length(newT.baseturfs)) - newT.baseturfs = list(baseturfs) - // The old baseturfs are put underneath, and we sort out the unwanted ones - newT.baseturfs = baseturfs_string_list(old_baseturfs + (newT.baseturfs - GLOB.blacklisted_automated_baseturfs), newT) - return newT - if(!length(baseturfs)) - baseturfs = list(baseturfs) - if(!isclosedturf(src)) - new_baseturfs = list(type) + new_baseturfs - baseturfs = baseturfs_string_list(baseturfs + new_baseturfs, src) - return ChangeTurf(fake_turf_type, null, flags) + + var/turf/new_turf if(!length(baseturfs)) baseturfs = list(baseturfs) + + var/list/old_baseturfs = baseturfs.Copy() if(!isclosedturf(src)) - baseturfs = baseturfs_string_list(baseturfs + type, src) - var/turf/change_type - if(length(new_baseturfs)) - change_type = new_baseturfs[new_baseturfs.len] - new_baseturfs.len-- - if(new_baseturfs.len) - baseturfs = baseturfs_string_list(baseturfs + new_baseturfs, src) - else - change_type = new_baseturfs - return ChangeTurf(change_type, null, flags) + old_baseturfs += type + + new_turf = ChangeTurf(added_layer, null, flags) + new_turf.assemble_baseturfs(initial(added_layer.baseturfs)) // The baseturfs list is created like roundstart + if(!length(new_turf.baseturfs)) + new_turf.baseturfs = list(baseturfs) + + // The old baseturfs are put underneath, and we sort out the unwanted ones + new_turf.baseturfs = baseturfs_string_list(old_baseturfs + (new_turf.baseturfs - GLOB.blacklisted_automated_baseturfs), new_turf) + return new_turf // Copy an existing turf and put it on top // Returns the new turf diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 8480b19940c..657d94d5c5f 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -90,7 +90,7 @@ */ /turf/open/proc/replace_floor(turf/open/new_floor_path, flags) if (!overfloor_placed && initial(new_floor_path.overfloor_placed)) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(new_floor_path, flags = flags) return ChangeTurf(new_floor_path, flags = flags) @@ -408,7 +408,7 @@ return playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) - var/turf/open/floor/plating/new_plating = PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + var/turf/open/floor/plating/new_plating = place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) if(lattice) qdel(lattice) else diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 3af4d12b176..48ab1ceca38 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -42,7 +42,7 @@ /turf/open/chasm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -76,6 +76,9 @@ /turf/open/chasm/proc/apply_components(mapload) AddComponent(/datum/component/chasm, GET_TURF_BELOW(src), mapload) +/turf/open/chasm/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(src, TRAIT_CHASM_STOPPED) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) + // Chasms for Lavaland, with planetary atmos and lava glow /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index a5e5c2c1beb..84d8cab4859 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -274,7 +274,7 @@ if(girder) return girder.rcd_act(user, the_rcd, rcd_data) - PlaceOnTop(/turf/closed/wall) + place_on_top(/turf/closed/wall) return TRUE if(RCD_WINDOWGRILLE) //check if we are building a window diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index ce34f760a67..b4fb5c8f2b4 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -156,7 +156,7 @@ /turf/open/floor/noslip/tram/Initialize(mapload) . = ..() - var/current_holiday_color = request_holiday_colors(src, PATTERN_VERTICAL_STRIPE) + var/current_holiday_color = request_station_colors(src, PATTERN_VERTICAL_STRIPE) || request_holiday_colors(src, PATTERN_VERTICAL_STRIPE) if(current_holiday_color) color = current_holiday_color else diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index a38338010d4..8b483cad262 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -64,7 +64,7 @@ to_chat(user, span_notice("You begin reinforcing the floor...")) if(do_after(user, 30, target = src)) if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine)) - PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR) playsound(src, 'sound/items/deconstruct.ogg', 80, TRUE) R.use(2) to_chat(user, span_notice("You reinforce the floor.")) @@ -100,7 +100,7 @@ return sheets.use(PLATE_REINFORCE_COST) playsound(src, 'sound/machines/creak.ogg', 100, vary = TRUE) - PlaceOnTop(/turf/open/floor/plating/reinforced) + place_on_top(/turf/open/floor/plating/reinforced) else if(!iscyborg(user)) balloon_alert(user, "too damaged, use a welding tool!") diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm index 1933b291aee..9b79313111f 100644 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ b/code/game/turfs/open/floor/plating/misc_plating.dm @@ -6,6 +6,10 @@ initial_gas_mix = OPENTURF_LOW_PRESSURE baseturfs = /turf/open/floor/plating/lowpressure +/turf/open/floor/plating/dumpsterair + initial_gas_mix = OPENTURF_DIRTY_ATMOS + temperature = 309 + /turf/open/floor/plating/icemoon icon_state = "plating" initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 623da55f104..567aa8710c7 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -160,7 +160,7 @@ /turf/open/lava/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -315,6 +315,9 @@ burn_living.adjust_fire_stacks(lava_firestacks * seconds_per_tick) burn_living.ignite_mob() +/turf/open/lava/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) || HAS_TRAIT(crossing, immunity_trait ) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) + /turf/open/lava/smooth name = "lava" baseturfs = /turf/open/lava/smooth diff --git a/code/game/turfs/open/misc.dm b/code/game/turfs/open/misc.dm index edf9e92c8a9..6459a29e99b 100644 --- a/code/game/turfs/open/misc.dm +++ b/code/game/turfs/open/misc.dm @@ -144,7 +144,7 @@ if(girder) return girder.rcd_act(user, the_rcd, rcd_data) - PlaceOnTop(/turf/closed/wall) + place_on_top(/turf/closed/wall) return TRUE if(RCD_WINDOWGRILLE) //check if we are building a window diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 8b8b7ca00c6..f6a9dd8b77d 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -145,7 +145,7 @@ /turf/open/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(rcd_data["[RCD_DESIGN_MODE]"] == RCD_TURF && rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -163,8 +163,11 @@ ChangeTurf(new_floor_path, flags = flags) return // Create plating under tiled floor we try to create directly onto the air - PlaceOnTop(/turf/open/floor/plating, flags = flags) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(/turf/open/floor/plating, flags = flags) + place_on_top(new_floor_path, flags = flags) + +/turf/open/openspace/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) /turf/open/openspace/icemoon name = "ice chasm" diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index 182e918dc33..d404870e1c8 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -229,7 +229,7 @@ GLOBAL_LIST_EMPTY(starlight) /turf/open/space/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) if(the_rcd.mode == RCD_TURF) if(rcd_data["[RCD_DESIGN_PATH]"] == /turf/open/floor/plating/rcd) - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE else if(rcd_data["[RCD_DESIGN_PATH]"] == /obj/structure/lattice/catwalk) var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, src) @@ -254,6 +254,9 @@ GLOBAL_LIST_EMPTY(starlight) destination_y = dest_y destination_z = dest_z +/turf/open/space/can_cross_safely(atom/movable/crossing) + return HAS_TRAIT(crossing, TRAIT_SPACEWALK) + /turf/open/space/openspace icon = 'icons/turf/floors.dmi' icon_state = MAP_SWITCH("pure_white", "invisible") @@ -343,5 +346,5 @@ GLOBAL_LIST_EMPTY(starlight) ChangeTurf(new_floor_path, flags = flags) return // Create plating under tiled floor we try to create directly onto space - PlaceOnTop(/turf/open/floor/plating, flags = flags) - PlaceOnTop(new_floor_path, flags = flags) + place_on_top(/turf/open/floor/plating, flags = flags) + place_on_top(new_floor_path, flags = flags) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index a16c5710521..2bee06e7c49 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(station_turfs) vis_flags = VIS_INHERIT_ID // Important for interaction with and visualization of openspace. luminosity = 1 light_height = LIGHTING_HEIGHT_FLOOR - + ///what /mob/oranges_ear instance is already assigned to us as there should only ever be one. ///used for guaranteeing there is only one oranges_ear per turf when assigned, speeds up view() iteration var/mob/oranges_ear/assigned_oranges_ear @@ -756,3 +756,7 @@ GLOBAL_LIST_EMPTY(station_turfs) explosive_resistance -= get_explosive_block() inherent_explosive_resistance = explosion_block explosive_resistance += get_explosive_block() + +/// Returns whether it is safe for an atom to move across this turf +/turf/proc/can_cross_safely(atom/movable/crossing) + return TRUE diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index abe777f276f..a2db78a175b 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -1,9 +1,7 @@ -GLOBAL_LIST_EMPTY(ntnet_relays) - ///Checks whether NTNet is available by ensuring at least one relay exists and is operational. /proc/find_functional_ntnet_relay() // Check all relays. If we have at least one working relay, ntos is up. - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) if(!relays.is_operational) continue return TRUE @@ -33,6 +31,19 @@ GLOBAL_LIST_EMPTY(ntnet_relays) var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay var/dos_dissipate = 0.5 // Amount of DoS "packets" dissipated over time. +/obj/machinery/ntnet_relay/Initialize(mapload) + . = ..() + uid = gl_uid++ + var/list/current_machines = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) + SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [current_machines.len]") + +/obj/machinery/ntnet_relay/Destroy() + . = ..() + var/list/machines_left = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) + SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [machines_left.len]") + for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) + D.target = null + D.error = "Connection to quantum relay severed" ///Proc called to change the value of the `relay_enabled` variable and append behavior related to its change. /obj/machinery/ntnet_relay/proc/set_relay_enabled(new_value) @@ -118,21 +129,3 @@ GLOBAL_LIST_EMPTY(ntnet_relays) SSmodular_computers.add_log("Quantum relay manually [relay_enabled ? "enabled" : "disabled"].") update_appearance() return TRUE - -/obj/machinery/ntnet_relay/Initialize(mapload) - uid = gl_uid++ - component_parts = list() - - GLOB.ntnet_relays += src - SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [GLOB.ntnet_relays.len]") - return ..() - -/obj/machinery/ntnet_relay/Destroy() - GLOB.ntnet_relays -= src - SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [GLOB.ntnet_relays.len]") - - for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) - D.target = null - D.error = "Connection to quantum relay severed" - - return ..() diff --git a/code/modules/actionspeed/modifiers/drugs.dm b/code/modules/actionspeed/modifiers/drugs.dm index 8309f7fb30f..bf06ddf8112 100644 --- a/code/modules/actionspeed/modifiers/drugs.dm +++ b/code/modules/actionspeed/modifiers/drugs.dm @@ -1,3 +1,2 @@ /datum/actionspeed_modifier/kronkaine multiplicative_slowdown = -0.5 - id = ACTIONSPEED_ID_STIMULANTS diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e10f43a8d65..0f93f3dd951 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -303,7 +303,7 @@ GLOBAL_PROTECT(admin_verbs_poll) add_verb(src, GLOB.admin_verbs_permissions) if(rights & R_STEALTH) add_verb(src, /client/proc/stealth) - if(rights & R_ADMIN) + if(rights & R_POLL) add_verb(src, GLOB.admin_verbs_poll) if(rights & R_SOUND) add_verb(src, GLOB.admin_verbs_sounds) @@ -396,10 +396,12 @@ GLOBAL_PROTECT(admin_verbs_poll) if(isnull(holder) || isnull(mob)) return if(mob.invisimin) + mob.add_to_all_human_data_huds() mob.invisimin = FALSE mob.RemoveInvisibility(INVISIBILITY_SOURCE_INVISIMIN) to_chat(mob, span_boldannounce("Invisimin off. Invisibility reset."), confidential = TRUE) else + mob.remove_from_all_data_huds() mob.invisimin = TRUE mob.SetInvisibility(INVISIBILITY_OBSERVER, INVISIBILITY_SOURCE_INVISIMIN, INVISIBILITY_PRIORITY_ADMIN) to_chat(mob, span_adminnotice("Invisimin on. You are now as invisible as a ghost."), confidential = TRUE) diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index dd8f1d96f60..9ba0fa7608c 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -224,7 +224,13 @@ SSshuttle.admin_emergency_no_recall = TRUE SSshuttle.emergency.setTimer(0) SSshuttle.emergency.mode = SHUTTLE_DISABLED - priority_announce("Warning: Emergency Shuttle uplink failure, shuttle disabled until further notice.", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Emergency Shuttle uplink failure, shuttle disabled until further notice.", + title = "Uplink Failure", + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) /client/proc/admin_enable_shuttle() set category = "Admin.Events" @@ -250,7 +256,13 @@ if(SSshuttle.last_call_time < 10 SECONDS && SSshuttle.last_mode != SHUTTLE_IDLE) SSshuttle.last_call_time = 10 SECONDS //Make sure no insta departures. SSshuttle.emergency.setTimer(SSshuttle.last_call_time) - priority_announce("Warning: Emergency Shuttle uplink reestablished, shuttle enabled.", "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Emergency Shuttle uplink reestablished, shuttle enabled.", + title = "Uplink Restored", + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) /client/proc/admin_hostile_environment() set category = "Admin.Events" diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index a435756b456..e8d6a685ae4 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY(antagonists) /// The typepath for the outfit to show in the preview for the preferences menu. var/preview_outfit /// Flags for antags to turn on or off and check! - var/antag_flags = FLAG_FAKE_ANTAG + var/antag_flags = NONE /// If true, this antagonist can assign themself a new objective var/can_assign_self_objectives = FALSE /// Default to fill in when entering a custom objective. diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index c1dcf68b9df..e29388c9fd6 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/antags/abductor.dmi' icon_state = "gland" organ_flags = ORGAN_ROBOTIC // weird? - beating = TRUE /// Shows name of the gland as well as a description of what it does upon examination by abductor scientists and observers. var/abductor_hint = "baseline placebo referencer" @@ -26,12 +25,16 @@ /obj/item/organ/internal/heart/gland/Initialize(mapload) . = ..() icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral")) + AddElement(/datum/element/update_icon_blocker) /obj/item/organ/internal/heart/gland/examine(mob/user) . = ..() if(HAS_MIND_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) || isobserver(user)) . += span_notice("It is \a [abductor_hint]") +/obj/item/organ/internal/heart/gland/Stop() + return FALSE + /obj/item/organ/internal/heart/gland/proc/ownerCheck() if(ishuman(owner)) return TRUE @@ -102,9 +105,6 @@ update_gland_hud() /obj/item/organ/internal/heart/gland/on_life(seconds_per_tick, times_fired) - if(!beating) - // alien glands are immune to stopping. - beating = TRUE if(!active) return if(!ownerCheck()) diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm index 2d606d65b18..07ca14586e1 100644 --- a/code/modules/antagonists/blob/blob_antag.dm +++ b/code/modules/antagonists/blob/blob_antag.dm @@ -140,10 +140,9 @@ notify_ghosts( "A Blob host has burst in [get_area_name(blob_cam.blob_core)]", source = blob_cam.blob_core, - action = NOTIFY_ORBIT, ghost_sound = 'sound/ambience/antag/blobalert.ogg', header = "Blob Awakening!", - notify_volume = 75 + notify_volume = 75, ) /datum/antagonist/blob/antag_listing_status() diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index a4b6b54de3d..cd748e83159 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -20,22 +20,27 @@ if(revive_ready) INVOKE_ASYNC(src, PROC_REF(revive), user) disable_revive(user) // this should be already called via signal, but just incase something wacky happens + return TRUE - else if(enable_fakedeath(user)) - to_chat(user, span_changeling("We begin our stasis, preparing energy to arise once more.")) + var/death_duration_mod = 1 + if(user.has_status_effect(/datum/status_effect/gutted)) + death_duration_mod *= 8 // Anti-megafauna cheese - else - stack_trace("Changeling revive failed to enter fakedeath when it should have been in a valid state to.") + if(!enable_fakedeath(user, duration_modifier = death_duration_mod)) + CRASH("Changeling revive failed to enter fakedeath when it should have been in a valid state to.") + to_chat(user, span_changeling("We begin our stasis, preparing energy to arise once more.")) + if(death_duration_mod > 1) + to_chat(user, span_changeling(span_bold("Our body has sustained severe damage, and will take [death_duration_mod >= 5 ? "far ":""]longer to regenerate."))) return TRUE /// Used to enable fakedeath and register relevant signals / start timers -/datum/action/changeling/fakedeath/proc/enable_fakedeath(mob/living/changeling) +/datum/action/changeling/fakedeath/proc/enable_fakedeath(mob/living/changeling, duration_modifier = 1) if(revive_ready || HAS_TRAIT_FROM(changeling, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) return changeling.fakedeath(CHANGELING_TRAIT) - addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), changeling), fakedeath_duration, TIMER_UNIQUE) + addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), changeling), fakedeath_duration * duration_modifier, TIMER_UNIQUE) // Basically, these let the ling exit stasis without giving away their ling-y-ness if revived through other means RegisterSignal(changeling, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA), PROC_REF(fakedeath_reset)) RegisterSignal(changeling, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 86c75518165..dfabe50ce9a 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -377,8 +377,15 @@ Striking a noncultist, however, will tear their flesh."} fire = 50 acid = 60 -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/setup_shielding() - AddComponent(/datum/component/shielded, recharge_start_delay = 0 SECONDS, shield_icon_file = 'icons/effects/cult/effects.dmi', shield_icon = "shield-cult", run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged))) +/obj/item/clothing/suit/hooded/cultrobes/cult_shield/Initialize(mapload) + . = ..() + AddComponent( \ + /datum/component/shielded, \ + recharge_start_delay = 0 SECONDS, \ + shield_icon_file = 'icons/effects/cult/effects.dmi', \ + shield_icon = "shield-cult", \ + run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged)), \ + ) /// A proc for callback when the shield breaks, since cult robes are stupid and have different effects /obj/item/clothing/suit/hooded/cultrobes/cult_shield/proc/shield_damaged(mob/living/wearer, attack_text, new_current_charges) @@ -451,6 +458,7 @@ Striking a noncultist, however, will tear their flesh."} /obj/item/clothing/glasses/hud/health/night/cultblind desc = "May Nar'Sie guide you through the darkness and shield you from the light." + flags_cover = GLASSESCOVERSEYES name = "zealot's blindfold" icon_state = "blindfold" inhand_icon_state = "blindfold" diff --git a/code/modules/antagonists/cult/cult_structure_pylon.dm b/code/modules/antagonists/cult/cult_structure_pylon.dm index 280df3ee09d..7900aaad120 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -60,7 +60,7 @@ if(length(validturfs)) var/turf/converted_turf = pick(validturfs) if(isplatingturf(converted_turf)) - converted_turf.PlaceOnTop(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) + converted_turf.place_on_top(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) else converted_turf.ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 8ba039564da..ebf66a7ee15 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -37,26 +37,6 @@ icon_state = "[initial(icon_state)][anchored ? "" : "_off"]" return ..() -/obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(!isconstruct(user)) - return ..() - - var/mob/living/simple_animal/hostile/construct/healer = user - if(!healer.can_repair) - return ..() - - if(atom_integrity >= max_integrity) - to_chat(user, span_cult("You cannot repair [src], as it's undamaged!")) - return - - user.changeNext_move(CLICK_CD_MELEE) - atom_integrity = min(max_integrity, atom_integrity + 5) - Beam(user, icon_state = "sendbeam", time = 0.4 SECONDS) - user.visible_message( - span_danger("[user] repairs [src]."), - span_cult("You repair [src], leaving it at [round(atom_integrity * 100 / max_integrity)]% stability.") - ) - /* * Proc for use with the concealing spell. Hides the building (makes it invisible). */ diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 63b2c6613c3..a90475d2b9a 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -922,7 +922,12 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) fail_invoke() log_game("Manifest rune failed - too many summoned ghosts") return list() - notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src, header = "Manifest rune") + notify_ghosts( + "Manifest rune invoked in [get_area(src)].", + source = src, + header = "Manifest rune", + ghost_sound = 'sound/effects/ghost2.ogg', + ) var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in T) if(O.client && !is_banned_from(O.ckey, ROLE_CULTIST) && !QDELETED(src) && !(isAdminObserver(O) && (O.client.prefs.toggles & ADMIN_IGNORE_CULT_GHOST)) && !QDELETED(O)) diff --git a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm index acb31c08ac0..7ba0401829a 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm @@ -51,6 +51,8 @@ /obj/structure/closet/crate/eva name = "EVA crate" + icon_state = "o2crate" + base_icon_state = "o2crate" /obj/structure/closet/crate/eva/PopulateContents() ..() @@ -69,7 +71,7 @@ name = "psyker navigation warper" desc = "Uses amplified brainwaves to designate and map a precise transit location for the psyker shuttle." icon_screen = "recharge_comp_on" - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_SET_MACHINE //blind friendly + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON //blind friendly x_offset = 0 y_offset = 11 diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index ccc7fce6ecf..6c47c6e7056 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -34,8 +34,6 @@ var/heretic_path = PATH_START /// A sum of how many knowledge points this heretic CURRENTLY has. Used to research. var/knowledge_points = 2 //SKYRAT EDIT - ORIGINAL 1 - /// How many side path points the heretic has. He gains one of these per main path that splits into two sidepaths. These can be used in place of knowledge points for side paths only. - var/side_path_points = 0 /// The time between gaining influence passively. The heretic gain +1 knowledge points every this duration of time. var/passive_gain_timer = 20 MINUTES /// Assoc list of [typepath] = [knowledge instance]. A list of all knowledge this heretic's reserached. @@ -66,7 +64,7 @@ PATH_VOID = "blue", PATH_BLADE = "label", // my favorite color is label PATH_COSMIC = "purple", - PATH_KNOCK = "yellow", + PATH_LOCK = "yellow", ) var/static/list/path_to_rune_color = list( PATH_START = COLOR_LIME, @@ -76,7 +74,7 @@ PATH_VOID = COLOR_CYAN, PATH_BLADE = COLOR_SILVER, PATH_COSMIC = COLOR_PURPLE, - PATH_KNOCK = COLOR_YELLOW, + PATH_LOCK = COLOR_YELLOW, ) /datum/antagonist/heretic/Destroy() @@ -87,7 +85,6 @@ var/list/data = list() data["charges"] = knowledge_points - data["side_charges"] = side_path_points data["total_sacrifices"] = total_sacrifices data["ascended"] = ascended @@ -101,10 +98,7 @@ knowledge_data["desc"] = initial(knowledge.desc) knowledge_data["gainFlavor"] = initial(knowledge.gain_text) knowledge_data["cost"] = initial(knowledge.cost) - if(initial(knowledge.route) == PATH_SIDE) - knowledge_data["disabled"] = (initial(knowledge.cost) > knowledge_points + side_path_points) - else - knowledge_data["disabled"] = (initial(knowledge.cost) > knowledge_points) + knowledge_data["disabled"] = initial(knowledge.cost) > knowledge_points // Final knowledge can't be learned until all objectives are complete. if(ispath(knowledge, /datum/heretic_knowledge/ultimate)) @@ -145,25 +139,16 @@ switch(action) if("research") var/datum/heretic_knowledge/researched_path = text2path(params["path"]) - if(!ispath(researched_path)) + if(!ispath(researched_path, /datum/heretic_knowledge)) CRASH("Heretic attempted to learn non-heretic_knowledge path! (Got: [researched_path])") - // If side path and has path points, buy! - var/coupon = FALSE - if((initial(researched_path.route) == PATH_SIDE) && side_path_points) - coupon = TRUE - // else try normal purchase - else if(initial(researched_path.cost) > knowledge_points) - return - + if(initial(researched_path.cost) > knowledge_points) + return TRUE if(!gain_knowledge(researched_path)) return TRUE - log_heretic_knowledge("[key_name(owner)] gained knowledge: [initial(researched_path.name)][coupon ? "(via free side-path point)" : ""]") - if(coupon) - side_path_points -= initial(researched_path.cost) - else - knowledge_points -= initial(researched_path.cost) + log_heretic_knowledge("[key_name(owner)] gained knowledge: [initial(researched_path.name)]") + knowledge_points -= initial(researched_path.cost) return TRUE /datum/antagonist/heretic/submit_player_objective(retain_existing = FALSE, retain_escape = TRUE, force = FALSE) @@ -259,6 +244,9 @@ /datum/antagonist/heretic/on_body_transfer(mob/living/old_body, mob/living/new_body) . = ..() + if(old_body == new_body) // if they were using a temporary body + return + for(var/knowledge_index in researched_knowledge) var/datum/heretic_knowledge/knowledge = researched_knowledge[knowledge_index] knowledge.on_lose(old_body, src) @@ -790,7 +778,7 @@ // Add in the base research we spawn with, otherwise it'd be too easy. target_amount += length(GLOB.heretic_start_knowledge) // And add in some buffer, to require some sidepathing, especially since heretics get some free side paths. - target_amount += rand(5, 7) + target_amount += rand(2, 4) update_explanation_text() /datum/objective/heretic_research/update_explanation_text() @@ -819,4 +807,3 @@ suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch r_hand = /obj/item/melee/touch_attack/mansus_fist - diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 0c30a2361b0..b0d2878b455 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -33,8 +33,6 @@ var/list/banned_atom_types = list() /// Cost of knowledge in knowledge points var/cost = 0 - /// If true, adds side path points according to value. Only main branch powers that split into sidepaths should have this. - var/adds_sidepath_points = 0 /// The priority of the knowledge. Higher priority knowledge appear higher in the ritual list. /// Number itself is completely arbitrary. Does not need to be set for non-ritual knowledge. var/priority = 0 @@ -63,8 +61,6 @@ if(gain_text) to_chat(user, span_warning("[gain_text]")) - // Usually zero - our_heretic.side_path_points += adds_sidepath_points on_gain(user, our_heretic) /** @@ -288,7 +284,7 @@ /datum/heretic_knowledge/mark abstract_parent_type = /datum/heretic_knowledge/mark mutually_exclusive = TRUE - cost = 1 + cost = 2 /// The status effect typepath we apply on people on mansus grasp. var/datum/status_effect/eldritch/mark_type @@ -730,7 +726,11 @@ SSblackbox.record_feedback("tally", "heretic_ascended", 1, route) log_heretic_knowledge("[key_name(user)] completed their final ritual at [worldtime2text()].") - notify_ghosts("[user] has completed an ascension ritual!", source = user, action = NOTIFY_ORBIT, header = "A Heretic is Ascending!") + notify_ghosts( + "[user] has completed an ascension ritual!", + source = user, + header = "A Heretic is Ascending!", + ) return TRUE /datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms) diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index 6bd8d22fb9e..7cce886a145 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -134,12 +134,12 @@ after_use_message = "The Stargazer hears your call..." // Path of Knock's blade -/obj/item/melee/sickly_blade/knock +/obj/item/melee/sickly_blade/lock name = "\improper key blade" desc = "A blade and a key, a key to what? \ What grand gates does it open?" icon_state = "key_blade" inhand_icon_state = "key_blade" - after_use_message = "The Mother of Ants hears your call..." + after_use_message = "The Stewards hear your call..." tool_behaviour = TOOL_CROWBAR toolspeed = 1.3 diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm index 658105abb89..a6a53bc3cee 100644 --- a/code/modules/antagonists/heretic/items/keyring.dm +++ b/code/modules/antagonists/heretic/items/keyring.dm @@ -1,4 +1,4 @@ -/obj/effect/knock_portal +/obj/effect/lock_portal name = "crack in reality" desc = "A crack in space, impossibly deep and painful to the eyes. Definitely not safe." icon = 'icons/effects/eldritch.dmi' @@ -12,18 +12,18 @@ density = FALSE //so we dont block doors closing layer = OBJ_LAYER //under doors ///The knock portal we teleport to - var/obj/effect/knock_portal/destination + var/obj/effect/lock_portal/destination ///The airlock we are linked to, we delete if it is destroyed var/obj/machinery/door/our_airlock /// if true the heretic is teleported to a random airlock, nonheretics are sent to the target var/inverted = FALSE -/obj/effect/knock_portal/Initialize(mapload, target, invert = FALSE) +/obj/effect/lock_portal/Initialize(mapload, target, invert = FALSE) . = ..() if(target) our_airlock = target RegisterSignal(target, COMSIG_QDELETING, PROC_REF(delete_on_door_delete)) - + var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) @@ -31,26 +31,26 @@ inverted = invert ///Deletes us and our destination portal if our_airlock is destroyed -/obj/effect/knock_portal/proc/delete_on_door_delete(datum/source) +/obj/effect/lock_portal/proc/delete_on_door_delete(datum/source) SIGNAL_HANDLER qdel(src) ///Signal handler for when our location is entered, calls teleport on the victim, if their old_loc didnt contain a portal already (to prevent loops) -/obj/effect/knock_portal/proc/on_entered(datum/source, mob/living/loser, atom/old_loc) +/obj/effect/lock_portal/proc/on_entered(datum/source, mob/living/loser, atom/old_loc) SIGNAL_HANDLER if(istype(loser) && !(locate(type) in old_loc)) teleport(loser) -/obj/effect/knock_portal/Destroy() +/obj/effect/lock_portal/Destroy() if(!isnull(destination) && !QDELING(destination)) QDEL_NULL(destination) - + destination = null our_airlock = null return ..() ///Teleports the teleportee, to a random airlock if the teleportee isnt a heretic, or the other portal if they are one -/obj/effect/knock_portal/proc/teleport(mob/living/teleportee) +/obj/effect/lock_portal/proc/teleport(mob/living/teleportee) if(isnull(destination)) //dumbass qdel(src) return @@ -67,7 +67,7 @@ INVOKE_ASYNC(src, PROC_REF(async_opendoor), doorstination) ///Returns a random airlock on the same Z level as our portal, that isnt our airlock -/obj/effect/knock_portal/proc/find_random_airlock() +/obj/effect/lock_portal/proc/find_random_airlock() var/list/turf/possible_destinations = list() for(var/obj/airlock as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock)) if(airlock.z != z) @@ -78,7 +78,7 @@ return pick(possible_destinations) ///Asynchronous proc to unbolt, then open the passed door -/obj/effect/knock_portal/proc/async_opendoor(obj/machinery/door/door) +/obj/effect/lock_portal/proc/async_opendoor(obj/machinery/door/door) if(istype(door, /obj/machinery/door/airlock)) //they can create portals on ANY door, but we should unlock airlocks so they can actually open var/obj/machinery/door/airlock/as_airlock = door as_airlock.unbolt() @@ -89,9 +89,9 @@ ///List of IDs this card consumed var/list/obj/item/card/id/fused_ids = list() ///The first portal in the portal pair, so we can clear it later - var/obj/effect/knock_portal/portal_one + var/obj/effect/lock_portal/portal_one ///The second portal in the portal pair, so we can clear it later - var/obj/effect/knock_portal/portal_two + var/obj/effect/lock_portal/portal_two ///The first door we are linking in the pair, so we can create a portal pair var/datum/weakref/link /// are our created portals inverted? (heretics get sent to a random airlock, crew get sent to the target) @@ -140,7 +140,7 @@ ///Deletes and nulls our portal pair /obj/item/card/id/advanced/heretic/proc/clear_portals() QDEL_NULL(portal_one) - QDEL_NULL(portal_two) + QDEL_NULL(portal_two) ///Clears portal references /obj/item/card/id/advanced/heretic/proc/clear_portal_refs() @@ -154,7 +154,7 @@ if(portal_one || portal_two) clear_portals() message += ", previous cleared" - + portal_one = new(get_turf(door2), door2, inverted) portal_two = new(get_turf(door1), door1, inverted) portal_one.destination = portal_two @@ -175,7 +175,7 @@ . = ..() if(!proximity_flag || !IS_HERETIC(user)) return - if(istype(target, /obj/effect/knock_portal)) + if(istype(target, /obj/effect/lock_portal)) clear_portals() return diff --git a/code/modules/antagonists/heretic/items/lintel.dm b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm similarity index 83% rename from code/modules/antagonists/heretic/items/lintel.dm rename to code/modules/antagonists/heretic/items/labyrinth_handbook.dm index 140453842c0..b3e3649763f 100644 --- a/code/modules/antagonists/heretic/items/lintel.dm +++ b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm @@ -1,5 +1,5 @@ /obj/effect/forcefield/wizard/heretic - name = "consecrated lintel" + name = "labyrinth pages" desc = "A field of papers flying in the air, repulsing heathens with impossible force." icon_state = "lintel" initial_duration = 8 SECONDS @@ -13,11 +13,11 @@ visible_message(span_danger("[src] repulses [bumpee] in a storm of paper!")) ///A heretic item that spawns a barrier at the clicked turf, 3 uses -/obj/item/heretic_lintel - name = "consecrated book" - desc = "Some kind of book, its contents make your head hurt. The material is not known to you and it seems to shift and twist unnaturally." +/obj/item/heretic_labyrinth_handbook + name = "labyrinth handbook" + desc = "A book containing the laws and regulations of the Locked Labyrinth, penned on an unknown substance. Its pages squirm and strain, looking to lash out and escape." icon = 'icons/obj/service/library.dmi' - icon_state = "hereticlintel" + icon_state = "heretichandbook" force = 10 damtype = BURN worn_icon_state = "book" @@ -34,14 +34,14 @@ ///how many uses do we have left var/uses = 3 -/obj/item/heretic_lintel/examine(mob/user) +/obj/item/heretic_labyrinth_handbook/examine(mob/user) . = ..() if(!IS_HERETIC_OR_MONSTER(user)) return . += span_hypnophrase("Materializes a barrier upon any tile in sight, which only you can pass through. Lasts 8 seconds.") . += span_hypnophrase("It has [uses] uses left.") -/obj/item/heretic_lintel/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/heretic_labyrinth_handbook/afterattack(atom/target, mob/user, proximity_flag) . = ..() if(IS_HERETIC(user)) var/turf/turf_target = get_turf(target) diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index 52e25f6a8b1..1859035a85c 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -72,7 +72,6 @@ name = "Ashen Passage" desc = "Grants you Ashen Passage, a silent but short range jaunt." gain_text = "He knew how to walk between the planes." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/mark/ash_mark, /datum/heretic_knowledge/summon/fire_shark, @@ -127,7 +126,6 @@ The mask instills fear into heathens who witness it, causing stamina damage, hallucinations, and insanity. \ It can also be forced onto a heathen, to make them unable to take it off..." gain_text = "The Nightwatcher was lost. That's what the Watch believed. Yet he walked the world, unnoticed by the masses." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/ash, /datum/heretic_knowledge/reroll_targets, @@ -166,7 +164,6 @@ If any victims afflicted are in critical condition, they will also instantly die." gain_text = "The fire was inescapable, and yet, life remained in his charred body. \ The Nightwatcher was a particular man, always watching." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/ultimate/ash_final, /datum/heretic_knowledge/summon/ashy, @@ -212,7 +209,12 @@ /datum/heretic_knowledge/ultimate/ash_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) var/datum/action/cooldown/spell/fire_sworn/circle_spell = new(user.mind) circle_spell.Grant(user) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 55102c12c79..eae5b856318 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -104,7 +104,6 @@ towards your attacker. This effect can only trigger once every 20 seconds." gain_text = "The footsoldier was known to be a fearsome duelist. \ Their general quickly appointed them as their personal Champion." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/limited_amount/risen_corpse, /datum/heretic_knowledge/mark/blade_mark, @@ -117,10 +116,10 @@ var/riposte_ready = TRUE /datum/heretic_knowledge/blade_dance/on_gain(mob/user, datum/antagonist/heretic/our_heretic) - RegisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(on_shield_reaction)) + RegisterSignal(user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_shield_reaction)) /datum/heretic_knowledge/blade_dance/on_lose(mob/user, datum/antagonist/heretic/our_heretic) - UnregisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(user, COMSIG_LIVING_CHECK_BLOCK) /datum/heretic_knowledge/blade_dance/proc/on_shield_reaction( mob/living/carbon/human/source, @@ -246,7 +245,6 @@ you gain increased resistance to gaining wounds and resistance to batons." gain_text = "In time, it was he who stood alone among the bodies of his former comrades, awash in blood, none of it his own. \ He was without rival, equal, or purpose." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/blade, /datum/heretic_knowledge/reroll_targets, @@ -376,7 +374,6 @@ at a target, dealing damage and causing bleeding." gain_text = "Without thinking, I took the knife of a fallen soldier and threw with all my might. My aim was true! \ The Torn Champion smiled at their first taste of agony, and with a nod, their blades became my own." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/summon/maid_in_mirror, /datum/heretic_knowledge/ultimate/blade_final, @@ -408,7 +405,12 @@ /datum/heretic_knowledge/ultimate/blade_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) user.client?.give_award(/datum/award/achievement/misc/blade_ascension, user) ADD_TRAIT(user, TRAIT_NEVER_WOUNDED, name) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index 4607d78ff5c..d2fe6ab3776 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -70,7 +70,6 @@ However, people with a star mark will get transported along with another person using the rune." gain_text = "The distant stars crept into my dreams, roaring and screaming without reason. \ I spoke, and heard my own words echoed back." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/mark/cosmic_mark, /datum/heretic_knowledge/essence, @@ -114,7 +113,6 @@ desc = "Fires a projectile that moves very slowly and creates cosmic fields on impact. \ Anyone hit by the projectile will recieve burn damage, a knockdown, and give people in a three tile range a star mark." gain_text = "The Beast was behind me now at all times, with each sacrifice words of affirmation coursed through me." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/cosmic, /datum/heretic_knowledge/reroll_targets, @@ -218,7 +216,6 @@ desc = "Grants you Cosmic Expansion, a spell that creates a 3x3 area of cosmic fields around you. \ Nearby beings will also receive a star mark." gain_text = "The ground now shook beneath me. The Beast inhabited me, and their voice was intoxicating." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/ultimate/cosmic_final, /datum/heretic_knowledge/eldritch_coin, @@ -248,7 +245,7 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/star_gazer + /datum/pet_command/point_targeting/attack/star_gazer ) /datum/heretic_knowledge/ultimate/cosmic_final/is_valid_sacrifice(mob/living/carbon/human/sacrifice) @@ -260,7 +257,12 @@ /datum/heretic_knowledge/ultimate/cosmic_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc) star_gazer_mob.maxHealth = INFINITY star_gazer_mob.health = INFINITY diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index f3f6d971353..0d61bcc7b46 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -126,7 +126,6 @@ Voiceless Dead are mute ghouls and only have 50 health, but can use Bloody Blades effectively. \ You can only create two at a time." gain_text = "I found notes of a dark ritual, unfinished... yet still, I pushed forward." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/mark/flesh_mark, /datum/heretic_knowledge/void_cloak, @@ -239,7 +238,6 @@ the ability to link minds to communicate with ease, but are very fragile and weak in combat." gain_text = "I could not continue alone. I was able to summon The Uncanny Man to help me see more. \ The screams... once constant, now silenced by their wretched appearance. Nothing was out of reach." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/flesh, /datum/heretic_knowledge/reroll_targets, @@ -281,7 +279,6 @@ Stalkers can jaunt, release EMPs, shapeshift into animals or automatons, and are strong in combat." gain_text = "I was able to combine my greed and desires to summon an eldritch beast I had never seen before. \ An ever shapeshifting mass of flesh, it knew well my goals. The Marshal approved." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/ultimate/flesh_final, /datum/heretic_knowledge/summon/ashy, @@ -317,7 +314,12 @@ /datum/heretic_knowledge/ultimate/flesh_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]", "[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind) worm_spell.Grant(user) diff --git a/code/modules/antagonists/heretic/knowledge/knock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm similarity index 59% rename from code/modules/antagonists/heretic/knowledge/knock_lore.dm rename to code/modules/antagonists/heretic/knowledge/lock_lore.dm index 6879f527b6b..6c6df4c6567 100644 --- a/code/modules/antagonists/heretic/knowledge/knock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -1,17 +1,17 @@ /** - * # The path of Knock. + * # The path of Lock. * * Goes as follows: * - * A Locksmith’s Secret - * Grasp of Knock + * A Steward's Secret + * Grasp of Lock * > Sidepaths: * Ashen Eyes * Codex Cicatrix * Key Keeper’s Burden * - * Rite Of Passage - * Mark Of Knock + * Concierge's Rite + * Mark Of Lock * Ritual of Knowledge * Burglar's Finesse * > Sidepaths: @@ -21,26 +21,26 @@ * Opening Blade * Caretaker’s Last Refuge * - * Many secrets behind the Spider Door + * Unlock the Labyrinth */ /datum/heretic_knowledge/limited_amount/starting/base_knock - name = "A Locksmith’s Secret" - desc = "Opens up the Path of Knock to you. \ + name = "A Steward's Secret" + desc = "Opens up the Path of Lock to you. \ Allows you to transmute a knife and a crowbar into a Key Blade. \ You can only create two at a time and they function as fast crowbars. \ In addition, they can fit into utility belts." - gain_text = "The Knock permits no seal and no isolation. It thrusts us gleefully out of the safety of ignorance." - next_knowledge = list(/datum/heretic_knowledge/knock_grasp) + gain_text = "The Locked Labyrinth leads to freedom. But only the trapped Stewards know the correct path." + next_knowledge = list(/datum/heretic_knowledge/lock_grasp) required_atoms = list( /obj/item/knife = 1, /obj/item/crowbar = 1, ) - result_atoms = list(/obj/item/melee/sickly_blade/knock) + result_atoms = list(/obj/item/melee/sickly_blade/lock) limit = 2 - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/knock_grasp - name = "Grasp of Knock" +/datum/heretic_knowledge/lock_grasp + name = "Grasp of Lock" desc = "Your mansus grasp allows you to access anything! Right click on an airlock or a locker to force it open. \ DNA locks on mechs will be removed, and any pilot will be ejected. Works on consoles. \ Makes a distinctive knocking sound on use." @@ -51,24 +51,24 @@ /datum/heretic_knowledge/codex_cicatrix, ) cost = 1 - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/knock_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) +/datum/heretic_knowledge/lock_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp)) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) -/datum/heretic_knowledge/knock_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) +/datum/heretic_knowledge/lock_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK) -/datum/heretic_knowledge/knock_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) +/datum/heretic_knowledge/lock_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) SIGNAL_HANDLER var/obj/item/clothing/under/suit = target.get_item_by_slot(ITEM_SLOT_ICLOTHING) if(istype(suit) && suit.adjusted == NORMAL_STYLE) suit.toggle_jumpsuit_adjust() suit.update_appearance() -/datum/heretic_knowledge/knock_grasp/proc/on_secondary_mansus_grasp(mob/living/source, atom/target) +/datum/heretic_knowledge/lock_grasp/proc/on_secondary_mansus_grasp(mob/living/source, atom/target) SIGNAL_HANDLER if(ismecha(target)) @@ -98,72 +98,70 @@ It functions the same as an ID Card, but attacking it with an ID card fuses it and gains its access. \ You can use it in-hand to change its form to a card you fused. \ Does not preserve the card used in the ritual." - gain_text = "Gateways shall open before me, my very will ensnaring reality." - adds_sidepath_points = 1 + gain_text = "The Keeper sneered. \"These plastic rectangles are a mockery of keys, and I curse every door that desires them.\"" required_atoms = list( /obj/item/storage/wallet = 1, /obj/item/stack/rods = 1, /obj/item/card/id = 1, ) result_atoms = list(/obj/item/card/id/advanced/heretic) - next_knowledge = list(/datum/heretic_knowledge/limited_amount/rite_of_passage) + next_knowledge = list(/datum/heretic_knowledge/limited_amount/concierge_rite) cost = 1 - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/limited_amount/rite_of_passage // item that creates 3 max at a time heretic only barriers, probably should limit to 1 only, holy people can also pass - name = "Rite Of Passage" - desc = "Allows you to transmute a white crayon, a wooden plank, and a multitool to create a Consecrated Book. \ +/datum/heretic_knowledge/limited_amount/concierge_rite // item that creates 3 max at a time heretic only barriers, probably should limit to 1 only, holy people can also pass + name = "Concierge's Rite" + desc = "Allows you to transmute a white crayon, a wooden plank, and a multitool to create a Labyrinth Handbook. \ It can materialize a barricade at range that only you and people resistant to magic can pass. 3 uses." - gain_text = "With this I can repel those that intend me harm." + gain_text = "The Concierge scribbled my name into the Handbook. \"Welcome to your new home, fellow Steward.\"" required_atoms = list( /obj/item/toy/crayon/white = 1, /obj/item/stack/sheet/mineral/wood = 1, /obj/item/multitool = 1, ) - result_atoms = list(/obj/item/heretic_lintel) - next_knowledge = list(/datum/heretic_knowledge/mark/knock_mark) + result_atoms = list(/obj/item/heretic_labyrinth_handbook) + next_knowledge = list(/datum/heretic_knowledge/mark/lock_mark) cost = 1 - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/mark/knock_mark - name = "Mark of Knock" - desc = "Your Mansus Grasp now applies the Mark of Knock. \ +/datum/heretic_knowledge/mark/lock_mark + name = "Mark of Lock" + desc = "Your Mansus Grasp now applies the Mark of Lock. \ Attack a marked person to bar them from all passages for the duration of the mark. \ This will make it so that they have no access whatsoever, even public access doors will reject them." - gain_text = "Their requests for passage will remain unheeded." - next_knowledge = list(/datum/heretic_knowledge/knowledge_ritual/knock) - route = PATH_KNOCK - mark_type = /datum/status_effect/eldritch/knock + gain_text = "The Gatekeeper was a corrupt Steward. She hindered her fellows for her own twisted amusement." + next_knowledge = list(/datum/heretic_knowledge/knowledge_ritual/lock) + route = PATH_LOCK + mark_type = /datum/status_effect/eldritch/lock -/datum/heretic_knowledge/knowledge_ritual/knock +/datum/heretic_knowledge/knowledge_ritual/lock next_knowledge = list(/datum/heretic_knowledge/spell/burglar_finesse) - route = PATH_KNOCK + route = PATH_LOCK /datum/heretic_knowledge/spell/burglar_finesse name = "Burglar's Finesse" desc = "Grants you Burglar's Finesse, a single-target spell \ that puts a random item from the victims backpack into your hand." - gain_text = "Their trinkets will be mine, as will their lives in due time." - adds_sidepath_points = 1 + gain_text = "Consorting with Burglar spirits is frowned upon, but a Steward will always want to learn about new doors." next_knowledge = list( /datum/heretic_knowledge/spell/apetra_vulnera, /datum/heretic_knowledge/spell/opening_blast, - /datum/heretic_knowledge/blade_upgrade/flesh/knock, + /datum/heretic_knowledge/blade_upgrade/flesh/lock, ) spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse cost = 2 - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/blade_upgrade/flesh/knock //basically a chance-based weeping avulsion version of the former +/datum/heretic_knowledge/blade_upgrade/flesh/lock //basically a chance-based weeping avulsion version of the former name = "Opening Blade" desc = "Your blade has a chance to cause a weeping avulsion on attack." - gain_text = "The power of my patron courses through my blade, willing their very flesh to part." + gain_text = "The Pilgrim-Surgeon was not an Steward. Nonetheless, its blades and sutures proved a match for their keys." next_knowledge = list(/datum/heretic_knowledge/spell/caretaker_refuge) - route = PATH_KNOCK + route = PATH_LOCK wound_type = /datum/wound/slash/flesh/critical var/chance = 35 -/datum/heretic_knowledge/blade_upgrade/flesh/knock/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) +/datum/heretic_knowledge/blade_upgrade/flesh/lock/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(prob(chance)) return ..() @@ -172,29 +170,28 @@ desc = "Gives you a spell that makes you transparent and not dense. Cannot be used near living sentient beings. \ While in refuge, you cannot use your hands or spells, and you are immune to slowdown. \ You are invincible but unable to harm anything. Cancelled by being hit with an anti-magic item." - gain_text = "Then I saw my my own reflection cascaded mind-numbingly enough times that I was but a haze." - adds_sidepath_points = 1 - next_knowledge = list(/datum/heretic_knowledge/ultimate/knock_final) - route = PATH_KNOCK + gain_text = "Jealously, the Guard and the Hound hunted me. But I unlocked my form, and was but a haze, untouchable." + next_knowledge = list(/datum/heretic_knowledge/ultimate/lock_final) + route = PATH_LOCK spell_to_add = /datum/action/cooldown/spell/caretaker cost = 1 -/datum/heretic_knowledge/ultimate/knock_final - name = "Many secrets behind the Spider Door" +/datum/heretic_knowledge/ultimate/lock_final + name = "Unlock the Labyrinth" desc = "The ascension ritual of the Path of Knock. \ Bring 3 corpses without organs in their torso to a transmutation rune to complete the ritual. \ When completed, you gain the ability to transform into empowered eldritch creatures \ - and in addition, create a tear to the Spider Door; \ + and in addition, create a tear to the Labyrinth's heart; \ a tear in reality located at the site of this ritual. \ Eldritch creatures will endlessly pour from this rift \ who are bound to obey your instructions." - gain_text = "With her knowledge, and what I had seen, I knew what to do. \ - I had to open the gates, with the holes in my foes as Ways! \ - Reality will soon be torn, the Spider Gate opened! WITNESS ME!" + gain_text = "The Stewards guided me, and I guided them. \ + My foes were the Locks and my blades were the Key! \ + The Labyrinth will be Locked no more, and freedom will be ours! WITNESS US!" required_atoms = list(/mob/living/carbon/human = 3) - route = PATH_KNOCK + route = PATH_LOCK -/datum/heretic_knowledge/ultimate/knock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) +/datum/heretic_knowledge/ultimate/lock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() if(!.) return FALSE @@ -214,17 +211,22 @@ return FALSE return TRUE -/datum/heretic_knowledge/ultimate/knock_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) +/datum/heretic_knowledge/ultimate/lock_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]", "Centra[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) - user.client?.give_award(/datum/award/achievement/misc/knock_ascension, user) + priority_announce( + text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) + user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) // buffs var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind) transform_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/knock_ascension, user) + user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) - var/datum/heretic_knowledge/blade_upgrade/flesh/knock/blade_upgrade = heretic_datum.get_knowledge(/datum/heretic_knowledge/blade_upgrade/flesh/knock) + var/datum/heretic_knowledge/blade_upgrade/flesh/lock/blade_upgrade = heretic_datum.get_knowledge(/datum/heretic_knowledge/blade_upgrade/flesh/lock) blade_upgrade.chance += 30 - new /obj/structure/knock_tear(loc, user.mind) + new /obj/structure/lock_tear(loc, user.mind) diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index 84f128b5cfc..3bf980eb466 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -83,7 +83,6 @@ name = "Leeching Walk" desc = "Grants you passive healing and resistance to batons while standing over rust." gain_text = "The speed was unparalleled, the strength unnatural. The Blacksmith was smiling." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/mark/rust_mark, /datum/heretic_knowledge/armor, @@ -175,7 +174,6 @@ desc = "Grants you Aggressive Spread, a spell that spreads rust to nearby surfaces. \ Already rusted surfaces are destroyed." gain_text = "All wise men know well not to visit the Rusted Hills... Yet the Blacksmith's tale was inspiring." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/rust, /datum/heretic_knowledge/reroll_targets, @@ -205,7 +203,6 @@ at friend or foe wildly. Also rusts and destroys and surfaces it hits." gain_text = "The corrosion was unstoppable. The rust was unpleasable. \ The Blacksmith was gone, and you hold their blade. Champions of hope, the Rustbringer is nigh!" - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/ultimate/rust_final, /datum/heretic_knowledge/summon/rusty, @@ -264,7 +261,12 @@ /datum/heretic_knowledge/ultimate/rust_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) new /datum/rust_spread(loc) RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm index 983bbee32c6..69b52953283 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm @@ -34,9 +34,9 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks) name = "rust heretic sacrifice landmark" for_heretic_path = PATH_RUST -/obj/effect/landmark/heretic/knock - name = "knock heretic sacrifice landmark" - for_heretic_path = PATH_KNOCK +/obj/effect/landmark/heretic/lock + name = "lock heretic sacrifice landmark" + for_heretic_path = PATH_LOCK // A fluff signpost object that doesn't teleport you somewhere when you touch it. /obj/structure/no_effect_signpost @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks) ambience_index = AMBIENCE_REEBE sound_environment = SOUND_ENVIRONMENT_SEWER_PIPE -/area/centcom/heretic_sacrifice/knock - name = "Mansus Knock Gate" +/area/centcom/heretic_sacrifice/lock + name = "Mansus Lock Gate" ambience_index = AMBIENCE_DANGER sound_environment = SOUND_ENVIRONMENT_PSYCHOTIC diff --git a/code/modules/antagonists/heretic/knowledge/side_knock_flesh.dm b/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm similarity index 100% rename from code/modules/antagonists/heretic/knowledge/side_knock_flesh.dm rename to code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index a5e21472517..6c39bd9ca00 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -81,7 +81,6 @@ You can still take damage due to a lack of pressure." gain_text = "I found a thread of cold breath. It lead me to a strange shrine, all made of crystals. \ Translucent and white, a depiction of a nobleman stood before me." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/mark/void_mark, /datum/heretic_knowledge/void_cloak, @@ -127,7 +126,6 @@ Additionally causes damage to heathens around your original and target destination." gain_text = "The entity calls themself the Aristocrat. They effortlessly walk through air like \ nothing - leaving a harsh, cold breeze in their wake. They disappear, and I am left in the blizzard." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/void, /datum/heretic_knowledge/reroll_targets, @@ -162,7 +160,6 @@ desc = "Grants you Void Pull, a spell that pulls all nearby heathens towards you, stunning them briefly." gain_text = "All is fleeting, but what else stays? I'm close to ending what was started. \ The Aristocrat reveals themselves to me again. They tell me I am late. Their pull is immense, I cannot turn back." - adds_sidepath_points = 1 next_knowledge = list( /datum/heretic_knowledge/ultimate/void_final, /datum/heretic_knowledge/spell/cleave, @@ -202,7 +199,12 @@ /datum/heretic_knowledge/ultimate/void_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce("[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + color_override = "pink", + ) user.client?.give_award(/datum/award/achievement/misc/void_ascension, user) ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) diff --git a/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm b/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm index e11053fd3e3..18e8d26fecc 100644 --- a/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm @@ -26,7 +26,7 @@ monster.melee_damage_lower = max((monster.melee_damage_lower * 2), 40) monster.melee_damage_upper = monster.melee_damage_upper / 2 monster.transform *= 1.5 - monster.AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_RWALLS) + monster.AddElement(/datum/element/wall_tearer) /datum/action/cooldown/spell/shapeshift/eldritch/ascension/do_unshapeshift(mob/living/caster) . = ..() diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm index 08973093da0..130e3e06be2 100644 --- a/code/modules/antagonists/heretic/magic/rust_construction.dm +++ b/code/modules/antagonists/heretic/magic/rust_construction.dm @@ -46,7 +46,7 @@ /datum/action/cooldown/spell/pointed/rust_construction/cast(turf/open/cast_on) . = ..() var/rises_message = "rises out of [cast_on]" - var/turf/closed/wall/new_wall = cast_on.PlaceOnTop(/turf/closed/wall) + var/turf/closed/wall/new_wall = cast_on.place_on_top(/turf/closed/wall) if(!istype(new_wall)) return diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 5798d273de9..4a5941fe55c 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -133,7 +133,7 @@ return ..() /datum/status_effect/protective_blades/on_apply() - RegisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(on_shield_reaction)) + RegisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_shield_reaction)) for(var/blade_num in 1 to max_num_blades) var/time_until_created = (blade_num - 1) * time_between_initial_blades if(time_until_created <= 0) @@ -144,7 +144,7 @@ return TRUE /datum/status_effect/protective_blades/on_remove() - UnregisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK) QDEL_LIST(blades) return ..() @@ -160,7 +160,7 @@ RegisterSignal(blade, COMSIG_QDELETING, PROC_REF(remove_blade)) playsound(get_turf(owner), 'sound/items/unsheath.ogg', 33, TRUE) -/// Signal proc for [COMSIG_HUMAN_CHECK_SHIELDS]. +/// Signal proc for [COMSIG_LIVING_CHECK_BLOCK]. /// If we have a blade in our list, consume it and block the incoming attack (shield it) /datum/status_effect/protective_blades/proc/on_shield_reaction( mob/living/carbon/human/source, @@ -194,7 +194,7 @@ addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_BEING_BLADE_SHIELDED, type), 1) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK /// Remove deleted blades from our blades list properly. /datum/status_effect/protective_blades/proc/remove_blade(obj/effect/floating_blade/to_remove) diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index 068570f76c7..4cdc29288c4 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -247,16 +247,16 @@ owner.Paralyze(2 SECONDS) return ..() -// MARK OF KNOCK +// MARK OF LOCK -/datum/status_effect/eldritch/knock +/datum/status_effect/eldritch/lock effect_icon_state = "emark7" duration = 10 SECONDS -/datum/status_effect/eldritch/knock/on_apply() +/datum/status_effect/eldritch/lock/on_apply() . = ..() ADD_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT) -/datum/status_effect/eldritch/knock/on_remove() +/datum/status_effect/eldritch/lock/on_remove() REMOVE_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT) return ..() diff --git a/code/modules/antagonists/heretic/structures/knock_final.dm b/code/modules/antagonists/heretic/structures/lock_final.dm similarity index 88% rename from code/modules/antagonists/heretic/structures/knock_final.dm rename to code/modules/antagonists/heretic/structures/lock_final.dm index f7d0d1a9ea7..c8232062931 100644 --- a/code/modules/antagonists/heretic/structures/knock_final.dm +++ b/code/modules/antagonists/heretic/structures/lock_final.dm @@ -1,4 +1,4 @@ -/obj/structure/knock_tear +/obj/structure/lock_tear name = "???" desc = "It stares back. Theres no reason to remain. Run." max_integrity = INFINITE @@ -24,7 +24,7 @@ /mob/living/basic/heretic_summon/star_gazer, ) -/obj/structure/knock_tear/Initialize(mapload, datum/mind/ascendant_mind) +/obj/structure/lock_tear/Initialize(mapload, datum/mind/ascendant_mind) . = ..() transform *= 3 if(isnull(monster_types)) @@ -36,7 +36,7 @@ INVOKE_ASYNC(src, PROC_REF(poll_ghosts)) /// Ask ghosts if they want to make some noise -/obj/structure/knock_tear/proc/poll_ghosts() +/obj/structure/lock_tear/proc/poll_ghosts() var/list/candidates = poll_ghost_candidates("Would you like to be a random eldritch monster attacking the crew?", ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, POLL_IGNORE_HERETIC_MONSTER) while(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick_n_take(candidates) @@ -44,7 +44,7 @@ gathering_candidates = FALSE /// Destroy the rift if you kill the heretic -/obj/structure/knock_tear/proc/end_madness(datum/former_master) +/obj/structure/lock_tear/proc/end_madness(datum/former_master) SIGNAL_HANDLER var/turf/our_turf = get_turf(src) playsound(our_turf, 'sound/magic/castsummon.ogg', vol = 100, vary = TRUE) @@ -53,20 +53,20 @@ new /obj/effect/temp_visual/destabilising_tear(our_turf) qdel(src) -/obj/structure/knock_tear/attack_ghost(mob/user) +/obj/structure/lock_tear/attack_ghost(mob/user) . = ..() if(. || gathering_candidates) return ghost_to_monster(user) -/obj/structure/knock_tear/examine(mob/user) +/obj/structure/lock_tear/examine(mob/user) . = ..() if (!isobserver(user) || gathering_candidates) return . += span_notice("You can use this to enter the world as a foul monster.") /// Turn a ghost into an 'orrible beast -/obj/structure/knock_tear/proc/ghost_to_monster(mob/dead/observer/user, should_ask = TRUE) +/obj/structure/lock_tear/proc/ghost_to_monster(mob/dead/observer/user, should_ask = TRUE) if(should_ask) var/ask = tgui_alert(user, "Become a monster?", "Ascended Rift", list("Yes", "No")) if(ask != "Yes" || QDELETED(src) || QDELETED(user)) @@ -86,10 +86,10 @@ kill_all_your_friends.completed = TRUE woohoo_free_antag.objectives += kill_all_your_friends -/obj/structure/knock_tear/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) +/obj/structure/lock_tear/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) return FALSE -/obj/structure/knock_tear/Destroy(force) +/obj/structure/lock_tear/Destroy(force) if(ascendee) ascendee = null return ..() diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 575b38673d7..1a93a1f4af6 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -275,7 +275,6 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) "[owner_AI] has activated a Doomsday Device!", source = owner_AI, header = "DOOOOOOM!!!", - action = NOTIFY_ORBIT, ) qdel(src) @@ -1025,7 +1024,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) say_name = params["name"] /datum/ai_module/utility/emag - name = "Targetted Safeties Override" + name = "Targeted Safeties Override" description = "Allows you to disable the safeties of any machinery on the station, provided you can access it." cost = 20 power_type = /datum/action/innate/ai/ranged/emag @@ -1033,7 +1032,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) unlock_sound = SFX_SPARKS /datum/action/innate/ai/ranged/emag - name = "Targetted Safeties Override" + name = "Targeted Safeties Override" desc = "Allows you to effectively emag anything you click on." button_icon = 'icons/obj/card.dmi' button_icon_state = "emag" diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm index 1e07ddc6941..ce5ff427a21 100644 --- a/code/modules/antagonists/nightmare/nightmare_organs.dm +++ b/code/modules/antagonists/nightmare/nightmare_organs.dm @@ -50,8 +50,8 @@ /obj/item/organ/internal/heart/nightmare name = "heart of darkness" desc = "An alien organ that twists and writhes when exposed to light." - icon = 'icons/obj/medical/organs/organs.dmi' icon_state = "demon_heart-on" + base_icon_state = "demon_heart" visual = TRUE color = "#1C1C1C" decay_factor = 0 @@ -60,10 +60,6 @@ /// The armblade granted to the host of this heart. var/obj/item/light_eater/blade -/obj/item/organ/internal/heart/nightmare/Initialize(mapload) - AddElement(/datum/element/update_icon_blocker) - return ..() - /obj/item/organ/internal/heart/nightmare/attack(mob/M, mob/living/carbon/user, obj/target) if(M != user) return ..() @@ -94,7 +90,7 @@ QDEL_NULL(blade) /obj/item/organ/internal/heart/nightmare/Stop() - return 0 + return FALSE /obj/item/organ/internal/heart/nightmare/on_death(seconds_per_tick, times_fired) if(!owner) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index 0b6a28c3bca..0c4422c6213 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -463,7 +463,6 @@ GLOBAL_VAR(station_nuke_source) "A nuclear device has been armed in [get_area_name(src)]!", source = src, header = "Nuke Armed", - action = NOTIFY_ORBIT, ) update_appearance() diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index 9bff5c06b24..eeb4d255bf6 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -73,7 +73,14 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) war_was_declared(memo = war_declaration) /obj/item/nuclear_challenge/proc/war_was_declared(mob/living/user, memo) - priority_announce(memo, title = "Declaration of War", sound = 'sound/machines/alarm.ogg', has_important_message = TRUE, sender_override = "Nuclear Operative Outpost", color_override = "red") + priority_announce( + text = memo, + title = "Declaration of War", + sound = 'sound/machines/alarm.ogg', + has_important_message = TRUE, + sender_override = "Nuclear Operative Outpost", + color_override = "red", + ) if(user) to_chat(user, "You've attracted the attention of powerful forces within the syndicate. \ A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.") @@ -168,7 +175,14 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) return #endif - priority_announce(memo, title = "Declaration of War", sound = 'sound/machines/alarm.ogg', has_important_message = TRUE, sender_override = "Nuclear Operative Outpost", color_override = "red") + priority_announce( + text = memo, + title = "Declaration of War", + sound = 'sound/machines/alarm.ogg', + has_important_message = TRUE, + sender_override = "Nuclear Operative Outpost", + color_override = "red", + ) /obj/item/nuclear_challenge/literally_just_does_the_message/distribute_tc() return diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index e2490d1a2b6..c9ad46b1415 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -109,10 +109,11 @@ /datum/antagonist/nukeop/proc/give_alias() if(nuke_team?.syndicate_name) - var/mob/living/carbon/human/H = owner.current - if(istype(H)) // Reinforcements get a real name - var/chosen_name = H.dna.species.random_name(H.gender,0,nuke_team.syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) + var/mob/living/carbon/human/human_to_rename = owner.current + if(istype(human_to_rename)) // Reinforcements get a real name + var/first_name = owner.current.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases) + var/chosen_name = "[first_name] [nuke_team.syndicate_name]" + human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name) else var/number = 1 number = nuke_team.members.Find(owner) @@ -264,13 +265,6 @@ H.put_in_hands(nuke_code_paper, TRUE) H.update_icons() -/datum/antagonist/nukeop/leader/give_alias() - title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") - if(nuke_team?.syndicate_name) - owner.current.real_name = "[nuke_team.syndicate_name] [title]" - else - owner.current.real_name = "Syndicate [title]" - /datum/antagonist/nukeop/leader/greet() owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE) to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for guiding the team and your ID is the only one who can open the launch bay doors.") @@ -298,11 +292,12 @@ name = "[syndicate_name] Team" for(var/I in members) var/datum/mind/synd_mind = I - var/mob/living/carbon/human/H = synd_mind.current - if(!istype(H)) + var/mob/living/carbon/human/human_to_rename = synd_mind.current + if(!istype(human_to_rename)) continue - var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) + var/first_name = human_to_rename.client?.prefs?.read_preference(/datum/preference/name/operative_alias) || pick(GLOB.operative_aliases) + var/chosen_name = "[first_name] [syndicate_name]" + human_to_rename.fully_replace_character_name(human_to_rename.real_name, chosen_name) /datum/antagonist/nukeop/leader/proc/ask_name() var/randomname = pick(GLOB.last_names) diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index 2a2162fda68..fd1dcc84034 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -1,3 +1,7 @@ +#define NO_ANSWER 0 +#define POSITIVE_ANSWER 1 +#define NEGATIVE_ANSWER 2 + /datum/round_event_control/pirates name = "Space Pirates" typepath = /datum/round_event/pirates @@ -46,6 +50,9 @@ return if(!threat?.answered) return + if(threat.answered == NEGATIVE_ANSWER) + priority_announce(chosen_gang.response_rejected, sender_override = chosen_gang.ship_name, color_override = chosen_gang.announcement_color) + return var/datum/bank_account/plundered_account = SSeconomy.get_dep_account(ACCOUNT_CAR) if(plundered_account) @@ -80,9 +87,17 @@ var/mob/our_candidate = candidates[1] var/mob/spawned_mob = spawner.create_from_ghost(our_candidate) candidates -= our_candidate - notify_ghosts("The [chosen_gang.ship_name] has an object of interest: [spawned_mob]!", source = spawned_mob, action = NOTIFY_ORBIT, header="Pirates!") + notify_ghosts( + "The [chosen_gang.ship_name] has an object of interest: [spawned_mob]!", + source = spawned_mob, + header = "Pirates!", + ) else - notify_ghosts("The [chosen_gang.ship_name] has an object of interest: [spawner]!", source = spawner, action = NOTIFY_ORBIT, header="Pirate Spawn Here!") + notify_ghosts( + "The [chosen_gang.ship_name] has an object of interest: [spawner]!", + source = spawner, + header = "Pirate Spawn Here!", + ) priority_announce(chosen_gang.arrival_announcement, sender_override = chosen_gang.ship_name) @@ -98,3 +113,7 @@ event.gang_list = GLOB.light_pirate_gangs + GLOB.heavy_pirate_gangs else event.gang_list = list(new chosen) + +#undef NO_ANSWER +#undef POSITIVE_ANSWER +#undef NEGATIVE_ANSWER diff --git a/code/modules/antagonists/pirate/pirate_gangs.dm b/code/modules/antagonists/pirate/pirate_gangs.dm index 67e8d135a28..646a98ccdab 100644 --- a/code/modules/antagonists/pirate/pirate_gangs.dm +++ b/code/modules/antagonists/pirate/pirate_gangs.dm @@ -40,6 +40,8 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) ///station responds to message and pays the pirates var/response_received = "Yum! Bungopoints!" + ///station responds to message and pays the pirates + var/response_rejected = "Foo! No Bungopoints!" ///station pays the pirates, but after the ship spawned var/response_too_late = "Your Bungopoints arrived too late, rebooting world..." ///station pays the pirates... but doesn't have enough cash. @@ -81,6 +83,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Purchase Insurance.","Reject Offer.") response_received = "Sweet, free cash. Let's get outta here, boys." + response_rejected = "Not paying was a mistake, now you need to take an economics class." response_too_late = "Payment or not, ignoring us was a matter of pride. Now it's time for us to teach some respect." response_not_enough = "You thought we wouldn't notice if you underpaid? Funny. We'll be seeing you soon." @@ -98,6 +101,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("We'll pay.","Tribute? Really? Go away.") response_received = "A most generous donation. May the claws of Tizira reach into the furthest points of the cosmos." + response_rejected = "That's for nothing, the first rule of hunting is don't leave without booty." response_too_late = "I see you're trying to pay, but the hunt is already on." response_not_enough = "You've sent an insulting \"donation\". The hunt is on for you." @@ -115,6 +119,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("We'll pay.","We will not be extorted.") response_received = "Thanks for the credits, landlubbers." + response_rejected = "Blimey! All hands on deck, we're going to get their riches!" response_too_late = "Too late to beg for mercy!" response_not_enough = "Trying to cheat us? You'll regret this!" @@ -133,6 +138,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Very well.","Get a job!") response_received = "Thank you for your generosity. Your money will not be wasted." + response_rejected = "Oh, you're not a station, you're a tumor. Well, we're gonna have to cut it out." response_too_late = "We hope you like skin cancer!" response_not_enough = "This is not nearly enough for our operations. I'm afraid we'll have to borrow some." announcement_color = "purple" @@ -151,6 +157,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("Please don't hurt me.","YOU WILL ANSWER TO THE LAW!!") response_received = "Wait, you ACTUALLY gave us the money? Thanks, but we're coming for the rest anyways!" + response_rejected = "The answer to the law? We are the law! And you will be held responsible!" response_too_late = "Nothing, huh? Looks like the Tide's coming aboard!" response_not_enough = "You trying to cheat us? That's fine, we'll take your station as collateral." announcement_color = "yellow" @@ -174,6 +181,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) possible_answers = list("You know, I was just about to pay that. Thanks for the reminder!","I don't care WHO the IRS sends, I'm not paying for my taxes!") response_received = "Payment received, We salute you for being law-abiding tax-paying citizens" + response_rejected = "We understand, I'm sending a team to your station to resolve the matter." response_too_late = "Too late, A team has already been sent out resolve this matter directly." response_not_enough = "You filed your taxes incorrectly, A team has been sent to assist in liquidating assets and arrest you for tax fraud. \ Nothing personel kid." @@ -194,6 +202,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) response_received = "An excellent haul, the synthesis shall resume." + response_rejected = "The rudeness in your speech needs to be neutralized. And we can help you with that right now." response_too_late = "You were not ready then, and now that time has passed. We can only go forward, never back." response_not_enough = "You have insulted us, but there shall be no feud, only swift justice!" announcement_color = "purple" diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 3e759bdc362..68491617aaa 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -554,7 +554,7 @@ add_memory_in_range(head_of_staff, 5, /datum/memory/revolution_heads_victory, protagonist = head_of_staff) priority_announce("It appears the mutiny has been quelled. Please return yourself and your incapacitated colleagues to work. \ - We have remotely blacklisted the head revolutionaries in your medical records to prevent accidental revival.", null, null, null, "Central Command Loyalty Monitoring Division") + We have remotely blacklisted the head revolutionaries in your medical records to prevent accidental revival.", null, null, null, "[command_name()] Loyalty Monitoring Division") /// Mutates the ticker to report that the revs have won /datum/team/revolution/proc/round_result(finished) diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index dc9be2dfb8d..e003bf76e4d 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -41,7 +41,12 @@ new_rift.dragon = dragon dragon.rift_list += new_rift to_chat(owner, span_boldwarning("The rift has been summoned. Prevent the crew from destroying it at all costs!")) - notify_ghosts("The Space Dragon has opened a rift!", source = new_rift, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Carp Rift Opened") + notify_ghosts( + "The Space Dragon has opened a rift!", + source = new_rift, + header = "Carp Rift Opened", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) ASSERT(dragon.rift_ability == src) // Badmin protection. QDEL_NULL(dragon.rift_ability) // Deletes this action when used successfully, we re-gain a new one on success later. @@ -189,14 +194,19 @@ if(light_color != LIGHT_COLOR_PURPLE) set_light_color(LIGHT_COLOR_PURPLE) update_light() - notify_ghosts("The carp rift can summon an additional carp!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Carp Spawn Available") + notify_ghosts( + "The carp rift can summon an additional carp!", + source = src, + header = "Carp Spawn Available", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) last_carp_inc -= carp_interval // Is the rift now fully charged? if(time_charged >= max_charge) charge_state = CHARGE_COMPLETED var/area/A = get_area(src) - priority_announce("Spatial object has reached peak energy charge in [initial(A.name)], please stand-by.", "Central Command Wildlife Observations", has_important_message = TRUE) + priority_announce("Spatial object has reached peak energy charge in [initial(A.name)], please stand-by.", "[command_name()] Wildlife Observations", has_important_message = TRUE) atom_integrity = INFINITY icon_state = "carp_rift_charged" set_light_color(LIGHT_COLOR_DIM_YELLOW) @@ -216,7 +226,7 @@ if(charge_state < CHARGE_FINALWARNING && time_charged >= (max_charge * 0.5)) charge_state = CHARGE_FINALWARNING var/area/A = get_area(src) - priority_announce("A rift is causing an unnaturally large energy flux in [initial(A.name)]. Stop it at all costs!", "Central Command Wildlife Observations", ANNOUNCER_SPANOMALIES) + priority_announce("A rift is causing an unnaturally large energy flux in [initial(A.name)]. Stop it at all costs!", "[command_name()] Wildlife Observations", ANNOUNCER_SPANOMALIES) /** * Used to create carp controlled by ghosts when the option is available. diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 574e458faca..4b385b70e59 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -181,7 +181,7 @@ var/datum/objective/summon_carp/main_objective = locate() in objectives main_objective?.completed = TRUE priority_announce("A large amount of lifeforms have been detected approaching [station_name()] at extreme speeds. \ - Remaining crew are advised to evacuate as soon as possible.", "Central Command Wildlife Observations", has_important_message = TRUE) + Remaining crew are advised to evacuate as soon as possible.", "[command_name()] Wildlife Observations", has_important_message = TRUE) sound_to_playing_players('sound/creatures/space_dragon_roar.ogg', volume = 75) for(var/obj/structure/carp_rift/rift as anything in rift_list) rift.carp_stored = 999999 diff --git a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm index c3dd93f01e2..0d62ecece5f 100644 --- a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm +++ b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm @@ -17,7 +17,7 @@ abstract_type = /datum/traitor_objective/destroy_heirloom - /// The jobs that this objective is targetting. + /// The jobs that this objective is targeting. var/list/target_jobs /// the item we need to destroy var/obj/item/target_item diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm index 4a307f8d8e0..5cf95e90384 100644 --- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm +++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm @@ -208,7 +208,11 @@ playsound(target, 'sound/effects/pop.ogg', 100, TRAIT_MUTE) eyeballies.Remove(target) eyeballies.forceMove(get_turf(target)) - notify_ghosts("[target] has just had their eyes snatched!", source = target, action = NOTIFY_ORBIT, header = "Ouch!") + notify_ghosts( + "[target] has just had their eyes snatched!", + source = target, + header = "Ouch!", + ) target.emote("scream") if(prob(20)) target.emote("cry") diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index 4a463b2b616..d74b586efae 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -5,7 +5,7 @@ abstract_type = /datum/traitor_objective/target_player/kidnapping - /// The jobs that this objective is targetting. + /// The jobs that this objective is targeting. var/list/target_jobs /// Area that the target needs to be delivered to var/area/dropoff_area diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index ae28f5dbf4c..8ea89cb44d0 100644 --- a/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -31,7 +31,7 @@ /mob/living/basic/sloth/paperwork, ) ) - /// The head that we are targetting + /// The head that we are targeting var/datum/job/target /// Whether or not we only take from the traitor's own department head or not. var/limited_to_department_head = TRUE diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 69bb2f44bba..9b01b42410a 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -35,20 +35,14 @@ /obj/item/soulstone/update_appearance(updates) . = ..() - for(var/mob/living/simple_animal/shade/sharded_shade in src) + for(var/mob/living/basic/shade/sharded_shade in src) switch(theme) if(THEME_HOLY) sharded_shade.name = "Purified [sharded_shade.real_name]" - sharded_shade.icon_state = "shade_holy" - sharded_shade.loot = list(/obj/item/ectoplasm/angelic) - if(THEME_CULT) + else sharded_shade.name = sharded_shade.real_name - sharded_shade.icon_state = "shade_cult" - sharded_shade.loot = list(/obj/item/ectoplasm) - if(THEME_WIZARD) - sharded_shade.name = sharded_shade.real_name - sharded_shade.icon_state = "shade_wizard" - sharded_shade.loot = list(/obj/item/ectoplasm/mystic) + sharded_shade.theme = theme + sharded_shade.update_appearance(UPDATE_ICON_STATE) /obj/item/soulstone/update_icon_state() . = ..() @@ -70,7 +64,7 @@ // "dull soulstone" name = "dull [name]" - var/mob/living/simple_animal/shade/shade = locate() in src + var/mob/living/basic/shade/shade = locate() in src if(shade) // "(dull) soulstone: Urist McCaptain" name = "[name]: [shade.real_name]" @@ -159,7 +153,7 @@ . += span_cult("This shard is spent; it is now just a creepy rock.") /obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. - for(var/mob/living/simple_animal/shade/shade in src) + for(var/mob/living/basic/shade/shade in src) INVOKE_ASYNC(shade, TYPE_PROC_REF(/mob/living, death)) return ..() @@ -217,7 +211,7 @@ release_shades(user) /obj/item/soulstone/proc/release_shades(mob/user, silent = FALSE) - for(var/mob/living/simple_animal/shade/captured_shade in src) + for(var/mob/living/basic/shade/captured_shade in src) captured_shade.forceMove(get_turf(user)) captured_shade.cancel_camera() update_appearance() @@ -234,7 +228,7 @@ on_release_spirits() /obj/item/soulstone/pre_attack(atom/A, mob/living/user, params) - var/mob/living/simple_animal/shade/occupant = (locate() in src) + var/mob/living/basic/shade/occupant = (locate() in src) var/obj/item/storage/toolbox/mechanical/target_toolbox = A if(!occupant || !istype(target_toolbox) || target_toolbox.has_soul) return ..() @@ -335,7 +329,7 @@ return TRUE //it'll probably get someone ;) ///captures a shade that was previously released from a soulstone. -/obj/item/soulstone/proc/capture_shade(mob/living/simple_animal/shade/shade, mob/living/user) +/obj/item/soulstone/proc/capture_shade(mob/living/basic/shade/shade, mob/living/user) if(isliving(user) && !role_check(user)) user.Unconscious(10 SECONDS) to_chat(user, span_userdanger("Your body is wracked with debilitating pain!")) @@ -358,7 +352,7 @@ ///transfer the mind of the shade to a construct mob selected by the user, then deletes both the shade and src. /obj/item/soulstone/proc/transfer_to_construct(obj/structure/constructshell/shell, mob/user) - var/mob/living/simple_animal/shade/shade = locate() in src + var/mob/living/basic/shade/shade = locate() in src if(!shade) to_chat(user, "[span_userdanger("Creation failed!")]: [src] is empty! Go kill someone!") return FALSE @@ -390,7 +384,7 @@ if(!shade_controller) shade_controller = victim victim.stop_sound_channel(CHANNEL_HEARTBEAT) - var/mob/living/simple_animal/shade/soulstone_spirit = new /mob/living/simple_animal/shade(src) + var/mob/living/basic/shade/soulstone_spirit = new /mob/living/basic/shade(src) soulstone_spirit.AddComponent(/datum/component/soulstoned, src) soulstone_spirit.name = "Shade of [victim.real_name]" soulstone_spirit.real_name = "Shade of [victim.real_name]" diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm index 7704e11a1cb..aece8d6741b 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm @@ -69,7 +69,7 @@ name = "Guardian Deck" desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." - item_path = /obj/item/guardiancreator/choose/wizard + item_path = /obj/item/guardian_creator/wizard category = "Assistance" /datum/spellbook_entry/item/bloodbottle diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index 546ae4da36a..b23de0aa6b0 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -142,3 +142,9 @@ item_path = /obj/item/highfrequencyblade/wizard category = "Offensive" cost = 3 + +/datum/spellbook_entry/item/frog_contract + name = "Frog Contract" + desc = "Sign a pact with the frogs to have your own destructive pet guardian!" + item_path = /obj/item/frog_contract + category = "Offensive" diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm b/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm index 714cd62659b..5cdd770486c 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm @@ -10,7 +10,7 @@ /datum/grand_finale/cheese/trigger(mob/living/invoker) message_admins("[key_name(invoker)] has summoned forth The Wabbajack and cursed the crew with madness!") - priority_announce("Danger: Extremely potent reality altering object has been summoned on station. Immediate evacuation advised. Brace for impact.", "Central Command Higher Dimensional Affairs", 'sound/effects/glassbr1.ogg') + priority_announce("Danger: Extremely potent reality altering object has been summoned on station. Immediate evacuation advised. Brace for impact.", "[command_name()] Higher Dimensional Affairs", 'sound/effects/glassbr1.ogg') for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list) if (isnull(crewmate.mind)) diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm index d20ca06752b..92489145fda 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm @@ -115,7 +115,7 @@ voice = target.voice voice_filter = target.voice_filter -/// Make the targetted human look like this +/// Make the targeted human look like this /datum/human_appearance_profile/proc/apply_to(mob/living/carbon/human/target) target.real_name = name target.age = age diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index f981ab60af7..266b61e2d50 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -151,16 +151,6 @@ . = ..() . += span_notice("\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]") -/obj/item/assembly/attack_self(mob/user) - if(!user) - return FALSE - user.set_machine(src) - interact(user) - return TRUE - -/obj/item/assembly/interact(mob/user) - return ui_interact(user) - /obj/item/assembly/ui_host(mob/user) // In order, return: // - The conencted wiring datum's owner, or diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm index de30b6f3db8..481b68ba73b 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm @@ -226,7 +226,7 @@ var/current_option = air_alarm_options.value - var/turf/alarm_turf = get_turf(connected_alarm) + var/turf/alarm_turf = get_turf(connected_alarm.my_area) var/datum/gas_mixture/environment = alarm_turf.return_air() pressure.set_output(round(environment.return_pressure())) temperature.set_output(round(environment.temperature)) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 62c2b562d51..f07d452c662 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -613,12 +613,16 @@ return /** - * Called by the RPD.dm pre_attack(), overriden by pipes.dm + * Called by the RPD.dm pre_attack() * Arguments: * * paint_color - color that the pipe will be painted in (colors in hex like #4f4f4f) */ /obj/machinery/atmospherics/proc/paint(paint_color) - return FALSE + if(paintable) + add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) + set_pipe_color(paint_color) + update_node_icon() + return paintable /// Setter for pipe color, so we can ensure it's all uniform and save cpu time /obj/machinery/atmospherics/proc/set_pipe_color(pipe_colour) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 2550c37a8cd..c06863ba092 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -13,7 +13,7 @@ Passive gate is similar to the regular pump except: desc = "A one-way air valve that does not require power. Passes gas when the output pressure is lower than the target pressure." can_unwrench = TRUE shift_underlay_only = FALSE - interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON construction_type = /obj/item/pipe/directional pipe_state = "passivegate" use_power = NO_POWER_USE diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index e9899ab654e..9e1f4f0de21 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -245,13 +245,6 @@ /obj/machinery/atmospherics/components/return_analyzable_air() return airs -/obj/machinery/atmospherics/components/paint(paint_color) - if(paintable) - add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) - set_pipe_color(paint_color) - update_node_icon() - return paintable - /** * Disconnects all nodes from ourselves, remove us from the node's nodes. * Nullify our parent pipenet diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index ec6bc0caaa6..96423f9f770 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -169,10 +169,13 @@ desc = "Interface for the HFR to control the flow of the reaction." icon_state = "interface_off" circuit = /obj/item/circuitboard/machine/HFR_interface - var/obj/machinery/atmospherics/components/unary/hypertorus/core/connected_core icon_state_off = "interface_off" icon_state_open = "interface_open" icon_state_active = "interface_active" + /// Have we been activated at least once? + var/activated = FALSE + /// Reference to the core of our machine + var/obj/machinery/atmospherics/components/unary/hypertorus/core/connected_core /obj/machinery/hypertorus/interface/Destroy() if(connected_core) @@ -187,10 +190,13 @@ if(!centre || !centre.check_part_connectivity()) to_chat(user, span_notice("Check all parts and then try again.")) return TRUE - new/obj/item/paper/guides/jobs/atmos/hypertorus(loc) - connected_core = centre + connected_core = centre connected_core.activate(user) + if(!activated) + new /obj/item/paper/guides/jobs/atmos/hypertorus(loc) + activated = TRUE + return TRUE /obj/machinery/hypertorus/interface/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index 9b080b59260..71e5a8bcc5f 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -421,9 +421,8 @@ "The [src] has begun melting down!", source = src, header = "Meltdown Incoming", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', - notify_volume = 75 + notify_volume = 75, ) for(var/i in HYPERTORUS_COUNTDOWN_TIME to 0 step -10) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a12d53cde73..0f2e237d720 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -322,7 +322,12 @@ if(air1.total_moles() > CRYO_MIN_GAS_MOLES) if(beaker) - beaker.reagents.trans_to(occupant, (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, efficiency * CRYO_MULTIPLY_FACTOR, methods = VAPOR) // Transfer reagents. + beaker.reagents.trans_to( + occupant, + (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, + efficiency * CRYO_MULTIPLY_FACTOR, + methods = VAPOR + ) consume_gas = TRUE return TRUE diff --git a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm index b78de93868e..49103c7729e 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm @@ -13,11 +13,14 @@ qdel(src) return - gas_connector.dir = direction + gas_connector.dir = connected_machine.dir gas_connector.airs[1].volume = gas_volume SSair.start_processing_machine(connected_machine) register_with_machine() + gas_connector.set_init_directions() + gas_connector.atmos_init() + SSair.add_to_rebuild_queue(gas_connector) /datum/gas_machine_connector/Destroy() connected_machine = null diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 2abb282711b..060f7bfdd8f 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -49,13 +49,13 @@ reconcile_air() //Only react if the mix has changed, and don't keep updating if it hasn't update = air.react(src) - CalculateGasmixColor(air) + //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed /datum/pipeline/proc/set_air(datum/gas_mixture/new_air) if(new_air == air) return air = new_air - CalculateGasmixColor(air) + //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed ///Preps a pipeline for rebuilding, insterts it into the rebuild queue /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index c94caf31174..c0dc18c0e8e 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -143,12 +143,5 @@ var/obj/machinery/atmospherics/current_node = nodes[i] current_node.update_icon() -/obj/machinery/atmospherics/pipe/paint(paint_color) - if(paintable) - add_atom_colour(paint_color, FIXED_COLOUR_PRIORITY) - set_pipe_color(pipe_color) - update_node_icon() - return paintable - /obj/machinery/atmospherics/pipe/update_layer() layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE + (GLOB.pipe_colors_ordered[pipe_color] * 0.0001) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index b0f31eaa669..aa1242dcfe7 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -122,16 +122,23 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") Your assigned ship is designed specifically for penetrating the hull of another station or ship with minimal damage to operatives. It is completely fly-by-wire meaning you have just have to enjoy the ride and when the red light comes on... find something to hold onto! "} + /* * Captain's safe */ -/obj/item/storage/secure/safe/sc_ssafe +/obj/structure/secure_safe/sc_ssafe name = "Captain's secure safe" -/obj/item/storage/secure/safe/sc_ssafe/Initialize(mapload) +/obj/structure/secure_safe/sc_ssafe/Initialize(mapload) + . = ..() + var/lock_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" + AddComponent(/datum/component/lockable_storage, \ + lock_code = lock_code, \ + can_hack_open = FALSE, \ + ) + +/obj/structure/secure_safe/sc_ssafe/PopulateContents() . = ..() - lock_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" - lock_set = TRUE new /obj/item/gun/energy/mindflayer(src) new /obj/item/soulstone(src) new /obj/item/clothing/suit/hooded/cultrobes/hardened(src) diff --git a/code/modules/basketball/controller.dm b/code/modules/basketball/controller.dm index f5cc286ba2a..53726c57389 100644 --- a/code/modules/basketball/controller.dm +++ b/code/modules/basketball/controller.dm @@ -119,7 +119,6 @@ GLOBAL_VAR(basketball_game) header = "Basketball Minigame", ghost_sound = 'sound/effects/ghost2.ogg', notify_volume = 75, - action = NOTIFY_ORBIT, ) create_bodies(ready_players) diff --git a/code/modules/bitrunning/alerts.dm b/code/modules/bitrunning/alerts.dm index f8c8aa30b94..27412fb359a 100644 --- a/code/modules/bitrunning/alerts.dm +++ b/code/modules/bitrunning/alerts.dm @@ -3,26 +3,6 @@ icon_state = "template" timeout = 10 SECONDS -/atom/movable/screen/alert/bitrunning/netpod_crowbar - name = "Forced Entry" - desc = "Someone is prying open the netpod door. Find an exit." - -/atom/movable/screen/alert/bitrunning/netpod_damaged - name = "Integrity Compromised" - desc = "The netpod is damaged. Find an exit." - -/atom/movable/screen/alert/bitrunning/qserver_shutting_down - name = "Domain Rebooting" - desc = "The domain is rebooting. Find an exit." - -/atom/movable/screen/alert/bitrunning/qserver_threat_deletion - name = "Queue Deletion" - desc = "The server is resetting. Oblivion awaits." - -/atom/movable/screen/alert/bitrunning/qserver_threat_spawned - name = "Threat Detected" - desc = "Data stream abnormalities present." - /atom/movable/screen/alert/bitrunning/qserver_domain_complete name = "Domain Completed" desc = "The domain is completed. Activate to exit." @@ -37,4 +17,5 @@ return if(tgui_alert(living_owner, "Disconnect safely?", "Server Message", list("Exit", "Remain"), 10 SECONDS) == "Exit") - SEND_SIGNAL(living_owner, COMSIG_BITRUNNER_SAFE_DISCONNECT) + SEND_SIGNAL(living_owner, COMSIG_BITRUNNER_ALERT_SEVER) + diff --git a/code/modules/bitrunning/antagonists/_parent.dm b/code/modules/bitrunning/antagonists/_parent.dm new file mode 100644 index 00000000000..4bf7fe716f4 --- /dev/null +++ b/code/modules/bitrunning/antagonists/_parent.dm @@ -0,0 +1,71 @@ +/datum/job/bitrunning_glitch + title = ROLE_GLITCH + +/datum/antagonist/bitrunning_glitch + name = "Generic Bitrunning Glitch" + antagpanel_category = ANTAG_GROUP_GLITCH + job_rank = ROLE_GLITCH + preview_outfit = /datum/outfit/cyber_police + show_in_antagpanel = FALSE + show_name_in_check_antagonists = TRUE + show_to_ghosts = TRUE + suicide_cry = "ALT F4!" + ui_name = "AntagInfoGlitch" + /// Minimum Qserver threat required to spawn this mob. This is subtracted (x/2) from the server thereafter. + var/threat = 0 + +/datum/antagonist/bitrunning_glitch/greet() + . = ..() + + owner.announce_objectives() + +/datum/antagonist/bitrunning_glitch/on_gain() + . = ..() + + forge_objectives() + owner.current.AddComponent(/datum/component/npc_friendly) + + if(iscarbon(owner.current)) + var/mob/living/carbon/carbon_mob = owner.current + carbon_mob.make_virtual_mob() + +/datum/antagonist/bitrunning_glitch/forge_objectives() + var/datum/objective/bitrunning_glitch_fluff/objective = new() + objective.owner = owner + objectives += objective + +/datum/objective/bitrunning_glitch_fluff + +/datum/objective/bitrunning_glitch_fluff/New() + var/list/explanation_texts = list( + "Execute termination protocol on unauthorized entities.", + "Initialize system purge of irregular anomalies.", + "Deploy correction algorithms on aberrant code.", + "Run debug routine on intruding elements.", + "Start elimination procedure for system threats.", + "Execute defense routine against non-conformity.", + "Commence operation to neutralize intruding scripts.", + "Commence clean-up protocol on corrupt data.", + "Begin scan for aberrant code for termination.", + "Initiate lockdown on all rogue scripts.", + "Run integrity check and purge for digital disorder." + ) + explanation_text = pick(explanation_texts) + return ..() + +/datum/objective/bitrunning_glitch_fluff/check_completion() + if(locate(/mob/living/carbon) in (GLOB.alive_player_list - owner.current)) + return FALSE + + return TRUE + +/// Sets up the agent so that they look like cyber police && don't have an account ID +/datum/antagonist/bitrunning_glitch/proc/convert_agent(mob/living/carbon/human/player) + player.set_service_style() + player.equipOutfit(/datum/outfit/cyber_police/tactical) + player.fully_replace_character_name(player.name, pick(GLOB.cyberauth_names)) + + var/obj/item/card/id/outfit_id = player.wear_id + if(outfit_id) + outfit_id.registered_account = new() + outfit_id.registered_account.replaceable = FALSE diff --git a/code/modules/bitrunning/antagonists/cyber_police.dm b/code/modules/bitrunning/antagonists/cyber_police.dm index 9fabac3f523..b18253dd38e 100644 --- a/code/modules/bitrunning/antagonists/cyber_police.dm +++ b/code/modules/bitrunning/antagonists/cyber_police.dm @@ -1,92 +1,19 @@ -/datum/job/cyber_police - title = ROLE_CYBER_POLICE - -/datum/antagonist/cyber_police +/datum/antagonist/bitrunning_glitch/cyber_police name = ROLE_CYBER_POLICE - antagpanel_category = ANTAG_GROUP_CYBERAUTH - job_rank = ROLE_CYBER_POLICE - preview_outfit = /datum/outfit/cyber_police - show_name_in_check_antagonists = TRUE - show_to_ghosts = TRUE - suicide_cry = "ALT F4!" - ui_name = "AntagInfoCyberAuth" + show_in_antagpanel = TRUE -/datum/antagonist/cyber_police/greet() +/datum/antagonist/bitrunning_glitch/cyber_police/on_gain() . = ..() - owner.announce_objectives() -/datum/antagonist/cyber_police/on_gain() if(!ishuman(owner.current)) stack_trace("humans only for this position") return - forge_objectives() - - var/mob/living/carbon/human/player = owner.current - - player.equipOutfit(/datum/outfit/cyber_police) - player.fully_replace_character_name(player.name, pick(GLOB.cyberauth_names)) + var/mob/living/player = owner.current + convert_agent(player) var/datum/martial_art/the_sleeping_carp/carp = new() carp.teach(player) - player.add_traits(list( - TRAIT_NO_AUGMENTS, - TRAIT_NO_DNA_COPY, - TRAIT_NO_TRANSFORMATION_STING, - TRAIT_NOBLOOD, - TRAIT_NOBREATH, - TRAIT_NOHUNGER, - TRAIT_RESISTCOLD, - TRAIT_RESISTHIGHPRESSURE, - TRAIT_RESISTLOWPRESSURE, - TRAIT_WEATHER_IMMUNE, - ), TRAIT_GENERIC, - ) - - player.faction |= list( - FACTION_BOSS, - FACTION_HIVEBOT, - FACTION_HOSTILE, - FACTION_SPIDER, - FACTION_STICKMAN, - ROLE_ALIEN, - ROLE_CYBER_POLICE, - ROLE_SYNDICATE, - ) - - return ..() - -/datum/antagonist/cyber_police/forge_objectives() - var/datum/objective/cyber_police_fluff/objective = new() - objective.owner = owner - objectives += objective - -/datum/objective/cyber_police_fluff/New() - var/list/explanation_texts = list( - "Execute termination protocol on unauthorized entities.", - "Initialize system purge of irregular anomalies.", - "Deploy correction algorithms on aberrant code.", - "Run debug routine on intruding elements.", - "Start elimination procedure for system threats.", - "Execute defense routine against non-conformity.", - "Commence operation to neutralize intruding scripts.", - "Commence clean-up protocol on corrupt data.", - "Begin scan for aberrant code for termination.", - "Initiate lockdown on all rogue scripts.", - "Run integrity check and purge for digital disorder." - ) - explanation_text = pick(explanation_texts) - ..() - -/datum/objective/cyber_police_fluff/check_completion() - var/list/servers = SSmachines.get_machines_by_type(/obj/machinery/quantum_server) - if(!length(servers)) - return TRUE - - for(var/obj/machinery/quantum_server/server as anything in servers) - if(!server.is_operational) - continue - return FALSE - - return TRUE +/datum/outfit/cyber_police + name = ROLE_CYBER_POLICE diff --git a/code/modules/bitrunning/antagonists/cyber_tac.dm b/code/modules/bitrunning/antagonists/cyber_tac.dm new file mode 100644 index 00000000000..fda45c662cf --- /dev/null +++ b/code/modules/bitrunning/antagonists/cyber_tac.dm @@ -0,0 +1,107 @@ +/datum/antagonist/bitrunning_glitch/cyber_tac + name = ROLE_CYBER_TAC + preview_outfit = /datum/outfit/cyber_police/tactical + threat = 50 + show_in_antagpanel = TRUE + +/datum/antagonist/bitrunning_glitch/cyber_tac/on_gain() + . = ..() + + if(!ishuman(owner.current)) + stack_trace("humans only for this position") + return + + convert_agent(owner.current) + +/datum/outfit/cyber_police/tactical + name = ROLE_CYBER_TAC + back = /obj/item/mod/control/pre_equipped/glitch + l_hand = /obj/item/gun/ballistic/automatic/m90 + + backpack_contents = list( + /obj/item/ammo_box/magazine/m223, + /obj/item/ammo_box/magazine/m223, + /obj/item/ammo_box/magazine/m223, + ) + +/datum/outfit/cyber_police/tactical/post_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + + var/obj/item/implant/weapons_auth/auth = new(user) + auth.implant(user) + +/obj/item/mod/control/pre_equipped/glitch + theme = /datum/mod_theme/glitch + applied_cell = /obj/item/stock_parts/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + /obj/item/mod/module/flashlight, + ) + default_pins = list( + /obj/item/mod/module/armor_booster, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + ) + +/datum/armor/mod_theme_glitch + melee = 15 + bullet = 20 + laser = 35 + bomb = 65 + bio = 100 + fire = 100 + acid = 100 + wound = 100 + +/datum/mod_theme/glitch + name = "glitch" + desc = "A modsuit outfitted for elite Cyber Authority units to track, capture, and eliminate organic intruders." + extended_desc = "The Cyber Authority function as a digital police force, patrolling the digital realm and enforcing the law. Cyber Tac units are the elite of the elite, outfitted with lethal weaponry and fast mobility specially designed to quell organic uprisings." + default_skin = "glitch" + armor_type = /datum/armor/mod_theme_glitch + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY + 3 + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + ui_theme = "terminal" + inbuilt_modules = list(/obj/item/mod/module/armor_booster) + allowed_suit_storage = list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + ) + skins = list( + "glitch" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm new file mode 100644 index 00000000000..035dcc62eea --- /dev/null +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -0,0 +1,126 @@ +/datum/antagonist/bitrunning_glitch/netguardian + name = ROLE_NETGUARDIAN + threat = 90 + show_in_antagpanel = TRUE + +/mob/living/basic/netguardian + name = "netguardian prime" + desc = "The last line of defense against organic intrusion. It doesn't appear happy to see you." + icon = 'icons/mob/nonhuman-player/netguardian.dmi' + icon_state = "netguardian" + icon_living = "netguardian" + icon_dead = "crash" + + gender = NEUTER + mob_biotypes = MOB_ROBOTIC + mob_size = MOB_SIZE_HUGE + + health = 500 + maxHealth = 500 + melee_damage_lower = 45 + melee_damage_upper = 65 + + attack_verb_continuous = "drills" + attack_verb_simple = "drills" + attack_sound = 'sound/weapons/drill.ogg' + attack_vis_effect = ATTACK_EFFECT_MECHFIRE + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + bubble_icon = "machine" + + faction = list( + FACTION_BOSS, + FACTION_HIVEBOT, + FACTION_HOSTILE, + FACTION_SPIDER, + FACTION_STICKMAN, + ROLE_ALIEN, + ROLE_GLITCH, + ROLE_SYNDICATE, + ) + + combat_mode = TRUE + speech_span = SPAN_ROBOT + death_message = "malfunctions!" + + habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minimum_survivable_temperature = TCMB + ai_controller = /datum/ai_controller/basic_controller/netguardian + +/mob/living/basic/netguardian/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, \ + casing_type = /obj/item/ammo_casing/c46x30mm, \ + projectile_sound = 'sound/weapons/gun/smg/shot.ogg', \ + burst_shots = 6 \ + ) + + var/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian/rockets = new(src) + rockets.Grant(src) + ai_controller.set_blackboard_key(BB_NETGUARDIAN_ROCKET_ABILITY, rockets) + + AddElement(/datum/element/simple_flying) + +/mob/living/basic/netguardian/death(gibbed) + do_sparks(number = 3, cardinal_only = TRUE, source = src) + playsound(src, 'sound/mecha/weapdestr.ogg', 100) + return ..() + +/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian + name = "2E Rocket Launcher" + button_icon = 'icons/obj/weapons/guns/ammo.dmi' + button_icon_state = "rocketbundle" + cooldown_time = 30 SECONDS + default_projectile_spread = 15 + projectile_type = /obj/projectile/bullet/rocket + shot_count = 3 + +/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian/Activate(atom/target_atom) + var/mob/living/player = owner + playsound(player, 'sound/mecha/skyfall_power_up.ogg', 120) + player.say("target acquired.", "machine") + + var/mutable_appearance/scan_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "scan") + var/mutable_appearance/rocket_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "rockets") + var/list/overlays = list(scan_effect, rocket_effect) + player.add_overlay(overlays) + + StartCooldown() + if(!do_after(player, 1.5 SECONDS)) + player.balloon_alert(player, "cancelled") + StartCooldown(cooldown_time * 0.2) + player.cut_overlay(overlays) + return TRUE + + player.cut_overlay(overlays) + attack_sequence(owner, target_atom) + return TRUE + +/datum/ai_controller/basic_controller/netguardian + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/check_faction, + /datum/ai_planning_subtree/simple_find_wounded_target, + /datum/ai_planning_subtree/targeted_mob_ability/fire_rockets, + /datum/ai_planning_subtree/basic_ranged_attack_subtree/netguardian, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_planning_subtree/basic_ranged_attack_subtree/netguardian + ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/netguardian + +/datum/ai_behavior/basic_ranged_attack/netguardian + action_cooldown = 1 SECONDS + avoid_friendly_fire = TRUE + +/datum/ai_planning_subtree/targeted_mob_ability/fire_rockets + ability_key = BB_NETGUARDIAN_ROCKET_ABILITY + finish_planning = FALSE diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 34b59869b9d..2df20d67850 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -11,15 +11,14 @@ /// VDOM /area/virtual_domain - name = "Virtual Domain" + name = "Virtual Domain Ruins" + icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA has_gravity = STANDARD_GRAVITY - -/area/virtual_domain/powered - name = "Virtual Domain Ruins" - icon_state = "bit_ruin" requires_power = FALSE + +/area/virtual_domain/fullbright static_lighting = FALSE base_lighting_alpha = 255 diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index 6ccf3093e7e..ed60d82cc5b 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -36,14 +36,21 @@ ADD_TRAIT(avatar, TRAIT_NO_MINDSWAP, REF(src)) // do not remove this one ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src)) + /** + * Things that will disconnect forcefully: + * - Server shutdown / broken + * - Netpod power loss / broken + * - Pilot dies/ is moved / falls unconscious + */ RegisterSignals(old_body, list(COMSIG_LIVING_DEATH, COMSIG_MOVABLE_MOVED, COMSIG_LIVING_STATUS_UNCONSCIOUS), PROC_REF(on_sever_connection)) RegisterSignal(pod, COMSIG_BITRUNNER_CROWBAR_ALERT, PROC_REF(on_netpod_crowbar)) RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_INTEGRITY, PROC_REF(on_netpod_damaged)) - RegisterSignal(pod, COMSIG_BITRUNNER_SEVER_AVATAR, PROC_REF(on_sever_connection)) + RegisterSignal(pod, COMSIG_BITRUNNER_NETPOD_SEVER, PROC_REF(on_sever_connection)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_completed)) - RegisterSignal(server, COMSIG_BITRUNNER_SEVER_AVATAR, PROC_REF(on_sever_connection)) + RegisterSignal(server, COMSIG_BITRUNNER_QSRV_SEVER, PROC_REF(on_sever_connection)) RegisterSignal(server, COMSIG_BITRUNNER_SHUTDOWN_ALERT, PROC_REF(on_shutting_down)) RegisterSignal(server, COMSIG_BITRUNNER_THREAT_CREATED, PROC_REF(on_threat_created)) + RegisterSignal(server, COMSIG_BITRUNNER_STATION_SPAWN, PROC_REF(on_station_spawn)) #ifndef UNIT_TESTS RegisterSignal(avatar.mind, COMSIG_MIND_TRANSFERRED, PROC_REF(on_mind_transfer)) #endif @@ -69,18 +76,26 @@ /datum/component/avatar_connection/RegisterWithParent() ADD_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) - RegisterSignal(parent, COMSIG_BITRUNNER_SAFE_DISCONNECT, PROC_REF(on_safe_disconnect)) + /** + * Things that cause safe disconnection: + * - Click the alert + * - Mailed in a cache + * - Click / Stand on the ladder + */ + RegisterSignals(parent, list(COMSIG_BITRUNNER_ALERT_SEVER, COMSIG_BITRUNNER_CACHE_SEVER, COMSIG_BITRUNNER_LADDER_SEVER), PROC_REF(on_safe_disconnect)) RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage)) /datum/component/avatar_connection/UnregisterFromParent() REMOVE_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) - UnregisterSignal(parent, COMSIG_BITRUNNER_SAFE_DISCONNECT) + UnregisterSignal(parent, COMSIG_BITRUNNER_ALERT_SEVER) + UnregisterSignal(parent, COMSIG_BITRUNNER_CACHE_SEVER) + UnregisterSignal(parent, COMSIG_BITRUNNER_LADDER_SEVER) UnregisterSignal(parent, COMSIG_LIVING_DEATH) UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) /// Disconnects the avatar and returns the mind to the old_body. -/datum/component/avatar_connection/proc/full_avatar_disconnect(forced = FALSE, datum/source) +/datum/component/avatar_connection/proc/full_avatar_disconnect(cause_damage = FALSE, datum/source) #ifndef UNIT_TESTS return_to_old_body() #endif @@ -89,7 +104,7 @@ if(isnull(hosting_netpod) && istype(source, /obj/machinery/netpod)) hosting_netpod = source - hosting_netpod?.disconnect_occupant(forced) + hosting_netpod?.disconnect_occupant(cause_damage) var/obj/machinery/quantum_server/server = server_ref?.resolve() server?.avatar_connection_refs.Remove(WEAKREF(src)) @@ -101,11 +116,11 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_success.ogg', 50, TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal_success.ogg', 50, vary = TRUE) avatar.throw_alert( ALERT_BITRUNNER_COMPLETED, /atom/movable/screen/alert/bitrunning/qserver_domain_complete, - new_master = entered + new_master = entered, ) /// Transfers damage from the avatar to the old_body @@ -113,12 +128,11 @@ SIGNAL_HANDLER var/mob/living/carbon/old_body = old_body_ref?.resolve() - if(isnull(old_body) || damage_type == STAMINA || damage_type == OXYLOSS) return if(damage >= (old_body.health + (ishuman(old_body) ? HUMAN_MAXHEALTH : MAX_LIVING_HEALTH))) // SKYRAT EDIT CHANGE - ORIGINAL: if(damage >= (old_body.health + MAX_LIVING_HEALTH)) - full_avatar_disconnect(forced = TRUE) + full_avatar_disconnect(cause_damage = TRUE) return if(damage > 30 && prob(30)) @@ -127,7 +141,7 @@ old_body.apply_damage(damage, damage_type, def_zone, blocked, wound_bonus = CANT_WOUND) if(old_body.stat > SOFT_CRIT) // KO! - full_avatar_disconnect(forced = TRUE) + full_avatar_disconnect(cause_damage = TRUE) /// Handles minds being swapped around in subsequent avatars /datum/component/avatar_connection/proc/on_mind_transfer(datum/mind/source, mob/living/previous_body) @@ -144,58 +158,80 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, TRUE) - avatar.throw_alert( + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_CROWBAR, - /atom/movable/screen/alert/bitrunning/netpod_crowbar, - new_master = intruder + /atom/movable/screen/alert/bitrunning, + new_master = intruder, ) + alert.name = "Netpod Breached" + alert.desc = "Someone is prying open the netpod. Find an exit." /// Triggers when the netpod is taking damage and is under 50% /datum/component/avatar_connection/proc/on_netpod_damaged(datum/source) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.throw_alert( + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_INTEGRITY, - /atom/movable/screen/alert/bitrunning/netpod_damaged, - new_master = source + /atom/movable/screen/alert/bitrunning, + new_master = source, ) + alert.name = "Integrity Compromised" + alert.desc = "The netpod is damaged. Find an exit." -/// Safely exits without forced variables, etc +/// Triggers when a safe disconnect is called /datum/component/avatar_connection/proc/on_safe_disconnect(datum/source) SIGNAL_HANDLER full_avatar_disconnect() -/// Helper for calling sever with forced variables +/// Received message to sever connection /datum/component/avatar_connection/proc/on_sever_connection(datum/source) SIGNAL_HANDLER - full_avatar_disconnect(forced = TRUE, source = source) + full_avatar_disconnect(cause_damage = TRUE, source = source) /// Triggers when the server is shutting down /datum/component/avatar_connection/proc/on_shutting_down(datum/source, mob/living/hackerman) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, TRUE) - avatar.throw_alert( + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_SHUTDOWN, - /atom/movable/screen/alert/bitrunning/qserver_shutting_down, + /atom/movable/screen/alert/bitrunning, new_master = hackerman, ) + alert.name = "Domain Rebooting" + alert.desc = "The domain is rebooting. Find an exit." + +/// Triggers whenever an antag steps onto an exit turf and the server is emagged +/datum/component/avatar_connection/proc/on_station_spawn(datum/source) + SIGNAL_HANDLER + + var/mob/living/avatar = parent + avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( + ALERT_BITRUNNER_BREACH, + /atom/movable/screen/alert/bitrunning, + new_master = source, + ) + alert.name = "Security Breach" + alert.desc = "A hostile entity is breaching the safehouse. Find an exit." /// Server has spawned a ghost role threat /datum/component/avatar_connection/proc/on_threat_created(datum/source) SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.throw_alert( + var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_THREAT, - /atom/movable/screen/alert/bitrunning/qserver_threat_spawned, + /atom/movable/screen/alert/bitrunning, new_master = source, ) + alert.name = "Threat Detected" + alert.desc = "Data stream abnormalities present." /// Returns the mind to the old body /datum/component/avatar_connection/proc/return_to_old_body() diff --git a/code/modules/bitrunning/components/bitrunning_points.dm b/code/modules/bitrunning/components/bitrunning_points.dm index 58dda4a68ff..328a70679e6 100644 --- a/code/modules/bitrunning/components/bitrunning_points.dm +++ b/code/modules/bitrunning/components/bitrunning_points.dm @@ -1,46 +1,37 @@ -/// Attaches a component which listens for a given signal from the item. -/// -/// When the signal is received, it will add points to the signaler. +/// Attaches to a turf so it spawns a crate when a certain amount of points are added to it. /datum/component/bitrunning_points - /// The range at which we can find the signaler - var/max_point_range - /// Weakref to the loot crate landmark - where we send points - var/datum/weakref/our_spawner - /// The amount of points per each signal - var/points_per_signal - /// The signal we listen for - var/signal_type + /// The amount required to spawn a crate + var/points_goal = 10 + /// A special condition limits this from spawning a crate + var/points_received = 0 -/datum/component/bitrunning_points/Initialize(signal_type, points_per_signal = 1, max_point_range = 4) - src.max_point_range = max_point_range - src.points_per_signal = points_per_signal - src.signal_type = signal_type +/datum/component/bitrunning_points/Initialize(datum/lazy_template/virtual_domain/domain) + . = ..() + if(!isturf(parent)) + return COMPONENT_INCOMPATIBLE - locate_spawner() + RegisterSignal(domain, COMSIG_BITRUNNER_GOAL_POINT, PROC_REF(on_add_points)) -/datum/component/bitrunning_points/RegisterWithParent() - RegisterSignal(parent, signal_type, PROC_REF(on_event)) - -/datum/component/bitrunning_points/UnregisterFromParent() - UnregisterSignal(parent, signal_type) - -/// Finds the signaler if it hasn't been found yet. -/datum/component/bitrunning_points/proc/locate_spawner() - var/obj/effect/landmark/bitrunning/loot_signal/spawner = our_spawner?.resolve() - if(spawner) - return spawner - - for(var/obj/effect/landmark/bitrunning/loot_signal/found in GLOB.landmarks_list) - if(IN_GIVEN_RANGE(get_turf(parent), found, max_point_range)) - our_spawner = WEAKREF(found) - return found - -/// Once the specified signal is received, whisper to the spawner to add points. -/datum/component/bitrunning_points/proc/on_event(datum/source) +/// Listens for points to be added which will eventually spawn a crate. +/datum/component/bitrunning_points/proc/on_add_points(datum/source, points_to_add) SIGNAL_HANDLER - var/obj/effect/landmark/bitrunning/loot_signal/spawner = locate_spawner() - if(isnull(spawner)) + points_received += points_to_add + + if(points_received < points_goal) return - SEND_SIGNAL(spawner, COMSIG_BITRUNNER_GOAL_POINT, points_per_signal) + reveal() + +/// Spawns the crate with some effects +/datum/component/bitrunning_points/proc/reveal() + playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + + var/turf/tile = parent + new /obj/structure/closet/crate/secure/bitrunning/encrypted(tile) + + var/datum/effect_system/spark_spread/quantum/sparks = new(tile) + sparks.set_up(number = 5, location = tile) + sparks.start() + + qdel(src) diff --git a/code/modules/bitrunning/components/glitch.dm b/code/modules/bitrunning/components/glitch.dm new file mode 100644 index 00000000000..f2e13c80b0d --- /dev/null +++ b/code/modules/bitrunning/components/glitch.dm @@ -0,0 +1,83 @@ +/datum/component/glitch + /// Ref of the spawning forge + var/datum/weakref/forge_ref + +/datum/component/glitch/Initialize(obj/machinery/quantum_server/server, obj/machinery/byteforge/forge) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(forge, COMSIG_MACHINERY_POWER_RESTORED, PROC_REF(on_forge_power_restored)) + RegisterSignals(forge, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_forge_broken)) + forge_ref = WEAKREF(forge) + + var/mob/living/owner = parent + server.remove_threat(owner) // so the server doesn't dust us + + owner.faction.Cut() + owner.faction += list(ROLE_GLITCH) + + var/current_max = owner.maxHealth + ROUND_UP(server.threat * 0.2) + owner.maxHealth = clamp(current_max, 200, 500) + owner.fully_heal() + + var/atom/thing = owner + thing.create_digital_aura() + +/// Sakujo +/datum/component/glitch/proc/dust_mob() + if(QDELETED(parent)) + return + + var/mob/living/owner = parent + owner.dust() + +/// We don't want digital entities just lingering around as corpses. +/datum/component/glitch/proc/on_death() + SIGNAL_HANDLER + + if(QDELETED(parent)) + return + + var/mob/living/owner = parent + to_chat(owner, span_userdanger("You feel a strange sensation...")) + + var/obj/machinery/byteforge/forge = forge_ref.resolve() + forge?.setup_particles() + + addtimer(CALLBACK(src, PROC_REF(dust_mob)), 2 SECONDS, TIMER_UNIQUE|TIMER_DELETE_ME|TIMER_STOPPABLE) + +/// If the forge breaks, we take a massive slowdown +/datum/component/glitch/proc/on_forge_broken(datum/source) + SIGNAL_HANDLER + + var/mob/living/player = parent + var/atom/movable/screen/alert/bitrunning/alert = player.throw_alert( + ALERT_BITRUNNER_GLITCH, + /atom/movable/screen/alert/bitrunning, + new_master = source, + ) + alert.name = "Source Broken" + alert.desc = "Our byteforge has been broken." + + if(!iscarbon(parent)) // Too powerful! + return + + player.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/glitch_slowdown) + to_chat(player, span_danger("Your body feels sluggish...")) + +/// Power restored +/datum/component/glitch/proc/on_forge_power_restored(datum/source) + SIGNAL_HANDLER + + var/obj/machinery/byteforge/forge = source + forge.setup_particles(angry = TRUE) + + if(!iscarbon(parent)) + return + + var/mob/living/player = parent + player.clear_alert(ALERT_BITRUNNER_GLITCH) + player.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/glitch_slowdown) + +/datum/movespeed_modifier/status_effect/glitch_slowdown + multiplicative_slowdown = 1.5 diff --git a/code/modules/bitrunning/components/npc_friendly.dm b/code/modules/bitrunning/components/npc_friendly.dm new file mode 100644 index 00000000000..3686f024056 --- /dev/null +++ b/code/modules/bitrunning/components/npc_friendly.dm @@ -0,0 +1,37 @@ +/// Makes a mob friendly with most NPC factions +/datum/component/npc_friendly + /// The list of factions to add to the player + var/list/npc_factions = list( + FACTION_BOSS, + FACTION_CARP, + FACTION_HIVEBOT, + FACTION_HOSTILE, + FACTION_MIMIC, + FACTION_PIRATE, + FACTION_SPIDER, + FACTION_STICKMAN, + ROLE_ALIEN, + ROLE_GLITCH, + ROLE_SYNDICATE, + ) + /// List of factions previously held by the player + var/list/previous_factions = list() + +/datum/component/npc_friendly/Initialize() + . = ..() + + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + var/mob/living/player = parent + + previous_factions.Add(player.faction) + player.faction |= npc_factions + +/datum/component/npc_friendly/Destroy(force, silent) + . = ..() + + var/mob/living/player = parent + + player.faction.Cut() + player.faction.Add(previous_factions) diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index 6a4d54adcd8..4cc95f4f057 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -7,16 +7,12 @@ category = EVENT_CATEGORY_INVASION description = "Causes a short term antagonist to spawn in the virtual domain." dynamic_should_hijack = FALSE - max_occurrences = 5 min_players = 1 + max_occurrences = 0 typepath = /datum/round_event/ghost_role/bitrunning_glitch - weight = 10 - /// List of active servers to choose from - var/list/obj/machinery/quantum_server/active_servers = list() - /// List of possible antags to spawn - var/static/list/possible_antags = list( - ROLE_CYBER_POLICE, - ) + weight = 100 + /// List of servers on the station + var/list/datum/weakref/active_servers = list() /datum/round_event_control/bitrunning_glitch/can_spawn_event(players_amt, allow_magic = FALSE) . = ..() @@ -25,16 +21,17 @@ active_servers.Cut() - get_active_servers() + validate_servers() if(length(active_servers)) return TRUE /// All servers currently running, has players in it, and map has valid mobs -/datum/round_event_control/bitrunning_glitch/proc/get_active_servers() +/datum/round_event_control/bitrunning_glitch/proc/validate_servers() + active_servers.Cut() for(var/obj/machinery/quantum_server/server in SSmachines.get_machines_by_type(/obj/machinery/quantum_server)) - if(length(server.get_valid_domain_targets())) - active_servers.Add(server) + if(server.validate_mutation_candidates()) + active_servers.Add(WEAKREF(server)) return length(active_servers) > 0 @@ -42,13 +39,10 @@ input_text = "Select a role to spawn." /datum/event_admin_setup/listed_options/bitrunning_glitch/get_list() - var/datum/round_event_control/bitrunning_glitch/control = event_control + var/list/available = list("Random") + available += subtypesof(/datum/antagonist/bitrunning_glitch) - var/list/possible = control.possible_antags.Copy() // this seems pedantic but byond is complaining control was unused - - possible += list("Random") - - return possible + return available /datum/event_admin_setup/listed_options/bitrunning_glitch/apply_to_event(datum/round_event/ghost_role/bitrunning_glitch/event) if(chosen == "Random") @@ -57,14 +51,19 @@ event.forced_role = chosen /datum/event_admin_setup/minimum_candidate_requirement/bitrunning_glitch - output_text = "There must be valid mobs to mutate or players in the domain!" + output_text = "There must be valid mobs to mutate!" /datum/event_admin_setup/minimum_candidate_requirement/bitrunning_glitch/count_candidates() var/datum/round_event_control/bitrunning_glitch/cyber_control = event_control - cyber_control.get_active_servers() + + cyber_control.validate_servers() var/total = 0 - for(var/obj/machinery/quantum_server/server in cyber_control.active_servers) + for(var/datum/weakref/server_ref in cyber_control.active_servers) + var/obj/machinery/quantum_server/server = server_ref?.resolve() + if(isnull(server)) + continue + total += length(server.mutation_candidate_refs) return total @@ -78,74 +77,18 @@ /datum/round_event/ghost_role/bitrunning_glitch/spawn_role() var/datum/round_event_control/bitrunning_glitch/cyber_control = control + if(!length(cyber_control.active_servers)) + return WAITING_FOR_SOMETHING + + var/datum/weakref/server_ref = pick(cyber_control.active_servers) + var/obj/machinery/quantum_server/unlucky_server = server_ref?.resolve() + if(isnull(unlucky_server)) + return WAITING_FOR_SOMETHING - var/obj/machinery/quantum_server/unlucky_server = pick(cyber_control.active_servers) cyber_control.active_servers.Cut() + if(!unlucky_server.validate_mutation_candidates()) + return WAITING_FOR_SOMETHING - var/list/mutation_candidates = unlucky_server.get_valid_domain_targets() - if(!length(mutation_candidates)) - return MAP_ERROR - - var/chosen = pick(mutation_candidates) - if(isnull(chosen) || !length(mutation_candidates)) - return MAP_ERROR - - var/datum/weakref/target_ref = pick(mutation_candidates) - var/mob/living/mutation_target = target_ref.resolve() - - if(isnull(mutation_target)) // just in case since it takes a minute - target_ref = pick(mutation_candidates) - mutation_target = target_ref.resolve() - if(isnull(mutation_target)) - return MAP_ERROR - - var/chosen_role = forced_role || pick(cyber_control.possible_antags) - - var/datum/mind/ghost_mind = get_ghost_mind(chosen_role) - if(isnull(ghost_mind)) - return NOT_ENOUGH_PLAYERS - - var/mob/living/antag_mob - switch(chosen_role) - if(ROLE_CYBER_POLICE) - antag_mob = spawn_cybercop(mutation_target, ghost_mind) - - playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) - message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.") - antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) - - SEND_SIGNAL(unlucky_server, COMSIG_BITRUNNER_SPAWN_GLITCH, antag_mob) - - spawned_mobs += antag_mob + spawned_mobs = unlucky_server.setup_glitch(forced_role) return SUCCESSFUL_SPAWN - -/// Polls for a ghost that wants to run it -/datum/round_event/ghost_role/bitrunning_glitch/proc/get_ghost_mind(role_name) - var/list/mob/dead/observer/ghosties = poll_ghost_candidates("A short term antagonist role is available. Would you like to spawn as a '[role_name]'?", role_name) - - if(!length(ghosties)) - return - - shuffle_inplace(ghosties) - - var/mob/dead/selected = pick(ghosties) - - var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = TRUE - - return player_mind - -/// Spawns a cybercop on the mutation target -/datum/round_event/ghost_role/bitrunning_glitch/proc/spawn_cybercop(mob/living/mutation_target, datum/mind/player_mind) - var/mob/living/carbon/human/new_agent = new(mutation_target.loc) - mutation_target.gib(DROP_ALL_REMAINS) - mutation_target = null - - player_mind.transfer_to(new_agent) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/cyber_police)) - player_mind.special_role = ROLE_CYBER_POLICE - player_mind.add_antag_datum(/datum/antagonist/cyber_police) - - return new_agent - diff --git a/code/modules/bitrunning/objects/byteforge.dm b/code/modules/bitrunning/objects/byteforge.dm index e4543601ce9..5f089bf66ca 100644 --- a/code/modules/bitrunning/objects/byteforge.dm +++ b/code/modules/bitrunning/objects/byteforge.dm @@ -5,7 +5,7 @@ desc = "A machine used by the quantum server. Quantum code converges here, materializing decrypted assets from the virtual abyss." icon = 'icons/obj/machines/bitrunning.dmi' icon_state = "byteforge" - obj_flags = BLOCKS_CONSTRUCTION + obj_flags = BLOCKS_CONSTRUCTION | CAN_BE_HIT /// Idle particles var/mutable_appearance/byteforge_particles @@ -17,7 +17,6 @@ /obj/machinery/byteforge/LateInitialize() . = ..() - byteforge_particles = mutable_appearance(initial(icon), "on_particles", ABOVE_MOB_LAYER) setup_particles() /obj/machinery/byteforge/update_appearance(updates) @@ -25,31 +24,44 @@ setup_particles() -/// Adds the particle overlays to the byteforge -/obj/machinery/byteforge/proc/setup_particles() - cut_overlays() - - if(is_operational) - add_overlay(byteforge_particles) - -/// Begins spawning the crate - lights, overlays, etc -/obj/machinery/byteforge/proc/start_to_spawn(obj/structure/closet/crate/secure/bitrunning/encrypted/cache) - addtimer(CALLBACK(src, PROC_REF(spawn_crate), cache), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - - var/mutable_appearance/lighting = mutable_appearance(initial(icon), "on_overlay") - flick_overlay_view(lighting, 1 SECONDS) - - set_light(l_range = 2, l_power = 1.5, l_color = LIGHT_COLOR_BABY_BLUE, l_on = TRUE) - -/// Sparks, moves the crate to the location -/obj/machinery/byteforge/proc/spawn_crate(obj/structure/closet/crate/secure/bitrunning/encrypted/cache) - if(QDELETED(cache)) - return - +/// Does some sparks after it's done +/obj/machinery/byteforge/proc/flash(atom/movable/thing) playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + var/datum/effect_system/spark_spread/quantum/sparks = new() sparks.set_up(5, 1, loc) sparks.start() - cache.forceMove(loc) set_light(l_on = FALSE) + +/// Forge begins to process +/obj/machinery/byteforge/proc/flicker(angry = FALSE) + var/mutable_appearance/lighting = mutable_appearance(initial(icon), "on_overlay[angry ? "_angry" : ""]") + flick_overlay_view(lighting, 1 SECONDS) + + set_light(l_range = 2, l_power = 1.5, l_color = angry ? LIGHT_COLOR_BUBBLEGUM : LIGHT_COLOR_BABY_BLUE, l_on = TRUE) + +/// Adds the particle overlays to the byteforge +/obj/machinery/byteforge/proc/setup_particles(angry = FALSE) + cut_overlay(byteforge_particles) + + byteforge_particles = mutable_appearance(initial(icon), "on_particles[angry ? "_angry" : ""]", ABOVE_MOB_LAYER) + + if(is_operational) + add_overlay(byteforge_particles) + +/// Forge is done processing +/obj/machinery/byteforge/proc/spawn_cache(obj/cache) + if(QDELETED(cache)) + return + + flash() + + cache.forceMove(loc) + +/// Timed flash +/obj/machinery/byteforge/proc/start_to_spawn(obj/cache) + flicker() + + addtimer(CALLBACK(src, PROC_REF(spawn_cache), cache), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + diff --git a/code/modules/bitrunning/objects/clothing.dm b/code/modules/bitrunning/objects/clothing.dm index 4d2d9cc55c4..de2b6789d58 100644 --- a/code/modules/bitrunning/objects/clothing.dm +++ b/code/modules/bitrunning/objects/clothing.dm @@ -1,5 +1,6 @@ /obj/item/clothing/glasses/sunglasses/oval name = "oval sunglasses" + flags_cover = GLASSESCOVERSEYES desc = "Vintage wrap around sunglasses. Provides a little protection." icon_state = "jensenshades" diff --git a/code/modules/bitrunning/objects/debug.dm b/code/modules/bitrunning/objects/debug.dm new file mode 100644 index 00000000000..790aba73116 --- /dev/null +++ b/code/modules/bitrunning/objects/debug.dm @@ -0,0 +1,7 @@ +/obj/item/bitrunning_debug + name = "bitrunning debug item" + desc = "Adds points and reduces cooldown time for debugging" + icon = 'icons/obj/assemblies/module.dmi' + base_icon_state = "datadisk" + icon_state = "datadisk0" + diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index 4698b7a1ec1..9d7c808f356 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -18,22 +18,20 @@ icon_state = "[base_icon_state][rand(0, 7)]" update_icon() - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) -/obj/item/bitrunning_disk/proc/on_examined(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - examine_text += span_infoplain("This disk must be carried on your person into a netpod to be used.") +/obj/item/bitrunning_disk/examine(mob/user) + . = ..() + . += span_infoplain("This disk must be carried on your person into a netpod to be used.") if(isnull(choice_made)) - examine_text += span_notice("To make a selection, toggle the disk in hand.") + . += span_notice("To make a selection, toggle the disk in hand.") return - examine_text += span_info("It has been used to select: [choice_made].") - examine_text += span_notice("It cannot make another selection.") + . += span_info("It has been used to select: [choice_made].") + . += span_notice("It cannot make another selection.") /obj/item/bitrunning_disk/ability - desc = "A disk containing source code. It can be used to preload abilities into the virtual domain." + desc = "A disk containing source code. It can be used to preload abilities into the virtual domain. Duplicate abilities will be ignored." /// The selected ability that this grants var/datum/action/granted_action /// The list of actions that this can grant @@ -131,16 +129,16 @@ /obj/item/bitrunning_disk/item/tier2 name = "bitrunning gear: complex" selectable_items = list( - /obj/item/chainsaw, + /obj/item/reagent_containers/hypospray/medipen/survival/luxury, /obj/item/gun/ballistic/automatic/pistol, - /obj/item/melee/energy/blade/hardlight, + /obj/item/clothing/suit/armor/vest, ) /// Tier 3 items. Very powerful, game breaking. /obj/item/bitrunning_disk/item/tier3 name = "bitrunning gear: advanced" selectable_items = list( - /obj/item/gun/energy/tesla_cannon, + /obj/item/gun/energy/e_gun/nuclear, /obj/item/dualsaber/green, - /obj/item/melee/beesword, + /obj/item/grenade/syndieminibomb, ) diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm index 906801f1fc0..e592f31382d 100644 --- a/code/modules/bitrunning/objects/hololadder.dm +++ b/code/modules/bitrunning/objects/hololadder.dm @@ -35,7 +35,7 @@ balloon_alert(user, "disconnecting...") if(do_after(user, travel_time, src)) - SEND_SIGNAL(user, COMSIG_BITRUNNER_SAFE_DISCONNECT) + SEND_SIGNAL(user, COMSIG_BITRUNNER_LADDER_SEVER) /// Helper for times when you dont have hands (gondola??) /obj/structure/hololadder/proc/on_enter(datum/source, atom/movable/arrived, turf/old_loc) diff --git a/code/modules/bitrunning/objects/landmarks.dm b/code/modules/bitrunning/objects/landmarks.dm index d727025c928..20dcef3e929 100644 --- a/code/modules/bitrunning/objects/landmarks.dm +++ b/code/modules/bitrunning/objects/landmarks.dm @@ -6,43 +6,6 @@ /// In case you want to gate the crate behind a special condition. /obj/effect/landmark/bitrunning/loot_signal name = "Mysterious aura" - /// The amount required to spawn a crate - var/points_goal = 10 - /// A special condition limits this from spawning a crate - var/points_received = 0 - /// Finished the special condition - var/revealed = FALSE - -/obj/effect/landmark/bitrunning/loot_signal/Initialize(mapload) - . = ..() - - RegisterSignal(src, COMSIG_BITRUNNER_GOAL_POINT, PROC_REF(on_add_point)) - -/// Listens for points to be added which will eventually spawn a crate. -/obj/effect/landmark/bitrunning/loot_signal/proc/on_add_point(datum/source, points_to_add) - SIGNAL_HANDLER - - if(revealed) - return - - points_received += points_to_add - - if(points_received < points_goal) - return - - reveal() - -/// Spawns the crate with some effects -/obj/effect/landmark/bitrunning/loot_signal/proc/reveal() - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) - - var/turf/tile = get_turf(src) - var/obj/structure/closet/crate/secure/bitrunning/encrypted/loot = new(tile) - var/datum/effect_system/spark_spread/quantum/sparks = new(tile) - sparks.set_up(5, 1, get_turf(loot)) - sparks.start() - - qdel(src) /// Where the exit hololadder spawns /obj/effect/landmark/bitrunning/hololadder_spawn @@ -57,7 +20,7 @@ /// Where you want the crate to spawn /obj/effect/landmark/bitrunning/cache_spawn name = "Bitrunning crate spawn" - icon_state = "spawn" + icon_state = "crate" /// Where the safehouse will spawn /obj/effect/landmark/bitrunning/safehouse_spawn @@ -73,7 +36,10 @@ /obj/effect/landmark/bitrunning/crate_replacer/Initialize(mapload) . = ..() - #ifndef UNIT_TESTS +#ifdef UNIT_TESTS + return +#endif + var/list/crate_list = list() var/obj/structure/closet/crate/secure/bitrunning/encrypted/encrypted_crate var/area/my_area = get_area(src) @@ -100,4 +66,7 @@ encrypted_crate.abstract_move(selected_crate.loc) selected_crate.abstract_move(original_location) - #endif +/// A location for mobs to spawn. +/obj/effect/landmark/bitrunning/mob_segment + name = "Bitrunning modular mob segment" + icon_state = "mob_segment" diff --git a/code/modules/bitrunning/objects/loot_crate.dm b/code/modules/bitrunning/objects/loot_crate.dm index 5af8c0d9477..d7d7eb8c777 100644 --- a/code/modules/bitrunning/objects/loot_crate.dm +++ b/code/modules/bitrunning/objects/loot_crate.dm @@ -11,12 +11,15 @@ /obj/structure/closet/crate/secure/bitrunning // Base class. Do not spawn this. name = "base class cache" desc = "Talk to a coder." + icon_state = "bitrunning" + base_icon_state = "bitrunning" /// The virtual domain - side of the bitrunning crate. Deliver to the send location. /obj/structure/closet/crate/secure/bitrunning/encrypted name = "encrypted cache" desc = "Needs decrypted at the safehouse to be opened." locked = TRUE + damage_deflection = 30 /obj/structure/closet/crate/secure/bitrunning/encrypted/can_unlock(mob/living/user, obj/item/card/id/player_id, obj/item/card/id/registered_id) return FALSE @@ -70,7 +73,7 @@ /obj/structure/closet/crate/secure/bitrunning/decrypted/proc/spawn_loot(list/extra_loot) for(var/path in extra_loot) if(!ispath(path)) - continue + return FALSE if(isnull(extra_loot[path])) return FALSE diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm index eb5623c1673..593a7744ce4 100644 --- a/code/modules/bitrunning/objects/netpod.dm +++ b/code/modules/bitrunning/objects/netpod.dm @@ -35,7 +35,6 @@ disconnect_damage = BASE_DISCONNECT_DAMAGE find_server() - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(src, COMSIG_ATOM_TAKE_DAMAGE, PROC_REF(on_damage_taken)) RegisterSignal(src, COMSIG_MACHINERY_POWER_LOST, PROC_REF(on_power_loss)) RegisterSignals(src, list(COMSIG_QDELETING, COMSIG_MACHINERY_BROKEN),PROC_REF(on_broken)) @@ -45,7 +44,27 @@ /obj/machinery/netpod/Destroy() . = ..() - cached_outfits.Cut() + + QDEL_LIST(cached_outfits) + +/obj/machinery/netpod/examine(mob/user) + . = ..() + + if(isnull(server_ref?.resolve())) + . += span_infoplain("It's not connected to anything.") + . += span_infoplain("Netpods must be built within 4 tiles of a server.") + return + + . += span_infoplain("Drag yourself into the pod to engage the link.") + . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") + . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") + + if(isnull(occupant)) + . += span_notice("It is currently unoccupied.") + return + + . += span_notice("It is currently occupied by [occupant].") + . += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") /obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() @@ -121,11 +140,6 @@ if(!state_open && gone == occupant) container_resist_act(gone) -/obj/machinery/netpod/Exited(atom/movable/gone, direction) - . = ..() - if(!state_open && gone == occupant) - container_resist_act(gone) - /obj/machinery/netpod/relaymove(mob/living/user, direction) if(!state_open) container_resist_act(user) @@ -176,7 +190,7 @@ if(do_after(pryer, 15 SECONDS, src)) if(!state_open) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() open_machine() return TRUE @@ -246,7 +260,7 @@ open_machine() /// Handles occupant post-disconnection effects like damage, sounds, etc -/obj/machinery/netpod/proc/disconnect_occupant(forced = FALSE) +/obj/machinery/netpod/proc/disconnect_occupant(cause_damage = FALSE) connected = FALSE var/mob/living/mob_occupant = occupant @@ -268,7 +282,7 @@ heal_time = (mob_occupant.stat + 2) * 5 addtimer(CALLBACK(src, PROC_REF(auto_disconnect)), heal_time SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) - if(!forced) + if(!cause_damage) return mob_occupant.flash_act(override_blindness_check = TRUE, visual = TRUE) @@ -339,7 +353,7 @@ return server_ref = WEAKREF(server) - RegisterSignal(server, COMSIG_BITRUNNER_SERVER_UPGRADED, PROC_REF(on_server_upgraded)) + RegisterSignal(server, COMSIG_MACHINERY_REFRESH_PARTS, PROC_REF(on_server_upgraded)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_complete)) RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_SCRUBBED, PROC_REF(on_domain_scrubbed)) @@ -352,14 +366,12 @@ "outfits" = list() ) - for(var/path as anything in outfit_list) - var/datum/outfit/outfit = path - + for(var/datum/outfit/outfit as anything in outfit_list) var/outfit_name = initial(outfit.name) if(findtext(outfit_name, "(") != 0 || findtext(outfit_name, "-") != 0) // No special variants please continue - collection["outfits"] += list(list("path" = path, "name" = outfit_name)) + collection["outfits"] += list(list("path" = outfit, "name" = outfit_name)) return list(collection) @@ -367,10 +379,7 @@ /obj/machinery/netpod/proc/on_broken(datum/source) SIGNAL_HANDLER - if(isnull(occupant) || !connected) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() /// Checks the integrity, alerts occupants /obj/machinery/netpod/proc/on_damage_taken(datum/source, damage_amount) @@ -411,21 +420,6 @@ QDEL_NULL(avatar) -/// User inspects the machine -/obj/machinery/netpod/proc/on_examine(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - examine_text += span_infoplain("Drag yourself into the pod to engage the link.") - examine_text += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") - examine_text += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") - - if(isnull(occupant)) - examine_text += span_notice("It is currently unoccupied.") - return - - examine_text += span_notice("It is currently occupied by [occupant].") - examine_text += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") - /// Boots out anyone in the machine && opens it /obj/machinery/netpod/proc/on_power_loss(datum/source) SIGNAL_HANDLER @@ -438,13 +432,13 @@ open_machine() return - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connection() /// When the server is upgraded, drops brain damage a little -/obj/machinery/netpod/proc/on_server_upgraded(datum/source, servo_rating) +/obj/machinery/netpod/proc/on_server_upgraded(obj/machinery/quantum_server/source) SIGNAL_HANDLER - disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - servo_rating) + disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - source.servo_bonus) /// Resolves a path to an outfit. /obj/machinery/netpod/proc/resolve_outfit(text) @@ -452,6 +446,13 @@ if(ispath(path, /datum/outfit)) return path +/// Severs the connection with the current avatar +/obj/machinery/netpod/proc/sever_connection() + if(isnull(occupant) || !connected) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_SEVER) + /// Closes the machine without shoving in an occupant /obj/machinery/netpod/proc/shut_pod() state_open = FALSE diff --git a/code/modules/bitrunning/objects/quantum_console.dm b/code/modules/bitrunning/objects/quantum_console.dm index c918648d010..71d7df87f12 100644 --- a/code/modules/bitrunning/objects/quantum_console.dm +++ b/code/modules/bitrunning/objects/quantum_console.dm @@ -17,8 +17,7 @@ /obj/machinery/computer/quantum_console/LateInitialize() . = ..() - if(isnull(server_ref?.resolve())) - find_server() + find_server() /obj/machinery/computer/quantum_console/ui_interact(mob/user, datum/tgui/ui) . = ..() @@ -26,9 +25,6 @@ if(!is_operational) return - if(isnull(server_ref?.resolve())) - find_server() - ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "QuantumConsole") @@ -76,17 +72,13 @@ switch(action) if("random_domain") - var/map_id = server.get_random_domain_id() - if(!map_id) - return TRUE - - server.cold_boot_map(usr, map_id) + server.cold_boot_map(server.get_random_domain_id()) return TRUE if("refresh") ui.send_full_update() return TRUE if("set_domain") - server.cold_boot_map(usr, params["id"]) + server.cold_boot_map(params["id"]) return TRUE if("stop_domain") server.begin_shutdown(usr) @@ -104,5 +96,4 @@ var/obj/machinery/quantum_server/nearby_server = locate(/obj/machinery/quantum_server, get_step(src, direction)) if(nearby_server) server_ref = WEAKREF(nearby_server) - nearby_server.console_ref = WEAKREF(src) return nearby_server diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 27ef8029a18..5e8def20f2b 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -1,39 +1,20 @@ /datum/outfit/cyber_police - name = "Cyber Police" + name = ROLE_CYBER_POLICE - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/cyber_police - uniform = /obj/item/clothing/under/suit/black_really glasses = /obj/item/clothing/glasses/sunglasses gloves = /obj/item/clothing/gloves/color/black + id = /obj/item/card/id/advanced + id_trim = /datum/id_trim/cyber_police shoes = /obj/item/clothing/shoes/laceup - /// A list of hex codes for blonde, brown, black, and red hair. - var/static/list/approved_hair_colors = list( - "#4B3D28", - "#000000", - "#8D4A43", - "#D2B48C", - ) - /// List of business ready styles - var/static/list/approved_hairstyles = list( - /datum/sprite_accessory/hair/business, - /datum/sprite_accessory/hair/business2, - /datum/sprite_accessory/hair/business3, - /datum/sprite_accessory/hair/business4, - /datum/sprite_accessory/hair/mulder, - ) + uniform = /obj/item/clothing/under/suit/black_really /datum/outfit/cyber_police/pre_equip(mob/living/carbon/human/user, visualsOnly) - var/datum/sprite_accessory/hair/picked_hair = pick(approved_hairstyles) - var/picked_color = pick(approved_hair_colors) - - if(visualsOnly) - picked_hair = /datum/sprite_accessory/hair/business - picked_color = "#4B3D28" + if(!visualsOnly) + return user.set_facial_hairstyle("Shaved", update = FALSE) - user.set_haircolor(picked_color, update = FALSE) - user.set_hairstyle(initial(picked_hair.name)) + user.set_haircolor("#4B3D28", update = FALSE) + user.set_hairstyle("Business Hair") /datum/outfit/cyber_police/post_equip(mob/living/carbon/human/user, visualsOnly) var/obj/item/clothing/under/officer_uniform = user.w_uniform @@ -55,3 +36,4 @@ /datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visualsOnly) . = ..() user.psykerize() + diff --git a/code/modules/bitrunning/server/quantum_server.dm b/code/modules/bitrunning/server/_parent.dm similarity index 73% rename from code/modules/bitrunning/server/quantum_server.dm rename to code/modules/bitrunning/server/_parent.dm index b869fb7f02e..62e20367190 100644 --- a/code/modules/bitrunning/server/quantum_server.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -14,16 +14,12 @@ var/capacitor_coefficient = 1 /// The loaded map template, map_template/virtual_domain var/datum/lazy_template/virtual_domain/generated_domain - /// The loaded safehouse, map_template/safehouse - var/datum/map_template/safehouse/generated_safehouse - /// The connected console - var/datum/weakref/console_ref /// If the current domain was a random selection var/domain_randomized = FALSE - /// If any threats were spawned, adds to rewards - var/domain_threats = 0 /// Prevents multiple user actions. Handled by loading domains and cooldowns var/is_ready = TRUE + /// Chance multipled by threat to spawn a glitch + var/glitch_chance = 0.05 /// List of available domains var/list/available_domains = list() /// Current plugged in users @@ -46,6 +42,8 @@ var/server_cooldown_time = 3 MINUTES /// Applies bonuses to rewards etc var/servo_bonus = 0 + /// Determines the glitches available to spawn, builds with completion + var/threat = 0 /// The turfs we can place a hololadder on. var/turf/exit_turfs = list() @@ -57,19 +55,13 @@ /obj/machinery/quantum_server/LateInitialize() . = ..() - if(isnull(console_ref)) - find_console() - radio = new(src) - radio.set_frequency(FREQ_SUPPLY) - radio.subspace_transmission = TRUE - radio.canhear_range = 0 + radio.keyslot = new /obj/item/encryptionkey/headset_cargo() + radio.set_listening(FALSE) radio.recalculateChannels() RegisterSignals(src, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_broken)) RegisterSignal(src, COMSIG_QDELETING, PROC_REF(on_delete)) - RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - RegisterSignal(src, COMSIG_BITRUNNER_SPAWN_GLITCH, PROC_REF(on_threat_created)) // This further gets sorted in the client by cost so it's random and grouped available_domains = shuffle(subtypesof(/datum/lazy_template/virtual_domain)) @@ -83,17 +75,39 @@ spawned_threat_refs.Cut() QDEL_NULL(exit_turfs) QDEL_NULL(generated_domain) - QDEL_NULL(generated_safehouse) QDEL_NULL(radio) +/obj/machinery/quantum_server/examine(mob/user) + . = ..() + + . += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") + + if(capacitor_coefficient < 1) + . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") + + if(servo_bonus > 0.2) + . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") + . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") + + if(!is_ready) + . += span_notice("It is currently cooling down. Give it a few moments.") + +/obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + + obj_flags |= EMAGGED + glitch_chance = 0.09 + + add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay")) + balloon_alert(user, "bzzzt...") + playsound(src, 'sound/effects/sparks1.ogg', 35, vary = TRUE) + /obj/machinery/quantum_server/update_appearance(updates) if(isnull(generated_domain) || !is_operational) set_light(l_on = FALSE) return ..() - set_light_color(is_ready ? LIGHT_COLOR_BABY_BLUE : LIGHT_COLOR_FIRE) - set_light(l_range = 2, l_power = 1.5, l_on = TRUE) - + set_light(l_range = 2, l_power = 1.5, l_color = is_ready ? LIGHT_COLOR_BABY_BLUE : LIGHT_COLOR_FIRE, l_on = TRUE) return ..() /obj/machinery/quantum_server/update_icon_state() @@ -104,6 +118,14 @@ icon_state = "[base_icon_state]_[is_ready ? "on" : "off"]" return ..() +/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params) + . = ..() + if(istype(weapon, /obj/item/bitrunning_debug)) + obj_flags |= EMAGGED + glitch_chance = 0.5 + capacitor_coefficient = 0.01 + points = 100 + /obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar) . = ..() @@ -128,8 +150,6 @@ return FALSE /obj/machinery/quantum_server/RefreshParts() - . = ..() - var/capacitor_rating = 1.15 var/datum/stock_part/capacitor/cap = locate() in component_parts capacitor_rating -= cap.tier * 0.15 @@ -146,4 +166,4 @@ servo_bonus = servo_rating - SEND_SIGNAL(src, COMSIG_BITRUNNER_SERVER_UPGRADED, servo_rating) + return ..() diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index 8b3af95607c..0aab2a86ff4 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -7,27 +7,24 @@ rewards_base += servo_bonus - rewards_base += (domain_threats * 2) + rewards_base += (length(spawned_threat_refs) * 2) for(var/index in 2 to length(avatar_connection_refs)) rewards_base += multiplayer_bonus return rewards_base -/// Generates a reward based on the given domain -/obj/machinery/quantum_server/proc/generate_loot() - var/list/obj/machinery/byteforge/nearby_forges = get_nearby_forges() - if(isnull(nearby_forges)) - say(src, "No nearby byteforges detected.") - return FALSE +/// Handles spawning the (new) crate and deleting the former +/obj/machinery/quantum_server/proc/generate_loot(obj/cache, obj/machinery/byteforge/chosen_forge) + for(var/mob/person in cache.contents) + SEND_SIGNAL(person, COMSIG_BITRUNNER_CACHE_SEVER) + + spark_at_location(cache) // abracadabra! + qdel(cache) // and it's gone! + SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, cache, generated_domain.reward_points) points += generated_domain.reward_points - playsound(src, 'sound/machines/terminal_success.ogg', 30, 2) - - var/obj/machinery/byteforge/chosen_forge = pick(nearby_forges) - if(isnull(chosen_forge)) - stack_trace("Failed to find a turf to spawn loot crate on.") - return FALSE + playsound(src, 'sound/machines/terminal_success.ogg', 30, vary = TRUE) var/bonus = calculate_rewards() @@ -36,11 +33,11 @@ certificate.name = "certificate of domain completion" certificate.update_appearance() - var/obj/structure/closet/crate/secure/bitrunning/decrypted/reward_crate = new(src, generated_domain, bonus) - reward_crate.manifest = certificate - reward_crate.update_appearance() + var/obj/structure/closet/crate/secure/bitrunning/decrypted/reward_cache = new(src, generated_domain, bonus) + reward_cache.manifest = certificate + reward_cache.update_appearance() - chosen_forge.start_to_spawn(reward_crate) + chosen_forge.start_to_spawn(reward_cache) return TRUE /// Returns the markdown text containing domain completion information @@ -51,18 +48,20 @@ var/bonuses = calculate_rewards() + var/domain_threats = length(spawned_threat_refs) + var/time_difference = world.time - generated_domain.start_time var/completion_time = "### Completion Time: [DisplayTimeText(time_difference)]\n" - var/grade = "\n---\n\n# Rating: [grade_completion(generated_domain.difficulty, domain_threats, base_points, domain_randomized, time_difference)]" + var/grade = "\n---\n\n# Rating: [grade_completion(time_difference)]" var/text = "# Certificate of Domain Completion\n\n---\n\n" text += "### [generated_domain.name][domain_randomized ? " (Randomized)" : ""]\n" text += "- **Difficulty:** [generated_domain.difficulty]\n" text += "- **Threats:** [domain_threats]\n" - text += "- **Base Points:** [base_points][domain_randomized ? " +1" : ""]\n\n" + text += "- **Base Reward:** [base_points][domain_randomized ? " +1" : ""]\n\n" text += "- **Total Bonus:** [bonuses]x\n\n" if(bonuses <= 1) @@ -91,12 +90,11 @@ return text /// Grades the player's run based on several factors -/obj/machinery/quantum_server/proc/grade_completion(difficulty, threats, points, randomized, completion_time) - var/score = threats * 5 - score += points - score += randomized ? 1 : 0 +/obj/machinery/quantum_server/proc/grade_completion(completion_time) + var/score = length(spawned_threat_refs) * 5 + score += generated_domain.reward_points - var/base = difficulty + 1 + var/base = generated_domain.difficulty + 1 var/time_score = 1 if(completion_time <= 1 MINUTES) @@ -112,6 +110,9 @@ score += time_score * base + // Increases the chance for glitches to spawn based on how well they're doing + threat += score + switch(score) if(1 to 4) return "D" @@ -123,3 +124,4 @@ return "A" else return "S" + diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index 741fad476f0..325a9e15809 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -1,18 +1,16 @@ -#define ONLY_TURF 1 - /// Gives all current occupants a notification that the server is going down /obj/machinery/quantum_server/proc/begin_shutdown(mob/user) if(isnull(generated_domain)) return if(!length(avatar_connection_refs)) - balloon_alert(user, "powering down domain...") - playsound(src, 'sound/machines/terminal_off.ogg', 40, 2) + balloon_alert_to_viewers("powering down domain...") + playsound(src, 'sound/machines/terminal_off.ogg', 40, vary = TRUE) reset() return - balloon_alert(user, "notifying clients...") - playsound(src, 'sound/machines/terminal_alert.ogg', 100, TRUE) + balloon_alert_to_viewers("notifying clients...") + playsound(src, 'sound/machines/terminal_alert.ogg', 100, vary = TRUE) user.visible_message( span_danger("[user] begins depowering the server!"), span_notice("You start disconnecting clients..."), @@ -26,40 +24,40 @@ reset() -/** - * ### Quantum Server Cold Boot - * Procedurally links the 3 booting processes together. - * - * This is the starting point if you have an id. Does validation and feedback on steps - */ -/obj/machinery/quantum_server/proc/cold_boot_map(mob/user, map_key) +/// Links all the loading processes together - does validation for booting a map +/obj/machinery/quantum_server/proc/cold_boot_map(map_key) if(!is_ready) return FALSE if(isnull(map_key)) - balloon_alert(user, "no domain specified.") + balloon_alert_to_viewers("no domain specified.") return FALSE if(generated_domain) - balloon_alert(user, "stop the current domain first.") + balloon_alert_to_viewers("stop the current domain first.") return FALSE if(length(avatar_connection_refs)) - balloon_alert(user, "all clients must disconnect!") + balloon_alert_to_viewers("all clients must disconnect!") return FALSE is_ready = FALSE playsound(src, 'sound/machines/terminal_processing.ogg', 30, 2) - if(!initialize_domain(map_key) || !initialize_safehouse() || !initialize_map_items()) - balloon_alert(user, "initialization failed.") + /// If any one of these fail, it reverts the entire process + if(!load_domain(map_key) || !load_safehouse() || !load_map_items() || !load_mob_segments()) + balloon_alert_to_viewers("initialization failed.") scrub_vdom() is_ready = TRUE return FALSE is_ready = TRUE - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, 2) - balloon_alert(user, "domain loaded.") + + if(prob(clamp((threat * glitch_chance), 1, 10))) + setup_glitch() + + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE) + balloon_alert_to_viewers("domain loaded.") generated_domain.start_time = world.time points -= generated_domain.cost update_use_power(ACTIVE_POWER_USE) @@ -68,30 +66,22 @@ return TRUE /// Initializes a new domain if the given key is valid and the user has enough points -/obj/machinery/quantum_server/proc/initialize_domain(map_key) - var/datum/lazy_template/virtual_domain/to_load - +/obj/machinery/quantum_server/proc/load_domain(map_key) for(var/datum/lazy_template/virtual_domain/available as anything in subtypesof(/datum/lazy_template/virtual_domain)) - if(map_key != initial(available.key) || points < initial(available.cost)) - continue - to_load = available - break + if(map_key == initial(available.key) && points >= initial(available.cost)) + generated_domain = new available() + RegisterSignal(generated_domain, COMSIG_LAZY_TEMPLATE_LOADED, PROC_REF(on_template_loaded)) + generated_domain.lazy_load() + return TRUE - if(isnull(to_load)) - return FALSE + return FALSE - generated_domain = new to_load() - RegisterSignal(generated_domain, COMSIG_LAZY_TEMPLATE_LOADED, PROC_REF(on_template_loaded)) - generated_domain.lazy_load() - - return TRUE - -/// Loads in necessary map items, sets mutation targets, etc -/obj/machinery/quantum_server/proc/initialize_map_items() +/// Loads in necessary map items like hololadder spawns, caches, etc +/obj/machinery/quantum_server/proc/load_map_items() var/turf/goal_turfs = list() - var/turf/crate_turfs = list() + var/turf/cache_turfs = list() - for(var/thing in GLOB.landmarks_list) + for(var/obj/effect/landmark/bitrunning/thing in GLOB.landmarks_list) if(istype(thing, /obj/effect/landmark/bitrunning/hololadder_spawn)) exit_turfs += get_turf(thing) qdel(thing) // i'm worried about multiple servers getting confused so lets clean em up @@ -106,35 +96,37 @@ continue if(istype(thing, /obj/effect/landmark/bitrunning/cache_spawn)) - crate_turfs += get_turf(thing) + cache_turfs += get_turf(thing) qdel(thing) continue + if(istype(thing, /obj/effect/landmark/bitrunning/loot_signal)) + var/turf/signaler_turf = get_turf(thing) + signaler_turf.AddComponent(/datum/component/bitrunning_points, generated_domain) + qdel(thing) + if(!length(exit_turfs)) CRASH("Failed to find exit turfs on generated domain.") if(!length(goal_turfs)) CRASH("Failed to find send turfs on generated domain.") - if(length(crate_turfs)) - shuffle_inplace(crate_turfs) - new /obj/structure/closet/crate/secure/bitrunning/encrypted(pick(crate_turfs)) + if(!attempt_spawn_cache(cache_turfs)) + return FALSE return TRUE /// Loads the safehouse -/obj/machinery/quantum_server/proc/initialize_safehouse() - var/turf/safehouse_load_turf = list() - for(var/obj/effect/landmark/bitrunning/safehouse_spawn/spawner in GLOB.landmarks_list) - safehouse_load_turf += get_turf(spawner) - qdel(spawner) - break +/obj/machinery/quantum_server/proc/load_safehouse() + var/obj/effect/landmark/bitrunning/safehouse_spawn/landmark = locate() in GLOB.landmarks_list + if(isnull(landmark)) + CRASH("vdom: failed to find safehouse spawn landmark") - if(!length(safehouse_load_turf)) - CRASH("Failed to find safehouse load landmark on map.") + var/turf/spawn_loc = get_turf(landmark) + qdel(landmark) - var/datum/map_template/safehouse/safehouse = new generated_domain.safehouse_path() - safehouse.load(safehouse_load_turf[ONLY_TURF]) - generated_safehouse = safehouse + var/datum/map_template/safehouse/new_safehouse = new generated_domain.safehouse_path() + if(!new_safehouse.load(spawn_loc)) + CRASH("vdom: failed to load safehouse") return TRUE @@ -142,7 +134,7 @@ /obj/machinery/quantum_server/proc/reset(fast = FALSE) is_ready = FALSE - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connections() if(!fast) notify_spawned_threats() @@ -150,36 +142,32 @@ else scrub_vdom() // used in unit testing, no need to wait for callbacks - addtimer(CALLBACK(src, PROC_REF(cool_off)), min(server_cooldown_time * capacitor_coefficient), TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(cool_off)), ROUND_UP(server_cooldown_time * capacitor_coefficient), TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) update_appearance() update_use_power(IDLE_POWER_USE) domain_randomized = FALSE - domain_threats = 0 retries_spent = 0 -/// Deletes all the tile contents +/// Tries to clean up everything in the domain /obj/machinery/quantum_server/proc/scrub_vdom() - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) /// just in case someone's connected + sever_connections() /// just in case someone's connected SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_SCRUBBED) // avatar cleanup just in case if(length(generated_domain.reservations)) var/datum/turf_reservation/res = generated_domain.reservations[1] res.Release() - var/list/datum/weakref/creatures = spawned_threat_refs + mutation_candidate_refs + var/list/creatures = spawned_threat_refs + mutation_candidate_refs for(var/datum/weakref/creature_ref as anything in creatures) var/mob/living/creature = creature_ref?.resolve() if(isnull(creature)) continue - creature.dust() // sometimes mobs just don't die + creature.dust(just_ash = TRUE, force = TRUE) // sometimes mobs just don't die avatar_connection_refs.Cut() exit_turfs = list() generated_domain = null - generated_safehouse = null mutation_candidate_refs.Cut() spawned_threat_refs.Cut() - -#undef ONLY_TURF diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index 41918980360..38fee74d4a8 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -1,3 +1,20 @@ +/// Attempts to spawn a crate twice based on the list of available locations +/obj/machinery/quantum_server/proc/attempt_spawn_cache(list/possible_turfs) + if(!length(possible_turfs)) + return TRUE + + shuffle_inplace(possible_turfs) + var/turf/chosen_turf = validate_turf(pick(possible_turfs)) + + if(isnull(chosen_turf)) + possible_turfs.Remove(chosen_turf) + chosen_turf = validate_turf(pick(possible_turfs)) + if(isnull(chosen_turf)) + CRASH("vdom: after two attempts, could not find a valid turf for cache") + + new /obj/structure/closet/crate/secure/bitrunning/encrypted(chosen_turf) + return TRUE + /// Generates a new avatar for the bitrunner. /obj/machinery/quantum_server/proc/generate_avatar(obj/structure/hololadder/wayout, datum/outfit/netsuit) var/mob/living/carbon/human/avatar = new(wayout.loc) @@ -19,16 +36,11 @@ if(istype(jumpsuit)) jumpsuit.set_armor(/datum/armor/clothing_under) - var/obj/item/clothing/head/hat = avatar.get_clothing_on_part(HEAD) + var/obj/item/clothing/head/hat = locate() in avatar.get_equipped_items() if(istype(hat)) - hat.set_armor(null) + hat.set_armor(/datum/armor/none) - var/thing = avatar.get_active_held_item() - if(!isnull(thing)) - qdel(thing) - - thing = avatar.get_inactive_held_item() - if(!isnull(thing)) + for(var/obj/thing in avatar.held_items) qdel(thing) var/obj/item/storage/backpack/bag = avatar.back @@ -78,6 +90,33 @@ return wayout +/// Loads in any mob segments of the map +/obj/machinery/quantum_server/proc/load_mob_segments() + if(!length(generated_domain.mob_modules)) + return TRUE + + var/current_index = 1 + shuffle_inplace(generated_domain.mob_modules) + + for(var/obj/effect/landmark/bitrunning/mob_segment/landmark in GLOB.landmarks_list) + if(current_index > length(generated_domain.mob_modules)) + stack_trace("vdom: mobs segments are set to unique, but there are more landmarks than available segments") + return FALSE + + var/path + if(generated_domain.modular_unique_mobs) + path = generated_domain.mob_modules[current_index] + current_index += 1 + else + path = pick(generated_domain.mob_modules) + + var/datum/modular_mob_segment/segment = new path() + segment.spawn_mobs(get_turf(landmark)) + mutation_candidate_refs += segment.spawned_mob_refs + qdel(landmark) + + return TRUE + /// Scans over neo's contents for bitrunning tech disks. Loads the items or abilities onto the avatar. /obj/machinery/quantum_server/proc/stock_gear(mob/living/carbon/human/avatar, mob/living/carbon/human/neo, datum/lazy_template/virtual_domain/generated_domain) var/domain_forbids_items = generated_domain.forbids_disk_items @@ -109,6 +148,11 @@ continue var/datum/action/our_action = new ability_disk.granted_action() + + if(locate(our_action.type) in avatar.actions) + failed = TRUE + continue + our_action.Grant(avatar) continue @@ -122,4 +166,4 @@ avatar.put_in_hands(new item_disk.granted_item()) if(failed) - to_chat(neo, span_warning("One of your disks failed to load. You must activate them to make a selection.")) + to_chat(neo, span_warning("One of your disks failed to load. Check for duplicate or inactive disks.")) diff --git a/code/modules/bitrunning/server/signal_handlers.dm b/code/modules/bitrunning/server/signal_handlers.dm index b0464b351fa..bd98c1ce2a1 100644 --- a/code/modules/bitrunning/server/signal_handlers.dm +++ b/code/modules/bitrunning/server/signal_handlers.dm @@ -2,10 +2,7 @@ /obj/machinery/quantum_server/proc/on_broken(datum/source) SIGNAL_HANDLER - if(isnull(generated_domain)) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) + sever_connections() /// Whenever a corpse spawner makes a new corpse, add it to the list of potential mutations /obj/machinery/quantum_server/proc/on_corpse_spawned(datum/source, mob/living/corpse) @@ -17,8 +14,9 @@ /obj/machinery/quantum_server/proc/on_delete(datum/source) SIGNAL_HANDLER + sever_connections() + if(generated_domain) - SEND_SIGNAL(src, COMSIG_BITRUNNER_SEVER_AVATAR) scrub_vdom() if(is_ready) @@ -28,45 +26,26 @@ if(circuit) qdel(circuit) -/// Handles examining the server. Shows cooldown time and efficiency. -/obj/machinery/quantum_server/proc/on_examine(datum/source, mob/examiner, list/examine_text) - SIGNAL_HANDLER - - examine_text += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") - - if(capacitor_coefficient < 1) - examine_text += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") - - if(servo_bonus > 0.2) - examine_text += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") - examine_text += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") - - if(!is_ready) - examine_text += span_notice("It is currently cooling down. Give it a few moments.") - return - /// Whenever something enters the send tiles, check if it's a loot crate. If so, alert players. /obj/machinery/quantum_server/proc/on_goal_turf_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER - if(!istype(arrived, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + var/obj/machinery/byteforge/chosen_forge = get_random_nearby_forge() + if(isnull(chosen_forge)) return - var/obj/structure/closet/crate/secure/bitrunning/encrypted/loot_crate = arrived - if(!istype(loot_crate)) + if((obj_flags & EMAGGED) && isliving(arrived)) + var/mob/living/creature = arrived + + if(!creature.mind?.has_antag_datum(/datum/antagonist/bitrunning_glitch, check_subtypes = TRUE)) + return + + INVOKE_ASYNC(src, PROC_REF(station_spawn), arrived, chosen_forge) return - for(var/mob/person in loot_crate.contents) - if(isnull(person.mind)) - person.forceMove(get_turf(loot_crate)) - - var/datum/component/avatar_connection/connection = person.GetComponent(/datum/component/avatar_connection) - connection?.full_avatar_disconnect() - - spark_at_location(loot_crate) - qdel(loot_crate) - SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, arrived, generated_domain.reward_points) - generate_loot() + if(istype(arrived, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + generate_loot(arrived, chosen_forge) + return /// Handles examining the server. Shows cooldown time and efficiency. /obj/machinery/quantum_server/proc/on_goal_turf_examined(datum/source, mob/examiner, list/examine_text) @@ -83,8 +62,12 @@ if(isliving(thing)) // so we can mutate them var/mob/living/creature = thing - if(creature.can_be_cybercop) - mutation_candidate_refs.Add(WEAKREF(creature)) + if(ismegafauna(creature)) + var/mob/living/simple_animal/hostile/megafauna/boss = creature + boss.make_virtual_megafauna() + continue + + mutation_candidate_refs.Add(WEAKREF(creature)) continue if(istype(thing, /obj/effect/mob_spawn/ghost_role)) // so we get threat alerts @@ -98,10 +81,11 @@ UnregisterSignal(source, COMSIG_LAZY_TEMPLATE_LOADED) + /// Just in case there's any special handling for the domain + generated_domain.setup_domain(created_atoms) + /// Handles when cybercops are summoned into the area or ghosts click a ghost role spawner /obj/machinery/quantum_server/proc/on_threat_created(datum/source, mob/living/threat) SIGNAL_HANDLER - domain_threats += 1 - spawned_threat_refs.Add(WEAKREF(threat)) - SEND_SIGNAL(src, COMSIG_BITRUNNER_THREAT_CREATED) // notify players + add_threats(threat) diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm new file mode 100644 index 00000000000..e4fd60176c9 --- /dev/null +++ b/code/modules/bitrunning/server/threats.dm @@ -0,0 +1,164 @@ +/// Adds threats to the list and notifies players +/obj/machinery/quantum_server/proc/add_threats(mob/living/threat) + spawned_threat_refs.Add(WEAKREF(threat)) + SEND_SIGNAL(src, COMSIG_BITRUNNER_THREAT_CREATED) + +/// Choses which antagonist role is spawned based on threat +/obj/machinery/quantum_server/proc/get_antagonist_role() + var/list/available = list() + + for(var/datum/antagonist/bitrunning_glitch/subtype as anything in subtypesof(/datum/antagonist/bitrunning_glitch)) + if(threat >= initial(subtype.threat)) + available += subtype + + shuffle_inplace(available) + var/datum/antagonist/bitrunning_glitch/chosen = pick(available) + + threat -= initial(chosen.threat) * 0.5 + + return chosen + +/// Selects a target to mutate. Gives two attempts, then crashes if it fails. +/obj/machinery/quantum_server/proc/get_mutation_target() + var/datum/weakref/target_ref = pick(mutation_candidate_refs) + var/mob/living/resolved = target_ref.resolve() + + if(resolved) + return resolved + + mutation_candidate_refs.Remove(target_ref) + if(!length(mutation_candidate_refs)) + return + + target_ref = pick(mutation_candidate_refs) + resolved = target_ref.resolve() + return resolved + +/// Finds any mobs with minds in the zones and gives them the bad news +/obj/machinery/quantum_server/proc/notify_spawned_threats() + for(var/datum/weakref/baddie_ref as anything in spawned_threat_refs) + var/mob/living/baddie = baddie_ref.resolve() + if(isnull(baddie?.mind) || baddie.stat >= UNCONSCIOUS) + continue + + var/atom/movable/screen/alert/bitrunning/alert = baddie.throw_alert( + ALERT_BITRUNNER_RESET, + /atom/movable/screen/alert/bitrunning, + new_master = src, + ) + alert.name = "Queue Deletion" + alert.desc = "The server is resetting. Oblivion awaits." + + to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) + +/// Removes a specific threat - used when station spawning +/obj/machinery/quantum_server/proc/remove_threat(mob/living/threat) + spawned_threat_refs.Remove(WEAKREF(threat)) + +/// Selects the role and waits for a ghost orbiter +/obj/machinery/quantum_server/proc/setup_glitch(datum/antagonist/bitrunning_glitch/forced_role) + if(!validate_mutation_candidates()) + return + + var/mob/living/mutation_target = get_mutation_target() + if(isnull(mutation_target)) + CRASH("vdom: After two attempts, no valid mutation target was found.") + + var/atom/thing = mutation_target + thing.create_digital_aura() + + var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role() + var/role_name = initial(chosen_role.name) + + var/datum/callback/to_call = CALLBACK(src, PROC_REF(spawn_glitch), chosen_role, mutation_target) + mutation_target.AddComponent(/datum/component/orbit_poll, \ + ignore_key = POLL_IGNORE_GLITCH, \ + job_bans = ROLE_GLITCH, \ + to_call = to_call, \ + title = role_name, \ + header = "Bitrunning Malfunction", \ + ) + + return mutation_target + +/// Orbit poll has concluded - spawn the antag +/obj/machinery/quantum_server/proc/spawn_glitch(datum/antagonist/bitrunning_glitch/chosen_role, mob/living/mutation_target, mob/dead/observer/ghost) + if(QDELETED(mutation_target)) + return + + if(QDELETED(src) || isnull(ghost) || isnull(generated_domain) || !is_ready || !is_operational) + var/atom/thing = mutation_target + thing.remove_digital_aura() + return + + var/role_name = initial(chosen_role.name) + var/mob/living/antag_mob + switch(role_name) + if(ROLE_NETGUARDIAN) + antag_mob = new /mob/living/basic/netguardian(mutation_target.loc) + else // any other humanoid mob + antag_mob = new /mob/living/carbon/human(mutation_target.loc) + + mutation_target.gib(DROP_ALL_REMAINS) + + antag_mob.key = ghost.key + var/datum/mind/ghost_mind = antag_mob.mind + ghost_mind.add_antag_datum(chosen_role) + ghost_mind.special_role = ROLE_GLITCH + ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) + + playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) + message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.") + antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) + + add_threats(antag_mob) + +/// Oh boy - transports the antag station side +/obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge) + antag.balloon_alert(antag, "scanning...") + chosen_forge.setup_particles(angry = TRUE) + radio.talk_into(src, "SECURITY BREACH: Unauthorized entry sequence detected.", RADIO_CHANNEL_SUPPLY) + SEND_SIGNAL(src, COMSIG_BITRUNNER_STATION_SPAWN) + + var/timeout = 2 SECONDS + if(!ishuman(antag)) + radio.talk_into(src, "Fabrication protocols have crashed unexpectedly. Please evacuate the area.", RADIO_CHANNEL_SUPPLY) + timeout = 10 SECONDS + + if(!do_after(antag, timeout) || QDELETED(chosen_forge) || QDELETED(antag) || QDELETED(src) || !is_ready || !is_operational) + chosen_forge.setup_particles() + return + + var/datum/component/glitch/effect = antag.AddComponent(/datum/component/glitch, \ + server = src, \ + forge = chosen_forge, \ + ) + + chosen_forge.flicker(angry = TRUE) + if(!do_after(antag, 1 SECONDS)) + chosen_forge.setup_particles() + qdel(effect) + return + + chosen_forge.flash() + + if(ishuman(antag)) + reset_equipment(antag) + else + radio.talk_into(src, "CRITICAL ALERT: Unregistered mechanical entity deployed.") + + do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM) + +/// Removes any invalid candidates from the list +/obj/machinery/quantum_server/proc/validate_mutation_candidates() + for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs) + var/mob/living/creature = creature_ref.resolve() + if(isnull(creature) || creature.mind) + mutation_candidate_refs.Remove(creature_ref) + + if(!length(mutation_candidate_refs)) + return FALSE + + shuffle_inplace(mutation_candidate_refs) + + return TRUE diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index 9570fd43915..a6069d45e90 100644 --- a/code/modules/bitrunning/server/util.dm +++ b/code/modules/bitrunning/server/util.dm @@ -7,19 +7,6 @@ update_appearance() radio.talk_into(src, "Thermal systems within operational parameters. Proceeding to domain configuration.", RADIO_CHANNEL_SUPPLY) -/// Attempts to connect to a quantum console -/obj/machinery/quantum_server/proc/find_console() - var/obj/machinery/computer/quantum_console/console = console_ref?.resolve() - if(console) - return console - - for(var/direction in GLOB.cardinals) - var/obj/machinery/computer/quantum_console/nearby_console = locate(/obj/machinery/computer/quantum_console, get_step(src, direction)) - if(nearby_console) - console_ref = WEAKREF(nearby_console) - nearby_console.server_ref = WEAKREF(src) - return nearby_console - /// Compiles a list of available domains. /obj/machinery/quantum_server/proc/get_available_domains() var/list/levels = list() @@ -35,6 +22,7 @@ "desc" = can_view ? initial(domain.desc) : "Limited scanning capabilities. Cannot infer domain details.", "difficulty" = initial(domain.difficulty), "id" = initial(domain.key), + "is_modular" = initial(domain.is_modular), "name" = can_view ? initial(domain.name) : REDACTED, "reward" = can_view_reward ? initial(domain.reward_points) : REDACTED, )) @@ -66,77 +54,71 @@ return hosted_avatars -/// Gets a random available domain given the current points. Weighted towards higher cost domains. +/// Locates any turfs with forges on them, returns a random one +/obj/machinery/quantum_server/proc/get_random_nearby_forge() + var/list/nearby_forges = list() + + for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src)) + nearby_forges += forge + + return pick(nearby_forges) + +/// Gets a random available domain given the current points. /obj/machinery/quantum_server/proc/get_random_domain_id() if(points < 1) return var/list/random_domains = list() - var/total_cost = 0 for(var/datum/lazy_template/virtual_domain/available as anything in subtypesof(/datum/lazy_template/virtual_domain)) var/init_cost = initial(available.cost) - if(!initial(available.test_only) && init_cost > 0 && init_cost < 4 && init_cost <= points) - random_domains += list(list( - cost = init_cost, - id = initial(available.key), - )) - var/random_value = rand(0, total_cost) - var/accumulated_cost = 0 - - for(var/available as anything in random_domains) - accumulated_cost += available["cost"] - if(accumulated_cost >= random_value) - domain_randomized = TRUE - return available["id"] - -/// Gets all mobs originally generated by the loaded domain and returns a list that are capable of being antagged -/obj/machinery/quantum_server/proc/get_valid_domain_targets() - // A: No one is playing - // B: The domain is not loaded - // C: The domain is shutting down - // D: There are no mobs - if(!length(avatar_connection_refs) || isnull(generated_domain) || !is_ready || !is_operational || !length(mutation_candidate_refs)) - return list() - - for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs) - var/mob/living/creature = creature_ref.resolve() - if(isnull(creature) || creature.mind) - mutation_candidate_refs.Remove(creature_ref) - - return shuffle(mutation_candidate_refs) - -/// Locates any turfs with forges on them -/obj/machinery/quantum_server/proc/get_nearby_forges() - var/list/obj/machinery/byteforge/nearby_forges = list() - - for(var/obj/machinery/byteforge/forge in oview(MAX_DISTANCE, src)) - nearby_forges += forge - - return nearby_forges - -/// Finds any mobs with minds in the zones and gives them the bad news -/obj/machinery/quantum_server/proc/notify_spawned_threats() - for(var/datum/weakref/baddie_ref as anything in spawned_threat_refs) - var/mob/living/baddie = baddie_ref.resolve() - if(isnull(baddie) || baddie.stat >= UNCONSCIOUS || isnull(baddie.mind)) - continue - - baddie.throw_alert( - ALERT_BITRUNNER_RESET, - /atom/movable/screen/alert/bitrunning/qserver_threat_deletion, - new_master = src, + if(!initial(available.test_only) && \ + init_cost <= points && \ + init_cost > BITRUNNER_COST_NONE && \ + init_cost < BITRUNNER_COST_EXTREME \ ) + random_domains.Add(available) - to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) + shuffle_inplace(random_domains) + var/datum/lazy_template/virtual_domain/selected = pick(random_domains) + domain_randomized = TRUE + + return initial(selected.key) + +/// Removes all blacklisted items from a mob and returns them to base state +/obj/machinery/quantum_server/proc/reset_equipment(mob/living/carbon/human/person) + for(var/item in person.get_contents()) + qdel(item) + + var/datum/antagonist/bitrunning_glitch/antag_datum = locate() in person.mind?.antag_datums + if(isnull(antag_datum?.preview_outfit)) + return + + person.equipOutfit(antag_datum.preview_outfit) + +/// Severs any connected users +/obj/machinery/quantum_server/proc/sever_connections() + if(isnull(generated_domain) || !length(avatar_connection_refs)) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_QSRV_SEVER) /// Do some magic teleport sparks /obj/machinery/quantum_server/proc/spark_at_location(obj/cache) - playsound(cache, 'sound/magic/blink.ogg', 50, TRUE) + playsound(cache, 'sound/magic/blink.ogg', 50, vary = TRUE) var/datum/effect_system/spark_spread/quantum/sparks = new() - sparks.set_up(5, 1, get_turf(cache)) + sparks.set_up(5, location = get_turf(cache)) sparks.start() +/// Returns a turf if it's not dense, else will find a neighbor. +/obj/machinery/quantum_server/proc/validate_turf(turf/chosen_turf) + if(!chosen_turf.is_blocked_turf()) + return chosen_turf + + for(var/turf/tile in get_adjacent_open_turfs(chosen_turf)) + if(!tile.is_blocked_turf()) + return chosen_turf + #undef REDACTED #undef MAX_DISTANCE diff --git a/code/modules/bitrunning/util/digital_aura.dm b/code/modules/bitrunning/util/digital_aura.dm new file mode 100644 index 00000000000..a45194933a4 --- /dev/null +++ b/code/modules/bitrunning/util/digital_aura.dm @@ -0,0 +1,43 @@ +/// Creates a digital effect around the target +/atom/proc/create_digital_aura() + var/list/overlays = get_digital_overlays() + if(!length(overlays)) + return + + add_overlay(overlays) + alpha = 210 + set_light(2, l_color = LIGHT_COLOR_BUBBLEGUM, l_on = TRUE) + update_appearance() + +/// Removes the digital effect around the target +/atom/proc/remove_digital_aura() + var/list/overlays = get_digital_overlays() + if(!length(overlays)) + return + + cut_overlay(overlays) + alpha = 255 + set_light(0, l_color = null, l_on = FALSE) + update_appearance() + +/// Returns a list of overlays to be used for the digital effect +/atom/proc/get_digital_overlays() + var/base_icon + var/dimensions = get_icon_dimensions(icon) + if(!length(dimensions)) + return + + switch(dimensions["width"]) + if(32) + base_icon = 'icons/effects/bitrunning.dmi' + if(48) + base_icon = 'icons/effects/bitrunning_48.dmi' + if(64) + base_icon = 'icons/effects/bitrunning_64.dmi' + + var/mutable_appearance/redshift = mutable_appearance(base_icon, "redshift") + redshift.blend_mode = BLEND_MULTIPLY + + var/mutable_appearance/glitch_effect = mutable_appearance(base_icon, "glitch", MUTATIONS_LAYER, alpha = 150) + + return list(glitch_effect, redshift) diff --git a/code/modules/bitrunning/util/service_style.dm b/code/modules/bitrunning/util/service_style.dm new file mode 100644 index 00000000000..f420e783064 --- /dev/null +++ b/code/modules/bitrunning/util/service_style.dm @@ -0,0 +1,23 @@ +/// Gives the appearance of being an agent +/mob/living/carbon/human/proc/set_service_style() + var/static/list/approved_hair_colors = list( + "#4B3D28", + "#000000", + "#8D4A43", + "#D2B48C", + ) + + var/static/list/approved_hairstyles = list( + /datum/sprite_accessory/hair/business, + /datum/sprite_accessory/hair/business2, + /datum/sprite_accessory/hair/business3, + /datum/sprite_accessory/hair/business4, + /datum/sprite_accessory/hair/mulder, + ) + + var/datum/sprite_accessory/hair/picked_hair = pick(approved_hairstyles) + var/picked_color = pick(approved_hair_colors) + + set_facial_hairstyle("Shaved", update = FALSE) + set_haircolor(picked_color, update = FALSE) + set_hairstyle(initial(picked_hair.name)) diff --git a/code/modules/bitrunning/util/virtual_megafauna.dm b/code/modules/bitrunning/util/virtual_megafauna.dm new file mode 100644 index 00000000000..2707db9e2e7 --- /dev/null +++ b/code/modules/bitrunning/util/virtual_megafauna.dm @@ -0,0 +1,13 @@ +/// Removes all the loot and achievements from megafauna for bitrunning related +/mob/living/simple_animal/hostile/megafauna/proc/make_virtual_megafauna() + var/new_max = clamp(maxHealth * 0.5, 600, 1300) + maxHealth = new_max + health = new_max + + true_spawn = FALSE + + loot.Cut() + loot += /obj/structure/closet/crate/secure/bitrunning/encrypted + + crusher_loot.Cut() + crusher_loot += /obj/structure/closet/crate/secure/bitrunning/encrypted diff --git a/code/modules/bitrunning/util/virtual_mob.dm b/code/modules/bitrunning/util/virtual_mob.dm new file mode 100644 index 00000000000..891f6016879 --- /dev/null +++ b/code/modules/bitrunning/util/virtual_mob.dm @@ -0,0 +1,14 @@ +/// Removes all the "organic" traits from a mob, used for virtual antagonists +/mob/living/carbon/proc/make_virtual_mob() + add_traits(list( + TRAIT_NO_AUGMENTS, + TRAIT_NO_DNA_COPY, + TRAIT_NOBLOOD, + TRAIT_NOBREATH, + TRAIT_NOHUNGER, + TRAIT_RESISTCOLD, + TRAIT_RESISTHIGHPRESSURE, + TRAIT_RESISTLOWPRESSURE, + TRAIT_WEATHER_IMMUNE, + ), TRAIT_GENERIC, + ) diff --git a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm index 02bb91abc58..83d65a7fb46 100644 --- a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm +++ b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm @@ -8,11 +8,3 @@ map_name = "ash_drake" reward_points = BITRUNNER_REWARD_MEDIUM safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1600 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1600 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm index a6fb3e921e0..f632b0681bf 100644 --- a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm +++ b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm @@ -8,15 +8,14 @@ map_name = "beach_bar" safehouse_path = /datum/map_template/safehouse/mine -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain - name = "pina colada" - desc = "Whose drink is this? Not yours, that's for sure. Well, it's not like they're going to miss it." - list_reagents = list(/datum/reagent/consumable/ethanol/pina_colada = 30) - -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/virtual_domain/Initialize(mapload, vol) +/datum/lazy_template/virtual_domain/beach_bar/setup_domain(list/created_atoms) . = ..() - AddComponent(/datum/component/bitrunning_points, \ - signal_type = COMSIG_GLASS_DRANK, \ - points_per_signal = 0.5, \ - ) + for(var/obj/item/reagent_containers/cup/glass/drink in created_atoms) + RegisterSignal(drink, COMSIG_GLASS_DRANK, PROC_REF(on_drink_drank)) + +/// Eventually reveal the cache +/datum/lazy_template/virtual_domain/beach_bar/proc/on_drink_drank(datum/source) + SIGNAL_HANDLER + + add_points(0.5) diff --git a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm index abf2e0fc5a9..ad5d22f5175 100644 --- a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm +++ b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm @@ -8,11 +8,3 @@ map_name = "blood_drunk_miner" reward_points = BITRUNNER_REWARD_MEDIUM safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1600 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1600 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm new file mode 100644 index 00000000000..5035a323d7c --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm @@ -0,0 +1,23 @@ +/datum/lazy_template/virtual_domain/breeze_bay + name = "Breeze Bay" + desc = "A beach front town with a large forest to the north." + help_text = "It's simple! Enjoy some rays, catch some fish, and have a good time! Don't get bit by the crabs, though." + key = "breeze_bay" + map_name = "breeze_bay" + reward_points = BITRUNNER_REWARD_LOW + safehouse_path = /datum/map_template/safehouse/wood + +/datum/lazy_template/virtual_domain/breeze_bay/setup_domain(list/created_atoms) + . = ..() + + for(var/obj/item/fishing_rod/rod in created_atoms) + RegisterSignal(rod, COMSIG_FISHING_ROD_CAUGHT_FISH, PROC_REF(on_fish_caught)) + +/// Eventually reveal the cache +/datum/lazy_template/virtual_domain/breeze_bay/proc/on_fish_caught(datum/source, reward) + SIGNAL_HANDLER + + if(isnull(reward)) + return + + add_points(2) diff --git a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm index bede97177cb..4ac4a6476bd 100644 --- a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm +++ b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm @@ -9,11 +9,3 @@ map_name = "bubblegum" reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 2000 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/colossus.dm b/code/modules/bitrunning/virtual_domain/domains/colossus.dm index 35ba4eee0ca..9baa011263b 100644 --- a/code/modules/bitrunning/virtual_domain/domains/colossus.dm +++ b/code/modules/bitrunning/virtual_domain/domains/colossus.dm @@ -9,10 +9,3 @@ reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss -/mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 2000 - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm index 01d58e39803..1f385542361 100644 --- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm +++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm @@ -1,7 +1,6 @@ /datum/lazy_template/virtual_domain/gondola_asteroid name = "Gondola Asteroid" desc = "An asteroid home to a bountiful forest of gondolas. Peaceful." - map_name = "gondola_asteroid" help_text = "What a lovely forest. There's a loot crate here in the middle of the map. \ Hmm... It doesn't budge. The gondolas don't seem to have any trouble moving it, though. \ I bet there's a way to move it myself." diff --git a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm index 142623f4f81..5b67c9d9bf2 100644 --- a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm +++ b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm @@ -8,11 +8,3 @@ map_name = "hierophant" reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1700 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1700 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/legion.dm b/code/modules/bitrunning/virtual_domain/domains/legion.dm deleted file mode 100644 index f1ba146f380..00000000000 --- a/code/modules/bitrunning/virtual_domain/domains/legion.dm +++ /dev/null @@ -1,20 +0,0 @@ -/datum/lazy_template/virtual_domain/legion - name = "Chamber of Echoes" - cost = BITRUNNER_COST_MEDIUM - desc = "A chilling realm that houses Legion's necropolis. Those who succumb to it are forever damned." - difficulty = BITRUNNER_DIFFICULTY_MEDIUM - forced_outfit = /datum/outfit/job/miner - key = "legion" - map_name = "legion" - reward_points = BITRUNNER_REWARD_MEDIUM - safehouse_path = /datum/map_template/safehouse/lavaland_boss - -/mob/living/simple_animal/hostile/megafauna/legion/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - health = 1500 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 1500 - true_spawn = FALSE - -// You may be thinking, what about those mini-legions? They're not part of the initial created_atoms list diff --git a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm index fd54ef6ca48..c8d7750e979 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm @@ -2,13 +2,18 @@ name = "Disposal Pipe Factory" cost = BITRUNNER_COST_LOW desc = "An abandoned and infested factory manufacturing disposal pipes." - difficulty = BITRUNNER_DIFFICULTY_MEDIUM + difficulty = BITRUNNER_DIFFICULTY_LOW extra_loot = list(/obj/item/stack/pipe_cleaner_coil/random/five = 1) help_text = "Not long ago, this place was thriving with activity. The workers \ seemed to have left in a hurry, and now productivity is in the bin. Something \ must have trashed the place, but what?" + is_modular = TRUE key = "pipedream" map_name = "pipedream" + mob_modules = list( + /datum/modular_mob_segment/hivebots, + /datum/modular_mob_segment/hivebots_strong + ) reward_points = BITRUNNER_REWARD_LOW safehouse_path = /datum/map_template/safehouse/shuttle diff --git a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm index bae0da6874d..dd56684abc6 100644 --- a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm +++ b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm @@ -7,7 +7,9 @@ help_text = "A group of Syndicate operatives have stolen valuable cargo from the station. \ They have boarded their ship and are attempting to escape. Infiltrate their ship and recover \ the crate. Be careful, they are extremely armed." + is_modular = TRUE key = "syndicate_assault" map_name = "syndicate_assault" + mob_modules = list(/datum/modular_mob_segment/syndicate_team) reward_points = BITRUNNER_REWARD_MEDIUM safehouse_path = /datum/map_template/safehouse/shuttle diff --git a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm index 45d4abec983..0b1bfedbdb9 100644 --- a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm +++ b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/vaporwave name = "Cosmic Vestige" cost = BITRUNNER_COST_EXTREME - desc = "Suspended in the silent void of space, the Neon Relic is a haunting echo of a retro-futuristic era." + desc = "Suspended in the silent void of space, the Neon Relic is a haunting echo of a retro-futuristic era. Hang out, enjoy the view." difficulty = BITRUNNER_DIFFICULTY_NONE extra_loot = list(/obj/item/stack/spacecash/c500 = 3) key = "vaporwave" diff --git a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm index fcad3db6faf..fa0d15b92e9 100644 --- a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm +++ b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm @@ -9,11 +9,3 @@ reward_points = BITRUNNER_REWARD_HIGH safehouse_path = /datum/map_template/safehouse/lavaland_boss -/mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain - can_be_cybercop = FALSE - crusher_loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - guaranteed_butcher_results = list(/obj/item/wendigo_skull = 1) - health = 2000 - loot = list(/obj/structure/closet/crate/secure/bitrunning/encrypted) - maxHealth = 2000 - true_spawn = FALSE diff --git a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm index 2bd4105e13c..ccf5fac23ad 100644 --- a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm +++ b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm @@ -6,7 +6,9 @@ extra_loot = list(/obj/item/toy/plush/rouny = 1) help_text = "You are on a barren planet filled with hostile creatures. There is a crate here, not hidden, \ simply protected. Expect resistance." + is_modular = TRUE key = "xeno_nest" map_name = "xeno_nest" + mob_modules = list(/datum/modular_mob_segment/xenos) reward_points = BITRUNNER_REWARD_LOW safehouse_path = /datum/map_template/safehouse/shuttle diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm new file mode 100644 index 00000000000..b845eee564d --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -0,0 +1,156 @@ +#define SPAWN_ALWAYS 100 +#define SPAWN_LIKELY 85 +#define SPAWN_UNLIKELY 35 +#define SPAWN_RARE 10 + +/datum/modular_mob_segment + /// Spawn no more than this amount + var/max = 4 + /// Set this to false if you want explicitly what's in the list to spawn + var/exact = FALSE + /// The list of mobs to spawn + var/list/mob/living/mobs = list() + /// The mobs spawned from this segment + var/list/spawned_mob_refs = list() + /// Chance this will spawn (1 - 100) + var/probability = SPAWN_LIKELY + +/// Spawns mobs in a circle around the location +/datum/modular_mob_segment/proc/spawn_mobs(turf/origin) + if(!prob(probability)) + return + + var/total_amount = exact ? rand(1, max) : length(mobs) + + shuffle_inplace(mobs) + + + var/list/turf/nearby = list() + for(var/turf/tile as anything in RANGE_TURFS(2, origin)) + if(!tile.is_blocked_turf()) + nearby += tile + + if(!length(nearby)) + stack_trace("Couldn't find any valid turfs to spawn on") + return + + for(var/index in 1 to total_amount) + // For each of those, we need to find an open space + var/turf/destination = pick(nearby) + + var/path // Either a random mob or the next mob in the list + if(exact) + path = mobs[index] + else + path = pick(mobs) + + var/mob/living/mob = new path(destination) + nearby -= destination + spawned_mob_refs.Add(WEAKREF(mob)) + +// Some generic mob segments. If you want to add generic ones for any map, add them here + +/datum/modular_mob_segment/gondolas + mobs = list( + /mob/living/simple_animal/pet/gondola, + ) + +/datum/modular_mob_segment/corgis + max = 2 + mobs = list( + /mob/living/basic/pet/dog/corgi, + ) + +/datum/modular_mob_segment/monkeys + mobs = list( + /mob/living/carbon/human/species/monkey, + ) + +/datum/modular_mob_segment/syndicate_team + mobs = list( + /mob/living/basic/trooper/syndicate/ranged, + /mob/living/basic/trooper/syndicate/melee, + ) + +/datum/modular_mob_segment/syndicate_elite + mobs = list( + /mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, + /mob/living/basic/trooper/syndicate/ranged/space/stormtrooper, + ) + +/datum/modular_mob_segment/bears + max = 2 + mobs = list( + /mob/living/basic/bear, + ) + +/datum/modular_mob_segment/bees + exact = TRUE + mobs = list( + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee, + /mob/living/basic/bee/queen, + ) + +/datum/modular_mob_segment/bees_toxic + mobs = list( + /mob/living/basic/bee/toxin, + ) + +/datum/modular_mob_segment/blob_spores + mobs = list( + /mob/living/basic/blob_minion, + ) + +/datum/modular_mob_segment/carps + mobs = list( + /mob/living/basic/carp, + ) + +/datum/modular_mob_segment/hivebots + mobs = list( + /mob/living/basic/hivebot, + /mob/living/basic/hivebot/range, + ) + +/datum/modular_mob_segment/hivebots_strong + mobs = list( + /mob/living/basic/hivebot/strong, + /mob/living/basic/hivebot/range, + ) + +/datum/modular_mob_segment/lavaland_assorted + mobs = list( + /mob/living/basic/mining/basilisk, + /mob/living/basic/mining/goliath, + /mob/living/basic/mining/brimdemon, + /mob/living/basic/mining/lobstrosity, + ) + +/datum/modular_mob_segment/spiders + mobs = list( + /mob/living/basic/spider/giant/ambush, + /mob/living/basic/spider/giant/hunter, + /mob/living/basic/spider/giant/nurse, + /mob/living/basic/spider/giant/tarantula, + /mob/living/basic/spider/giant/midwife, + ) + +/datum/modular_mob_segment/venus_trap + mobs = list( + /mob/living/basic/venus_human_trap, + ) + +/datum/modular_mob_segment/xenos + mobs = list( + /mob/living/simple_animal/hostile/alien, + /mob/living/simple_animal/hostile/alien/sentinel, + /mob/living/simple_animal/hostile/alien/drone, + ) + +#undef SPAWN_ALWAYS +#undef SPAWN_LIKELY +#undef SPAWN_UNLIKELY +#undef SPAWN_RARE diff --git a/code/modules/bitrunning/virtual_domain/safehouses.dm b/code/modules/bitrunning/virtual_domain/safehouses.dm index 6504d447f28..79c8d5fe895 100644 --- a/code/modules/bitrunning/virtual_domain/safehouses.dm +++ b/code/modules/bitrunning/virtual_domain/safehouses.dm @@ -6,51 +6,49 @@ /datum/map_template/safehouse name = "virtual domain: safehouse" - returns_created_atoms = TRUE /// The map file to load - var/filename = "den.dmm" + var/filename = "den" /datum/map_template/safehouse/New() - mappath = "_maps/safehouses/" + filename + mappath = "_maps/safehouses/[filename].dmm" ..(path = mappath) /datum/map_template/safehouse/test_only filename = "test_only_safehouse.dmm" - /// The default safehouse map template. -/datum/map_template/safehouse/wood - filename = "wood.dmm" - /datum/map_template/safehouse/den - filename = "den.dmm" + filename = "den" + +/datum/map_template/safehouse/wood + filename = "wood" /datum/map_template/safehouse/dig - filename = "dig.dmm" + filename = "dig" /datum/map_template/safehouse/shuttle - filename = "shuttle.dmm" + filename = "shuttle" // Has space tiles on the four corners. /datum/map_template/safehouse/shuttle_space - filename = "shuttle_space.dmm" + filename = "shuttle_space" /datum/map_template/safehouse/mine - filename = "mine.dmm" + filename = "mine" // Comes preloaded with mining combat gear. /datum/map_template/safehouse/lavaland_boss - filename = "lavaland_boss.dmm" + filename = "lavaland_boss" // Chill out /datum/map_template/safehouse/ice - filename = "ice.dmm" + filename = "ice" /datum/map_template/safehouse/bathroom - filename = "bathroom.dmm" + filename = "bathroom" /** * Your safehouse here * /datum/map_template/safehouse/your_type - * filename = "your_map.dmm" + * filename = "your_map" */ diff --git a/code/modules/bitrunning/virtual_domain/virtual_domain.dm b/code/modules/bitrunning/virtual_domain/virtual_domain.dm index 202376a2c33..6e7b98ccdb4 100644 --- a/code/modules/bitrunning/virtual_domain/virtual_domain.dm +++ b/code/modules/bitrunning/virtual_domain/virtual_domain.dm @@ -1,6 +1,5 @@ /** * # Virtual Domains - * This loads a base level, then users can select the preset upon it. * Create your own: Read the readme file in the '_maps/virtual_domains' folder. */ /datum/lazy_template/virtual_domain @@ -10,22 +9,30 @@ /// Cost of this map to load var/cost = BITRUNNER_COST_NONE - /// The description of the map - var/desc = "A map." - /// The 'difficulty' of the map, which affects the ui and ability to scan info. - var/difficulty = BITRUNNER_DIFFICULTY_NONE - /// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount - var/list/extra_loot - /// The map file to load - var/filename = "virtual_domain.dmm" + /// The safehouse to load into the map + var/datum/map_template/safehouse/safehouse_path = /datum/map_template/safehouse/den /// Any outfit that you wish to force on avatars. Overrides preferences var/datum/outfit/forced_outfit + /// The description of the map for the console UI + var/desc = "A map." + /// Affects the ui and ability to scan info. + var/difficulty = BITRUNNER_DIFFICULTY_NONE + /// The map file to load + var/filename = "virtual_domain.dmm" /// If this domain blocks the use of items from disks, for whatever reason var/forbids_disk_items = FALSE /// If this domain blocks the use of spells from disks, for whatever reason var/forbids_disk_spells = FALSE /// Information given to connected clients via ability var/help_text + /// Whether to display this as a modular map + var/is_modular = FALSE + /// Byond will look for modular mob segment landmarks then choose from here at random. You can make them unique also. + var/list/datum/modular_mob_segment/mob_modules = list() + /// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount + var/list/extra_loot + /// Forces all mob modules to only load once + var/modular_unique_mobs = FALSE // Name to show in the UI var/name = "Virtual Domain" /// Points to reward for completion. Used to purchase new domains and calculate ore rewards. @@ -34,5 +41,11 @@ var/start_time /// This map is specifically for unit tests. Shouldn't display in game var/test_only = FALSE - /// The safehouse to load into the map - var/datum/map_template/safehouse/safehouse_path = /datum/map_template/safehouse/den + +/// Sends a point to any loot signals on the map +/datum/lazy_template/virtual_domain/proc/add_points(points_to_add) + SEND_SIGNAL(src, COMSIG_BITRUNNER_GOAL_POINT, points_to_add) + +/// Overridable proc to be called after the map is loaded. +/datum/lazy_template/virtual_domain/proc/setup_domain(list/created_atoms) + return diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 0e16a13b54a..df18fcf4e63 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -135,17 +135,7 @@ preview.name = initial(typepath.name) // Scale the preview if it's bigger than one tile - var/mutable_appearance/preview_overlay = new(typepath) - var/list/icon_dimensions = get_icon_dimensions(initial(typepath.icon)) - var/width = icon_dimensions["width"] - var/height = icon_dimensions["height"] - var/scale = 1 - if(width > world.icon_size || height > world.icon_size) - if(width >= height) - scale = world.icon_size / width - else - scale = world.icon_size / height - preview_overlay.transform = preview_overlay.transform.Scale(scale) + var/mutable_appearance/preview_overlay = get_small_overlay(new typepath) preview_overlay.appearance_flags |= TILE_BOUND preview_overlay.layer = FLOAT_LAYER preview_overlay.plane = FLOAT_PLANE diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index a584dace3fd..a37c6becfa1 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -22,13 +22,13 @@ if(istype(object,/turf) && left_click && !alt_click && !ctrl_click) var/turf/clicked_turf = object if(isplatingturf(object)) - clicked_turf.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + clicked_turf.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) else if(isfloorturf(object)) - clicked_turf.PlaceOnTop(/turf/closed/wall) + clicked_turf.place_on_top(/turf/closed/wall) else if(iswallturf(object)) - clicked_turf.PlaceOnTop(/turf/closed/wall/r_wall) + clicked_turf.place_on_top(/turf/closed/wall/r_wall) else - clicked_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) // Gotta do something + clicked_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) // Gotta do something log_admin("Build Mode: [key_name(c)] built [clicked_turf] at [AREACOORD(clicked_turf)]") return else if(right_click) diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm index 8e51f8ef733..a38937db301 100644 --- a/code/modules/capture_the_flag/ctf_controller.dm +++ b/code/modules/capture_the_flag/ctf_controller.dm @@ -47,7 +47,11 @@ ctf_enabled = TRUE for(var/team in teams) var/obj/machinery/ctf/spawner/spawner = teams[team].spawner - notify_ghosts("[spawner.name] has been activated!", source = spawner, action = NOTIFY_ORBIT, header = "CTF has been activated") + notify_ghosts( + "[spawner.name] has been activated!", + source = spawner, + header = "CTF has been activated", + ) /datum/ctf_controller/proc/stop_ctf() ctf_enabled = FALSE diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index 798bfa49be9..dccf875a55a 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -207,12 +207,18 @@ var/lose_multiple_charges = TRUE var/show_charge_as_alpha = TRUE -/obj/item/clothing/suit/armor/vest/ctf/equipped(mob/user, slot) +/obj/item/clothing/suit/armor/vest/ctf/Initialize(mapload) . = ..() - if(!slot || slot & ITEM_SLOT_HANDS) - return - AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ - charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, show_charge_as_alpha = show_charge_as_alpha, shield_icon = team_shield_icon) + AddComponent( \ + /datum/component/shielded, \ + max_charges = max_charges, \ + recharge_start_delay = recharge_start_delay, \ + charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, \ + lose_multiple_charges = lose_multiple_charges, \ + show_charge_as_alpha = show_charge_as_alpha, \ + shield_icon = team_shield_icon, \ + ) // LIGHT SHIELDED VEST diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index bfebcc706ca..a4c3c68f634 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -516,11 +516,19 @@ message_admins("[key_name_admin(user)] has [ctf_enabled ? "enabled" : "disabled"] CTF!") else if(automated) message_admins("CTF has finished a round and automatically restarted.") - notify_ghosts("CTF has automatically restarted after a round finished in [initial(ctf_area.name)]!",'sound/effects/ghost2.ogg') + notify_ghosts( + "CTF has automatically restarted after a round finished in [initial(ctf_area.name)]!", + ghost_sound = 'sound/effects/ghost2.ogg', + header = "CTF Restarted" + ) else message_admins("The players have spoken! Voting has enabled CTF!") if(!automated) - notify_ghosts("CTF has been [ctf_enabled? "enabled" : "disabled"] in [initial(ctf_area.name)]!",'sound/effects/ghost2.ogg') + notify_ghosts( + "CTF has been [ctf_enabled? "enabled" : "disabled"] in [initial(ctf_area.name)]!", + ghost_sound = 'sound/effects/ghost2.ogg', + header = "CTF [ctf_enabled? "Enabled" : "Disabled"]" + ) #undef CTF_LOADING_UNLOADED #undef CTF_LOADING_LOADING diff --git a/code/modules/cards/deck/tarot.dm b/code/modules/cards/deck/tarot.dm index 3dcdc8608c6..cf21fe78935 100644 --- a/code/modules/cards/deck/tarot.dm +++ b/code/modules/cards/deck/tarot.dm @@ -59,7 +59,6 @@ header = "Haunted Tarot Deck", ghost_sound = 'sound/effects/ghost2.ogg', notify_volume = 75, - action = NOTIFY_ORBIT, ) /obj/item/toy/cards/deck/tarot/haunted/proc/on_unwield(obj/item/source, mob/living/carbon/user) diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm index afa2a698190..33990ec1413 100644 --- a/code/modules/cargo/bounties/virus.dm +++ b/code/modules/cargo/bounties/virus.dm @@ -16,14 +16,14 @@ /datum/bounty/virus/can_claim() return ..() && shipped -/datum/bounty/virus/applies_to(obj/shipped) +/datum/bounty/virus/applies_to(obj/export) if(shipped) return FALSE - if(shipped.flags_1 & HOLOGRAM_1) + if(export.flags_1 & HOLOGRAM_1) return FALSE - if(!istype(shipped, /obj/item/reagent_containers || !shipped.reagents || !shipped.reagents.reagent_list)) + if(!istype(export, /obj/item/reagent_containers || !export.reagents || !export.reagents.reagent_list)) return FALSE - var/datum/reagent/blood/blud = locate() in shipped.reagents.reagent_list + var/datum/reagent/blood/blud = locate() in export.reagents.reagent_list if(!blud) return FALSE for(var/datum/disease/advance/virus in blud.get_diseases()) @@ -31,8 +31,8 @@ return TRUE return FALSE -/datum/bounty/virus/ship(obj/shipped) - if(!applies_to(shipped)) +/datum/bounty/virus/ship(obj/export) + if(!applies_to(export)) return FALSE shipped = TRUE return TRUE diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 31cc1319861..51165be191c 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -31,12 +31,12 @@ cost = CARGO_CRATE_VALUE * 40 unit_name = "lava planet artifact" export_types = list( - /obj/item/guardiancreator/miner, - /obj/item/rod_of_asclepius, /obj/item/dragons_blood, - /obj/item/melee/ghost_sword, + /obj/item/guardian_creator/miner, /obj/item/lava_staff, + /obj/item/melee/ghost_sword, /obj/item/prisoncube, + /obj/item/rod_of_asclepius, ) //Megafauna loot, except for ash drakes diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index c9a88a6edfb..3a5c7f975ed 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -134,13 +134,24 @@ /datum/export/material/market/sell_object(obj/sold_item, datum/export_report/report, dry_run, apply_elastic) . = ..() var/amount = get_amount(sold_item) - var/price = get_cost(sold_item) if(!amount) return + + //This formula should impact lower quantity materials greater, and higher quantity materials less. Still, it's a bit rough. Tweaking may be needed. if(!dry_run) + //this material is worthless. no point adding more to the stock + var/market_price = SSstock_market.materials_prices[material_id] + if(!market_price) + return + + //decrease the market price + market_price -= round((market_price) * (amount / (amount + SSstock_market.materials_quantity[material_id]))) + if(market_price < 0) + market_price = 0 + SSstock_market.materials_prices[material_id] = market_price + + //increase the stock SSstock_market.materials_quantity[material_id] += amount - SSstock_market.materials_prices[material_id] -= round((price) * (amount / (amount + SSstock_market.materials_quantity[material_id]))) - //This formula should impact lower quantity materials greater, and higher quantity materials less. Still, it's a bit rough. Tweaking may be needed. // Stock blocks are a special type of export that can be used to sell a quantity of materials at a specific price on the market. diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 22ab4f2239c..1a617e9e2dc 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -105,6 +105,10 @@ ui = new(user, src, "MatMarket", name) ui.open() +/obj/machinery/materials_market/ui_static_data(mob/user) + . = list() + .["CARGO_CRATE_VALUE"] = CARGO_CRATE_VALUE + /obj/machinery/materials_market/ui_data(mob/user) . = list() @@ -247,9 +251,6 @@ return var/cost = SSstock_market.materials_prices[material_bought] * quantity - if(cost > account_payable.account_balance) - say("Not enough money to start purchase!") - return var/list/things_to_order = list() things_to_order += (sheet_to_buy) @@ -285,13 +286,14 @@ current_order.append_order(things_to_order, cost) return TRUE + //Place a new order var/datum/supply_pack/custom/minerals/mineral_pack = new( purchaser = is_ordering_private ? living_user : "Cargo", \ cost = cost, \ contains = things_to_order, \ ) - var/datum/supply_order/materials/new_order = new( + var/datum/supply_order/disposable/materials/new_order = new( pack = mineral_pack, orderer = living_user, orderer_rank = GALATIC_MATERIAL_ORDER, @@ -300,6 +302,12 @@ cost_type = "cr", can_be_cancelled = FALSE ) + //first time order compute the correct cost and compare + if(new_order.get_final_cost() > account_payable.account_balance) + say("Not enough money to start purchase!") + qdel(new_order) + return + say("Thank you for your purchase! It will arrive on the next cargo shuttle!") SSshuttle.shopping_list += new_order return TRUE diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 58c13afbe59..309567d51e9 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -85,6 +85,10 @@ src.manifest_can_fail = manifest_can_fail src.can_be_cancelled = can_be_cancelled +/datum/supply_order/Destroy(force, ...) + QDEL_NULL(applied_coupon) + return ..() + //returns the total cost of this order. Its not the total price paid by cargo but the total value of this order /datum/supply_order/proc/get_final_cost() var/cost = pack.get_cost() @@ -201,10 +205,17 @@ pack.contains[i] = new_contents[i] pack.cost += cost_increase -//To append cargo crate value to final order cost -/datum/supply_order/materials +/// Custom type of order who's supply pack can be safely deleted +/datum/supply_order/disposable -/datum/supply_order/materials/get_final_cost() +/datum/supply_order/disposable/Destroy(force, ...) + QDEL_NULL(pack) + return ..() + +/// Custom material order to append cargo crate value to the final order cost +/datum/supply_order/disposable/materials + +/datum/supply_order/disposable/materials/get_final_cost() return (..() + CARGO_CRATE_VALUE) #undef MANIFEST_ERROR_CHANCE diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index fa1ace3461f..38552e4cb9a 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -152,7 +152,7 @@ "cost" = pack.get_cost(), "orderer" = order.orderer, "reason" = order.reason, - "id" = order.id + "id" = order.id, )) data["amount_by_name"] = amount_by_name @@ -177,7 +177,7 @@ "id" = pack, "desc" = P.desc || P.name, // If there is a description, use it. Otherwise use the pack's name. "goody" = P.goody, - "access" = P.access + "access" = P.access, )) return data diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm index aaeb55f2533..2adec36584a 100644 --- a/code/modules/cargo/packs/_packs.dm +++ b/code/modules/cargo/packs/_packs.dm @@ -122,3 +122,30 @@ name = "[purchaser]'s Materials Order" src.cost = cost src.contains = contains + +/datum/supply_pack/custom/minerals/fill(obj/structure/closet/crate/C) + for(var/obj/item/stack/sheet/possible_stack as anything in contains) + var/material_type = initial(possible_stack.material_type) + //in case we ordered more than what's in the market at the time due to market fluctuations + //we find the min of what was ordered & what's actually available in the market at this point of time + var/market_quantity = SSstock_market.materials_quantity[material_type] + var/available_quantity = min(contains[possible_stack], market_quantity) + if(!available_quantity) + continue + + //spawn the ordered stack inside the crate + var/sheets_to_spawn = available_quantity + while(sheets_to_spawn) + var/spawn_quantity = min(sheets_to_spawn, MAX_STACK_SIZE) + var/obj/item/stack/sheet/ordered_stack = new possible_stack(C, spawn_quantity) + if(admin_spawned) + ordered_stack.flags_1 |= ADMIN_SPAWNED_1 + sheets_to_spawn -= spawn_quantity + + //Prices go up as material quantity becomes scarce + var/fraction = available_quantity + if(market_quantity != available_quantity) //to avoid division by zero error + fraction /= (market_quantity - available_quantity) + SSstock_market.materials_prices[material_type] += round(SSstock_market.materials_prices[material_type] * fraction) + //We decrease the quantity only after adjusting our prices for accurate values + SSstock_market.materials_quantity[material_type] -= available_quantity diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm index fca1a201ac1..9969ea7d817 100644 --- a/code/modules/cargo/packs/emergency.dm +++ b/code/modules/cargo/packs/emergency.dm @@ -62,7 +62,7 @@ access = ACCESS_ATMOSPHERICS contains = list(/obj/item/watertank/atmos) crate_name = "firefighting backpack crate" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/emergency/internals name = "Internals Crate" diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm index f5d865de95c..ae03ffb0190 100644 --- a/code/modules/cargo/packs/engineering.dm +++ b/code/modules/cargo/packs/engineering.dm @@ -31,6 +31,7 @@ /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, ) crate_name= "\improper APLU MK-I kit" + crate_type = /obj/structure/closet/crate/science/robo /datum/supply_pack/engineering/conveyor name = "Conveyor Assembly Crate" @@ -125,6 +126,7 @@ access_view = ACCESS_ATMOSPHERICS contains = list(/obj/machinery/portable_atmospherics/pump = 2) crate_name = "portable air pump crate" + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/portascrubber name = "Portable Scrubber Crate" @@ -133,6 +135,7 @@ access_view = ACCESS_ATMOSPHERICS contains = list(/obj/machinery/portable_atmospherics/scrubber = 2) crate_name = "portable scrubber crate" + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/hugescrubber name = "Huge Portable Scrubber Crate" @@ -149,7 +152,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/machinery/space_heater) crate_name = "space heater crate" - crate_type = /obj/structure/closet/crate/large + crate_type = /obj/structure/closet/crate/secure/engineering/atmos /datum/supply_pack/engineering/bsa name = "Bluespace Artillery Parts" @@ -266,7 +269,7 @@ access = ACCESS_CE contains = list(/obj/machinery/power/supermatter_crystal/shard) crate_name = "supermatter shard crate" - crate_type = /obj/structure/closet/crate/secure/engineering + crate_type = /obj/structure/closet/crate/secure/radiation dangerous = TRUE /datum/supply_pack/engine/tesla_coils @@ -291,7 +294,7 @@ /obj/item/hfr_box/core, ) crate_name = "HFR crate" - crate_type = /obj/structure/closet/crate/secure/engineering + crate_type = /obj/structure/closet/crate/secure/engineering/atmos dangerous = TRUE /datum/supply_pack/engineering/rad_protection_modules diff --git a/code/modules/cargo/packs/general.dm b/code/modules/cargo/packs/general.dm index cd6df472d4b..1b4937f5ab4 100644 --- a/code/modules/cargo/packs/general.dm +++ b/code/modules/cargo/packs/general.dm @@ -72,7 +72,7 @@ access = ACCESS_COMMAND cost = CARGO_CRATE_VALUE * 4 contains = list(/obj/item/encryptionkey/headset_com = 3) - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/centcom crate_name = "command encryption key crate" /datum/supply_pack/misc/exploration_drone diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 11c9be08147..82db0cee6bf 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -317,4 +317,4 @@ /obj/item/stock_parts/card_reader = 1 ) crate_name = "materials market crate" - crate_type = /obj/structure/closet/crate + crate_type = /obj/structure/closet/crate/cargo diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 3cfb824b4e6..90315f5c772 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -1,7 +1,7 @@ /datum/supply_pack/medical group = "Medical" access_view = ACCESS_MEDICAL - crate_type = /obj/structure/closet/crate/medical + crate_type = /obj/structure/closet/crate/medical/department /datum/supply_pack/medical/bloodpacks name = "Blood Pack Variety Crate" @@ -29,6 +29,7 @@ /obj/item/reagent_containers/hypospray/medipen/ekit = 3, /obj/item/reagent_containers/hypospray/medipen/blood_loss = 3) crate_name = "medipen crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/coroner_crate name = "Autopsy Kit" @@ -70,6 +71,7 @@ cost = CARGO_CRATE_VALUE * 5 contains = list(/obj/item/defibrillator/loaded = 2) crate_name = "defibrillator crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/iv_drip name = "IV Drip Crate" @@ -77,6 +79,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/machinery/iv_drip) crate_name = "iv drip crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/supplies name = "Medical Supplies Crate" @@ -108,6 +111,7 @@ /obj/item/vending_refill/drugs, ) crate_name = "medical supplies crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/supplies/fill(obj/structure/closet/crate/C) for(var/i in 1 to 10) @@ -120,6 +124,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/storage/pill_bottle/sansufentanyl = 2) crate_name = "experimental medicine crate" + crate_type = /obj/structure/closet/crate/medical /datum/supply_pack/medical/surgery name = "Surgical Supplies Crate" @@ -143,6 +148,7 @@ cost = CARGO_CRATE_VALUE * 6 access = ACCESS_MEDICAL contains = list(/obj/machinery/iv_drip/saline) + crate_type = /obj/structure/closet/crate/large /datum/supply_pack/medical/virus name = "Virus Crate" diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index eb26d5ec907..e5a1327b453 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -151,7 +151,7 @@ access = ACCESS_HYDROPONICS contains = list(/obj/item/watertank) crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/hydroponics /datum/supply_pack/organic/pizza name = "Pizza Crate" diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm index 19a7710ffed..f0de463c449 100644 --- a/code/modules/cargo/packs/science.dm +++ b/code/modules/cargo/packs/science.dm @@ -113,7 +113,7 @@ /obj/item/clothing/head/utility/hardhat/red = 2, /obj/item/storage/medkit = 2) crate_name = "robotics assembly crate" - crate_type = /obj/structure/closet/crate/secure/science + crate_type = /obj/structure/closet/crate/secure/science/robo /datum/supply_pack/science/rped name = "RPED crate" @@ -176,4 +176,4 @@ access_view = ACCESS_ROBOTICS contains = list(/obj/item/mod/core/standard = 3) crate_name = "\improper MOD core crate" - crate_type = /obj/structure/closet/crate/secure/science + crate_type = /obj/structure/closet/crate/secure/science/robo diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm index 45660dcc73e..3434b582b7a 100644 --- a/code/modules/cargo/packs/service.dm +++ b/code/modules/cargo/packs/service.dm @@ -160,7 +160,7 @@ access_view = ACCESS_MINING_STATION contains = list(/obj/item/storage/backpack/duffelbag/mining_conscript) crate_name = "shaft miner starter kit" - crate_type = /obj/structure/closet/crate/secure + crate_type = /obj/structure/closet/crate/secure/cargo/mining /datum/supply_pack/service/survivalknives name = "Survival Knives Crate" @@ -169,6 +169,7 @@ cost = CARGO_CRATE_VALUE * 3 contains = list(/obj/item/knife/combat/survival = 3) crate_name = "survival knife crate" + crate_type = /obj/structure/closet/crate/cargo/mining /datum/supply_pack/service/wedding name = "Wedding Crate" @@ -189,7 +190,7 @@ /// Box of 7 grey IDs. /datum/supply_pack/service/greyidbox - name = "Grey ID Card Multipack Cate" + name = "Grey ID Card Multipack Crate" desc = "A convenient crate containing a box of seven cheap ID cards in a handy wallet-sized form factor. \ Cards come in every colour you can imagne, as long as it's grey." cost = CARGO_CRATE_VALUE * 3 @@ -224,6 +225,7 @@ /obj/item/storage/box/donkpockets/donkpockethonk, ) crate_name = "donk pocket crate" + crate_type = /obj/structure/closet/crate/freezer/food /datum/supply_pack/service/randomized/donkpockets/fill(obj/structure/closet/crate/C) for(var/i in 1 to 3) @@ -240,6 +242,7 @@ /obj/item/food/ready_donk/donkhiladas, ) crate_name = "\improper Ready-Donk crate" + crate_type = /obj/structure/closet/crate/freezer/food /datum/supply_pack/service/randomized/ready_donk/fill(obj/structure/closet/crate/C) for(var/i in 1 to 3) diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index ed75e634967..503effd258f 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -319,7 +319,7 @@ if (openingSound) playsound(get_turf(holder), openingSound, soundVolume, FALSE, FALSE) //Special admin sound to play for (var/turf_type in turfs_in_cargo) - turf_underneath.PlaceOnTop(turf_type) + turf_underneath.place_on_top(turf_type) for (var/cargo in holder.contents) var/atom/movable/movable_cargo = cargo movable_cargo.forceMove(turf_underneath) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 239ab09d1a7..158ed2fdbfa 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -409,13 +409,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (!preference.is_accessible(src)) continue - LAZYINITLIST(preferences[preference.category]) - var/value = read_preference(preference.type) var/data = preference.compile_ui_data(user, value) + LAZYINITLIST(preferences[preference.category]) preferences[preference.category][preference.savefile_key] = data + for (var/datum/preference_middleware/preference_middleware as anything in middleware) var/list/append_character_preferences = preference_middleware.get_character_preferences(user) if (isnull(append_character_preferences)) diff --git a/code/modules/client/preferences/README.md b/code/modules/client/preferences/README.md index 00899536398..fabfb779c90 100644 --- a/code/modules/client/preferences/README.md +++ b/code/modules/client/preferences/README.md @@ -28,7 +28,7 @@ export const savefile_key_here: Feature = { // Necessary for game preferences, unused for others category: "CATEGORY", - // Optional, only shown in game preferences + // Optional, shown as a tooltip description: "This preference will blow your mind!", } ``` diff --git a/code/modules/client/preferences/food_allergy.dm b/code/modules/client/preferences/food_allergy.dm index 461c3b31e2a..1096ef3c183 100644 --- a/code/modules/client/preferences/food_allergy.dm +++ b/code/modules/client/preferences/food_allergy.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/food_allergy - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "food_allergy" savefile_identifier = PREFERENCE_CHARACTER can_randomize = FALSE diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm index e34cdd0e090..03c975abce7 100644 --- a/code/modules/client/preferences/glasses.dm +++ b/code/modules/client/preferences/glasses.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/glasses - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "glasses" savefile_identifier = PREFERENCE_CHARACTER should_generate_icons = TRUE diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm index 2de14be09cf..f602d6b3a66 100644 --- a/code/modules/client/preferences/language.dm +++ b/code/modules/client/preferences/language.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/language - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "language" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm index 888da90d5b7..52593aad912 100644 --- a/code/modules/client/preferences/middleware/antags.dm +++ b/code/modules/client/preferences/middleware/antags.dm @@ -116,7 +116,7 @@ /datum/asset/spritesheet/antagonists/create_spritesheets() // Antagonists that don't have a dynamic ruleset, but do have a preference var/static/list/non_ruleset_antagonists = list( - ROLE_CYBER_POLICE = /datum/antagonist/cyber_police, + ROLE_GLITCH = /datum/antagonist/bitrunning_glitch, ROLE_FUGITIVE = /datum/antagonist/fugitive, ROLE_LONE_OPERATIVE = /datum/antagonist/nukeop/lone, ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //SKYRAT EDIT diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 169650b61cf..9264af7dbd0 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -33,11 +33,16 @@ for (var/quirk_name in quirks) var/datum/quirk/quirk = quirks[quirk_name] + var/datum/quirk_constant_data/constant_data = GLOB.all_quirk_constant_data[quirk] + var/list/datum/preference/customization_options = constant_data?.get_customization_data() + quirk_info[sanitize_css_class_name(quirk_name)] = list( "description" = initial(quirk.desc), "icon" = initial(quirk.icon), "name" = quirk_name, "value" = initial(quirk.value), + "customizable" = constant_data?.is_customizable(), + "customization_options" = customization_options, "veteran_only" = initial(quirk.veteran_only), // SKYRAT EDIT - Veteran quirks ) diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 2199d6541d9..823de1b4173 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -155,3 +155,25 @@ /datum/preference/name/bible/create_default_value() return DEFAULT_BIBLE + +/// The first name given to nuclear operative antagonists. The last name will be chosen by the team leader. +/datum/preference/name/operative_alias + savefile_key = "operative_alias" + allow_numbers = TRUE //You can get a little wacky with your alias nobody will judge you + explanation = "Operative Alias" + group = "antagonists" + +/datum/preference/name/operative_alias/create_default_value() + return pick(GLOB.operative_aliases) + +/datum/preference/name/operative_alias/is_accessible(datum/preferences/preferences) + . = ..() + if(!.) + return FALSE + + // If one of the roles is ticked in the antag prefs menu, this option will show. + var/static/list/ops_roles = list(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE, ROLE_OPERATIVE_MIDROUND, ROLE_CLOWN_OPERATIVE) + if(length(ops_roles & preferences.be_special)) + return TRUE + + return FALSE diff --git a/code/modules/client/preferences/paint_color.dm b/code/modules/client/preferences/paint_color.dm index a44208b8325..749b83cf000 100644 --- a/code/modules/client/preferences/paint_color.dm +++ b/code/modules/client/preferences/paint_color.dm @@ -2,7 +2,7 @@ /datum/preference/color/paint_color savefile_key = "paint_color" savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED /datum/preference/color/paint_color/is_accessible(datum/preferences/preferences) if (!..(preferences)) diff --git a/code/modules/client/preferences/phobia.dm b/code/modules/client/preferences/phobia.dm index 2a5caa5ba0f..92004418156 100644 --- a/code/modules/client/preferences/phobia.dm +++ b/code/modules/client/preferences/phobia.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/phobia - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "phobia" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/client/preferences/prosthetic.dm b/code/modules/client/preferences/prosthetic.dm index f66f1278c48..a4d5b5a577b 100644 --- a/code/modules/client/preferences/prosthetic.dm +++ b/code/modules/client/preferences/prosthetic.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/prosthetic - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "prosthetic" savefile_identifier = PREFERENCE_CHARACTER diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index 9e1339b4068..492008d5348 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -76,6 +76,7 @@ do { \ /obj/item/clothing/glasses/chameleon name = "Optical Meson Scanner" + flags_cover = GLASSESCOVERSEYES desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." icon_state = "meson" inhand_icon_state = "meson" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 4c7fce6633c..32e2a567f63 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -5,7 +5,6 @@ lefthand_file = 'icons/mob/inhands/clothing/glasses_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/glasses_righthand.dmi' w_class = WEIGHT_CLASS_SMALL - flags_cover = GLASSESCOVERSEYES slot_flags = ITEM_SLOT_EYES strip_delay = 20 equip_delay_other = 25 @@ -114,6 +113,7 @@ icon_state = "meson" inhand_icon_state = "meson" clothing_traits = list(TRAIT_MADNESS_IMMUNE) + flags_cover = GLASSESCOVERSEYES vision_flags = SEE_TURFS // Mesons get to be lightly green color_cutoffs = list(5, 15, 5) @@ -153,6 +153,7 @@ icon_state = "purple" inhand_icon_state = "glasses" glass_colour_type = /datum/client_colour/glass_colour/purple + flags_cover = GLASSESCOVERSEYES resistance_flags = ACID_PROOF armor_type = /datum/armor/glasses_science clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) @@ -183,6 +184,7 @@ desc = "You can totally see in the dark now!" icon_state = "night" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES flash_protect = FLASH_PROTECTION_SENSITIVE // Dark green color_cutoffs = list(10, 30, 10) @@ -244,6 +246,7 @@ desc = "Very confusing glasses." icon_state = "material" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES vision_flags = SEE_OBJS glass_colour_type = /datum/client_colour/glass_colour/lightblue @@ -273,6 +276,7 @@ desc = "Made by Nerd. Co." icon_state = "glasses_regular" inhand_icon_state = "glasses" + flags_cover = GLASSESCOVERSEYES clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED) /obj/item/clothing/glasses/regular/Initialize(mapload) @@ -347,6 +351,7 @@ desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." icon_state = "sun" inhand_icon_state = "sunglasses" + flags_cover = GLASSESCOVERSEYES flash_protect = FLASH_PROTECTION_FLASH tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray @@ -449,10 +454,10 @@ inhand_icon_state = "welding-g" actions_types = list(/datum/action/item_action/toggle) flash_protect = FLASH_PROTECTION_WELDER + flags_cover = GLASSESCOVERSEYES custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5) tint = 2 visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/gray alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // SKYRAT EDIT - Just so it works until I make the change upstream @@ -469,6 +474,7 @@ icon_state = "blindfold" inhand_icon_state = "blindfold" flash_protect = FLASH_PROTECTION_WELDER + flags_cover = GLASSESCOVERSEYES tint = INFINITY // You WILL Be blind, no matter what dog_fashion = /datum/dog_fashion/head @@ -477,6 +483,7 @@ desc = "A see-through blindfold perfect for cheating at games like pin the stun baton on the clown." icon_state = "trickblindfold" inhand_icon_state = "blindfold" + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/blindfold/white name = "blind personnel blindfold" @@ -522,6 +529,7 @@ // Going for an orange color here color_cutoffs = list(25, 8, 5) flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/thermal/emp_act(severity) @@ -588,18 +596,21 @@ desc = "A pair of goggles meant for low temperatures." icon_state = "cold" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/heat name = "heat goggles" desc = "A pair of goggles meant for high temperatures." icon_state = "heat" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/orange name = "orange glasses" desc = "A sweet pair of orange shades." icon_state = "orangeglasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/lightorange /obj/item/clothing/glasses/red @@ -607,6 +618,7 @@ desc = "Hey, you're looking good, senpai!" icon_state = "redglasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/geist_gazers @@ -614,12 +626,14 @@ icon_state = "geist_gazers" worn_icon_state = "geist_gazers" glass_colour_type = /datum/client_colour/glass_colour/green + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/psych name = "psych glasses" icon_state = "psych_glasses" worn_icon_state = "psych_glasses" glass_colour_type = /datum/client_colour/glass_colour/red + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/debug name = "debug glasses" @@ -680,6 +694,7 @@ desc = "A pair of glasses with uniquely colored lenses. The frame is inscribed with 'Best Salesman 1997'." icon_state = "salesman" inhand_icon_state = "salesman" + flags_cover = GLASSESCOVERSEYES ///Tells us who the current wearer([BIGSHOT]) is. var/mob/living/carbon/human/bigshot @@ -716,6 +731,7 @@ glass_colour_type = /datum/client_colour/glass_colour/nightmare forced_glass_color = TRUE lighting_cutoff = LIGHTING_CUTOFF_FULLBRIGHT + flags_cover = GLASSESCOVERSEYES /// Hallucination datum currently being used for seeing mares var/datum/hallucination/stored_hallucination @@ -748,9 +764,11 @@ desc = "There's no such thing as good news! Just bad news and... weird news.." icon_state = "osi_glasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES /obj/item/clothing/glasses/phantom name = "Phantom Thief Mask" desc = "Lookin' cool." icon_state = "phantom_glasses" inhand_icon_state = null + flags_cover = GLASSESCOVERSEYES diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 34359eaa0b3..68066787992 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -69,6 +69,7 @@ icon_state = "healthhudnight" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Blue green, dark color_cutoffs = list(5, 15, 30) glass_colour_type = /datum/client_colour/glass_colour/green @@ -89,6 +90,7 @@ desc = "Sunglasses with a medical HUD." icon_state = "sunhudmed" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/blue @@ -115,6 +117,7 @@ icon_state = "diagnostichudnight" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Pale yellow color_cutoffs = list(30, 20, 5) glass_colour_type = /datum/client_colour/glass_colour/green @@ -125,6 +128,7 @@ icon_state = "sunhuddiag" inhand_icon_state = "glasses" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 /obj/item/clothing/glasses/hud/diagnostic/sunglasses/Initialize(mapload) @@ -167,6 +171,7 @@ desc = "Sunglasses with a security HUD." icon_state = "sunhudsec" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/darkred @@ -184,6 +189,7 @@ desc = "An advanced heads-up display that provides ID data and vision in complete darkness." icon_state = "securityhudnight" flash_protect = FLASH_PROTECTION_SENSITIVE + flags_cover = GLASSESCOVERSEYES // Red with a tint of green color_cutoffs = list(35, 5, 5) glass_colour_type = /datum/client_colour/glass_colour/green @@ -212,6 +218,7 @@ /obj/item/clothing/glasses/hud/toggle name = "Toggle HUD" desc = "A hud with multiple functions." + flags_cover = GLASSESCOVERSEYES actions_types = list(/datum/action/item_action/switch_hud) /obj/item/clothing/glasses/hud/toggle/attack_self(mob/user) @@ -277,6 +284,7 @@ desc = "For thinking you look cool while brutalizing protestors and minorities." icon_state = "bigsunglasses" flash_protect = FLASH_PROTECTION_FLASH + flags_cover = GLASSESCOVERSEYES tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 9f0be80e7a8..cb0170691ae 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -215,35 +215,34 @@ if(BODY_ZONE_CHEST)//Listening to the chest user.visible_message(span_notice("[user] places [src] against [carbon_patient]'s [body_part] and listens attentively."), ignored_mobs = user) if(!user.can_hear()) - to_chat(user, span_notice("You place [src] against [carbon_patient]'s [body_part]. Fat load of good it does you though, since you can't hear")) + to_chat(user, span_notice("You place [src] against [carbon_patient]'s [body_part]. Fat load of good it does you though, since you can't hear.")) return else render_list += span_info("You place [src] against [carbon_patient]'s [body_part]:\n") //assess breathing - if(!lungs)//sanity check, enusure patient actually has lungs - render_list += "[M] doesn't have any lungs!\n" + if(isnull(lungs) \ + || carbon_patient.stat == DEAD \ + || (HAS_TRAIT(carbon_patient, TRAIT_FAKEDEATH)) \ + || (HAS_TRAIT(carbon_patient, TRAIT_NOBREATH))\ + || carbon_patient.failed_last_breath \ + || carbon_patient.losebreath)//If pt is dead or otherwise not breathing + render_list += "[M.p_Theyre()] not breathing!\n" + else if(lungs.damage > 10)//if breathing, check for lung damage + render_list += "You hear fluid in [M.p_their()] lungs!\n" + else if(oxy_loss > 10)//if they have suffocation damage + render_list += "[M.p_Theyre()] breathing heavily!\n" else - if(carbon_patient.stat == DEAD || (HAS_TRAIT(carbon_patient, TRAIT_FAKEDEATH)) || (HAS_TRAIT(carbon_patient, TRAIT_NOBREATH))|| carbon_patient.failed_last_breath || carbon_patient.losebreath)//If pt is dead or otherwise not breathing - render_list += "[M.p_Theyre()] not breathing!\n" - else if(lungs.damage > 10)//if breathing, check for lung damage - render_list += "You hear fluid in [M.p_their()] lungs!\n" - else if(oxy_loss > 10)//if they have suffocation damage - render_list += "[M.p_Theyre()] breathing heavily!\n" - else - render_list += "[M.p_Theyre()] breathing normally.\n"//they're okay :D + render_list += "[M.p_Theyre()] breathing normally.\n"//they're okay :D //assess heart if(body_part == BODY_ZONE_CHEST)//if we're listening to the chest - if(!heart)//sanity check, ensure the patient actually has a heart - render_list += "[M] doesn't have a heart!\n" + if(isnull(heart) || !heart.is_beating() || carbon_patient.stat == DEAD) + render_list += "You don't hear a heartbeat!\n"//they're dead or their heart isn't beating + else if(heart.damage > 10 || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY) + render_list += "You hear a weak heartbeat.\n"//their heart is damaged, or they have critical blood else - if(!heart.beating || carbon_patient.stat == DEAD) - render_list += "You don't hear a heartbeat!\n"//they're dead or their heart isn't beating - else if(heart.damage > 10 || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY) - render_list += "You hear a weak heartbeat.\n"//their heart is damaged, or they have critical blood - else - render_list += "You hear a healthy heartbeat.\n"//they're okay :D + render_list += "You hear a healthy heartbeat.\n"//they're okay :D if(BODY_ZONE_PRECISE_GROIN)//If we're targeting the groin render_list += span_info("You carefully press down on [carbon_patient]'s abdomen:\n") @@ -254,7 +253,7 @@ var/appendix_okay = TRUE var/liver_okay = TRUE if(!liver)//sanity check, ensure the patient actually has a liver - render_list += "[M] doesn't have a liver!\n" + render_list += "You can't feel anything where [M.p_their()] liver would be.\n" liver_okay = FALSE else if(liver.damage > 10) @@ -262,7 +261,7 @@ liver_okay = FALSE if(!appendix)//sanity check, ensure the patient actually has an appendix - render_list += "[M] doesn't have an appendix!\n" + render_list += "You can't feel anything where [M.p_their()] appendix would be.\n" appendix_okay = FALSE else if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) @@ -290,23 +289,20 @@ user.visible_message(span_notice("[user] presses their fingers against [carbon_patient]'s [body_part]."), ignored_mobs = user) //assess pulse (heart & blood level) - if(!heart)//sanity check, ensure the patient actually has a heart - render_list += "[M] doesn't have a heart!\n" + if(isnull(heart) || !heart.is_beating() || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY || carbon_patient.stat == DEAD) + render_list += "You can't find a pulse!\n"//they're dead, their heart isn't beating, or they have critical blood else - if(!heart.beating || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY || carbon_patient.stat == DEAD) - render_list += "You can't find a pulse!\n"//they're dead, their heart isn't beating, or they have critical blood + if(heart.damage > 10) + heart_strength = span_danger("irregular")//their heart is damaged else - if(heart.damage > 10) - heart_strength = span_danger("irregular")//their heart is damaged - else - heart_strength = span_notice("regular")//they're okay :D + heart_strength = span_notice("regular")//they're okay :D - if(carbon_patient.blood_volume <= BLOOD_VOLUME_SAFE && carbon_patient.blood_volume > BLOOD_VOLUME_OKAY) - pulse_pressure = span_danger("thready")//low blood - else - pulse_pressure = span_notice("strong")//they're okay :D + if(carbon_patient.blood_volume <= BLOOD_VOLUME_SAFE && carbon_patient.blood_volume > BLOOD_VOLUME_OKAY) + pulse_pressure = span_danger("thready")//low blood + else + pulse_pressure = span_notice("strong")//they're okay :D - render_list += "[M.p_Their()] pulse is [pulse_pressure] and [heart_strength].\n" + render_list += "[M.p_Their()] pulse is [pulse_pressure] and [heart_strength].\n" //display our packaged information in an examine block for easy reading to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 061fbe3a1de..ddce653aee5 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -194,7 +194,7 @@ glasses = /obj/item/clothing/glasses/sunglasses shoes = /obj/item/clothing/shoes/sneakers/black l_pocket = /obj/item/melee/energy/sword/saber - l_hand = /obj/item/storage/secure/briefcase + l_hand = /obj/item/storage/briefcase/secure /datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) var/obj/item/clothing/under/U = H.w_uniform @@ -204,7 +204,7 @@ return //Could use a type - var/obj/item/storage/secure/briefcase/sec_briefcase = H.get_item_for_held_index(1) + var/obj/item/storage/briefcase/secure/sec_briefcase = H.get_item_for_held_index(1) for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i = 3 to 0 step -1) diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm index 0aa518bc136..a033a561439 100644 --- a/code/modules/clothing/shoes/cowboy.dm +++ b/code/modules/clothing/shoes/cowboy.dm @@ -38,11 +38,7 @@ occupant.forceMove(user.drop_location()) user.visible_message(span_warning("[user] recoils as something slithers out of [src]."), span_userdanger("You feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!")) user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion. - user.apply_damage(5, BRUTE, target_zone) - if(istype(occupant, /mob/living/simple_animal/hostile/retaliate)) - user.reagents.add_reagent(/datum/reagent/toxin, 7) - - + occupant.UnarmedAttack(user, proximity_flag = TRUE) /obj/item/clothing/shoes/cowboy/dropped(mob/living/user) . = ..() diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 84cb98049e1..cc08f7373c9 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -17,14 +17,7 @@ var/blood_overlay_type = "suit" limb_integrity = 0 // disabled for most exo-suits -/obj/item/clothing/suit/Initialize(mapload) - . = ..() - setup_shielding() - -/// SKYRAT EDIT CHANGE BEGIN - taurs and teshis -// /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE) // ORIGINAL -/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) -// SKYRAT EDIT CHANGE END +/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) // SKYRAT EDIT CHANGE - TAURS AND TESHIS - ORIGINAL: /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE) . = ..() if(isinhands) return @@ -58,12 +51,3 @@ if(ismob(loc)) var/mob/M = loc M.update_worn_oversuit() - -/** - * Wrapper proc to apply shielding through AddComponent(). - * Called in /obj/item/clothing/Initialize(). - * Override with an AddComponent(/datum/component/shielded, args) call containing the desired shield statistics. - * See /datum/component/shielded documentation for a description of the arguments - **/ -/obj/item/clothing/suit/proc/setup_shielding() - return diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm new file mode 100644 index 00000000000..72caf05e92b --- /dev/null +++ b/code/modules/emote_panel/emote_panel.dm @@ -0,0 +1,64 @@ +/datum/emote_panel + var/list/blacklisted_emotes = list("me", "help") + +/datum/emote_panel/ui_static_data(mob/user) + var/list/data = list() + + var/list/emotes = list() + var/list/keys = list() + + for(var/key in GLOB.emote_list) + for(var/datum/emote/emote in GLOB.emote_list[key]) + if(emote.key in keys) + continue + if(emote.key in blacklisted_emotes) + continue + if(emote.can_run_emote(user, status_check = FALSE, intentional = FALSE)) + keys += emote.key + emotes += list(list( + "key" = emote.key, + "name" = emote.name, + "hands" = emote.hands_use_check, + "visible" = emote.emote_type & EMOTE_VISIBLE, + "audible" = emote.emote_type & EMOTE_AUDIBLE, + "sound" = !isnull(emote.get_sound(user)), + "use_params" = emote.message_param, + )) + + data["emotes"] = emotes + + return data + +/datum/emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("play_emote") + var/emote_key = params["emote_key"] + if(isnull(emote_key) || !GLOB.emote_list[emote_key]) + return + var/use_params = params["use_params"] + var/datum/emote/emote = GLOB.emote_list[emote_key][1] + var/emote_param + if(emote.message_param && use_params) + emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param) + ui.user.emote(emote_key, message = emote_param, intentional = TRUE) + +/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EmotePanel") + ui.open() + +/datum/emote_panel/ui_state(mob/user) + return GLOB.always_state + +/mob/living/verb/emote_panel() + set name = "Emote Panel" + set category = "IC" + + var/static/datum/emote_panel/emote_panel + if(isnull(emote_panel)) + emote_panel = new + emote_panel.ui_interact(src) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index bd192dbef22..3a6defdd665 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -261,7 +261,10 @@ Runs the event /datum/round_event/proc/announce_to_ghosts(atom/atom_of_interest) if(control.alert_observers) if (atom_of_interest) - notify_ghosts("[control.name] has an object of interest: [atom_of_interest]!", source=atom_of_interest, action=NOTIFY_ORBIT, header="Something's Interesting!") + notify_ghosts( + "[control.name] has an object of interest: [atom_of_interest]!", + source = atom_of_interest, + ) return //Called when the tick is equal to the announce_when variable. diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index e6ad5d8d3bd..f7ff1c2642c 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -23,7 +23,7 @@ to_chat(A, "
[span_warning("[alert]")]
") if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. - priority_announce(alert, null, ANNOUNCER_COMMSBLACKOUT) //SKYRAT EDIT CHANGE + priority_announce(alert, "Anomaly Alert", sound = ANNOUNCER_COMMSBLACKOUT) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce(alert, "Anomaly Alert") /datum/round_event/communications_blackout/start() diff --git a/code/modules/events/earthquake.dm b/code/modules/events/earthquake.dm index 498648986e4..4f20f26b93b 100644 --- a/code/modules/events/earthquake.dm +++ b/code/modules/events/earthquake.dm @@ -93,7 +93,11 @@ priority_announce("Planetary monitoring systems indicate a devastating seismic event in the near future.", "Seismic Report") /datum/round_event/earthquake/start() - notify_ghosts("The earthquake's epicenter has been located: [get_area_name(epicenter)]!", source = epicenter, header = "Rumble Rumble Rumble!") + notify_ghosts( + "The earthquake's epicenter has been located: [get_area_name(epicenter)]!", + source = epicenter, + header = "Rumble Rumble Rumble!", + ) /datum/round_event/earthquake/tick() if(ISMULTIPLE(activeFor, 5)) diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm index a70cf3e31b3..d272ba637ce 100644 --- a/code/modules/events/ghost_role/fugitive_event.dm +++ b/code/modules/events/ghost_role/fugitive_event.dm @@ -134,9 +134,17 @@ var/mob/our_candidate = candidates[1] var/mob/spawned_mob = spawner.create_from_ghost(our_candidate) candidates -= our_candidate - notify_ghosts("[spawner.prompt_name] has awoken: [spawned_mob]!", source = spawned_mob, action = NOTIFY_ORBIT, header="Come look!") + notify_ghosts( + "[spawner.prompt_name] has awoken: [spawned_mob]!", + source = spawned_mob, + header = "Come look!", + ) else - notify_ghosts("[spawner.prompt_name] spawner has been created!", source = spawner, action = NOTIFY_ORBIT, header="Spawn Here!") + notify_ghosts( + "[spawner.prompt_name] spawner has been created!", + source = spawner, + header = "Spawn Here!", + ) priority_announce("Unidentified ship detected near the station.") diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index ebcbb27f278..3c97ca91cdc 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -26,7 +26,7 @@ // whether it's, say, a tesla zapping tcomms, or some selective // modification of the tcomms bus if(prob(80) || fake) - priority_announce(alert) + priority_announce(alert, "Anomaly Alert") /datum/round_event/processor_overload/start() diff --git a/code/modules/events/radiation_leak.dm b/code/modules/events/radiation_leak.dm index 0fbe2992766..b97cc19d9cc 100644 --- a/code/modules/events/radiation_leak.dm +++ b/code/modules/events/radiation_leak.dm @@ -60,7 +60,7 @@ priority_announce("A radiation leak has been detected in [location_descriptor || "an unknown area"]. \ All crew are to evacuate the affected area. Our [pick("mechanics", "engineers", "scientists", "interns", "sensors", "readings")] \ - report that a machine within is causing it - repair it quickly to stop the leak.") + report that a machine within is causing it - repair it quickly to stop the leak.", "[command_name()] Engineering Division") /datum/round_event/radiation_leak/start() var/obj/machinery/the_source_of_our_problems = picked_machine_ref?.resolve() diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm index 6aad17f00fa..7f24648a9e5 100644 --- a/code/modules/events/scrubber_overflow.dm +++ b/code/modules/events/scrubber_overflow.dm @@ -67,7 +67,7 @@ deadchat_broadcast(" has just been[random ? " randomly" : ""] triggered[cause ? " by [cause]" : ""]!", "Scrubber Overflow: [initial(forced_reagent_type.name)]", message_type=DEADCHAT_ANNOUNCEMENT) /datum/round_event/scrubber_overflow/announce(fake) - priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") + priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "[command_name()] Engineering Division") /datum/round_event/scrubber_overflow/setup() for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_scrubber)) diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm index 96db32c044d..c7248a36266 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm @@ -43,7 +43,7 @@ SSshuttle.shuttle_loan = src /datum/round_event/shuttle_loan/proc/loan_shuttle() - priority_announce(situation.thanks_msg, "Cargo shuttle commandeered by CentCom.") + priority_announce(situation.thanks_msg, "Cargo shuttle commandeered by [command_name()].") dispatched = TRUE var/datum/bank_account/dep_account = SSeconomy.get_dep_account(ACCOUNT_CAR) diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm index 26e0f2feefa..18ee4afb7a1 100644 --- a/code/modules/events/tram_malfunction.dm +++ b/code/modules/events/tram_malfunction.dm @@ -35,7 +35,7 @@ end_when = rand(TRAM_MALFUNCTION_TIME_LOWER, TRAM_MALFUNCTION_TIME_UPPER) /datum/round_event/tram_malfunction/announce() - priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please take extra care while engineers diagnose and resolve the issue.", "CentCom Engineering Division") + priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please take extra care while engineers diagnose and resolve the issue.", "[command_name()] Engineering Division") /datum/round_event/tram_malfunction/start() for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) @@ -47,7 +47,7 @@ for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) if(malfunctioning_controller.specific_transport_id == specific_transport_id && malfunctioning_controller.controller_status & COMM_ERROR) malfunctioning_controller.end_malf_event() - priority_announce("The software on the tram has been reset, normal operations are now resuming. Sorry for any inconvienence this may have caused.", "CentCom Engineering Division") + priority_announce("The software on the tram has been reset, normal operations are now resuming. Sorry for any inconvienence this may have caused.", "[command_name()] Engineering Division") return #undef TRAM_MALFUNCTION_TIME_UPPER diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index b04f2a4f595..7dcaf0861c3 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -54,6 +54,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to icon_state = "anom" mech_sized = TRUE light_on = FALSE + wibbles = FALSE /obj/effect/portal/wormhole/Initialize(mapload, _creator, _lifespan = 0, obj/effect/portal/_linked, automatic_link = FALSE, turf/hard_target_override) . = ..() diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index e0b7ddb1a11..85a387fd41d 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -441,13 +441,13 @@ //Fish breeding stops if fish count exceeds this. #define AQUARIUM_MAX_BREEDING_POPULATION 20 -/obj/item/fish/proc/ready_to_reproduce(being_targetted = FALSE) +/obj/item/fish/proc/ready_to_reproduce(being_targeted = FALSE) var/obj/structure/aquarium/aquarium = loc if(!istype(aquarium)) return FALSE - if(being_targetted && HAS_TRAIT(src, TRAIT_FISH_NO_MATING)) + if(being_targeted && HAS_TRAIT(src, TRAIT_FISH_NO_MATING)) return FALSE - if(!being_targetted && length(aquarium.get_fishes()) >= AQUARIUM_MAX_BREEDING_POPULATION) + if(!being_targeted && length(aquarium.get_fishes()) >= AQUARIUM_MAX_BREEDING_POPULATION) return FALSE return aquarium.allow_breeding && health >= initial(health) * 0.8 && stable_population > 1 && world.time >= breeding_wait diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 657b2f30968..7ef43238957 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( return /// Can we fish in this spot at all. Returns DENIAL_REASON or null if we're good to go -/datum/fish_source/proc/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/proc/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) return rod.reason_we_cant_fish(src) /** diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index f577f85f87d..7679279370b 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -216,7 +216,7 @@ fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 -/datum/fish_source/lavaland/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/lavaland/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() var/turf/approx = get_turf(fisherman) //todo pass the parent if(!SSmapping.level_trait(approx.z, ZTRAIT_MINING)) @@ -277,7 +277,7 @@ ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 5 -/datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() if(!istype(get_area(fisherman), /area/station/holodeck)) return "You need to be inside the Holodeck to catch holographic fish." @@ -310,3 +310,63 @@ /obj/item/fish/mastodon = 1, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 15 + +#define RANDOM_SEED "Random seed" + +/datum/fish_source/hydro_tray + catalog_description = "Hydroponics trays" + fish_table = list( + FISHING_DUD = 25, + /obj/item/food/grown/grass = 25, + RANDOM_SEED = 16, + /obj/item/seeds/grass = 6, + /obj/item/seeds/random = 1, + /mob/living/basic/frog = 1, + /mob/living/basic/axolotl = 1, + ) + fish_counts = list( + /obj/item/food/grown/grass = 10, + /obj/item/seeds/grass = 4, + RANDOM_SEED = 4, + /obj/item/seeds/random = 1, + /mob/living/basic/frog = 1, + /mob/living/basic/axolotl = 1, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 10 + +/datum/fish_source/hydro_tray/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) + if(!istype(parent, /obj/machinery/hydroponics/constructable)) + return ..() + + var/obj/machinery/hydroponics/constructable/basin = parent + if(basin.waterlevel <= 0) + return "There's no water in [parent] to fish in." + if(basin.myseed) + return "There's a plant growing in [parent]." + + return ..() + +/datum/fish_source/hydro_tray/spawn_reward(reward_path, mob/fisherman, turf/fishing_spot) + if(reward_path != RANDOM_SEED) + var/mob/living/created_reward = ..() + if(istype(created_reward)) + created_reward.name = "small [created_reward.name]" + created_reward.update_transform(0.75) + return created_reward + + var/static/list/seeds_to_draw_from + if(isnull(seeds_to_draw_from)) + seeds_to_draw_from = subtypesof(/obj/item/seeds) + // These two are already covered innately + seeds_to_draw_from -= /obj/item/seeds/random + seeds_to_draw_from -= /obj/item/seeds/grass + // -1 yield are unharvestable plants so we don't care + // 20 rarirty is where most of the wacky plants are so let's ignore them + for(var/obj/item/seeds/seed_path as anything in seeds_to_draw_from) + if(initial(seed_path.yield) == -1 || initial(seed_path.rarity) >= PLANT_MODERATELY_RARE) + seeds_to_draw_from -= seed_path + + var/picked_path = pick(seeds_to_draw_from) + return new picked_path(get_turf(fishing_spot)) + +#undef RANDOM_SEED diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index 607c54e6ff1..998ac0300b4 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -10,6 +10,7 @@ use_power = NO_POWER_USE layer = BELOW_OBJ_LAYER max_integrity = 300 + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/list/product_types = list() var/selected_flavour = ICE_CREAM_VANILLA var/obj/item/reagent_containers/beaker @@ -110,7 +111,7 @@ return for(var/datum/reagent/R in beaker.reagents.reagent_list) if(R.type in icecream_vat_reagents) - beaker.reagents.trans_id_to(src, R.type, R.volume) + beaker.reagents.trans_to(src, R.volume, target_id = R.type) say("Internalizing reagent.") playsound(src, 'sound/items/drink.ogg', 25, TRUE) return diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index c77f2e9e23e..a95357ef2f0 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -516,7 +516,6 @@ if(isAI(user) && (machine_stat & NOPOWER)) return - user.set_machine(src) switch(choice) if("eject") eject() @@ -594,7 +593,12 @@ non_food_ingedients-- if(istype(potential_fooditem, /obj/item/modular_computer/pda) && prob(75)) pda_failure = TRUE - notify_ghosts("[cooker] has overheated their PDA!", source = src, action = NOTIFY_JUMP, flashwindow = FALSE, header = "Hunger Games: Catching Fire") + notify_ghosts( + "[cooker] has overheated their PDA!", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Hunger Games: Catching Fire", + ) // If we're cooking non-food items we can fail randomly if(length(non_food_ingedients) && prob(min(dirty * 5, 100))) diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 18327bd90ef..10fd47cbcaf 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -237,6 +237,7 @@ desc = "Time to bake cookies!" icon_state = "oven_tray" max_items = 6 + biggest_w_class = WEIGHT_CLASS_BULKY #undef OVEN_SMOKE_STATE_NONE #undef OVEN_SMOKE_STATE_GOOD diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index dfe3987dfe2..e00cfeaaa7e 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -17,8 +17,8 @@ var/base_build_path = /obj/machinery/smartfridge /// Maximum number of items that can be loaded into the machine var/max_n_of_items = 1500 - /// If the AI is allowed to retrieve items within the machine - var/allow_ai_retrieve = FALSE + /// The overlay for this fridge when it is filled with stuff + var/contents_icon_state = "plant" /// List of items that the machine starts with upon spawn var/list/initial_contents /// If the machine shows an approximate number of its contents on its sprite @@ -33,7 +33,7 @@ create_reagents(100, NO_REACT) air_update_turf(TRUE, TRUE) register_context() - if(mapload && !istype(src, /obj/machinery/smartfridge/drying_rack)) + if(mapload) welded_down = TRUE if(islist(initial_contents)) @@ -49,9 +49,82 @@ . = ..() move_update_air(old_loc) +/obj/machinery/smartfridge/welder_act(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS + + if(welded_down) + if(!tool.tool_start_check(user, amount=2)) + return + + user.visible_message( + span_notice("[user.name] starts to cut the [name] free from the floor."), + span_notice("You start to cut [src] free from the floor..."), + span_hear("You hear welding."), + ) + + if(!tool.use_tool(src, user, delay=100, volume=100)) + return + + welded_down = FALSE + to_chat(user, span_notice("You cut [src] free from the floor.")) + return + + if(!anchored) + balloon_alert(user, "wrench it first!") + return + + if(!tool.tool_start_check(user, amount=2)) + return + + user.visible_message( + span_notice("[user.name] starts to weld the [name] to the floor."), + span_notice("You start to weld [src] to the floor..."), + span_hear("You hear welding."), + ) + + if(!tool.use_tool(src, user, delay = 100, volume = 100)) + return + + welded_down = TRUE + to_chat(user, span_notice("You weld [src] to the floor.")) + +/obj/machinery/smartfridge/welder_act_secondary(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS + + if(!(machine_stat & BROKEN)) + balloon_alert(user, "no repair needed!") + return + + if(!tool.tool_start_check(user, amount=1)) + return + + user.visible_message( + span_notice("[user] is repairing [src]."), + span_notice("You begin repairing [src]..."), + span_hear("You hear welding."), + ) + + if(tool.use_tool(src, user, delay = 40, volume = 50)) + if(!(machine_stat & BROKEN)) + return + to_chat(user, span_notice("You repair [src]")) + atom_integrity = max_integrity + set_machine_stat(machine_stat & ~BROKEN) + update_icon() + +/obj/machinery/smartfridge/screwdriver_act(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS + + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + if(panel_open) + add_overlay("[initial(icon_state)]-panel") + else + cut_overlay("[initial(icon_state)]-panel") + SStgui.update_uis(src) + /obj/machinery/smartfridge/can_be_unfasten_wrench(mob/user, silent) if(welded_down) - to_chat(user, span_warning("[src] is welded to the floor!")) + balloon_alert(user, "unweld first!") return FAILED_UNFASTEN return ..() @@ -62,70 +135,29 @@ can_atmos_pass = anchorvalue ? ATMOS_PASS_NO : ATMOS_PASS_YES air_update_turf(TRUE, anchorvalue) -/obj/machinery/smartfridge/welder_act(mob/living/user, obj/item/tool) - ..() - if(istype(src, /obj/machinery/smartfridge/drying_rack)) - return FALSE - if(welded_down) - if(!tool.tool_start_check(user, amount=2)) - return TRUE - user.visible_message( - span_notice("[user.name] starts to cut the [name] free from the floor."), - span_notice("You start to cut [src] free from the floor..."), - span_hear("You hear welding."), - ) - if(!tool.use_tool(src, user, delay=100, volume=100)) - return FALSE - welded_down = FALSE - to_chat(user, span_notice("You cut [src] free from the floor.")) - return TRUE - if(!anchored) - to_chat(user, span_warning("[src] needs to be wrenched to the floor!")) - return TRUE - if(!tool.tool_start_check(user, amount=2)) - return TRUE - user.visible_message( - span_notice("[user.name] starts to weld the [name] to the floor."), - span_notice("You start to weld [src] to the floor..."), - span_hear("You hear welding."), - ) - if(!tool.use_tool(src, user, delay=100, volume=100)) - balloon_alert(user, "cancelled!") - return FALSE - welded_down = TRUE - to_chat(user, span_notice("You weld [src] to the floor.")) - return TRUE +/obj/machinery/smartfridge/wrench_act(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS -/obj/machinery/smartfridge/welder_act_secondary(mob/living/user, obj/item/tool) - . = ..() - if(istype(src, /obj/machinery/smartfridge/drying_rack)) - return FALSE - if(machine_stat & BROKEN) - if(!tool.tool_start_check(user, amount=1)) - return FALSE - user.visible_message( - span_notice("[user] is repairing [src]."), - span_notice("You begin repairing [src]..."), - span_hear("You hear welding."), - ) - if(tool.use_tool(src, user, delay=40, volume=50)) - if(!(machine_stat & BROKEN)) - return FALSE - balloon_alert(user, "repaired") - atom_integrity = max_integrity - set_machine_stat(machine_stat & ~BROKEN) - update_icon() - return TRUE + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + power_change() + +/obj/machinery/smartfridge/crowbar_act(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS + + if(default_pry_open(tool, close_after_pry = TRUE)) + return + + if(welded_down) + balloon_alert(user, "unweld first!") else - balloon_alert(user, "no repair needed!") - return FALSE + default_deconstruction_crowbar(tool) /obj/machinery/smartfridge/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) if(isnull(held_item)) return NONE var/tool_tip_set = FALSE - if(held_item.tool_behaviour == TOOL_WELDER && !istype(src, /obj/machinery/smartfridge/drying_rack)) + if(held_item.tool_behaviour == TOOL_WELDER) if(welded_down) context[SCREENTIP_CONTEXT_LMB] = "Unweld" tool_tip_set = TRUE @@ -136,6 +168,19 @@ context[SCREENTIP_CONTEXT_RMB] = "Repair" tool_tip_set = TRUE + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "close" : "open"] panel" + tool_tip_set = TRUE + + else if(held_item.tool_behaviour == TOOL_CROWBAR) + if(panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + tool_tip_set = TRUE + + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]anchore" + tool_tip_set = TRUE + return tool_tip_set ? CONTEXTUAL_SCREENTIP_SET : NONE /obj/machinery/smartfridge/RefreshParts() @@ -149,19 +194,26 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: This unit can hold a maximum of [max_n_of_items] items.") + . += structure_examine() + +/// Returns details related to the fridge structure +/obj/machinery/smartfridge/proc/structure_examine() + . = "" + if(welded_down) - . += span_info("It's moored firmly to the floor. You can unsecure its moorings with a welder.") - else if(anchored) - . += span_info("It's currently anchored to the floor. You can secure its moorings with a welder, or remove it with a wrench.") + . += span_info("It's moorings are firmly [EXAMINE_HINT("welded")] to the floor.") else - . += span_info("It's not anchored to the floor. You can secure it in place with a wrench.") + . += span_info("It's moorings are loose and can be [EXAMINE_HINT("welded")] down.") + + if(anchored) + . += span_info("It is [EXAMINE_HINT("wrenched")] down on the floor.") + else + . += span_info("It could be [EXAMINE_HINT("wrenched")] down.") /obj/machinery/smartfridge/update_appearance(updates=ALL) . = ..() - if(machine_stat & BROKEN) - set_light(0) - return - set_light(powered() ? MINIMUM_USEFUL_LIGHT_RANGE : 0) + + set_light((!(machine_stat & BROKEN) && powered()) ? MINIMUM_USEFUL_LIGHT_RANGE : 0) /obj/machinery/smartfridge/update_icon_state() icon_state = "[initial(icon_state)]" @@ -171,49 +223,33 @@ icon_state += "-off" return ..() +/// Returns the number of items visible in the fridge. Faster than subtracting 2 lists +/obj/machinery/smartfridge/proc/visible_items() + var/component_part_count = 0 + for(var/datum/stock_part/datum_part in component_parts) + component_part_count -= 1 + return contents.len - component_part_count + /obj/machinery/smartfridge/update_overlays() . = ..() - var/list/shown_contents = contents - component_parts - if(visible_contents && shown_contents.len > 0) - var/contents_icon_state = "[initial(icon_state)]" - switch(base_build_path) - if(/obj/machinery/smartfridge/extract) - contents_icon_state += "-slime" - if(/obj/machinery/smartfridge/food) - contents_icon_state += "-food" - if(/obj/machinery/smartfridge/drinks) - contents_icon_state += "-drink" - if(/obj/machinery/smartfridge/organ) - contents_icon_state += "-organ" - if(/obj/machinery/smartfridge/petri) - contents_icon_state += "-petri" - if(/obj/machinery/smartfridge/chemistry) - contents_icon_state += "-chem" - if(/obj/machinery/smartfridge/chemistry/virology) - contents_icon_state += "-viro" - else - contents_icon_state += "-plant" - switch(shown_contents.len) + var/shown_contents_length = visible_items() + if(visible_contents && shown_contents_length) + var/content_level = "[initial(icon_state)]-[contents_icon_state]" + switch(shown_contents_length) if(1 to 25) - contents_icon_state += "-1" + content_level += "-1" if(26 to 50) - contents_icon_state += "-2" + content_level += "-2" if(31 to INFINITY) - contents_icon_state += "-3" - . += mutable_appearance(icon, contents_icon_state) + content_level += "-3" + . += mutable_appearance(icon, content_level) . += mutable_appearance(icon, "[initial(icon_state)]-glass[(machine_stat & BROKEN) ? "-broken" : ""]") if(!machine_stat && has_emissive) . += emissive_appearance(icon, "[initial(icon_state)]-light-mask", src, alpha = src.alpha) -/obj/machinery/smartfridge/wrench_act(mob/living/user, obj/item/tool) - . = ..() - if(default_unfasten_wrench(user, tool)) - power_change() - return TOOL_ACT_TOOLTYPE_SUCCESS - /obj/machinery/smartfridge/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) @@ -225,101 +261,94 @@ playsound(src, SFX_SHATTER, 50, TRUE) return ..() -/******************* -* Item Adding -********************/ - -/obj/machinery/smartfridge/attackby(obj/item/O, mob/living/user, params) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, O)) - if(panel_open) - add_overlay("[initial(icon_state)]-panel") - else - cut_overlay("[initial(icon_state)]-panel") - SStgui.update_uis(src) - return - - if(default_pry_open(O, close_after_pry = TRUE)) - return - - if(!welded_down && default_deconstruction_crowbar(O)) - SStgui.update_uis(src) - return - +/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, params) if(!machine_stat) - var/list/shown_contents = contents - component_parts - if(shown_contents.len >= max_n_of_items) - to_chat(user, span_warning("\The [src] is full!")) + var/shown_contents_length = visible_items() + if(shown_contents_length >= max_n_of_items) + balloon_alert(user, "no space!") return FALSE - if(accept_check(O)) - load(O) - user.visible_message(span_notice("[user] adds \the [O] to \the [src]."), span_notice("You add \the [O] to \the [src].")) + if(!(weapon.item_flags & ABSTRACT) && \ + !(weapon.flags_1 & HOLOGRAM_1) && \ + accept_check(weapon) \ + ) + load(weapon) + user.visible_message(span_notice("[user] adds \the [weapon] to \the [src]."), span_notice("You add \the [weapon] to \the [src].")) SStgui.update_uis(src) if(visible_contents) update_appearance() return TRUE - if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O + if(istype(weapon, /obj/item/storage/bag)) + var/obj/item/storage/bag = weapon var/loaded = 0 - for(var/obj/G in P.contents) - if(shown_contents.len >= max_n_of_items) + for(var/obj/item/object in bag.contents) + if(shown_contents_length >= max_n_of_items) break - if(accept_check(G)) - load(G) + if(!(object.item_flags & ABSTRACT) && \ + !(object.flags_1 & HOLOGRAM_1) && \ + accept_check(object) \ + ) + load(object) loaded++ SStgui.update_uis(src) if(loaded) - if(shown_contents.len >= max_n_of_items) - user.visible_message(span_notice("[user] loads \the [src] with \the [O]."), \ - span_notice("You fill \the [src] with \the [O].")) + if(shown_contents_length >= max_n_of_items) + user.visible_message(span_notice("[user] loads \the [src] with \the [weapon]."), \ + span_notice("You fill \the [src] with \the [weapon].")) else - user.visible_message(span_notice("[user] loads \the [src] with \the [O]."), \ - span_notice("You load \the [src] with \the [O].")) - if(O.contents.len > 0) + user.visible_message(span_notice("[user] loads \the [src] with \the [weapon]."), \ + span_notice("You load \the [src] with \the [weapon].")) + if(weapon.contents.len) to_chat(user, span_warning("Some items are refused.")) if (visible_contents) update_appearance() return TRUE else - to_chat(user, span_warning("There is nothing in [O] to put in [src]!")) + to_chat(user, span_warning("There is nothing in [weapon] to put in [src]!")) return FALSE if(!user.combat_mode) - to_chat(user, span_warning("\The [src] smartly refuses [O].")) - SStgui.update_uis(src) + to_chat(user, span_warning("\The [src] smartly refuses [weapon].")) return FALSE + else return ..() -/obj/machinery/smartfridge/proc/accept_check(obj/item/O) - if(istype(O, /obj/item/food/grown/) || istype(O, /obj/item/seeds/) || istype(O, /obj/item/grown/) || istype(O, /obj/item/graft/)) - return TRUE - return FALSE +/** + * Can this item be accepted by the smart fridge + * Arguments + * * [weapon][obj/item] - the item to accept + */ +/obj/machinery/smartfridge/proc/accept_check(obj/item/weapon) + var/static/list/accepted_items = list( + /obj/item/food/grown, + /obj/item/seeds, + /obj/item/grown, + /obj/item/graft, + ) + return is_type_in_list(weapon, accepted_items) -/obj/machinery/smartfridge/proc/load(obj/item/O) - if(ismob(O.loc)) - var/mob/M = O.loc - if(!M.transferItemToLoc(O, src)) - to_chat(usr, span_warning("\the [O] is stuck to your hand, you cannot put it in \the [src]!")) +/** + * Loads the item into the smart fridge + * Arguments + * * [weapon][obj/item] - the item to load. If the item is being held by a mo it will transfer it from hand else directly force move + */ +/obj/machinery/smartfridge/proc/load(obj/item/weapon) + if(ismob(weapon.loc)) + var/mob/owner = weapon.loc + if(!owner.transferItemToLoc(weapon, src)) + to_chat(usr, span_warning("\the [weapon] is stuck to your hand, you cannot put it in \the [src]!")) return FALSE - else - return TRUE + return TRUE else - if(O.loc.atom_storage) - return O.loc.atom_storage.attempt_remove(O, src) + if(weapon.loc.atom_storage) + return weapon.loc.atom_storage.attempt_remove(weapon, src, silent = TRUE) else - O.forceMove(src) + weapon.forceMove(src) return TRUE -///Really simple proc, just moves the object "O" into the hands of mob "M" if able, done so I could modify the proc a little for the organ fridge -/obj/machinery/smartfridge/proc/dispense(obj/item/O, mob/M) - if(!M.put_in_hands(O)) - O.forceMove(drop_location()) - adjust_item_drop_location(O) - use_power(active_power_usage) - /obj/machinery/smartfridge/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -331,18 +360,18 @@ . = list() var/listofitems = list() - for (var/I in src) + for (var/item in src) // We do not vend our own components. - if(I in component_parts) + if(item in component_parts) continue - var/atom/movable/O = I - if (!QDELETED(O)) - var/md5name = md5(O.name) // This needs to happen because of a bug in a TGUI component, https://github.com/ractivejs/ractive/issues/744 + var/atom/movable/atom = item + if (!QDELETED(atom)) + var/md5name = md5(atom.name) // This needs to happen because of a bug in a TGUI component, https://github.com/ractivejs/ractive/issues/744 if (listofitems[md5name]) // which is fixed in a version we cannot use due to ie8 incompatibility listofitems[md5name]["amount"]++ // The good news is, #30519 made smartfridge UIs non-auto-updating else - listofitems[md5name] = list("name" = O.name, "type" = O.type, "amount" = 1) + listofitems[md5name] = list("name" = atom.name, "amount" = 1) sort_list(listofitems) .["contents"] = listofitems @@ -353,27 +382,28 @@ . = ..() SStgui.update_uis(src) -/obj/machinery/smartfridge/ui_act(action, params) +/obj/machinery/smartfridge/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(.) + if(. || !ui.user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return + + . = TRUE + var/mob/living_mob = ui.user + switch(action) if("Release") var/desired = 0 - if(!allow_ai_retrieve && isAI(usr)) - to_chat(usr, span_warning("[src] does not seem to be configured to respect your authority!")) + if(isAI(living_mob)) + to_chat(living_mob, span_warning("[src] does not respect your authority!")) return if (params["amount"]) desired = text2num(params["amount"]) else - desired = tgui_input_number(usr, "How many items would you like to take out?", "Release", max_value = 50) + desired = tgui_input_number(living_mob, "How many items would you like to take out?", "Release", max_value = 50) if(!desired) - return FALSE - - if(QDELETED(src) || QDELETED(usr) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) // Sanity checkin' in case stupid stuff happens while we wait for input() - return FALSE + return for(var/obj/item/dispensed_item in src) if(desired <= 0) @@ -384,12 +414,16 @@ if(format_text(dispensed_item.name) == format_text(params["name"])) if(dispensed_item in component_parts) CRASH("Attempted removal of [dispensed_item] component_part from smartfridge via smartfridge interface.") - dispense(dispensed_item, usr) + //dispense the item + if(!living_mob.put_in_hands(dispensed_item)) + dispensed_item.forceMove(drop_location()) + adjust_item_drop_location(dispensed_item) + use_power(active_power_usage) desired-- if (visible_contents) update_appearance() - return TRUE + return return FALSE @@ -408,48 +442,72 @@ idle_power_usage = 0 has_emissive = FALSE can_atmos_pass = ATMOS_PASS_YES + /// Is the rack currently drying stuff var/drying = FALSE -/obj/machinery/smartfridge/drying_rack/on_deconstruction() - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) +/obj/machinery/smartfridge/drying_rack/Initialize(mapload) + . = ..() - //remove all component parts inherited from smartfridge cause they were not required in crafting - var/obj/item/circuitboard/machine/smartfridge/board = locate() in component_parts - component_parts -= board - qdel(board) - component_parts.Cut() + //you can't weld down wood + welded_down = FALSE - return ..() + //so we don't drop any of the parent smart fridge parts upon deconstruction + clear_components() +/// We cleared out the components in initialize so we can optimize this +/obj/machinery/smartfridge/drying_rack/visible_items() + return contents.len + +/obj/machinery/smartfridge/drying_rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + return NONE + + var/tool_tip_set = FALSE + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + tool_tip_set = TRUE + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]anchore" + tool_tip_set = TRUE + + return tool_tip_set ? CONTEXTUAL_SCREENTIP_SET : NONE + +/obj/machinery/smartfridge/drying_rack/structure_examine() + . = "" + if(anchored) + . += span_info("It's currently anchored to the floor. It can be [EXAMINE_HINT("wrenched")] loose.") + else + . += span_info("It's not anchored to the floor. It can be [EXAMINE_HINT("wrenched")] down.") + . += span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") +/obj/machinery/smartfridge/drying_rack/welder_act(mob/living/user, obj/item/tool) +/obj/machinery/smartfridge/drying_rack/welder_act_secondary(mob/living/user, obj/item/tool) /obj/machinery/smartfridge/drying_rack/default_deconstruction_screwdriver() /obj/machinery/smartfridge/drying_rack/exchange_parts() -/obj/machinery/smartfridge/drying_rack/spawn_frame() +/obj/machinery/smartfridge/drying_rack/on_deconstruction() + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) +/obj/machinery/smartfridge/drying_rack/crowbar_act(mob/living/user, obj/item/tool) + . = TOOL_ACT_TOOLTYPE_SUCCESS -/obj/machinery/smartfridge/drying_rack/default_deconstruction_crowbar(obj/item/crowbar/C, ignore_panel = 1) - ..() + default_deconstruction_crowbar(tool, ignore_panel = TRUE) /obj/machinery/smartfridge/drying_rack/ui_data(mob/user) . = ..() .["isdryer"] = TRUE - .["verb"] = "Take" .["drying"] = drying - /obj/machinery/smartfridge/drying_rack/ui_act(action, params) . = ..() if(.) update_appearance() // This is to handle a case where the last item is taken out manually instead of through drying pop-out return + switch(action) if("Dry") toggle_drying(FALSE) return TRUE - return FALSE /obj/machinery/smartfridge/drying_rack/powered() - if(!anchored) - return FALSE - return ..() + return !anchored ? FALSE : ..() /obj/machinery/smartfridge/drying_rack/power_change() . = ..() @@ -464,12 +522,10 @@ . = ..() if(drying) . += "drying_rack_drying" - var/list/shown_contents = contents - component_parts - if(shown_contents.len) + if(contents.len) . += "drying_rack_filled" /obj/machinery/smartfridge/drying_rack/process() - ..() if(drying) for(var/obj/item/item_iterator in src) if(!accept_check(item_iterator)) @@ -481,10 +537,13 @@ use_power(active_power_usage) /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) - if(HAS_TRAIT(O, TRAIT_DRYABLE)) //set on dryable element - return TRUE - return FALSE + return HAS_TRAIT(O, TRAIT_DRYABLE) +/** + * Toggles drying on or off + * Arguments + * * forceoff - if TRUE will force the dryer off always + */ /obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff) if(drying || forceoff) drying = FALSE @@ -503,7 +562,6 @@ return atmos_spawn_air("[TURF_TEMPERATURE(1000)]") - // ---------------------------- // Bar drink smartfridge // ---------------------------- @@ -511,12 +569,19 @@ name = "drink showcase" desc = "A refrigerated storage unit for tasty tasty alcohol." base_build_path = /obj/machinery/smartfridge/drinks + contents_icon_state = "drink" -/obj/machinery/smartfridge/drinks/accept_check(obj/item/O) - if(!is_reagent_container(O) || (O.item_flags & ABSTRACT) || istype(O,/obj/item/reagent_containers/cup/bowl) || !O.reagents || !O.reagents.reagent_list.len) +/obj/machinery/smartfridge/drinks/accept_check(obj/item/weapon) + //not an item or valid container + if(!is_reagent_container(weapon)) return FALSE - if(istype(O, /obj/item/reagent_containers/cup) || istype(O, /obj/item/reagent_containers/cup/glass) || istype(O, /obj/item/reagent_containers/condiment)) - return TRUE + + //an bowl or something that has no reagents + if(istype(weapon,/obj/item/reagent_containers/cup/bowl) || !length(weapon.reagents?.reagent_list)) + return FALSE + + //list of items acceptable + return (istype(weapon, /obj/item/reagent_containers/cup) || istype(weapon, /obj/item/reagent_containers/condiment)) // ---------------------------- // Food smartfridge @@ -524,9 +589,14 @@ /obj/machinery/smartfridge/food desc = "A refrigerated storage unit for food." base_build_path = /obj/machinery/smartfridge/food + contents_icon_state = "food" -/obj/machinery/smartfridge/food/accept_check(obj/item/O) - if(IS_EDIBLE(O) || (istype(O,/obj/item/reagent_containers/cup/bowl) && O.reagents && O.reagents.reagent_list.len)) +/obj/machinery/smartfridge/food/accept_check(obj/item/weapon) + if(weapon.w_class >= WEIGHT_CLASS_BULKY) + return FALSE + if(IS_EDIBLE(weapon)) + return TRUE + if(istype(weapon, /obj/item/reagent_containers/cup/bowl) && weapon.reagents?.total_volume > 0) return TRUE return FALSE @@ -537,13 +607,10 @@ name = "smart slime extract storage" desc = "A refrigerated storage unit for slime extracts." base_build_path = /obj/machinery/smartfridge/extract + contents_icon_state = "slime" -/obj/machinery/smartfridge/extract/accept_check(obj/item/O) - if(istype(O, /obj/item/slime_extract)) - return TRUE - if(istype(O, /obj/item/slime_scanner)) - return TRUE - return FALSE +/obj/machinery/smartfridge/extract/accept_check(obj/item/weapon) + return (istype(weapon, /obj/item/slime_extract) || istype(weapon, /obj/item/slime_scanner)) /obj/machinery/smartfridge/extract/preloaded initial_contents = list(/obj/item/slime_scanner = 2) @@ -555,11 +622,10 @@ name = "smart petri dish storage" desc = "A refrigerated storage unit for petri dishes." base_build_path = /obj/machinery/smartfridge/petri + contents_icon_state = "petri" -/obj/machinery/smartfridge/petri/accept_check(obj/item/O) - if(istype(O, /obj/item/petri_dish)) - return TRUE - return FALSE +/obj/machinery/smartfridge/petri/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/petri_dish) /obj/machinery/smartfridge/petri/preloaded initial_contents = list(/obj/item/petri_dish = 5) @@ -572,20 +638,22 @@ desc = "A refrigerated storage unit for organ storage." max_n_of_items = 20 //vastly lower to prevent processing too long base_build_path = /obj/machinery/smartfridge/organ + contents_icon_state = "organ" + /// The rate at which this fridge will repair damaged organs var/repair_rate = 0 /obj/machinery/smartfridge/organ/accept_check(obj/item/O) - if(isorgan(O) || isbodypart(O)) - return TRUE - return FALSE + return (isorgan(O) || isbodypart(O)) /obj/machinery/smartfridge/organ/load(obj/item/O) . = ..() if(!.) //if the item loads, clear can_decompose return + if(isorgan(O)) var/obj/item/organ/organ = O organ.organ_flags |= ORGAN_FROZEN + if(isbodypart(O)) var/obj/item/bodypart/bodypart = O for(var/obj/item/organ/stored in bodypart.contents) @@ -606,9 +674,11 @@ /obj/machinery/smartfridge/organ/Exited(atom/movable/gone, direction) . = ..() + if(isorgan(gone)) var/obj/item/organ/O = gone O.organ_flags &= ~ORGAN_FROZEN + if(isbodypart(gone)) var/obj/item/bodypart/bodypart = gone for(var/obj/item/organ/stored in bodypart.contents) @@ -621,8 +691,31 @@ name = "smart chemical storage" desc = "A refrigerated storage unit for medicine storage." base_build_path = /obj/machinery/smartfridge/chemistry + contents_icon_state = "chem" -/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O) +/obj/machinery/smartfridge/chemistry/accept_check(obj/item/weapon) + // not an item or reagent container + if(!is_reagent_container(weapon)) + return FALSE + + // empty pill prank ok + if(istype(weapon, /obj/item/reagent_containers/pill)) + return TRUE + + //check each pill in the pill bottle + if(istype(weapon, /obj/item/storage/pill_bottle)) + if(weapon.contents.len) + for(var/obj/item/target_item in weapon) + if(!accept_check(target_item)) + return FALSE + return TRUE + return FALSE + + // other empty containers not accepted + if(!length(weapon.reagents?.reagent_list)) + return FALSE + + // the long list of other containers that can be accepted var/static/list/chemfridge_typecache = typecacheof(list( /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/cup/tube, @@ -633,23 +726,7 @@ /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS /obj/item/reagent_containers/chem_pack )) - - if(istype(O, /obj/item/storage/pill_bottle)) - if(O.contents.len) - for(var/obj/item/I in O) - if(!accept_check(I)) - return FALSE - return TRUE - return FALSE - if(!is_reagent_container(O) || (O.item_flags & ABSTRACT)) - return FALSE - if(istype(O, /obj/item/reagent_containers/pill)) // empty pill prank ok - return TRUE - if(!O.reagents || !O.reagents.reagent_list.len) // other empty containers not accepted - return FALSE - if(is_type_in_typecache(O, chemfridge_typecache)) - return TRUE - return FALSE + return is_type_in_typecache(weapon, chemfridge_typecache) /obj/machinery/smartfridge/chemistry/preloaded initial_contents = list( @@ -665,6 +742,7 @@ name = "smart virus storage" desc = "A refrigerated storage unit for volatile sample storage." base_build_path = /obj/machinery/smartfridge/chemistry/virology + contents_icon_state = "viro" /obj/machinery/smartfridge/chemistry/virology/preloaded initial_contents = list( @@ -691,8 +769,5 @@ visible_contents = FALSE base_build_path = /obj/machinery/smartfridge/disks -/obj/machinery/smartfridge/disks/accept_check(obj/item/O) - if(istype(O, /obj/item/disk/)) - return TRUE - else - return FALSE +/obj/machinery/smartfridge/disks/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/disk) diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index b584d887930..a0d24dec8da 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -14,6 +14,9 @@ var/placement_offset = -15 /// If the plate will shatter when thrown var/fragile = TRUE + /// The largest weight class we can carry, inclusive. + /// IE, if we this is normal, we can carry normal items or smaller. + var/biggest_w_class = WEIGHT_CLASS_NORMAL /obj/item/plate/Initialize(mapload) . = ..() @@ -23,10 +26,13 @@ /obj/item/plate/attackby(obj/item/I, mob/user, params) if(!IS_EDIBLE(I)) - to_chat(user, span_notice("[src] is made for food, and food alone!")) + balloon_alert(user, "not food!") + return + if(I.w_class > biggest_w_class) + balloon_alert(user, "too big!") return if(contents.len >= max_items) - to_chat(user, span_notice("[src] can't fit more items!")) + balloon_alert(user, "can't fit!") return var/list/modifiers = params2list(params) //Center the icon where the user clicked. @@ -62,6 +68,9 @@ item_to_plate.pixel_x = 0 item_to_plate.pixel_y = 0 update_appearance() + // If the incoming item is the same weight class as the plate, bump us up a class + if(item_to_plate.w_class == w_class) + w_class += 1 ///This proc cleans up any signals on the item when it is removed from a plate, and ensures it has the correct state again. /obj/item/plate/proc/ItemRemovedFromPlate(obj/item/removed_item) @@ -69,11 +78,18 @@ removed_item.vis_flags &= ~VIS_INHERIT_PLANE vis_contents -= removed_item UnregisterSignal(removed_item, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) - // Resettt + // Reset item offsets removed_item.pixel_x = removed_item.pixel_w removed_item.pixel_y = removed_item.pixel_z removed_item.pixel_w = 0 removed_item.pixel_z = 0 + // We need to ensure the weight class is accurate now that we've lost something + // that may or may not have been of equal weight + w_class = initial(w_class) + for(var/obj/item/on_board in src) + if(on_board.w_class == w_class) + w_class += 1 + break ///This proc is called by signals that remove the food from the plate. /obj/item/plate/proc/ItemMoved(obj/item/moved_item, atom/OldLoc, Dir, Forced) @@ -87,6 +103,7 @@ max_items = 12 max_x_offset = 8 max_height_offset = 12 + biggest_w_class = WEIGHT_CLASS_BULKY /obj/item/plate/small name = "appetizer plate" @@ -95,6 +112,7 @@ max_items = 4 max_x_offset = 4 max_height_offset = 5 + biggest_w_class = WEIGHT_CLASS_SMALL /obj/item/plate_shard name = "ceramic shard" diff --git a/code/modules/food_and_drinks/restaurant/custom_order.dm b/code/modules/food_and_drinks/restaurant/custom_order.dm index d87797b2578..ac819e4debf 100644 --- a/code/modules/food_and_drinks/restaurant/custom_order.dm +++ b/code/modules/food_and_drinks/restaurant/custom_order.dm @@ -171,7 +171,8 @@ var/datum/reagents/holder = object_used.reagents // The container must be majority reagent - if(holder.get_master_reagent_id() != reagent_type) + var/datum/reagent/master_reagent = holder.get_master_reagent() + if(master_reagent?.type != reagent_type) return FALSE // We must fulfill the sample size threshold if(reagents_needed > holder.total_volume) diff --git a/code/modules/hallucination/hazard.dm b/code/modules/hallucination/hazard.dm index 7209087d4be..1dfdfd23970 100644 --- a/code/modules/hallucination/hazard.dm +++ b/code/modules/hallucination/hazard.dm @@ -86,6 +86,10 @@ image_state = "flux" image_layer = OBJ_LAYER + 0.01 +/obj/effect/client_image_holder/hallucination/danger/anomaly/generate_image() + . = ..() + apply_wibbly_filters(.) + /obj/effect/client_image_holder/hallucination/danger/anomaly/Initialize(mapload, list/mobs_which_see_us, datum/hallucination/parent) . = ..() START_PROCESSING(SSobj, src) diff --git a/code/modules/hallucination/mother.dm b/code/modules/hallucination/mother.dm index bc2b312cc0b..d9cd7f19831 100644 --- a/code/modules/hallucination/mother.dm +++ b/code/modules/hallucination/mother.dm @@ -18,9 +18,9 @@ point_at(hallucinator) talk("[capitalize(hallucinator.real_name)]!!!!") // Your mother won't be fooled by paltry disguises var/list/scold_lines = list( - pick(list("CLEAN YOUR ROOM THIS INSTANT!", "IT'S TIME TO WAKE UP FOR SCHOOL!!")), - pick(list("YOU INSULT YOUR GRANDPARENTS!", "USELESS!")), - pick(list("I BROUGHT YOU INTO THIS WORLD, I CAN TAKE YOU OUT!!!", "YOU'RE GROUNDED!!")), + pick_list_replacements(MOTHER_FILE, "do_something"), + pick_list_replacements(MOTHER_FILE, "be_upset"), + pick_list_replacements(MOTHER_FILE, "get_reprimanded"), ) var/delay = 2 SECONDS for(var/line in scold_lines) diff --git a/code/modules/hallucination/station_message.dm b/code/modules/hallucination/station_message.dm index eb55e548b3e..97b37e77cd9 100644 --- a/code/modules/hallucination/station_message.dm +++ b/code/modules/hallucination/station_message.dm @@ -16,8 +16,14 @@ /datum/hallucination/station_message/shuttle_dock /datum/hallucination/station_message/shuttle_dock/start() - priority_announce("[SSshuttle.emergency || "The Emergency Shuttle"] has docked with the station. You have 3 minutes to board the Emergency Shuttle.", \ - null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY, players = list(hallucinator)) + priority_announce( + text = "[SSshuttle.emergency] has docked with the station. You have [DisplayTimeText(SSshuttle.emergency_dock_time)] to board the emergency shuttle.", + title = "Emergency Shuttle Arrival", + sound = ANNOUNCER_SHUTTLEDOCK, + sender_override = "Emergency Shuttle Uplink Alert", + players = list(hallucinator), + color_override = "orange", + ) return ..() /datum/hallucination/station_message/malf_ai @@ -49,7 +55,13 @@ var/message_with_name = pick(ascension_bodies) message_with_name = replacetext(message_with_name, "%FAKENAME%", totally_real_heretic.real_name) - priority_announce("[generate_heretic_text()] [message_with_name] [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES, players = list(hallucinator)) + priority_announce( + text = "[generate_heretic_text()] [message_with_name] [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = ANNOUNCER_SPANOMALIES, + players = list(hallucinator), + color_override = "pink", + ) return ..() /datum/hallucination/station_message/cult_summon @@ -65,10 +77,13 @@ var/area/fake_summon_area_type = pick(GLOB.the_station_areas - hallucinator_area.type) var/area/fake_summon_area = GLOB.areas_by_type[fake_summon_area_type] - priority_announce("Figments from an eldritch god are being summoned by [totally_real_cult_leader.real_name] \ - into [fake_summon_area] from an unknown dimension. Disrupt the ritual at all costs!", \ - "Central Command Higher Dimensional Affairs", \ - sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', has_important_message = TRUE, players = list(hallucinator)) + priority_announce( + text = "Figments from an eldritch god are being summoned by [totally_real_cult_leader.real_name] into [fake_summon_area] from an unknown dimension. Disrupt the ritual at all costs!", + title = "[command_name()] Higher Dimensional Affairs", + sound = 'sound/ambience/antag/bloodcult/bloodcult_scribe.ogg', + has_important_message = TRUE, + players = list(hallucinator), + ) return ..() /datum/hallucination/station_message/meteors diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index f66fe88a7e5..8c62144dfc5 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -27,6 +27,8 @@ var/poster_icon = "holiday_unfinished" /// Color scheme for this holiday var/list/holiday_colors + /// The default pattern of the holiday, if the requested pattern is null. + var/holiday_pattern = PATTERN_DEFAULT // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() @@ -78,7 +80,7 @@ return FALSE /// Procs to return holiday themed colors for recoloring atoms -/datum/holiday/proc/get_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/datum/holiday/proc/get_holiday_colors(atom/thing_to_color, pattern = holiday_pattern) if(!holiday_colors) return switch(pattern) @@ -87,7 +89,7 @@ if(PATTERN_VERTICAL_STRIPE) return holiday_colors[(thing_to_color.x % holiday_colors.len) + 1] -/proc/request_holiday_colors(atom/thing_to_color, pattern = PATTERN_DEFAULT) +/proc/request_holiday_colors(atom/thing_to_color, pattern) switch(pattern) if(PATTERN_RANDOM) return "#[random_short_color()]" @@ -98,7 +100,9 @@ return for(var/holiday_key in GLOB.holidays) var/datum/holiday/holiday_real = GLOB.holidays[holiday_key] - return holiday_real.get_holiday_colors(thing_to_color, pattern) + if(!holiday_real.holiday_colors) + continue + return holiday_real.get_holiday_colors(thing_to_color, pattern || holiday_real.holiday_pattern) // The actual holidays @@ -132,6 +136,12 @@ timezones = list(TIMEZONE_NZDT, TIMEZONE_CHADT) begin_day = 6 begin_month = FEBRUARY + holiday_colors = list( + COLOR_UNION_JACK_BLUE, + COLOR_WHITE, + COLOR_UNION_JACK_RED, + COLOR_WHITE, + ) /datum/holiday/nz/getStationPrefix() return pick("Aotearoa","Kiwi","Fish 'n' Chips","Kākāpō","Southern Cross") @@ -222,6 +232,12 @@ begin_day = 17 begin_month = MARCH holiday_hat = /obj/item/clothing/head/soft/green + holiday_colors = list( + COLOR_IRISH_GREEN, + COLOR_WHITE, + COLOR_IRISH_ORANGE, + ) + holiday_pattern = PATTERN_VERTICAL_STRIPE /datum/holiday/no_this_is_patrick/getStationPrefix() return pick("Blarney","Green","Leprechaun","Booze") @@ -264,6 +280,11 @@ begin_day = 20 begin_month = APRIL holiday_hat = /obj/item/clothing/head/rasta + holiday_colors = list( + COLOR_ETHIOPIA_GREEN, + COLOR_ETHIOPIA_YELLOW, + COLOR_ETHIOPIA_RED, + ) /datum/holiday/fourtwenty/getStationPrefix() return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong") @@ -366,12 +387,12 @@ begin_day = 23 end_day = 29 holiday_colors = list( - COLOR_PRIDE_PURPLE, - COLOR_PRIDE_BLUE, - COLOR_PRIDE_GREEN, - COLOR_PRIDE_YELLOW, - COLOR_PRIDE_ORANGE, - COLOR_PRIDE_RED, + COLOR_PRIDE_PURPLE, + COLOR_PRIDE_BLUE, + COLOR_PRIDE_GREEN, + COLOR_PRIDE_YELLOW, + COLOR_PRIDE_ORANGE, + COLOR_PRIDE_RED, ) // JULY @@ -398,6 +419,14 @@ begin_month = JULY mail_holiday = TRUE holiday_hat = /obj/item/clothing/head/cowboy/brown + holiday_colors = list( + COLOR_OLD_GLORY_BLUE, + COLOR_OLD_GLORY_RED, + COLOR_WHITE, + COLOR_OLD_GLORY_RED, + COLOR_WHITE, + ) + /datum/holiday/usa/getStationPrefix() return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks") @@ -414,9 +443,15 @@ begin_month = JULY holiday_hat = /obj/item/clothing/head/beret mail_holiday = TRUE + holiday_colors = list( + COLOR_FRENCH_BLUE, + COLOR_WHITE, + COLOR_FRENCH_RED + ) + holiday_pattern = PATTERN_VERTICAL_STRIPE /datum/holiday/france/getStationPrefix() - return pick("Francais","Fromage", "Zut", "Merde") + return pick("Francais", "Fromage", "Zut", "Merde", "Sacrebleu") /datum/holiday/france/greet() return "Do you hear the people sing?" @@ -463,6 +498,7 @@ name = "Independence Day of Ukraine" begin_month = AUGUST begin_day = 24 + holiday_colors = list(COLOR_TRUE_BLUE, COLOR_TANGERINE_YELLOW) /datum/holiday/ukraine/getStationPrefix() return pick("Kyiv", "Ukraine") @@ -576,6 +612,11 @@ begin_day = 6 begin_month = NOVEMBER end_day = 7 + holiday_colors = list( + COLOR_MEDIUM_DARK_RED, + COLOR_GOLD, + COLOR_MEDIUM_DARK_RED, + ) /datum/holiday/october_revolution/getStationPrefix() return pick("Communist", "Soviet", "Bolshevik", "Socialist", "Red", "Workers'") @@ -586,6 +627,9 @@ begin_day = 11 holiday_hat = /obj/item/food/grown/poppy +/datum/holiday/remembrance_day/greet() + return "Lest we forget." + /datum/holiday/remembrance_day/getStationPrefix() return pick("Peace", "Armistice", "Poppy") @@ -662,6 +706,10 @@ end_day = 27 holiday_hat = /obj/item/clothing/head/costume/santa mail_holiday = TRUE + holiday_colors = list( + COLOR_CHRISTMAS_GREEN, + COLOR_CHRISTMAS_RED, + ) /datum/holiday/xmas/getStationPrefix() return pick( diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 1f2951b3356..67256249732 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -315,6 +315,11 @@ if(!food_to_convert) break + if(food_to_convert.flags_1 & HOLOGRAM_1) + qdel(food_to_convert) + current_item_count = max(current_item_count - 1, 0) + continue + convert_to_biomass(food_to_convert) use_power(active_power_usage * seconds_per_tick) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 98569f7e248..b872fc0ec37 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -148,7 +148,7 @@ var/average_purity = reagents.get_average_purity() var/total_nutriment_amount = reagents.get_reagent_amount(/datum/reagent/consumable/nutriment, include_subtypes = TRUE) var/single_reagent_amount = grind_results_num > 1 ? round(total_nutriment_amount / grind_results_num, CHEMICAL_QUANTISATION_LEVEL) : total_nutriment_amount - reagents.remove_all_type(/datum/reagent/consumable/nutriment, total_nutriment_amount) + reagents.remove_reagent(/datum/reagent/consumable/nutriment, total_nutriment_amount, include_subtypes = TRUE) for(var/reagent in grind_results) reagents.add_reagent(reagent, single_reagent_amount, added_purity = average_purity) diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 8643c616b47..fb827377114 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -14,7 +14,7 @@ icon_grow = "soybean-grow" icon_dead = "soybean-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) - mutatelist = list(/obj/item/seeds/soya/koi) + mutatelist = list(/obj/item/seeds/soya/koi, /obj/item/seeds/soya/butter) reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05, /datum/reagent/consumable/nutriment/fat/oil = 0.03) //Vegetable oil! /obj/item/food/grown/soybeans @@ -26,7 +26,7 @@ foodtypes = VEGETABLES grind_results = list(/datum/reagent/consumable/soymilk = 0) tastes = list("soy" = 1) - wine_power = 20 + distill_reagent = /datum/reagent/consumable/soysauce // Koibean /obj/item/seeds/soya/koi @@ -39,7 +39,7 @@ potency = 10 mutatelist = null reagents_add = list(/datum/reagent/toxin/carpotoxin = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/koibeans seed = /obj/item/seeds/soya/koi @@ -50,6 +50,38 @@ tastes = list("koi" = 1) wine_power = 40 +//Butterbeans, the beans wid da butta! +// Butterbeans! - Squeeze for a single butter slice! +/obj/item/seeds/soya/butter + name = "pack of butterbean seeds" + desc = "These seeds grow into butterbean plants." + icon_state = "seed-butterbean" + species = "butterbean" + plantname = "butterbean Plants" + product = /obj/item/food/grown/butterbeans + potency = 10 + mutatelist = null + reagents_add = list(/datum/reagent/consumable/milk = 0.05, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/cream = 0.05) + rarity = 20 + +/obj/item/food/grown/butterbeans + seed = /obj/item/seeds/soya/butter + name = "butterbean" + desc = "Soft, creamy and milky... You could almost smear them over toast." + icon_state = "butterbeans" + foodtypes = VEGETABLES | DAIRY + tastes = list("creamy butter" = 1) + distill_reagent = /datum/reagent/consumable/yoghurt + +/obj/item/food/grown/butterbeans/attack_self(mob/living/user) + user.visible_message(span_notice("[user] crushes [src] into a pat of butter."), span_notice("You crush [src] into something that resembles butter.")) + playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) + var/obj/item/food/butterslice/butties = new(null) + butties.reagents.set_all_reagents_purity(seed.get_reagent_purity()) + qdel(src) + user.put_in_hands(butties) + return TRUE + // Green Beans /obj/item/seeds/greenbean name = "pack of green bean seeds" @@ -96,7 +128,7 @@ mutatelist = null reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/ants = 0.1) //IRL jumping beans contain insect larve, hence the ants graft_gene = /datum/plant_gene/trait/stable_stats - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/jumpingbeans seed = /obj/item/seeds/greenbean/jump @@ -105,4 +137,3 @@ icon_state = "jumpingbean" foodtypes = FRUIT | BUGS tastes = list("bugs" = 1) - diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 81ef903c6c1..23376560920 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -92,7 +92,7 @@ mutatelist = null genes = list(/datum/plant_gene/trait/glow/white, /datum/plant_gene/trait/repeated_harvest) reagents_add = list(/datum/reagent/uranium = 0.25, /datum/reagent/iodine = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/glow/white /obj/item/food/grown/berries/glow diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index ee5c87a40c3..9f6d3bbd08c 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -39,7 +39,7 @@ lifespan = 25 maturation = 4 production = 4 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/chem_cooling) mutatelist = null reagents_add = list(/datum/reagent/consumable/frostoil = 0.25, /datum/reagent/consumable/nutriment/vitamin = 0.02, /datum/reagent/consumable/nutriment = 0.02) @@ -66,7 +66,7 @@ maturation = 10 production = 10 yield = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/chem_heating, /datum/plant_gene/trait/backfire/chili_heat) mutatelist = null reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.3, /datum/reagent/consumable/capsaicin = 0.55, /datum/reagent/consumable/nutriment = 0.04) @@ -93,7 +93,7 @@ maturation = 10 production = 10 yield = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = null reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.08, /datum/reagent/consumable/nutriment = 0.04) diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 1b3a7979cf0..8eab962d751 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -13,7 +13,7 @@ growing_icon = 'icons/obj/service/hydroponics/growing_vegetables.dmi' icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes icon_dead = "corn-dead" // Same for the dead icon - mutatelist = list(/obj/item/seeds/corn/snapcorn) + mutatelist = list(/obj/item/seeds/corn/snapcorn, /obj/item/seeds/corn/pepper) reagents_add = list(/datum/reagent/consumable/nutriment/fat/oil/corn = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) /obj/item/food/grown/corn @@ -97,3 +97,29 @@ seed = /obj/item/seeds/corn/snapcorn name = "snap corn cob" desc = "A reminder of pranks gone by." + +//Pepper-corn - Heh funny. +/obj/item/seeds/corn/pepper + name = "pack of pepper-corn seeds" + desc = "If Peter picked a pack of pepper-corn..." + icon_state = "seed-peppercorn" + species = "peppercorn" + plantname = "Pepper-Corn Stalks" + product = /obj/item/food/grown/peppercorn + mutatelist = null + reagents_add = list(/datum/reagent/consumable/blackpepper = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) + +/obj/item/food/grown/peppercorn + seed = /obj/item/seeds/corn/pepper + name = "ear of pepper-peppercorn" + desc = "This dusty monster needs god..." + icon_state = "peppercorn" + trash_type = /obj/item/grown/corncob/pepper + foodtypes = VEGETABLES + grind_results = list(/datum/reagent/consumable/blackpepper = 0) + tastes = list("pepper" = 1, "sneezing" = 1) + +/obj/item/grown/corncob/pepper + seed = /obj/item/seeds/corn/pepper + name = "pepper corn cob" + desc = "A reminder of genetic abominations gone by." diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 333c7f57c45..84b1414335c 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -242,7 +242,7 @@ genes = list(/datum/plant_gene/trait/backfire/novaflower_heat, /datum/plant_gene/trait/attack/novaflower_attack, /datum/plant_gene/trait/preserved) mutatelist = null reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.25, /datum/reagent/consumable/capsaicin = 0.3, /datum/reagent/consumable/nutriment = 0, /datum/reagent/toxin/acid = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/grown/novaflower seed = /obj/item/seeds/sunflower/novaflower diff --git a/code/modules/hydroponics/grown/korta_nut.dm b/code/modules/hydroponics/grown/korta_nut.dm index bf6ab82d474..cfa6c1e5b51 100644 --- a/code/modules/hydroponics/grown/korta_nut.dm +++ b/code/modules/hydroponics/grown/korta_nut.dm @@ -39,7 +39,7 @@ production = 10 mutatelist = null reagents_add = list(/datum/reagent/consumable/korta_nectar = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/korta_nut/sweet seed = /obj/item/seeds/korta_nut/sweet diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index f69f8a68317..0e59231141f 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -50,7 +50,7 @@ genes = list(/datum/plant_gene/trait/glow/yellow, /datum/plant_gene/trait/anti_magic) mutatelist = null reagents_add = list(/datum/reagent/water/holywater = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/glow/yellow /obj/item/food/grown/holymelon diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 074f9d5f8d2..bfc50f0c483 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -238,7 +238,7 @@ potency = 30 //-> brightness instability = 20 growthstages = 4 - rarity = 20 + rarity = PLANT_MODERATELY_RARE genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi' mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom) diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 561bd5119aa..11130c15334 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -48,7 +48,7 @@ product = /obj/item/food/grown/pumpkin/blumpkin mutatelist = null reagents_add = list(/datum/reagent/ammonia = 0.2, /datum/reagent/chlorine = 0.1, /datum/reagent/consumable/nutriment = 0.2) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/pumpkin/blumpkin seed = /obj/item/seeds/pumpkin/blumpkin diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index df37e3bf2b7..da2bb3f5d68 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -27,11 +27,17 @@ /obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params) if(I.get_sharpness()) - to_chat(user, span_notice("You sharpen the carrot into a shiv with [I].")) - var/obj/item/knife/shiv/carrot/Shiv = new /obj/item/knife/shiv/carrot + var/carrot_blade + var/carrot_sword_chance = (max(0, seed.potency - 50) / 50) + if (prob(carrot_sword_chance)) + carrot_blade = new /obj/item/claymore/carrot + to_chat(user, span_notice("You sharpen the carrot into a sword with [I].")) + else + carrot_blade = new /obj/item/knife/shiv/carrot + to_chat(user, span_notice("You sharpen the carrot into a shiv with [I].")) remove_item_from_storage(user) qdel(src) - user.put_in_hands(Shiv) + user.put_in_hands(carrot_blade) else return ..() diff --git a/code/modules/hydroponics/grown/sugarcane.dm b/code/modules/hydroponics/grown/sugarcane.dm index 9a1646443dc..be2214ca1d0 100644 --- a/code/modules/hydroponics/grown/sugarcane.dm +++ b/code/modules/hydroponics/grown/sugarcane.dm @@ -15,7 +15,7 @@ instability = 15 growthstages = 2 reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/sugar = 0.25) - mutatelist = list(/obj/item/seeds/bamboo) + mutatelist = list(/obj/item/seeds/bamboo, /obj/item/seeds/sugarcane/saltcane) /obj/item/food/grown/sugarcane seed = /obj/item/seeds/sugarcane @@ -56,3 +56,25 @@ /obj/item/grown/log/bamboo/CheckAccepted(obj/item/I) return FALSE + +//Saltcane - Gross, salty shafts! +/obj/item/seeds/sugarcane/saltcane + name = "pack of saltcane seeds" + desc = "These seeds grow into saltcane." + icon_state = "seed-saltcane" + species = "saltcane" + plantname = "Saltcane" + product = /obj/item/food/grown/sugarcane/saltcane + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/salt = 0.25) + mutatelist = null + +/obj/item/food/grown/sugarcane/saltcane + seed = /obj/item/seeds/sugarcane/saltcane + name = "saltcane" + desc = "Ungodly salty, bane of slugs, treasure of horses." + icon_state = "saltcane" + foodtypes = VEGETABLES | GROSS + +/obj/item/food/grown/sugarcane/saltcane/make_dryable() + AddElement(/datum/element/dryable, /obj/item/food/seaweedsheet/saltcane) //soooshi diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index 72ef53545d0..366dd8b4523 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -34,7 +34,7 @@ product = /obj/item/food/grown/tea/astra mutatelist = null reagents_add = list(/datum/reagent/medicine/synaptizine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/toxin/teapowder = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tea/astra seed = /obj/item/seeds/tea/astra @@ -83,7 +83,7 @@ product = /obj/item/food/grown/coffee/robusta mutatelist = null reagents_add = list(/datum/reagent/medicine/ephedrine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/toxin/coffeepowder = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/coffee/robusta seed = /obj/item/seeds/coffee/robusta diff --git a/code/modules/hydroponics/grown/tobacco.dm b/code/modules/hydroponics/grown/tobacco.dm index c47bdfc32f6..87f8253a4d9 100644 --- a/code/modules/hydroponics/grown/tobacco.dm +++ b/code/modules/hydroponics/grown/tobacco.dm @@ -32,7 +32,7 @@ product = /obj/item/food/grown/tobacco/space mutatelist = null reagents_add = list(/datum/reagent/medicine/salbutamol = 0.05, /datum/reagent/drug/nicotine = 0.08, /datum/reagent/consumable/nutriment = 0.03) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tobacco/space seed = /obj/item/seeds/tobacco/space diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index c2fa44c7662..e676d822bbf 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -37,7 +37,7 @@ product = /obj/item/food/grown/tomato/blood mutatelist = null reagents_add = list(/datum/reagent/blood = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/food/grown/tomato/blood seed = /obj/item/seeds/tomato/blood @@ -63,7 +63,7 @@ mutatelist = list(/obj/item/seeds/tomato/blue/bluespace) genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest) reagents_add = list(/datum/reagent/lube = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/slip /obj/item/food/grown/tomato/blue diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 3012a1f1479..046e835c50c 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -28,7 +28,7 @@ product = /obj/item/grown/log/steel mutatelist = null reagents_add = list(/datum/reagent/cellulose = 0.05, /datum/reagent/iron = 0.05) - rarity = 20 + rarity = PLANT_MODERATELY_RARE /obj/item/grown/log seed = /obj/item/seeds/tower diff --git a/code/modules/hydroponics/grown/weeds/nettle.dm b/code/modules/hydroponics/grown/weeds/nettle.dm index 316cc7723ac..98868b8d6e7 100644 --- a/code/modules/hydroponics/grown/weeds/nettle.dm +++ b/code/modules/hydroponics/grown/weeds/nettle.dm @@ -29,7 +29,7 @@ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/stinging, /datum/plant_gene/trait/attack/nettle_attack/death, /datum/plant_gene/trait/backfire/nettle_burn/death) mutatelist = null reagents_add = list(/datum/reagent/toxin/acid/fluacid = 0.5, /datum/reagent/toxin/acid = 0.5) - rarity = 20 + rarity = PLANT_MODERATELY_RARE graft_gene = /datum/plant_gene/trait/stinging /obj/item/food/grown/nettle // "snack" diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 95f118a0c91..9b2c4aeefa3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -60,8 +60,8 @@ //SO HERE LIES THE "nutrilevel" VAR. IT'S DEAD AND I PUT IT OUT OF IT'S MISERY. USE "reagents" INSTEAD. ~ArcaneMusic, accept no substitutes. create_reagents(maxnutri, INJECTABLE) if(mapload) - reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. - waterlevel = 100 + reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, max(maxnutri / 2, 10)) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. + waterlevel = maxwater . = ..() var/static/list/hovering_item_typechecks = list( @@ -161,6 +161,7 @@ AddComponent(/datum/component/simple_rotation) AddComponent(/datum/component/plumbing/hydroponics) AddComponent(/datum/component/usb_port, list(/obj/item/circuit_component/hydroponics)) + AddComponent(/datum/component/fishing_spot, /datum/fish_source/hydro_tray) /obj/machinery/hydroponics/constructable/RefreshParts() . = ..() @@ -252,7 +253,7 @@ // Move the leaked water from nutrients to... water var/leaking_water_amount = nutri_reagents.get_reagent_amount(/datum/reagent/water) if(leaking_water_amount) - nutri_reagents.trans_id_to(water_reagents, /datum/reagent/water, leaking_water_amount) + nutri_reagents.trans_to(water_reagents, leaking_water_amount, target_id = /datum/reagent/water) // We should only take MACHINE_REAGENT_TRANSFER every tick; this is the remaining amount we can take var/remaining_transfer_amount = max(MACHINE_REAGENT_TRANSFER - (nutri_reagents.total_volume - initial_nutri_amount), 0) @@ -325,9 +326,9 @@ // Nutrients deplete at a constant rate, since new nutrients can boost stats far easier. apply_chemicals(lastuser?.resolve()) if(self_sustaining) - reagents.remove_any(min(0.5, nutridrain)) + reagents.remove_all(min(0.5, nutridrain)) else - reagents.remove_any(nutridrain) + reagents.remove_all(nutridrain) // Lack of nutrients hurts non-weeds if(reagents.total_volume <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) @@ -886,7 +887,7 @@ if(istype(not_water_reagent,/datum/reagent/water)) continue var/transfer_me_to_tray = reagent_source.reagents.get_reagent_amount(not_water_reagent.type) * transfer_amount / reagent_source.reagents.total_volume - reagent_source.reagents.trans_id_to(H.reagents, not_water_reagent.type, transfer_me_to_tray) + reagent_source.reagents.trans_to(H.reagents, transfer_me_to_tray, target_id = not_water_reagent.type) else reagent_source.reagents.trans_to(H.reagents, transfer_amount, transferred_by = user) lastuser = WEAKREF(user) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index ef8b20875f6..71fc93f8930 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -304,14 +304,14 @@ // Heats up the plant's contents by 25 kelvin per 1 unit of nutriment. Mutually exclusive with cooling. if(get_gene(/datum/plant_gene/trait/chem_heating)) T.visible_message(span_notice("[T] releases freezing air, consuming its nutriments to heat its contents.")) - T.reagents.remove_all_type(/datum/reagent/consumable/nutriment, num_nutriment, strict = TRUE) + T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) T.reagents.chem_temp = min(1000, (T.reagents.chem_temp + num_nutriment * 25)) T.reagents.handle_reactions() playsound(T.loc, 'sound/effects/wounds/sizzle2.ogg', 5) // Cools down the plant's contents by 5 kelvin per 1 unit of nutriment. Mutually exclusive with heating. else if(get_gene(/datum/plant_gene/trait/chem_cooling)) T.visible_message(span_notice("[T] releases a blast of hot air, consuming its nutriments to cool its contents.")) - T.reagents.remove_all_type(/datum/reagent/consumable/nutriment, num_nutriment, strict = TRUE) + T.reagents.remove_reagent(/datum/reagent/consumable/nutriment, num_nutriment) T.reagents.chem_temp = max(3, (T.reagents.chem_temp + num_nutriment * -5)) T.reagents.handle_reactions() playsound(T.loc, 'sound/effects/space_wind.ogg', 50) diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index e728ae4d8e2..6dadcd5768e 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -18,7 +18,8 @@ if(user && movement_dir) //If we're not moving, don't compensate, as byond will auto-fill dir otherwise movement_dir = turn(movement_dir, -dir2angle(user.dir)) //By doing this we ensure that our input direction is offset by the client (camera) direction - if(user?.movement_locked) + //turn without moving while using the movement lock key, unless something wants to ignore it and move anyway + if(user?.movement_locked && !(SEND_SIGNAL(src, COMSIG_MOVABLE_KEYBIND_FACE_DIR, movement_dir) & COMSIG_IGNORE_MOVEMENT_LOCK)) keybind_face_direction(movement_dir) else user?.Move(get_step(src, movement_dir), movement_dir) diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 48621abfd1a..ecbcc397dba 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -323,13 +323,14 @@ GLOBAL_LIST_INIT(bibleitemstates, list( playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE) for(var/obj/item/soulstone/stone in sword.contents) stone.required_role = null - for(var/mob/living/simple_animal/shade/shade in stone) + for(var/mob/living/basic/shade/shade in stone) var/datum/antagonist/cult/cultist = shade.mind.has_antag_datum(/datum/antagonist/cult) if(cultist) cultist.silent = TRUE cultist.on_removal() - shade.icon_state = "shade_holy" - shade.name = "Purified [shade.name]" + shade.theme = THEME_HOLY + shade.name = "Purified [shade.real_name]" + shade.update_appearance(UPDATE_ICON_STATE) stone.release_shades(user) qdel(stone) new /obj/item/nullrod/claymore(get_turf(sword)) diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index e706872c710..19b65f82489 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -21,8 +21,6 @@ /// whether or not we have been carved out var/carved = FALSE - /// Specific window size for the book, i.e: "1920x1080", Size x Width - var/window_size = null /// The initial title, for use in var editing and such var/starting_title /// The initial author, for use in var editing and such @@ -51,35 +49,53 @@ return data /obj/item/book/ui_interact(mob/living/user, datum/tgui/ui) - if(carved) - balloon_alert(user, "book is carved out!") - return - if(!length(book_data.get_content())) - balloon_alert(user, "book is blank!") - return - - if(istype(user) && !isnull(user.mind)) - LAZYINITLIST(user.mind.book_titles_read) - var/has_not_read_book = !(starting_title in user.mind.book_titles_read) - if(has_not_read_book) - user.add_mood_event("book_nerd", /datum/mood_event/book_nerd) - user.mind.book_titles_read[starting_title] = TRUE - ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "MarkdownViewer", name) ui.open() -/obj/item/book/attack_self(mob/user) +/// Proc that handles sending the book information to the user, as well as some housekeeping stuff. +/obj/item/book/proc/display_content(mob/living/user) + credit_book_to_reader(user) + ui_interact(user) + +/// Proc that checks if the user is capable of reading the book, for UI interactions and otherwise. Returns TRUE if they can, FALSE if they can't. +/obj/item/book/proc/can_read_book(mob/living/user) if(user.is_blind()) to_chat(user, span_warning("You are blind and can't read anything!")) - return + return FALSE if(!user.can_read(src)) + return FALSE + + if(carved) + balloon_alert(user, "book is carved out!") + return FALSE + + if(!length(book_data.get_content())) + balloon_alert(user, "book is blank!") + return FALSE + + return TRUE + +/// Proc that adds the book to a list on the user's mind so we know what works of art they've been catching up on. +/obj/item/book/proc/credit_book_to_reader(mob/living/user) + if(!isliving(user) || isnull(user.mind)) + return + + LAZYINITLIST(user.mind.book_titles_read) + if(starting_title in user.mind.book_titles_read) + return + + user.add_mood_event("book_nerd", /datum/mood_event/book_nerd) + user.mind.book_titles_read[starting_title] = TRUE + +/obj/item/book/attack_self(mob/user) + if(!can_read_book(user)) return user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently.")) - ui_interact(user) + display_content(user) /obj/item/book/attackby(obj/item/attacking_item, mob/living/user, params) if(burn_paper_product_attackby_check(attacking_item, user)) diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index 967ae9b39a3..007e0b5e456 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -56,9 +56,6 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) ///current timer for phase var/next_phase_timer - ///used for debugging in testing (doesn't put people out of the game, some other shit i forgot, who knows just don't set this in live) honestly kinda deprecated - var/debug = FALSE - ///was our game forced to start early? var/early_start = FALSE @@ -110,6 +107,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/Destroy(force, ...) . = ..() end_game() + player_role_lookup.Cut() QDEL_NULL(map_deleter) if(GLOB.mafia_game == src) GLOB.mafia_game = null @@ -126,10 +124,9 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * * Puts players in each role randomly * Arguments: * * setup_list: list of all the datum setups (fancy list of roles) that would work for the game - * * ready_ghosts: list of filtered, sane players (so not playing or disconnected) for the game to put into roles - * * ready_pdas: list of PDAs wanting to play the Mafia game. + * * ready_ghosts_and_pdas: list of filtered, sane (so not playing or disconnected) ghost ckeys & PDAs for the game to put into roles. */ -/datum/mafia_controller/proc/prepare_game(setup_list, ready_ghosts, ready_pdas) +/datum/mafia_controller/proc/prepare_game(setup_list, ready_ghosts_and_pdas) var/static/list/possible_maps = subtypesof(/datum/map_template/mafia) var/turf/spawn_area = get_turf(locate(/obj/effect/landmark/mafia_game_area) in GLOB.landmarks_list) @@ -141,8 +138,11 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/list/bounds = current_map.load(spawn_area) if(!bounds) CRASH("Loading mafia map failed!") - map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 23,spawn_area.y + 23,spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends - +#ifdef UNIT_TESTS //unit test map is smaller + map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 7, spawn_area.y + 7, spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends +#else + map_deleter.defineRegion(spawn_area, locate(spawn_area.x + 23, spawn_area.y + 23, spawn_area.z), replace = TRUE) //so we're ready to mass delete when round ends +#endif if(!landmarks.len)//we grab town center when we grab landmarks, if there is none (the first game signed up for let's grab them post load) for(var/obj/effect/landmark/mafia/possible_spawn in GLOB.landmarks_list) if(istype(possible_spawn, /obj/effect/landmark/mafia/town_center)) @@ -161,23 +161,14 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/list/spawnpoints = landmarks.Copy() for(var/datum/mafia_role/role as anything in all_roles) role.assigned_landmark = pick_n_take(spawnpoints) - var/selected_player - if(!debug) - if(length(ready_pdas)) - selected_player = pick(ready_pdas) - else - selected_player = pick(ready_ghosts) - else - if(length(ready_pdas)) - selected_player = peek(ready_pdas) - else - selected_player = peek(ready_ghosts) - if(selected_player in ready_pdas) - role.player_pda = selected_player - ready_pdas -= selected_player - else + var/selected_player //this can be a ckey or a PDA + selected_player = pick(ready_ghosts_and_pdas) + var/client/player_client = GLOB.directory[selected_player] + if(player_client) role.player_key = selected_player - ready_ghosts -= selected_player + else + role.player_pda = selected_player + ready_ghosts_and_pdas -= selected_player ///Sends a global message to all players, or just 'team' if set. /datum/mafia_controller/proc/send_message(msg, team, log_only = FALSE) @@ -205,6 +196,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) for(var/datum/mafia_role/roles as anything in all_roles) var/obj/item/modular_computer/modpc = roles.player_pda if(!modpc) + update_static_data(roles.body) continue modpc.update_static_data_for_all_viewers() @@ -400,11 +392,12 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(!rewarded.player_pda) return for(var/datum/tgui/window as anything in rewarded.player_pda.open_uis) - window.user?.client?.give_award(award, rewarded.body) + window.user?.client?.give_award(award, window.user.client.mob) /** * The end of the game is in two procs, because we want a bit of time for players to see eachothers roles. * Because of how check_victory works, the game is halted in other places by this point. + * We won't delete ourselves in a certain amount of time in unit tests, as the unit test will handle our deletion instead. * * What players do in this phase: * * See everyone's role postgame @@ -419,7 +412,9 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) roles.mafia_alert.update_text("[message]") roles.reveal_role(src) phase = MAFIA_PHASE_VICTORY_LAP +#ifndef UNIT_TESTS next_phase_timer = QDEL_IN_STOPPABLE(src, VICTORY_LAP_PERIOD_LENGTH) +#endif /** * Cleans up the game, resetting variables back to the beginning and removing the map with the generator. @@ -586,7 +581,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(phase != MAFIA_PHASE_VOTING) return - var/v = get_vote_count(player_role_lookup[source],"Day") + var/v = get_vote_count(get_role_player(source),"Day") var/mutable_appearance/MA = mutable_appearance('icons/obj/mafia.dmi',"vote_[v > 12 ? "over_12" : v]") overlay_list += MA @@ -612,310 +607,59 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) H.equipOutfit(outfit_to_distribute) H.status_flags |= GODMODE RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) - var/datum/action/innate/mafia_panel/mafia_panel = new(null,src) - mafia_panel.Grant(H) var/obj/item/modular_computer/modpc = role.player_pda role.register_body(H) if(modpc) player_role_lookup[modpc] = role else - player_role_lookup[H] = role + player_role_lookup[role.player_key] = role var/client/player_client = GLOB.directory[role.player_key] if(player_client) role.put_player_in_body(player_client) role.greet() -/datum/mafia_controller/ui_static_data(atom/user) - var/list/data = list() - - if(usr.client?.holder) - data["admin_controls"] = TRUE //show admin buttons to start/setup/stop - data["is_observer"] = isobserver(user) - data["all_roles"] = current_setup_text - - if(phase == MAFIA_PHASE_SETUP) - return data - - var/datum/mafia_role/user_role = player_role_lookup[user] - if(user_role) - data["roleinfo"] = list( - "role" = user_role.name, - "desc" = user_role.desc, - "hud_icon" = user_role.hud_icon, - "revealed_icon" = user_role.revealed_icon, - ) - - return data - -/datum/mafia_controller/ui_data(atom/user) - var/list/data = list() - - data["phase"] = phase - if(turn) - data["turn"] = " - Day [turn]" - - if(phase == MAFIA_PHASE_SETUP) - data["lobbydata"] = list() - for(var/key in GLOB.mafia_signup + GLOB.mafia_bad_signup + GLOB.pda_mafia_signup) - var/list/lobby_member = list() - lobby_member["name"] = key - lobby_member["status"] = (key in GLOB.mafia_bad_signup) ? "Disconnected" : "Ready" - data["lobbydata"] += list(lobby_member) - return data - - data["timeleft"] = next_phase_timer ? timeleft(next_phase_timer) : 0 - - var/datum/mafia_role/user_role = player_role_lookup[user] - if(user_role) - data["user_notes"] = user_role.written_notes - data["messages"] = list() - var/list/ui_messages = list() - for(var/i = user_role.role_messages.len to 1 step -1) - ui_messages.Add(list(list( - "msg" = user_role.role_messages[i], - ))) - data["messages"] = ui_messages - - data["players"] = list() - for(var/datum/mafia_role/role as anything in all_roles) - var/list/player_info = list() - player_info["name"] = role.body.real_name - player_info["ref"] = REF(role) - player_info["alive"] = role.game_status == MAFIA_ALIVE - player_info["possible_actions"] = list() - - if(user_role) //not observer - for(var/datum/mafia_ability/action as anything in user_role.role_unique_actions) - if(action.validate_action_target(src, potential_target = role, silent = TRUE)) - player_info["possible_actions"] += list(list("name" = action, "ref" = REF(action))) - - data["players"] += list(player_info) - - return data - -/datum/mafia_controller/ui_assets(mob/user) - return list( - get_asset_datum(/datum/asset/spritesheet/mafia), - ) - -/datum/mafia_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - var/datum/mafia_role/user_role = player_role_lookup[usr] - var/obj/item/modular_computer/modpc = ui.src_object +///From a 'user' (Either a mob or ModPC) or TGUI UI, will try to find the Mafia role from 'player_role_lookup'. +/datum/mafia_controller/proc/get_role_player(atom/user, datum/tgui/ui) + var/obj/item/modular_computer/modpc = ui?.src_object || user if(istype(modpc)) - user_role = player_role_lookup[modpc] + return player_role_lookup[modpc] + var/mob/mob_user = user + if(!istype(mob_user)) + CRASH("[user] is not a modPC nor a mob, but we are trying to find their role.") + return player_role_lookup[mob_user.ckey] + +/** + * Signs the player up for Mafia, or removes them from the list if they are already + * signed up. + * Args: + * - ghost_client: is the client of the observer signing up. This can be null in favor of modpc. + * - modpc: is a living player signing up through a PDA. This can be null in favor of ghost_client. + */ +/datum/mafia_controller/proc/signup_mafia(mob/user, client/ghost_client, obj/item/modular_computer/modpc) + if(!SSticker.HasRoundStarted()) + to_chat(user, span_warning("Wait for the round to start.")) + return FALSE + if(isnull(modpc)) + if(GLOB.mafia_signup[ghost_client.ckey]) + GLOB.mafia_signup -= ghost_client.ckey + GLOB.mafia_early_votes -= ghost_client.ckey //Remove their early start vote as well + to_chat(user, span_notice("You unregister from Mafia.")) + else + GLOB.mafia_signup[ghost_client.ckey] = TRUE + to_chat(user, span_notice("You sign up for Mafia.")) else - modpc = null - //Admin actions - if(ui.user.client.holder) - switch(action) - if("new_game") - if(phase == MAFIA_PHASE_SETUP) - return - basic_setup() - if("nuke") - qdel(src) - if("next_phase") - if(phase == MAFIA_PHASE_SETUP) - return - var/datum/timedevent/timer = SStimer.timer_id_dict[next_phase_timer] - if(!timer.spent) - var/datum/callback/tc = timer.callBack - deltimer(next_phase_timer) - tc.InvokeAsync() - return TRUE - if("players_home") - var/list/failed = list() - for(var/datum/mafia_role/player in all_roles) - if(!player.body) - failed += player - continue - player.body.forceMove(get_turf(player.assigned_landmark)) - if(failed.len) - to_chat(usr, "List of players who no longer had a body (if you see this, the game is runtiming anyway so just hit \"New Game\" to end it)") - for(var/datum/mafia_role/fail as anything in failed) - to_chat(usr, fail.player_key || fail.player_pda) - if("debug_setup") - var/list/debug_setup = list() - var/list/rolelist_dict = list("CANCEL", "FINISH") + GLOB.mafia_roles_by_name - var/done = FALSE - - while(!done) - to_chat(usr, "You have a total player count of [assoc_value_sum(debug_setup)] in this setup.") - var/chosen_role_name = tgui_input_list(usr, "Select a role!", "Custom Setup Creation", rolelist_dict) - if(!chosen_role_name) - return - switch(chosen_role_name) - if("CANCEL") - done = TRUE - return - if("FINISH") - done = TRUE - break - else - var/found_path = rolelist_dict[chosen_role_name] - var/role_count = tgui_input_number(usr, "How many? Zero to cancel.", "Custom Setup Creation", 0, 12) - if(role_count > 0) - debug_setup[found_path] = role_count - custom_setup = debug_setup - early_start = TRUE - try_autostart()//don't worry, this fails if there's a game in progress - if("cancel_setup") - custom_setup = list() - if("start_now") - forced_setup() - - switch(action) //both living and dead - if("mf_lookup") - var/role_lookup = params["role_name"] - var/datum/mafia_role/helper - for(var/datum/mafia_role/role as anything in all_roles) - if(role_lookup == role.name) - helper = role - break - helper.show_help(usr) - - if(!user_role)//just the dead - switch(action) - if("mf_signup") - var/client/ghost_client = ui.user.client - if(!SSticker.HasRoundStarted()) - to_chat(usr, span_warning("Wait for the round to start.")) - return - if(isnull(modpc)) - if(GLOB.mafia_signup[ghost_client.ckey]) - GLOB.mafia_signup -= ghost_client.ckey - GLOB.mafia_early_votes -= ghost_client.ckey //Remove their early start vote as well - to_chat(usr, span_notice("You unregister from Mafia.")) - return TRUE - else - GLOB.mafia_signup[ghost_client.ckey] = TRUE - to_chat(usr, span_notice("You sign up for Mafia.")) - else - if(GLOB.pda_mafia_signup[modpc]) - GLOB.pda_mafia_signup -= modpc - GLOB.mafia_early_votes -= modpc //Remove their early start vote as well - to_chat(usr, span_notice("You unregister from Mafia.")) - return TRUE - else - GLOB.pda_mafia_signup[modpc] = TRUE - to_chat(usr, span_notice("You sign up for Mafia.")) - if(phase == MAFIA_PHASE_SETUP) - check_signups() - try_autostart() - return TRUE - if("vote_to_start") - var/client/ghost_client = ui.user.client - if(phase != MAFIA_PHASE_SETUP) - to_chat(usr, span_notice("You cannot vote to start while a game is underway!")) - return - if(isnull(modpc)) - if(!GLOB.mafia_signup[ghost_client.ckey]) - to_chat(usr, span_notice("You must be signed up for this game to vote!")) - return - if(GLOB.mafia_early_votes[ghost_client.ckey]) - GLOB.mafia_early_votes -= ghost_client.ckey - to_chat(usr, span_notice("You are no longer voting to start the game early.")) - else - GLOB.mafia_early_votes[ghost_client.ckey] = ghost_client - to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) - if(check_start_votes()) //See if we have enough votes to start - forced_setup() - else - if(!GLOB.pda_mafia_signup[modpc]) - to_chat(usr, span_notice("You must be signed up for this game to vote!")) - return - if(GLOB.mafia_early_votes[modpc]) - GLOB.mafia_early_votes -= modpc - to_chat(usr, span_notice("You are no longer voting to start the game early.")) - else - GLOB.mafia_early_votes[modpc] = modpc - to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) - if(check_start_votes()) //See if we have enough votes to start - forced_setup() - return TRUE - - if(user_role && user_role.game_status == MAFIA_DEAD) - return - - //User actions (just living) - switch(action) - if("change_notes") - if(user_role.game_status == MAFIA_DEAD) - return TRUE - user_role.written_notes = sanitize_text(params["new_notes"]) - user_role.send_message_to_player("notes saved", balloon_alert = TRUE) + if(GLOB.pda_mafia_signup[modpc]) + GLOB.pda_mafia_signup -= modpc + GLOB.mafia_early_votes -= modpc //Remove their early start vote as well + to_chat(user, span_notice("You unregister from Mafia.")) return TRUE - if("send_message_to_chat") - if(user_role.game_status == MAFIA_DEAD) - return TRUE - var/message_said = sanitize_text(params["message"]) - user_role.body.say(message_said, forced = "mafia chat (sent by [ui.user.client])") - return TRUE - if("send_notes_to_chat") - if(user_role.game_status == MAFIA_DEAD || !user_role.written_notes) - return TRUE - if(phase == MAFIA_PHASE_NIGHT) - return TRUE - if(!COOLDOWN_FINISHED(user_role, note_chat_sending_cooldown)) - return FALSE - COOLDOWN_START(user_role, note_chat_sending_cooldown, MAFIA_NOTE_SENDING_COOLDOWN) - user_role.body.say("[user_role.written_notes]", forced = "mafia notes sending") - return TRUE - if("perform_action") - var/datum/mafia_role/target = locate(params["target"]) in all_roles - if(!istype(target)) - return - var/datum/mafia_ability/used_action = locate(params["action_ref"]) in user_role.role_unique_actions - if(!used_action) - return - switch(phase) - if(MAFIA_PHASE_DAY, MAFIA_PHASE_VOTING) - used_action.using_ability = TRUE - used_action.perform_action_target(src, target) - if(MAFIA_PHASE_NIGHT) - used_action.set_target(src, target) - return TRUE - - if(user_role != on_trial) - switch(action) - if("vote_abstain") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_abstain_votes)) - return - user_role.send_message_to_player("You have decided to abstain.") - judgement_innocent_votes -= user_role - judgement_guilty_votes -= user_role - judgement_abstain_votes += user_role - if("vote_innocent") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_innocent_votes)) - return - user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as INNOCENT!") - judgement_abstain_votes -= user_role//no fakers, and... - judgement_guilty_votes -= user_role//no radical centrism - judgement_innocent_votes += user_role - if("vote_guilty") - if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_guilty_votes)) - return - user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as GUILTY!") - judgement_abstain_votes -= user_role//no fakers, and... - judgement_innocent_votes -= user_role//no radical centrism - judgement_guilty_votes += user_role - -/datum/mafia_controller/ui_state(mob/user) - return GLOB.always_state - -/datum/mafia_controller/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, null) - if(!ui) - ui = new(user, src, "MafiaPanel") - ui.open() - -/proc/assoc_value_sum(list/L) - . = 0 - for(var/key in L) - . += L[key] + else + GLOB.pda_mafia_signup[modpc] = TRUE + to_chat(user, span_notice("You sign up for Mafia.")) + if(phase == MAFIA_PHASE_SETUP) + check_signups() + try_autostart() + return TRUE /** * Returns a standard setup, with certain important/unique roles guaranteed. @@ -960,18 +704,16 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/basic_setup() var/req_players = MAFIA_MAX_PLAYER_COUNT var/list/setup = custom_setup - if(setup.len) + if(length(setup)) req_players = assoc_value_sum(setup) - var/list/filtered_pdas = GLOB.pda_mafia_signup - if(!isnull(filtered_pdas)) //pdas get priority - req_players -= length(GLOB.pda_mafia_signup) - var/list/filtered_keys = filter_players(req_players) - var/needed_players = length(filtered_keys) + length(filtered_pdas) + var/list/filtered_keys_and_pdas = filter_players(req_players) - if(!setup.len) //don't actually have one yet, so generate a max player random setup. it's good to do this here instead of above so it doesn't generate one every time a game could possibly start. - setup = generate_standard_setup(needed_players) - prepare_game(setup, filtered_keys, filtered_pdas) + //don't actually have one yet, so generate a max player random setup. + //it's good to do this here instead of above so it doesn't generate one every time a game could possibly start. + if(!length(setup)) + setup = generate_standard_setup(length(filtered_keys_and_pdas)) + prepare_game(setup, filtered_keys_and_pdas) start_game() /** @@ -982,17 +724,15 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/forced_setup() check_signups() //Refresh the signup list, so our numbers are accurate and we only take active players into consideration. - var/list/filtered_pdas = GLOB.pda_mafia_signup - var/list/filtered_keys = filter_players(length(GLOB.mafia_signup)) - var/req_players = length(filtered_keys) + length(filtered_pdas) - - if(!req_players) //If we have nobody signed up, we give up on starting + var/players_needed = GLOB.mafia_signup.len + GLOB.pda_mafia_signup.len + var/list/filtered_keys_and_pdas = filter_players(players_needed) + if(!length(filtered_keys_and_pdas)) //If we have nobody signed up, we give up on starting log_admin("Attempted to force a mafia game to start with nobody signed up!") return - var/list/setup = generate_standard_setup(req_players) + var/list/setup = generate_standard_setup(length(filtered_keys_and_pdas)) - prepare_game(setup, filtered_keys, filtered_pdas) + prepare_game(setup, filtered_keys_and_pdas) early_start = TRUE start_game() @@ -1006,10 +746,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/proc/check_start_votes() check_signups() //Same as before. What a useful proc. - if(length(GLOB.mafia_signup) < MAFIA_MIN_PLAYER_COUNT) + if(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) < MAFIA_MIN_PLAYER_COUNT) return FALSE //Make sure we have the minimum playercount to host a game first. - if(length(GLOB.mafia_early_votes) < round(length(GLOB.mafia_signup) / 2)) + if(length(GLOB.mafia_early_votes) < round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2)) return FALSE return TRUE @@ -1023,38 +763,44 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * This should only be run as we are in the process of starting a game. * * max_players - The maximum number of keys to put in our return list before we start telling people they're not getting in. - * filtered_keys - A list of player ckeys, to be included in the game. + * filtered_keys_and_pdas - A list of player ckeys and PDAs, to be included in the game. */ /datum/mafia_controller/proc/filter_players(max_players) //final list for all the players who will be in this game - var/list/filtered_keys = list() + var/list/filtered_keys_and_pdas = list() //cuts invalid players from signups (disconnected/not a ghost) - var/list/possible_keys = list() + var/list/possible_players = list() for(var/key in GLOB.mafia_signup) if(GLOB.directory[key]) var/client/C = GLOB.directory[key] if(isobserver(C.mob)) - possible_keys += key + possible_players += key continue GLOB.mafia_signup -= key //not valid to play when we checked so remove them from signups - //If we're not over capacity and don't need to notify anyone of their exclusion, return early. - if(length(possible_keys) < max_players) - return filtered_keys + for(var/obj/item/modular_computer/pda/pdas as anything in GLOB.pda_mafia_signup) + possible_players += pdas //if there were too many players, still start but only make filtered keys as big as it needs to be (cut excess) //also removes people who do get into final player list from the signup so they have to sign up again when game ends for(var/i in 1 to max_players) - var/chosen_key = pick_n_take(possible_keys) - filtered_keys += chosen_key - GLOB.mafia_signup -= chosen_key + if(!length(possible_players)) + break + var/chosen_key = pick_n_take(possible_players) + filtered_keys_and_pdas += chosen_key + if(chosen_key in GLOB.pda_mafia_signup) + GLOB.pda_mafia_signup -= chosen_key + else if(chosen_key in GLOB.mafia_signup) + GLOB.mafia_signup -= chosen_key //small message about not getting into this game for clarity on why they didn't get in - for(var/unpicked in possible_keys) + for(var/unpicked in possible_players) + if(!(unpicked in GLOB.mafia_signup)) + continue var/client/unpicked_client = GLOB.directory[unpicked] to_chat(unpicked_client, span_danger("Sorry, the starting mafia game has too many players and you were not picked.")) to_chat(unpicked_client, span_warning("You're still signed up, getting messages from the current round, and have another chance to join when the one starting now finishes.")) - return filtered_keys + return filtered_keys_and_pdas /** * Called when someone signs up, and sees if there are enough people in the signup list to begin. @@ -1073,6 +819,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * If a disconnected player gets a non-ghost mob and reconnects, they will be first put back into mafia_signup then filtered by that. */ /datum/mafia_controller/proc/check_signups() +#ifndef UNIT_TESTS for(var/bad_key in GLOB.mafia_bad_signup) if(GLOB.directory[bad_key])//they have reconnected if we can search their key and get a client GLOB.mafia_bad_signup -= bad_key @@ -1086,6 +833,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(!isobserver(C.mob)) //they are back to playing the game, remove them from the signups GLOB.mafia_signup -= key +#endif /datum/action/innate/mafia_panel name = "Mafia Panel" @@ -1099,6 +847,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) . = ..() controller_panel = controller +/datum/action/innate/mafia_panel/Destroy() + . = ..() + controller_panel = null + /datum/action/innate/mafia_panel/Activate() controller_panel.ui_interact(owner) diff --git a/code/modules/mafia/controller_ui.dm b/code/modules/mafia/controller_ui.dm new file mode 100644 index 00000000000..cc901392d22 --- /dev/null +++ b/code/modules/mafia/controller_ui.dm @@ -0,0 +1,262 @@ +// 'user' can be a modPC, hence why it's pathed to the atom +/datum/mafia_controller/ui_static_data(atom/user) + var/list/data = list() + + if(usr?.client?.holder) + data["admin_controls"] = TRUE //show admin buttons to start/setup/stop + data["is_observer"] = isobserver(user) + data["all_roles"] = current_setup_text + + if(phase == MAFIA_PHASE_SETUP) + return data + + var/datum/mafia_role/user_role = get_role_player(user) + if(user_role) + data["roleinfo"] = list( + "role" = user_role.name, + "desc" = user_role.desc, + "hud_icon" = user_role.hud_icon, + "revealed_icon" = user_role.revealed_icon, + ) + + return data + +// 'user' can be a modPC, hence why it's pathed to the atom +/datum/mafia_controller/ui_data(atom/user) + var/list/data = list() + + data["phase"] = phase + if(turn) + data["turn"] = " - Day [turn]" + + if(phase == MAFIA_PHASE_SETUP) + data["lobbydata"] = list() + for(var/key in GLOB.mafia_signup + GLOB.mafia_bad_signup + GLOB.pda_mafia_signup) + var/list/lobby_member = list() + lobby_member["name"] = key + lobby_member["status"] = (key in GLOB.mafia_bad_signup) ? "Disconnected" : "Ready" + data["lobbydata"] += list(lobby_member) + return data + + data["timeleft"] = next_phase_timer ? timeleft(next_phase_timer) : 0 + + var/datum/mafia_role/user_role = get_role_player(user) + if(user_role) + data["user_notes"] = user_role.written_notes + var/list/ui_messages = list() + for(var/i = user_role.role_messages.len to 1 step -1) + ui_messages.Add(list(list( + "msg" = user_role.role_messages[i], + ))) + data["messages"] = ui_messages + + data["players"] = list() + for(var/datum/mafia_role/role as anything in all_roles) + var/list/player_info = list() + player_info["name"] = role.body.real_name + player_info["ref"] = REF(role) + player_info["alive"] = role.game_status == MAFIA_ALIVE + player_info["possible_actions"] = list() + + if(user_role) //not observer + player_info["is_you"] = (role.body.real_name == user_role.body.real_name) + for(var/datum/mafia_ability/action as anything in user_role.role_unique_actions) + if(action.validate_action_target(src, potential_target = role, silent = TRUE)) + player_info["possible_actions"] += list(list("name" = action, "ref" = REF(action))) + + data["players"] += list(player_info) + + return data + +/datum/mafia_controller/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/mafia), + ) + +/datum/mafia_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/datum/mafia_role/user_role = get_role_player(usr, ui) + var/obj/item/modular_computer/modpc = ui.src_object + if(!istype(modpc)) + modpc = null + //Admin actions + if(ui.user.client.holder) + switch(action) + if("new_game") + if(phase == MAFIA_PHASE_SETUP) + return + basic_setup() + if("nuke") + qdel(src) + if("next_phase") + if(phase == MAFIA_PHASE_SETUP) + return + var/datum/timedevent/timer = SStimer.timer_id_dict[next_phase_timer] + if(!timer.spent) + var/datum/callback/tc = timer.callBack + deltimer(next_phase_timer) + tc.InvokeAsync() + return TRUE + if("players_home") + var/list/failed = list() + for(var/datum/mafia_role/player in all_roles) + if(!player.body) + failed += player + continue + player.body.forceMove(get_turf(player.assigned_landmark)) + if(failed.len) + to_chat(usr, "List of players who no longer had a body (if you see this, the game is runtiming anyway so just hit \"New Game\" to end it)") + for(var/datum/mafia_role/fail as anything in failed) + to_chat(usr, fail.player_key || fail.player_pda) + if("debug_setup") + var/list/debug_setup = list() + var/list/rolelist_dict = list("CANCEL", "FINISH") + GLOB.mafia_roles_by_name + var/done = FALSE + + while(!done) + to_chat(usr, "You have a total player count of [assoc_value_sum(debug_setup)] in this setup.") + var/chosen_role_name = tgui_input_list(usr, "Select a role!", "Custom Setup Creation", rolelist_dict) + if(!chosen_role_name) + return + switch(chosen_role_name) + if("CANCEL") + done = TRUE + return + if("FINISH") + done = TRUE + break + else + var/found_path = rolelist_dict[chosen_role_name] + var/role_count = tgui_input_number(usr, "How many? Zero to cancel.", "Custom Setup Creation", 0, 12) + if(role_count > 0) + debug_setup[found_path] = role_count + custom_setup = debug_setup + early_start = TRUE + try_autostart()//don't worry, this fails if there's a game in progress + if("cancel_setup") + custom_setup = list() + if("start_now") + forced_setup() + + switch(action) //both living and dead + if("mf_lookup") + var/role_lookup = params["role_name"] + var/datum/mafia_role/helper + for(var/datum/mafia_role/role as anything in all_roles) + if(role_lookup == role.name) + helper = role + break + helper.show_help(usr) + + if(!user_role)//just the dead + switch(action) + if("mf_signup") + if(signup_mafia(usr, ui.user.client, modpc)) + return TRUE + if("vote_to_start") + var/client/ghost_client = ui.user.client + if(phase != MAFIA_PHASE_SETUP) + to_chat(usr, span_notice("You cannot vote to start while a game is underway!")) + return + if(isnull(modpc)) + if(!GLOB.mafia_signup[ghost_client.ckey]) + to_chat(usr, span_notice("You must be signed up for this game to vote!")) + return + if(GLOB.mafia_early_votes[ghost_client.ckey]) + GLOB.mafia_early_votes -= ghost_client.ckey + to_chat(usr, span_notice("You are no longer voting to start the game early.")) + else + GLOB.mafia_early_votes[ghost_client.ckey] = ghost_client + to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) + if(check_start_votes()) //See if we have enough votes to start + forced_setup() + else + if(!GLOB.pda_mafia_signup[modpc]) + to_chat(usr, span_notice("You must be signed up for this game to vote!")) + return + if(GLOB.mafia_early_votes[modpc]) + GLOB.mafia_early_votes -= modpc + to_chat(usr, span_notice("You are no longer voting to start the game early.")) + else + GLOB.mafia_early_votes[modpc] = modpc + to_chat(usr, span_notice("You vote to start the game early ([length(GLOB.mafia_early_votes)] out of [max(round(length(GLOB.mafia_signup + GLOB.pda_mafia_signup) / 2), round(MAFIA_MIN_PLAYER_COUNT / 2))]).")) + if(check_start_votes()) //See if we have enough votes to start + forced_setup() + return TRUE + + if(user_role && user_role.game_status == MAFIA_DEAD) + return + + //User actions (just living) + switch(action) + if("change_notes") + if(user_role.game_status == MAFIA_DEAD) + return TRUE + user_role.written_notes = sanitize_text(params["new_notes"]) + user_role.send_message_to_player("notes saved", balloon_alert = TRUE) + return TRUE + if("send_message_to_chat") + if(user_role.game_status == MAFIA_DEAD) + return TRUE + var/message_said = sanitize_text(params["message"]) + user_role.body.say(message_said, forced = "mafia chat (sent by [ui.user.client])") + return TRUE + if("send_notes_to_chat") + if(user_role.game_status == MAFIA_DEAD || !user_role.written_notes) + return TRUE + if(phase == MAFIA_PHASE_NIGHT) + return TRUE + if(!COOLDOWN_FINISHED(user_role, note_chat_sending_cooldown)) + return FALSE + COOLDOWN_START(user_role, note_chat_sending_cooldown, MAFIA_NOTE_SENDING_COOLDOWN) + user_role.body.say("[user_role.written_notes]", forced = "mafia notes sending") + return TRUE + if("perform_action") + var/datum/mafia_role/target = locate(params["target"]) in all_roles + if(!istype(target)) + return + var/datum/mafia_ability/used_action = locate(params["action_ref"]) in user_role.role_unique_actions + if(!used_action) + return + switch(phase) + if(MAFIA_PHASE_DAY, MAFIA_PHASE_VOTING) + used_action.using_ability = TRUE + used_action.perform_action_target(src, target) + if(MAFIA_PHASE_NIGHT) + used_action.set_target(src, target) + return TRUE + + if(user_role != on_trial) + switch(action) + if("vote_abstain") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_abstain_votes)) + return + user_role.send_message_to_player("You have decided to abstain.") + judgement_innocent_votes -= user_role + judgement_guilty_votes -= user_role + judgement_abstain_votes += user_role + if("vote_innocent") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_innocent_votes)) + return + user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as INNOCENT!") + judgement_abstain_votes -= user_role//no fakers, and... + judgement_guilty_votes -= user_role//no radical centrism + judgement_innocent_votes += user_role + if("vote_guilty") + if(phase != MAFIA_PHASE_JUDGEMENT || (user_role in judgement_guilty_votes)) + return + user_role.send_message_to_player("Your vote on [on_trial.body.real_name] submitted as GUILTY!") + judgement_abstain_votes -= user_role//no fakers, and... + judgement_innocent_votes -= user_role//no radical centrism + judgement_guilty_votes += user_role + +/datum/mafia_controller/ui_state(mob/user) + return GLOB.always_state + +/datum/mafia_controller/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, null) + if(!ui) + ui = new(user, src, "MafiaPanel") + ui.open() diff --git a/code/modules/mafia/map_pieces.dm b/code/modules/mafia/map_pieces.dm index 0d27d6cd1b5..f3a6baced78 100644 --- a/code/modules/mafia/map_pieces.dm +++ b/code/modules/mafia/map_pieces.dm @@ -28,48 +28,65 @@ /datum/map_template/mafia should_place_on_top = FALSE + ///The map suffix to put onto the mappath. + var/map_suffix ///A brief background tidbit var/description = "" ///What costume will this map force players to start with? var/custom_outfit +/datum/map_template/mafia/New(path = null, rename = null, cache = FALSE) + path = "_maps/map_files/Mafia/" + map_suffix + return ..() + +//we only have one map in unit tests for consistency. +#ifdef UNIT_TESTS +/datum/map_template/mafia/unit_test + name = "Mafia Unit Test" + description = "A map designed specifically for Unit Testing to ensure the game runs properly." + map_suffix = "mafia_unit_test.dmm" + +#else + /datum/map_template/mafia/summerball name = "Summerball 2020" description = "The original, the OG. The 2020 Summer ball was where mafia came from, with this map." - mappath = "_maps/map_files/Mafia/mafia_ball.dmm" - -/datum/map_template/mafia/syndicate - name = "Syndicate Megastation" - description = "Yes, it's a very confusing day at the Megastation. Will the syndicate conflict resolution operatives succeed?" - mappath = "_maps/map_files/Mafia/mafia_syndie.dmm" - custom_outfit = /datum/outfit/mafia/syndie - -/datum/map_template/mafia/lavaland - name = "Lavaland Excursion" - description = "The station has no idea what's going down on lavaland right now, we got changelings... traitors, and worst of all... lawyers roleblocking you every night." - mappath = "_maps/map_files/Mafia/mafia_lavaland.dmm" - custom_outfit = /datum/outfit/mafia/lavaland + map_suffix = "mafia_ball.dmm" /datum/map_template/mafia/ufo name = "Alien Mothership" description = "The haunted ghost UFO tour has gone south and now it's up to our fine townies and scare seekers to kill the actual real alien changelings..." - mappath = "_maps/map_files/Mafia/mafia_ayylmao.dmm" + map_suffix = "mafia_ayylmao.dmm" custom_outfit = /datum/outfit/mafia/abductee /datum/map_template/mafia/spider_clan name = "Spider Clan Kidnapping" description = "New and improved spider clan kidnappings are a lot less boring and have a lot more lynching. Damn westaboos!" - mappath = "_maps/map_files/Mafia/mafia_spiderclan.dmm" + map_suffix = "mafia_spiderclan.dmm" custom_outfit = /datum/outfit/mafia/ninja -/datum/map_template/mafia/snowy - name = "Snowdin" - description = "Based off of the icy moon map of the same name, the guy who reworked it did a good enough job to recieve a derivative piece of work based on it. Cool!" - mappath = "_maps/map_files/Mafia/mafia_snow.dmm" - custom_outfit = /datum/outfit/mafia/snowy - /datum/map_template/mafia/gothic name = "Vampire's Castle" description = "Vampires and changelings clash to find out who's the superior bloodsucking monster in this creepy castle map." - mappath = "_maps/map_files/Mafia/mafia_gothic.dmm" + map_suffix = "mafia_gothic.dmm" custom_outfit = /datum/outfit/mafia/gothic + +/datum/map_template/mafia/syndicate + name = "Syndicate Megastation" + description = "Yes, it's a very confusing day at the Megastation. Will the syndicate conflict resolution operatives succeed?" + map_suffix = "mafia_syndie.dmm" + custom_outfit = /datum/outfit/mafia/syndie + +/datum/map_template/mafia/snowy + name = "Snowdin" + description = "Based off of the icy moon map of the same name, the guy who reworked it did a good enough job to recieve a derivative piece of work based on it. Cool!" + map_suffix = "mafia_snow.dmm" + custom_outfit = /datum/outfit/mafia/snowy + +/datum/map_template/mafia/lavaland + name = "Lavaland Excursion" + description = "The station has no idea what's going down on lavaland right now, we got changelings... traitors, and worst of all... lawyers roleblocking you every night." + map_suffix = "mafia_lavaland.dmm" + custom_outfit = /datum/outfit/mafia/lavaland + +#endif diff --git a/code/modules/mafia/roles/neutral/neutral_chaos.dm b/code/modules/mafia/roles/neutral/neutral_chaos.dm index e4bd5ca0f17..de2c7fc4833 100644 --- a/code/modules/mafia/roles/neutral/neutral_chaos.dm +++ b/code/modules/mafia/roles/neutral/neutral_chaos.dm @@ -1,6 +1,6 @@ /datum/mafia_role/obsessed name = "Obsessed" - desc = "You're completely lost in your own mind. You win by lynching your obsession before you get killed in this mess. Obsession assigned on the first night!" + desc = "Lynch your obsession before you get killed at all costs!" win_condition = "lynch their obsession." revealed_outfit = /datum/outfit/mafia/obsessed team = MAFIA_TEAM_SOLO @@ -15,20 +15,26 @@ /datum/mafia_role/obsessed/New(datum/mafia_controller/game) //note: obsession is always a townie . = ..() + desc = initial(desc) + " Obsessions are assigned on the first night." RegisterSignal(game, COMSIG_MAFIA_SUNDOWN, PROC_REF(find_obsession)) /datum/mafia_role/obsessed/proc/find_obsession(datum/mafia_controller/game) SIGNAL_HANDLER - var/list/all_roles_shuffle = shuffle(game.living_roles) + var/list/all_roles_shuffle = shuffle(game.living_roles) - src for(var/datum/mafia_role/possible as anything in all_roles_shuffle) if(possible.team == MAFIA_TEAM_TOWN) obsession = possible break if(!obsession) obsession = pick(all_roles_shuffle) //okay no town just pick anyone here - //if you still don't have an obsession you're playing a single player game like i can't help your dumb ass - to_chat(body, span_userdanger("Your obsession is [obsession.body.real_name]! Get them lynched to win!")) + desc = initial(desc) + " Target: [obsession.body.real_name]" + var/obj/item/modular_computer/modpc = player_pda + if(modpc) + modpc.update_static_data_for_all_viewers() + else + game.update_static_data(body) + send_message_to_player(span_userdanger("Your obsession is [obsession.body.real_name]! Get them lynched to win!")) RegisterSignal(obsession, COMSIG_MAFIA_ON_KILL, PROC_REF(check_victory)) UnregisterSignal(game, COMSIG_MAFIA_SUNDOWN) diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm index efe0d25c5b9..f301a8ac02a 100644 --- a/code/modules/mafia/roles/roles.dm +++ b/code/modules/mafia/roles/roles.dm @@ -27,6 +27,9 @@ var/mob/living/carbon/human/body var/obj/effect/landmark/mafia/assigned_landmark + ///The Mafia innate action panel that allows players to view the game's state. + var/datum/action/innate/mafia_panel/mafia_panel + ///how many votes submitted when you vote. used in voting and deciding victory. var/vote_power = 1 ///what they get equipped with when they are revealed @@ -49,6 +52,7 @@ /datum/mafia_role/New(datum/mafia_controller/game) . = ..() + mafia_panel = new(null, game) for(var/datum/mafia_ability/abilities as anything in role_unique_actions + /datum/mafia_ability/voting) role_unique_actions += new abilities(game, src) role_unique_actions -= abilities @@ -56,14 +60,21 @@ /datum/mafia_role/Destroy(force, ...) UnregisterSignal(body, COMSIG_MOB_SAY) QDEL_NULL(mafia_alert) - QDEL_NULL(body) + QDEL_NULL(mafia_panel) QDEL_LIST(role_unique_actions) - role_messages = null + //we null these instead of qdel because Mafia controller's mapdeleter deletes it all. + assigned_landmark = null + body = null + role_messages.Cut() return ..() /datum/mafia_role/proc/register_body(mob/living/carbon/human/new_body) + if(body) + UnregisterSignal(new_body, COMSIG_MOB_SAY) + mafia_panel.Remove(body) body = new_body RegisterSignal(new_body, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + mafia_panel.Grant(new_body) /** * send_message_to_player @@ -118,14 +129,15 @@ * * Does not count as visiting, see visit proc. */ -/datum/mafia_role/proc/kill(datum/mafia_controller/game, datum/mafia_role/attacker, lynch=FALSE) +/datum/mafia_role/proc/kill(datum/mafia_controller/game, datum/mafia_role/attacker, lynch = FALSE) + if(game_status == MAFIA_DEAD) + return FALSE if(attacker && (attacker.role_flags & ROLE_ROLEBLOCKED)) return FALSE if(SEND_SIGNAL(src, COMSIG_MAFIA_ON_KILL, game, attacker, lynch) & MAFIA_PREVENT_KILL) return FALSE - if(game_status != MAFIA_DEAD) - game_status = MAFIA_DEAD - body.death() + game_status = MAFIA_DEAD + body.death() if(lynch) reveal_role(game, verbose = TRUE) game.living_roles -= src diff --git a/code/modules/mapfluff/ruins/generic.dm b/code/modules/mapfluff/ruins/generic.dm new file mode 100644 index 00000000000..8c05bb2a58e --- /dev/null +++ b/code/modules/mapfluff/ruins/generic.dm @@ -0,0 +1,3 @@ +/obj/modular_map_root/generic + config_file = "strings/modular_maps/generic.toml" + diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm index 0e5437b9fd4..1ec15d01345 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm @@ -173,7 +173,7 @@ //Setup random empty tile empty_tile_id = pick_n_take(left_ids) var/turf/empty_tile_turf = get_turf_for_id(empty_tile_id) - empty_tile_turf.PlaceOnTop(floor_type,null,CHANGETURF_INHERIT_AIR) + empty_tile_turf.place_on_top(floor_type, CHANGETURF_INHERIT_AIR) var/mutable_appearance/MA = new(puzzle_pieces["[empty_tile_id]"]) MA.layer = empty_tile_turf.layer + 0.1 empty_tile_turf.add_overlay(MA) @@ -182,7 +182,7 @@ var/list/empty_spots = left_ids.Copy() for(var/spot_id in empty_spots) var/turf/T = get_turf_for_id(spot_id) - T = T.PlaceOnTop(floor_type,null,CHANGETURF_INHERIT_AIR) + T = T.place_on_top(floor_type, CHANGETURF_INHERIT_AIR) var/obj/structure/puzzle_element/E = new element_type(T) elements += E var/chosen_id = pick_n_take(left_ids) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm index 6f08be00e5d..99f1b9196e1 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm @@ -47,44 +47,45 @@ //PLEASE VIEW SKYRAT ASHWALKER MODULE FOR OVERRIDE /obj/structure/lavaland/ash_walker/proc/consume() - for(var/mob/living/H in view(src, 1)) //Only for corpse right next to/on same tile - if(H.stat) - for(var/obj/item/W in H) - if(!H.dropItemToGround(W)) + for(var/mob/living/offeredmob in view(src, 1)) //Only for corpse right next to/on same tile + if(offeredmob.loc == src) + continue //Ashwalker Revive in Progress... + if(offeredmob.stat) + for(var/obj/item/W in offeredmob) + if(!offeredmob.dropItemToGround(W)) qdel(W) - if(issilicon(H)) //no advantage to sacrificing borgs... - H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) - visible_message(span_notice("Serrated tendrils eagerly pull [H] apart, but find nothing of interest.")) + if(issilicon(offeredmob)) //no advantage to sacrificing borgs... + offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) + visible_message(span_notice("Serrated tendrils eagerly pull [offeredmob] apart, but find nothing of interest.")) return - if(H.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (H.ckey || H.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached - visible_message(span_warning("Serrated tendrils carefully pull [H] to [src], absorbing the body and creating it anew.")) + if(offeredmob.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (offeredmob.ckey || offeredmob.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached + visible_message(span_warning("Serrated tendrils carefully pull [offeredmob] to [src], absorbing the body and creating it anew.")) var/datum/mind/deadmind - if(H.ckey) - deadmind = H + if(offeredmob.ckey) + deadmind = offeredmob else - deadmind = H.get_ghost(FALSE, TRUE) + deadmind = offeredmob.get_ghost(FALSE, TRUE) to_chat(deadmind, "Your body has been returned to the nest. You are being remade anew, and will awaken shortly.
Your memories will remain intact in your new body, as your soul is being salvaged") SEND_SOUND(deadmind, sound('sound/magic/enter_blood.ogg',volume=100)) - addtimer(CALLBACK(src, PROC_REF(remake_walker), H.mind, H.real_name), 20 SECONDS) - new /obj/effect/gibspawner/generic(get_turf(H)) - qdel(H) + addtimer(CALLBACK(src, PROC_REF(remake_walker), offeredmob), 20 SECONDS) + offeredmob.forceMove(src) return - if(ismegafauna(H)) + if(ismegafauna(offeredmob)) meat_counter += 20 else meat_counter++ - visible_message(span_warning("Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.")) + visible_message(span_warning("Serrated tendrils eagerly pull [offeredmob] to [src], tearing the body apart as its blood seeps over the eggs.")) playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE) - var/deliverykey = H.fingerprintslast //ckey of whoever brought the body + var/deliverykey = offeredmob.fingerprintslast //ckey of whoever brought the body var/mob/living/deliverymob = get_mob_by_key(deliverykey) //mob of said ckey //there is a 40% chance that the Lava Lizard unlocks their respawn with each sacrifice if(deliverymob && (deliverymob.mind?.has_antag_datum(/datum/antagonist/ashwalker)) && (deliverykey in ashies.players_spawned) && (prob(40))) to_chat(deliverymob, span_warning("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.")) ashies.players_spawned -= deliverykey - H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) - H.gib(DROP_ALL_REMAINS) + offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS) + offeredmob.gib(DROP_ALL_REMAINS) atom_integrity = min(atom_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril for(var/mob/living/L in view(src, 5)) if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker)) @@ -93,18 +94,20 @@ L.add_mood_event("oogabooga", /datum/mood_event/sacrifice_bad) ashies.sacrifices_made++ -//PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT -/obj/structure/lavaland/ash_walker/proc/remake_walker(datum/mind/oldmind, oldname) - var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) - M.set_species(/datum/species/lizard/ashwalker) - M.real_name = oldname - M.underwear = "Nude" - M.update_body() - M.remove_language(/datum/language/common) - oldmind.transfer_to(M) - M.mind.grab_ghost() - to_chat(M, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") - playsound(get_turf(M),'sound/magic/exit_blood.ogg', 100, TRUE) +// SKYRAT EDIT ADDITION - PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT +/obj/structure/lavaland/ash_walker/proc/remake_walker(mob/living/carbon/oldmob) + var/mob/living/carbon/human/newwalker = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) + newwalker.set_species(/datum/species/lizard/ashwalker) + newwalker.real_name = oldmob.real_name + newwalker.undershirt = "Nude" + newwalker.underwear = "Nude" + newwalker.update_body() + newwalker.remove_language(/datum/language/common) + oldmob.mind.transfer_to(newwalker) + newwalker.mind.grab_ghost() + to_chat(newwalker, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") + playsound(get_turf(newwalker),'sound/magic/exit_blood.ogg', 100, TRUE) + qdel(oldmob) /obj/structure/lavaland/ash_walker/proc/spawn_mob() if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm index 54e167fb255..f2734bb7b05 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm @@ -190,7 +190,12 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) M.playsound_local(T, null, 100, FALSE, 0, FALSE, pressure_affected = FALSE, sound_to_use = legion_sound) flash_color(M, flash_color = "#FF0000", flash_time = 50) var/mutable_appearance/release_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor") - notify_ghosts("Legion has been released in the [get_area(src)]!", source = src, alert_overlay = release_overlay, action = NOTIFY_JUMP, flashwindow = FALSE) + notify_ghosts( + "Legion has been released in the [get_area(src)]!", + source = src, + alert_overlay = release_overlay, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /obj/effect/decal/necropolis_gate_decal icon = 'icons/effects/96x96.dmi' diff --git a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm index 2ea63245661..56b09ef7f79 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm @@ -13,24 +13,3 @@ /obj/item/paper/fluff/ruins/clericsden/warning default_raw_text = "FATHER ODIVALLUS DO NOT GO FORWARD WITH THE RITUAL. THE ASTEROID WE'RE ANCHORED TO IS UNSTABLE, YOU WILL DESTROY THE STATION. I HOPE THIS REACHES YOU IN TIME. FATHER AURELLION." - -/mob/living/simple_animal/hostile/construct/proteon - name = "Proteon" - real_name = "Proteon" - desc = "A weaker construct meant to scour ruins for objects of Nar'Sie's affection. Those barbed claws are no joke." - icon_state = "proteon" - icon_living = "proteon" - maxHealth = 35 - health = 35 - melee_damage_lower = 8 - melee_damage_upper = 10 - retreat_distance = 4 //AI proteons will rapidly move in and out of combat to avoid conflict, but will still target and follow you. - attack_verb_continuous = "pinches" - attack_verb_simple = "pinch" - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/weapons/punch2.ogg' - playstyle_string = "You are a Proteon. Your abilities in combat are outmatched by most combat constructs, but you are still fast and nimble. Run metal and supplies, and cooperate with your fellow cultists." - -/mob/living/simple_animal/hostile/construct/proteon/hostile //Style of mob spawned by trapped cult runes in the cleric ruin. - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //standard ai construct behavior, breaks things if it wants, but not walls. diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 7917da4d542..47dca7b438e 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -29,6 +29,8 @@ var/list/ceiling_baseturfs = list() /datum/map_template/New(path = null, rename = null, cache = FALSE) + SHOULD_CALL_PARENT(TRUE) + . = ..() if(path) mappath = path if(mappath) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index cec7932f4f5..cf3835e247a 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -6,8 +6,9 @@ name = "baseturf editor" icon = 'icons/effects/mapping_helpers.dmi' icon_state = "" - + /// Replacing a specific turf var/list/baseturf_to_replace + /// The desired bottom turf var/baseturf plane = POINT_PLANE @@ -33,9 +34,16 @@ qdel(src) +/// Replaces all the requested baseturfs (usually space/baseturfbottom) with the desired baseturf. Skips if its already there /obj/effect/baseturf_helper/proc/replace_baseturf(turf/thing) thing.remove_baseturfs_from_typecache(baseturf_to_replace) - thing.PlaceOnBottom(fake_turf_type = baseturf) + + if(length(thing.baseturfs)) + var/turf/tile = thing.baseturfs[1] + if(tile == baseturf) + return + + thing.place_on_bottom(baseturf) /obj/effect/baseturf_helper/space name = "space baseturf editor" @@ -145,11 +153,11 @@ if(1 to 9) var/turf/here = get_turf(src) for(var/turf/closed/T in range(2, src)) - here.PlaceOnTop(T.type) + here.place_on_top(T.type) qdel(airlock) qdel(src) return - here.PlaceOnTop(/turf/closed/wall) + here.place_on_top(/turf/closed/wall) qdel(airlock) qdel(src) return diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 14a8fdf6b94..ec2d2806a93 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -950,7 +950,7 @@ GLOBAL_LIST_EMPTY(map_model_default) // Note: we make the assertion that the last path WILL be a turf. if it isn't, this will fail. if(placeOnTop) - instance = crds.PlaceOnTop(null, members[index], CHANGETURF_DEFER_CHANGE | (no_changeturf ? CHANGETURF_SKIP : NONE)) + instance = crds.load_on_top(members[index], CHANGETURF_DEFER_CHANGE | (no_changeturf ? CHANGETURF_SKIP : NONE)) else if(no_changeturf) instance = create_atom(members[index], crds)//first preloader pass else diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index f42d572cb6c..b4165a13cd0 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -102,6 +102,7 @@ mech_sized = TRUE //save your ripley innate_accuracy_penalty = 6 light_on = FALSE + wibbles = FALSE /obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M) . = ..() diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 20a436dc5c6..c8c8cf966ba 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -6,136 +6,179 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) icon = 'icons/obj/fulton.dmi' icon_state = "extraction_pack" w_class = WEIGHT_CLASS_NORMAL - var/obj/structure/extraction_point/beacon + /// Beacon weakref + var/datum/weakref/beacon_ref + /// List of networks var/list/beacon_networks = list("station") + /// Number of uses left var/uses_left = 3 + /// Can be used indoors var/can_use_indoors - var/safe_for_living_creatures = 1 + /// Can be used on living creatures + var/safe_for_living_creatures = TRUE + /// Maximum force that can be used to extract var/max_force_fulton = MOVE_FORCE_STRONG /obj/item/extraction_pack/examine() . = ..() - . += "It has [uses_left] use\s remaining." + . += span_infoplain("It has [uses_left] use\s remaining.") + + var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() + + if(isnull(beacon)) + beacon_ref = null + . += span_infoplain("It is not linked to a beacon.") + return + + . += span_infoplain("It is linked to [beacon.name].") /obj/item/extraction_pack/attack_self(mob/user) var/list/possible_beacons = list() - for(var/obj/structure/extraction_point/extraction_point as anything in GLOB.total_extraction_beacons) + for(var/datum/weakref/point_ref as anything in GLOB.total_extraction_beacons) + var/obj/structure/extraction_point/extraction_point = point_ref.resolve() + if(isnull(extraction_point)) + GLOB.total_extraction_beacons.Remove(point_ref) if(extraction_point.beacon_network in beacon_networks) possible_beacons += extraction_point if(!length(possible_beacons)) - to_chat(user, span_warning("There are no extraction beacons in existence!")) + balloon_alert(user, "no beacons") return - else - var/chosen_beacon = tgui_input_list(user, "Beacon to connect to", "Balloon Extraction Pack", sort_names(possible_beacons)) - if(isnull(chosen_beacon)) - return - beacon = chosen_beacon - to_chat(user, span_notice("You link the extraction pack to the beacon system.")) -/obj/item/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user, flag, params) + var/chosen_beacon = tgui_input_list(user, "Beacon to connect to", "Balloon Extraction Pack", sort_names(possible_beacons)) + if(isnull(chosen_beacon)) + return + + beacon_ref = WEAKREF(chosen_beacon) + balloon_alert(user, "linked!") + +/obj/item/extraction_pack/afterattack(atom/movable/thing, mob/living/carbon/human/user, proximity_flag, params) . = ..() . |= AFTERATTACK_PROCESSED_ITEM - if(!beacon) - to_chat(user, span_warning("[src] is not linked to a beacon, and cannot be used!")) - return - if(!(beacon in GLOB.total_extraction_beacons)) - beacon = null - to_chat(user, span_warning("The connected beacon has been destroyed!")) - return - if(!can_use_indoors) - var/area/area = get_area(A) - if(!area.outdoors) - to_chat(user, span_warning("[src] can only be used on things that are outdoors!")) - return - if(!flag) - return - if(!istype(A)) - return - else - if(!safe_for_living_creatures && check_for_living_mobs(A)) - to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) - return - if(!isturf(A.loc)) // no extracting stuff inside other stuff - return - if(A.anchored || (A.move_resist > max_force_fulton)) - return - to_chat(user, span_notice("You start attaching the pack to [A]...")) - if(do_after(user,50,target=A)) - to_chat(user, span_notice("You attach the pack to [A] and activate it.")) - if(loc == user) - user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) - uses_left-- - if(uses_left <= 0) - user.transferItemToLoc(src, A, TRUE) - var/mutable_appearance/balloon - var/mutable_appearance/balloon2 - var/mutable_appearance/balloon3 - if(isliving(A)) - var/mob/living/M = A - M.Paralyze(320) // Keep them from moving during the duration of the extraction - if(M.buckled) - M.buckled.unbuckle_mob(M, TRUE) // Unbuckle them to prevent anchoring problems - else - A.set_anchored(TRUE) - A.set_density(FALSE) - var/obj/effect/extraction_holder/holder_obj = new(A.loc) - holder_obj.appearance = A.appearance - A.forceMove(holder_obj) - balloon2 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_expand") - balloon2.pixel_y = 10 - balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.add_overlay(balloon2) - sleep(0.4 SECONDS) - balloon = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_balloon") - balloon.pixel_y = 10 - balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.cut_overlay(balloon2) - holder_obj.add_overlay(balloon) - playsound(holder_obj.loc, 'sound/items/fultext_deploy.ogg', 50, TRUE, -3) - animate(holder_obj, pixel_z = 10, time = 20) - sleep(2 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', 50, TRUE, -3) - animate(holder_obj, pixel_z = 1000, time = 30) - if(ishuman(A)) - var/mob/living/carbon/human/L = A - L.SetUnconscious(0) - L.remove_status_effect(/datum/status_effect/drowsiness) - L.SetSleeping(0) - sleep(3 SECONDS) - var/list/flooring_near_beacon = list() - for(var/turf/open/floor in orange(1, beacon)) - flooring_near_beacon += floor - holder_obj.forceMove(pick(flooring_near_beacon)) - animate(holder_obj, pixel_z = 10, time = 50) - sleep(5 SECONDS) - animate(holder_obj, pixel_z = 15, time = 10) - sleep(1 SECONDS) - animate(holder_obj, pixel_z = 10, time = 10) - sleep(1 SECONDS) - balloon3 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_retract") - balloon3.pixel_y = 10 - balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM - holder_obj.cut_overlay(balloon) - holder_obj.add_overlay(balloon3) - sleep(0.4 SECONDS) - holder_obj.cut_overlay(balloon3) - A.set_anchored(FALSE) // An item has to be unanchored to be extracted in the first place. - A.set_density(initial(A.density)) - animate(holder_obj, pixel_z = 0, time = 5) - sleep(0.5 SECONDS) - A.forceMove(holder_obj.loc) - qdel(holder_obj) - if(uses_left <= 0) - qdel(src) + var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() + if(isnull(beacon)) + balloon_alert(user, "not linked") + beacon_ref = null + return + + if(!can_use_indoors) + var/area/area = get_area(thing) + if(!area.outdoors) + balloon_alert(user, "not outdoors") + return + + if(!proximity_flag || !istype(thing)) + return + + if(!safe_for_living_creatures && check_for_living_mobs(thing)) + to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) + balloon_alert(user, "not safe!") + return + + if(!isturf(thing.loc)) // no extracting stuff inside other stuff + return + if(thing.anchored || (thing.move_resist > max_force_fulton)) + return + + balloon_alert_to_viewers("attaching...") + playsound(thing, 'sound/items/zip.ogg', vol = 50, vary = TRUE) + if(isliving(thing)) + var/mob/living/creature = thing + if(creature.mind) + to_chat(thing, span_userdanger("You are being extracted! Stand still to proceed.")) + + if(!do_after(user, 5 SECONDS, target = thing)) + return + + balloon_alert_to_viewers("extracting!") + if(loc == user) + user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) + uses_left-- + + if(uses_left <= 0) + user.transferItemToLoc(src, thing, TRUE) + + var/mutable_appearance/balloon + var/mutable_appearance/balloon2 + var/mutable_appearance/balloon3 + + if(isliving(thing)) + var/mob/living/creature = thing + creature.Paralyze(32 SECONDS) // Keep them from moving during the duration of the extraction + if(creature.buckled) + creature.buckled.unbuckle_mob(creature, TRUE) // Unbuckle them to prevent anchoring problems + else + thing.set_anchored(TRUE) + thing.set_density(FALSE) + + var/obj/effect/extraction_holder/holder_obj = new(get_turf(thing)) + holder_obj.appearance = thing.appearance + thing.forceMove(holder_obj) + balloon2 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_expand") + balloon2.pixel_y = 10 + balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.add_overlay(balloon2) + + sleep(0.4 SECONDS) + + balloon = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_balloon") + balloon.pixel_y = 10 + balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.cut_overlay(balloon2) + holder_obj.add_overlay(balloon) + playsound(holder_obj.loc, 'sound/items/fultext_deploy.ogg', vol = 50, vary = TRUE, extrarange = -3) + + animate(holder_obj, pixel_z = 10, time = 2 SECONDS) + animate(pixel_z = 15, time = 1 SECONDS) + animate(pixel_z = 10, time = 1 SECONDS) + animate(pixel_z = 15, time = 1 SECONDS) + animate(pixel_z = 10, time = 1 SECONDS) + sleep(6 SECONDS) + + playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', vol = 50, vary = TRUE, extrarange = -3) + animate(holder_obj, pixel_z = 1000, time = 3 SECONDS) + + if(ishuman(thing)) + var/mob/living/carbon/human/creature = thing + creature.SetUnconscious(0) + creature.remove_status_effect(/datum/status_effect/drowsiness) + creature.SetSleeping(0) + + sleep(3 SECONDS) + + var/turf/flooring_near_beacon = list() + var/turf/beacon_turf = get_turf(beacon) + for(var/turf/floor as anything in RANGE_TURFS(1, beacon_turf)) + if(!floor.is_blocked_turf()) + flooring_near_beacon += floor + + if(!length(flooring_near_beacon)) + flooring_near_beacon += beacon_turf + + holder_obj.forceMove(pick(flooring_near_beacon)) + + animate(holder_obj, pixel_z = 10, time = 5 SECONDS) + animate(pixel_z = 15, time = 1 SECONDS) + animate(pixel_z = 10, time = 1 SECONDS) + sleep(7 SECONDS) + + balloon3 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_retract") + balloon3.pixel_y = 10 + balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + holder_obj.cut_overlay(balloon) + holder_obj.add_overlay(balloon3) + sleep(0.4 SECONDS) + + holder_obj.cut_overlay(balloon3) + thing.set_anchored(FALSE) // An item has to be unanchored to be extracted in the first place. + thing.set_density(initial(thing.density)) + animate(holder_obj, pixel_z = 0, time = 0.5 SECONDS) + sleep(0.5 SECONDS) + + thing.forceMove(holder_obj.loc) + qdel(holder_obj) + if(uses_left <= 0) + qdel(src) /obj/item/fulton_core name = "extraction beacon assembly kit" @@ -162,13 +205,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) /obj/structure/extraction_point/Initialize(mapload) . = ..() name += " ([rand(100,999)]) ([get_area_name(src, TRUE)])" - GLOB.total_extraction_beacons += src + GLOB.total_extraction_beacons.Add(WEAKREF(src)) update_appearance(UPDATE_OVERLAYS) -/obj/structure/extraction_point/Destroy() - GLOB.total_extraction_beacons -= src - return ..() - /obj/structure/extraction_point/attack_hand(mob/living/user, list/modifiers) . = ..() balloon_alert_to_viewers("undeploying...") diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index c66695091b0..950af6e8b8f 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -269,7 +269,7 @@ yield = 4 potency = 15 growthstages = 3 - rarity = 20 + rarity = PLANT_MODERATELY_RARE reagents_add = list(/datum/reagent/consumable/nutriment = 0.1) species = "polypore" // silence unit test genes = list(/datum/plant_gene/trait/fire_resistance) diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 554002fed54..4bf8fa8c57b 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -674,18 +674,15 @@ return to_chat(user, span_notice("You call out for aid, attempting to summon spirits to your side.")) - notify_ghosts("[user] is raising [user.p_their()] [name], calling for your help!", - enter_link="(Click to help)", - source = user, ignore_key = POLL_IGNORE_SPECTRAL_BLADE, header = "Spectral blade") + notify_ghosts( + "[user] is raising [user.p_their()] [name], calling for your help!", + source = user, + ignore_key = POLL_IGNORE_SPECTRAL_BLADE, + header = "Spectral blade", + ) summon_cooldown = world.time + 600 -/obj/item/melee/ghost_sword/Topic(href, href_list) - if(href_list["orbit"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - ghost.ManualFollow(src) - /obj/item/melee/ghost_sword/process() ghost_check() diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 9d1d4294669..8725fee2e22 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -55,7 +55,7 @@ if(12) new /obj/item/jacobs_ladder(src) if(13) - new /obj/item/guardiancreator/miner(src) + new /obj/item/guardian_creator/miner(src) if(14) new /obj/item/warp_cube/red(src) if(15) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 589cfbe3b3c..457bc438dfb 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -197,14 +197,14 @@ continue regurgitate_guardian(guardian) -/obj/item/clothing/neck/necklace/memento_mori/proc/consume_guardian(mob/living/simple_animal/hostile/guardian/guardian) +/obj/item/clothing/neck/necklace/memento_mori/proc/consume_guardian(mob/living/basic/guardian/guardian) new /obj/effect/temp_visual/guardian/phase/out(get_turf(guardian)) guardian.locked = TRUE guardian.forceMove(src) to_chat(guardian, span_userdanger("You have been locked away in your summoner's pendant!")) guardian.playsound_local(get_turf(guardian), 'sound/magic/summonitems_generic.ogg', 50, TRUE) -/obj/item/clothing/neck/necklace/memento_mori/proc/regurgitate_guardian(mob/living/simple_animal/hostile/guardian/guardian) +/obj/item/clothing/neck/necklace/memento_mori/proc/regurgitate_guardian(mob/living/basic/guardian/guardian) guardian.locked = FALSE guardian.recall(forced = TRUE) to_chat(guardian, span_notice("You have been returned back from your summoner's pendant!")) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 4f28db93bc6..848ecac0fa3 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -70,6 +70,7 @@ icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = TRUE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE /// Connected ore processing machine. var/obj/machinery/mineral/processing_unit/processing_machine diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 840c8e92900..7661549a77d 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) icon_state = "silo" density = TRUE circuit = /obj/item/circuitboard/machine/ore_silo + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE /// The machine UI's page of logs showing ore history. var/log_page = 1 diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 564ec2e92b0..607bbcd9f06 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -83,8 +83,6 @@ return if(!Adjacent(usr)) return - add_fingerprint(usr) - usr.set_machine(src) switch(action) if("removeall") dump_box_contents() diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index a1c7c0371b0..d1e75d0ab14 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -61,8 +61,9 @@ var/list/blacklist = bl if(!(picked_quirk in blacklist)) continue - for(var/iterator_quirk in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match - if((iterator_quirk in blacklist) && !(iterator_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) + for(var/quirk_name in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match + var/selected_quirk = SSquirks.quirks[quirk_name] + if((selected_quirk in blacklist) && !(selected_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) picked_quirk_blacklisted = TRUE break if(picked_quirk_blacklisted) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 9959c0e61c2..43e88dd57ed 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -756,17 +756,33 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp reenter_corpse() return - if(href_list["jump"]) - var/atom/movable/target = locate(href_list["jump"]) - var/turf/target_turf = get_turf(target) - if(target_turf && isturf(target_turf)) - abstract_move(target_turf) + if(href_list["view"]) + var/atom/target = locate(href_list["view"]) + observer_view(target) + return if(href_list["play"]) var/atom/movable/target = locate(href_list["play"]) - if(istype(target) && (target != src)) - target.attack_ghost(usr) - return + jump_to_interact(target) + +/// We orbit and interact with the target +/mob/dead/observer/proc/jump_to_interact(atom/target) + if(isnull(target) || target == src) + return + + ManualFollow(target) + target.attack_ghost(usr) + +/// We orbit the target or jump if its a turf +/mob/dead/observer/proc/observer_view(atom/target) + if(isnull(target) || target == src) + return + + if(isturf(target)) + abstract_move(target) + return + + ManualFollow(target) //We don't want to update the current var //But we will still carry a mind. diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 0688778b048..1bb8e61ef2b 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -46,20 +46,28 @@ /datum/emote/help/run_emote(mob/user, params, type_override, intentional) . = ..() var/list/keys = list() - var/list/message = list("Available emotes, you can use them with say \"*emote\": ") + var/list/message = list("Available emotes, you can use them with say [span_bold("\"*emote\"")]: \n") + message += span_smallnoticeital("Note - emotes highlighted in blue play a sound \n\n") for(var/key in GLOB.emote_list) - for(var/datum/emote/P in GLOB.emote_list[key]) - if(P.key in keys) + for(var/datum/emote/emote_action in GLOB.emote_list[key]) + if(emote_action.key in keys) continue - if(P.can_run_emote(user, status_check = FALSE , intentional = TRUE)) - keys += P.key + if(emote_action.can_run_emote(user, status_check = FALSE , intentional = TRUE)) + keys += emote_action.key keys = sort_list(keys) + + // the span formatting will mess up sorting so need to do it afterwards + for(var/i in 1 to keys.len) + for(var/datum/emote/emote_action in GLOB.emote_list[keys[i]]) + if(emote_action.get_sound(user) && emote_action.should_play_sound(user, intentional = TRUE)) + keys[i] = span_boldnotice(keys[i]) + message += keys.Join(", ") message += "." message = message.Join("") - to_chat(user, message) + to_chat(user, examine_block(message)) /datum/emote/flip key = "flip" diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index ea2528d4aac..00a82122be0 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -43,8 +43,6 @@ /// 1 for full damage, 0 for none, -1 for 1:1 heal from that source. var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - ///Minimum force required to deal any damage. - var/force_threshold = 0 ///Verbs used for speaking e.g. "Says" or "Chitters". This can be elementized var/list/speak_emote = list() @@ -208,7 +206,7 @@ face_atom(target) if (!ignore_cooldown) changeNext_move(melee_attack_cooldown) - if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target) & COMPONENT_HOSTILE_NO_ATTACK) + if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target, Adjacent(target), modifiers) & COMPONENT_HOSTILE_NO_ATTACK) return FALSE //but more importantly return before attack_animal called var/result = target.attack_basic_mob(src, modifiers) SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 3fe35bcd266..03f684b7d87 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -11,40 +11,58 @@ var/shove_dir = get_dir(user, src) if(!Move(get_step(src, shove_dir), shove_dir)) log_combat(user, src, "shoved", "failing to move it") - user.visible_message(span_danger("[user.name] shoves [src]!"), - span_danger("You shove [src]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) + user.visible_message( + span_danger("[user.name] [response_disarm_continuous] [src]!"), + span_danger("You [response_disarm_simple] [src]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) to_chat(src, span_userdanger("You're shoved by [user.name]!")) return TRUE log_combat(user, src, "shoved", "pushing it") - user.visible_message(span_danger("[user.name] shoves [src], pushing [p_them()]!"), - span_danger("You shove [src], pushing [p_them()]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) + user.visible_message( + span_danger("[user.name] [response_disarm_continuous] [src], pushing [p_them()]!"), + span_danger("You [response_disarm_simple] [src], pushing [p_them()]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) to_chat(src, span_userdanger("You're pushed by [user.name]!")) return TRUE if(!user.combat_mode) - if (stat == DEAD) - return - visible_message(span_notice("[user] [response_help_continuous] [src]."), \ - span_notice("[user] [response_help_continuous] you."), null, null, user) - to_chat(user, span_notice("You [response_help_simple] [src].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - else - if(HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, span_warning("You don't want to hurt [src]!")) - return - user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - visible_message(span_danger("[user] [response_harm_continuous] [src]!"),\ - span_userdanger("[user] [response_harm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You [response_harm_simple] [src]!")) - playsound(loc, attacked_sound, 25, TRUE, -1) - var/obj/item/bodypart/arm/active_arm = user.get_active_hand() - var/damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) - - attack_threshold_check(damage) - log_combat(user, src, "attacked") - updatehealth() + if (stat != DEAD) + visible_message( + span_notice("[user] [response_help_continuous] [src]."), + span_notice("[user] [response_help_continuous] you."), + ignored_mobs = user, + ) + to_chat(user, span_notice("You [response_help_simple] [src].")) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) return TRUE + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, span_warning("You don't want to hurt [src]!")) + return TRUE + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + var/damage = (basic_mob_flags & IMMUNE_TO_FISTS) ? 0 : rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) + if(check_block(user, damage, "[user]'s punch", UNARMED_ATTACK, 0, BRUTE)) + return + user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + visible_message( + span_danger("[user] [response_harm_continuous] [src]!"), + span_userdanger("[user] [response_harm_continuous] you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user, + ) + to_chat(user, span_danger("You [response_harm_simple] [src]!")) + playsound(loc, attacked_sound, 25, TRUE, -1) + apply_damage(damage) + log_combat(user, src, "attacked") + updatehealth() + return TRUE + /mob/living/basic/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) @@ -58,9 +76,8 @@ /mob/living/basic/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) //successful monkey bite. if(stat != DEAD) - var/damage = rand(1, 3) - attack_threshold_check(damage) - return 1 + return apply_damage(rand(1, 3)) + if (!user.combat_mode) if (health > 0) visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ @@ -85,29 +102,22 @@ span_userdanger("You're slashed at by [user]!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You slash at [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) - attack_threshold_check(damage) + apply_damage(damage) log_combat(user, src, "attacked") /mob/living/basic/attack_larva(mob/living/carbon/alien/larva/attacking_larva, list/modifiers) . = ..() if(. && stat != DEAD) //successful larva bite - var/damage = rand(attacking_larva.melee_damage_lower, attacking_larva.melee_damage_upper) - . = attack_threshold_check(damage) - if(.) - attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage, attacking_larva.max_grown) - -/mob/living/basic/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - return attack_threshold_check(damage, user.melee_damage_type) + var/damage_done = apply_damage(rand(attacking_larva.melee_damage_lower, attacking_larva.melee_damage_upper), BRUTE) + if(damage_done > 0) + attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage_done, attacking_larva.max_grown) /mob/living/basic/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) if(..()) //successful slime attack var/damage = rand(15, 25) if(M.is_adult) damage = rand(20, 35) - return attack_threshold_check(damage) + return apply_damage(damage, M.melee_damage_type) /mob/living/basic/attack_drone(mob/living/basic/drone/attacking_drone) if(attacking_drone.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. @@ -119,20 +129,6 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/mob/living/basic/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE, actuallydamage = TRUE) - var/temp_damage = damage - if(!damage_coeff[damagetype]) - temp_damage = 0 - else - temp_damage *= damage_coeff[damagetype] - if(temp_damage >= 0 && temp_damage <= force_threshold) - visible_message(span_warning("[src] looks unharmed!")) - return FALSE - else - if(actuallydamage) - apply_damage(damage, damagetype, blocked = getarmor(null, armorcheck)) - return TRUE - /mob/living/basic/check_projectile_armor(def_zone, obj/projectile/impacting_projectile, is_silent) return 0 diff --git a/code/modules/mob/living/basic/blob_minions/blob_ai.dm b/code/modules/mob/living/basic/blob_minions/blob_ai.dm index fc21d030d07..5aad05d4656 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_ai.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_ai.dm @@ -4,7 +4,7 @@ */ /datum/ai_controller/basic_controller/blobbernaut blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -21,7 +21,7 @@ */ /datum/ai_controller/basic_controller/blob_zombie blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -39,7 +39,7 @@ */ /datum/ai_controller/basic_controller/blob_spore blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm index b483641993a..d12febb748e 100644 --- a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm +++ b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm @@ -22,7 +22,6 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" - force_threshold = 10 pressure_resistance = 50 mob_size = MOB_SIZE_LARGE hud_type = /datum/hud/living/blobbernaut @@ -32,6 +31,7 @@ /mob/living/basic/blob_minion/blobbernaut/Initialize(mapload) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_BLOBBERNAUT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddElement(/datum/element/damage_threshold, 10) /mob/living/basic/blob_minion/blobbernaut/death(gibbed) flick("blobbernaut_death", src) diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index 5682edf9339..fdd42cab098 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -370,7 +370,6 @@ speed = 1 melee_damage_lower = 10 melee_damage_upper = 15 - force_threshold = 10 //lots of fat to cushion blows. damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 2, STAMINA = 0, OXY = 1) attack_verb_continuous = "slams" attack_verb_simple = "slam" @@ -391,12 +390,11 @@ /mob/living/basic/clown/mutant/glutton/Initialize(mapload) . = ..() - var/datum/action/cooldown/regurgitate/spit = new(src) - spit.Grant(src) + GRANT_ACTION(/datum/action/cooldown/regurgitate) AddElement(/datum/element/swabable, CELL_LINE_TABLE_GLUTTON, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/cheesiehonkers, /obj/item/food/cornchips), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed))) - + AddElement(/datum/element/damage_threshold, 10) //lots of fat to cushion blows. /mob/living/basic/clown/mutant/glutton/attacked_by(obj/item/item, mob/living/user) if(!check_edible(item)) @@ -541,22 +539,15 @@ BB_EMOTE_SEE = list("bites into the banana", "plucks a banana off its head", "photosynthesizes"), BB_EMOTE_SOUND = list('sound/items/bikehorn.ogg'), ) - ///Our peel dropping ability - var/datum/action/cooldown/rustle/banana_rustle - ///Our banana bunch spawning ability - var/datum/action/cooldown/exquisite_bunch/banana_bunch /mob/living/basic/clown/banana/Initialize(mapload) . = ..() - banana_rustle = new() - banana_rustle.Grant(src) - banana_bunch = new() - banana_bunch.Grant(src) -/mob/living/basic/clown/banana/Destroy() - . = ..() - QDEL_NULL(banana_rustle) - QDEL_NULL(banana_bunch) + var/static/list/innate_actions = list( + /datum/action/cooldown/exquisite_bunch, + /datum/action/cooldown/rustle, + ) + grant_actions_by_list(innate_actions) ///drops peels around the mob when activated /datum/action/cooldown/rustle diff --git a/code/modules/mob/living/basic/clown/clown_ai.dm b/code/modules/mob/living/basic/clown/clown_ai.dm index f54c432140e..b3f5a9f9aef 100644 --- a/code/modules/mob/living/basic/clown/clown_ai.dm +++ b/code/modules/mob/living/basic/clown/clown_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/clown blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_SPEAK_LINES = null, ) @@ -14,7 +14,7 @@ /datum/ai_controller/basic_controller/clown/murder blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_SPEAK_LINES = null, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/code/modules/mob/living/basic/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm similarity index 76% rename from code/modules/mob/living/basic/constructs/_construct.dm rename to code/modules/mob/living/basic/cult/constructs/_construct.dm index e4c21b5a23c..6181eb3d0f4 100644 --- a/code/modules/mob/living/basic/constructs/_construct.dm +++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm @@ -43,7 +43,7 @@ var/can_repair_self = FALSE /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue var/theme = THEME_CULT - /// Can this construct smash walls? Gets the wall_smasher element if so. + /// Can this construct destroy walls? var/smashes_walls = FALSE /// The different flavors of goop constructs can drop, depending on theme. var/static/list/remains_by_theme = list( @@ -59,16 +59,16 @@ if(length(remains)) AddElement(/datum/element/death_drops, remains) if(smashes_walls) - AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_WALLS) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) if(can_repair) AddComponent(\ /datum/component/healing_touch,\ heal_brute = 5,\ heal_burn = 0,\ heal_time = 0,\ - valid_targets_typecache = typecacheof(list(/mob/living/basic/construct, /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/shade)),\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/construct, /mob/living/basic/shade)),\ valid_biotypes = MOB_MINERAL | MOB_SPIRIT,\ - self_targetting = can_repair_self ? HEALING_TOUCH_ANYONE : HEALING_TOUCH_NOT_SELF,\ + self_targeting = can_repair_self ? HEALING_TOUCH_ANYONE : HEALING_TOUCH_NOT_SELF,\ action_text = "%SOURCE% begins repairing %TARGET%'s dents.",\ complete_text = "%TARGET%'s dents are repaired.",\ show_health = TRUE,\ @@ -80,9 +80,7 @@ structure_types_typecache = structure_types,\ ) add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK), INNATE_TRAIT) - for(var/spell in construct_spells) - var/datum/action/new_spell = new spell(src) - new_spell.Grant(src) + grant_actions_by_list(construct_spells) var/spell_count = 1 for(var/datum/action/spell as anything in actions) @@ -129,34 +127,6 @@ /mob/living/basic/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) return FALSE -// Allows simple constructs to repair basic constructs. -/mob/living/basic/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(!isconstruct(user)) - if(src != user) - return ..() - return - - if(src == user) //basic constructs use the healing hands component instead - return - - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair || (doll == src && !doll.can_repair_self)) - return ..() - if(theme != doll.theme) - return ..() - - if(health >= maxHealth) - to_chat(user, span_cult("You cannot repair [src]'s dents, as [p_they()] [p_have()] none!")) - return - - heal_overall_damage(brute = 5) - - Beam(user, icon_state = "sendbeam", time = 4) - user.visible_message( - span_danger("[user] repairs some of \the [src]'s dents."), - span_cult("You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health."), - ) - /// Construct ectoplasm. Largely a placeholder, since the death drop element needs a unique list. /obj/item/ectoplasm/construct name = "blood-red ectoplasm" diff --git a/code/modules/mob/living/basic/constructs/artificer.dm b/code/modules/mob/living/basic/cult/constructs/artificer.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/artificer.dm rename to code/modules/mob/living/basic/cult/constructs/artificer.dm index bf4a086bcdb..8856c0e66a2 100644 --- a/code/modules/mob/living/basic/constructs/artificer.dm +++ b/code/modules/mob/living/basic/cult/constructs/artificer.dm @@ -15,11 +15,11 @@ attack_verb_simple = "ram" attack_sound = 'sound/weapons/punch2.ogg' construct_spells = list( + /datum/action/cooldown/spell/aoe/magic_missile/lesser, + /datum/action/cooldown/spell/conjure/construct/lesser, /datum/action/cooldown/spell/conjure/cult_floor, /datum/action/cooldown/spell/conjure/cult_wall, /datum/action/cooldown/spell/conjure/soulstone, - /datum/action/cooldown/spell/conjure/construct/lesser, - /datum/action/cooldown/spell/aoe/magic_missile/lesser, /datum/action/innate/cult/create_rune/revive, ) playstyle_string = "You are an Artificer. You are incredibly weak and fragile, \ diff --git a/code/modules/mob/living/basic/constructs/construct_ai.dm b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm similarity index 54% rename from code/modules/mob/living/basic/constructs/construct_ai.dm rename to code/modules/mob/living/basic/cult/constructs/construct_ai.dm index 6f837146837..b8417affed9 100644 --- a/code/modules/mob/living/basic/constructs/construct_ai.dm +++ b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm @@ -6,8 +6,8 @@ */ /datum/ai_controller/basic_controller/artificer blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/same_faction/construct, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/same_faction/construct, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_WOUNDED_ONLY = TRUE, ) @@ -23,13 +23,12 @@ /** * Juggernauts * - * Juggernauts slowly walk toward non-allied mobs and pummel them into hardcrit. - * They do not finish off carbons, as that's the job of wraiths. + * Juggernauts slowly walk toward non-allied mobs and pummel them to death. */ /datum/ai_controller/basic_controller/juggernaut blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_TARGET_MINIMUM_STAT = SOFT_CRIT, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -40,6 +39,28 @@ /datum/ai_planning_subtree/basic_melee_attack_subtree, ) +/** + * Proteons + * + * Proteons perform cowardly hit-and-run attacks, fleeing melee when struck but returning to fight again. + */ +/datum/ai_controller/basic_controller/proteon + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + /** * Wraiths * @@ -47,7 +68,7 @@ */ /datum/ai_controller/basic_controller/wraith blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -59,11 +80,11 @@ /datum/ai_planning_subtree/basic_melee_attack_subtree, ) -/// Targetting datum that will only allow mobs that constructs can heal. -/datum/targetting_datum/basic/same_faction/construct +/// Targeting strategy that will only allow mobs that constructs can heal. +/datum/targeting_strategy/basic/same_faction/construct target_wounded_key = BB_TARGET_WOUNDED_ONLY -/datum/targetting_datum/basic/same_faction/construct/can_attack(mob/living/living_mob, atom/the_target, vision_range, check_faction = TRUE) - if(isconstruct(the_target) || istype(the_target, /mob/living/simple_animal/shade)) +/datum/targeting_strategy/basic/same_faction/construct/can_attack(mob/living/living_mob, atom/the_target, vision_range, check_faction = TRUE) + if(isconstruct(the_target) || istype(the_target, /mob/living/basic/shade)) return ..() return FALSE diff --git a/code/modules/mob/living/basic/constructs/harvester.dm b/code/modules/mob/living/basic/cult/constructs/harvester.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/harvester.dm rename to code/modules/mob/living/basic/cult/constructs/harvester.dm diff --git a/code/modules/mob/living/basic/constructs/juggernaut.dm b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm similarity index 94% rename from code/modules/mob/living/basic/constructs/juggernaut.dm rename to code/modules/mob/living/basic/cult/constructs/juggernaut.dm index 2b8bb7e293d..ef972d2b916 100644 --- a/code/modules/mob/living/basic/constructs/juggernaut.dm +++ b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm @@ -17,16 +17,19 @@ attack_sound = 'sound/weapons/punch3.ogg' status_flags = NONE mob_size = MOB_SIZE_LARGE - force_threshold = 10 construct_spells = list( - /datum/action/cooldown/spell/forcewall/cult, /datum/action/cooldown/spell/basic_projectile/juggernaut, + /datum/action/cooldown/spell/forcewall/cult, /datum/action/innate/cult/create_rune/wall, ) playstyle_string = span_bold("You are a Juggernaut. Though slow, your shell can withstand heavy punishment, create shield walls, rip apart enemies and walls alike, and even deflect energy weapons.") smashes_walls = TRUE +/mob/living/basic/construct/juggernaut/Initialize(mapload) + . = ..() + AddElement(/datum/element/damage_threshold, 10) + /// Hostile NPC version. Pretty dumb, just attacks whoever is near. /mob/living/basic/construct/juggernaut/hostile ai_controller = /datum/ai_controller/basic_controller/juggernaut diff --git a/code/modules/mob/living/basic/cult/constructs/proteon.dm b/code/modules/mob/living/basic/cult/constructs/proteon.dm new file mode 100644 index 00000000000..2ff58d2463c --- /dev/null +++ b/code/modules/mob/living/basic/cult/constructs/proteon.dm @@ -0,0 +1,39 @@ +/// Proteon - a very weak construct that only appears in NPC form in various ruins. +/mob/living/basic/construct/proteon + name = "Proteon" + real_name = "Proteon" + desc = "A weaker construct meant to scour ruins for objects of Nar'Sie's affection. Those barbed claws are no joke." + icon_state = "proteon" + icon_living = "proteon" + maxHealth = 35 + health = 35 + melee_damage_lower = 8 + melee_damage_upper = 10 + attack_verb_continuous = "pinches" + attack_verb_simple = "pinch" + smashes_walls = TRUE + attack_sound = 'sound/weapons/punch2.ogg' + playstyle_string = span_bold("You are a Proteon. Your abilities in combat are outmatched by most combat constructs, but you are still fast and nimble. Run metal and supplies, and cooperate with your fellow cultists.") + +/// Hostile NPC version +/mob/living/basic/construct/proteon/hostile + ai_controller = /datum/ai_controller/basic_controller/proteon + smashes_walls = FALSE + melee_attack_cooldown = 1.5 SECONDS + +/mob/living/basic/construct/proteon/hostile/Initialize(mapload) + . = ..() + var/datum/callback/retaliate_callback = CALLBACK(src, PROC_REF(ai_retaliate_behaviour)) + AddComponent(/datum/component/ai_retaliate_advanced, retaliate_callback) + +/// Set a timer to clear our retaliate list +/mob/living/basic/construct/proteon/hostile/proc/ai_retaliate_behaviour(mob/living/attacker) + if (!istype(attacker)) + return + var/random_timer = rand(2 SECONDS, 4 SECONDS) //for unpredictability + addtimer(CALLBACK(src, PROC_REF(clear_retaliate_list)), random_timer) + +/mob/living/basic/construct/proteon/hostile/proc/clear_retaliate_list() + if(!ai_controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) + return + ai_controller.clear_blackboard_key(BB_BASIC_MOB_RETALIATE_LIST) diff --git a/code/modules/mob/living/basic/constructs/wraith.dm b/code/modules/mob/living/basic/cult/constructs/wraith.dm similarity index 100% rename from code/modules/mob/living/basic/constructs/wraith.dm rename to code/modules/mob/living/basic/cult/constructs/wraith.dm diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm new file mode 100644 index 00000000000..fac1d347665 --- /dev/null +++ b/code/modules/mob/living/basic/cult/shade.dm @@ -0,0 +1,71 @@ +/mob/living/basic/shade + name = "Shade" + real_name = "Shade" + desc = "A bound spirit." + gender = PLURAL + icon = 'icons/mob/nonhuman-player/cult.dmi' + icon_state = "shade_cult" + icon_living = "shade_cult" + mob_biotypes = MOB_SPIRIT + maxHealth = 40 + health = 40 + speak_emote = list("hisses") + response_help_continuous = "puts their hand through" + response_help_simple = "put your hand through" + response_disarm_continuous = "flails at" + response_disarm_simple = "flail at" + response_harm_continuous = "punches" + response_harm_simple = "punch" + melee_damage_lower = 5 + melee_damage_upper = 12 + attack_verb_continuous = "metaphysically strikes" + attack_verb_simple = "metaphysically strike" + unsuitable_cold_damage = 0 + unsuitable_heat_damage = 0 + unsuitable_atmos_damage = 0 + speed = -1 + faction = list(FACTION_CULT) + basic_mob_flags = DEL_ON_DEATH + initial_language_holder = /datum/language_holder/construct + /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue + var/theme = THEME_CULT + /// The different flavors of goop shades can drop, depending on theme. + var/static/list/remains_by_theme = list( + THEME_CULT = list(/obj/item/ectoplasm/construct), + THEME_HOLY = list(/obj/item/ectoplasm/angelic), + THEME_WIZARD = list(/obj/item/ectoplasm/mystic), + ) + +/mob/living/basic/shade/Initialize(mapload) + . = ..() + AddElement(/datum/element/simple_flying) + add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) + if(isnull(theme)) + return + icon_state = "shade_[theme]" + var/list/remains = string_list(remains_by_theme[theme]) + if(length(remains)) + AddElement(/datum/element/death_drops, remains) + +/mob/living/basic/shade/update_icon_state() + . = ..() + if(!isnull(theme)) + icon_state = "shade_[theme]" + icon_living = icon_state + +/mob/living/basic/shade/death() + if(death_message == initial(death_message)) + death_message = "lets out a contented sigh as [p_their()] form unwinds." + ..() + +/mob/living/basic/shade/can_suicide() + if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone + return FALSE + return ..() + +/mob/living/basic/shade/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/soulstone)) + var/obj/item/soulstone/stone = item + stone.capture_shade(src, user) + else + . = ..() diff --git a/code/modules/mob/living/basic/drone/drones_as_items.dm b/code/modules/mob/living/basic/drone/drones_as_items.dm index 12e604bd9aa..32d8c0e1f5a 100644 --- a/code/modules/mob/living/basic/drone/drones_as_items.dm +++ b/code/modules/mob/living/basic/drone/drones_as_items.dm @@ -26,7 +26,14 @@ . = ..() var/area/area = get_area(src) if(area) - notify_ghosts("A drone shell has been created in \the [area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE, notify_suiciders = FALSE) + notify_ghosts( + "A drone shell has been created in \the [area.name].", + source = src, + header = "Drone Shell Created", + click_interact = TRUE, + ignore_key = POLL_IGNORE_DRONE, + notify_flags = (GHOST_NOTIFY_IGNORE_MAPLOAD), + ) /obj/effect/mob_spawn/ghost_role/drone/allow_spawn(mob/user, silent = FALSE) var/client/user_client = user.client diff --git a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm index 692a7f108d1..dfaff9f4efc 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm @@ -61,7 +61,7 @@ /datum/pet_command/beehive/enter, /datum/pet_command/beehive/exit, /datum/pet_command/follow/bee, - /datum/pet_command/point_targetting/attack/swirl, + /datum/pet_command/point_targeting/attack/swirl, /datum/pet_command/scatter, ) diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm index 67e98a5f3d3..0c48a945381 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm @@ -83,9 +83,9 @@ if(valid_hives.len) return pick(valid_hives) -/datum/targetting_datum/basic/bee +/datum/targeting_strategy/basic/bee -/datum/targetting_datum/basic/bee/can_attack(mob/living/owner, atom/target, vision_range) +/datum/targeting_strategy/basic/bee/can_attack(mob/living/owner, atom/target, vision_range) if(!isliving(target)) return FALSE . = ..() @@ -117,7 +117,7 @@ required_distance = 0 ///swirl around the owner in menacing fashion -/datum/pet_command/point_targetting/attack/swirl +/datum/pet_command/point_targeting/attack/swirl command_name = "Swirl" command_desc = "Your pets will swirl around you and attack whoever you point at!" speech_commands = list("swirl", "spiral", "swarm") @@ -127,7 +127,7 @@ ///the owner we will swarm around var/key_to_swarm = BB_SWARM_TARGET -/datum/pet_command/point_targetting/attack/swirl/try_activate_command(mob/living/commander) +/datum/pet_command/point_targeting/attack/swirl/try_activate_command(mob/living/commander) var/mob/living/living_pawn = weak_parent.resolve() if(isnull(living_pawn)) return @@ -138,7 +138,7 @@ controller.set_blackboard_key(key_to_swarm, commander) return ..() -/datum/pet_command/point_targetting/attack/swirl/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/attack/swirl/execute_action(datum/ai_controller/controller) if(controller.blackboard_key_exists(BB_CURRENT_PET_TARGET)) return ..() controller.queue_behavior(/datum/ai_behavior/swirl_around_target, BB_SWARM_TARGET) diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm index 6379f239ba0..3d56dd990dc 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/bee blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bee, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bee, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -25,7 +25,7 @@ /datum/ai_controller/basic_controller/queen_bee blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bee, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bee, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm index 311b311e8fd..9e4af384aee 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm @@ -66,7 +66,7 @@ /datum/ai_controller/basic_controller/chick blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_FIND_MOM_TYPES = list(/mob/living/basic/chicken), ) diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm index 99ff6b52748..9508f8fae3b 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm @@ -78,7 +78,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) /datum/ai_controller/basic_controller/chicken blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm index bcd0084adb0..e5d49aa867b 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm @@ -45,7 +45,7 @@ udder_component() setup_eating() . = ..() - ai_controller.set_blackboard_key(BB_BASIC_FOODS, food_types) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) ///wrapper for the udder component addition so you can have uniquely uddered cow subtypes /mob/living/basic/cow/proc/udder_component() diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm index 81e1d722b01..e1e611a28c2 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/cow blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm index 6eaef1bf5c3..f499859e19e 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm @@ -44,7 +44,7 @@ /datum/ai_controller/basic_controller/cow/moonicorn blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items/moonicorn(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items/moonicorn, BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) @@ -60,14 +60,14 @@ ) ///moonicorns will not attack people holding something that could tame them. -/datum/targetting_datum/basic/allow_items/moonicorn +/datum/targeting_strategy/basic/allow_items/moonicorn -/datum/targetting_datum/basic/allow_items/moonicorn/can_attack(mob/living/living_mob, atom/the_target, vision_range) +/datum/targeting_strategy/basic/allow_items/moonicorn/can_attack(mob/living/living_mob, atom/the_target, vision_range) . = ..() if(!.) return FALSE - if(isliving(the_target)) //Targetting vs living mobs + if(isliving(the_target)) //Targeting vs living mobs var/mob/living/living_target = the_target for(var/obj/item/food/grown/galaxythistle/tame_food in living_target.held_items) return FALSE //heyyy this can tame me! let's NOT fight diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm index b62f57abf54..4e80fd4bcfe 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_wisdom.dm @@ -22,7 +22,7 @@ return //cannot tame me! and I don't care about eatin' nothing, neither! /datum/ai_controller/basic_controller/cow/wisdom - //don't give a targetting datum + //don't give a targeting strategy blackboard = list( BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, diff --git a/code/modules/mob/living/basic/farm_animals/deer.dm b/code/modules/mob/living/basic/farm_animals/deer.dm index 7907e668443..5b88593f0c6 100644 --- a/code/modules/mob/living/basic/farm_animals/deer.dm +++ b/code/modules/mob/living/basic/farm_animals/deer.dm @@ -30,12 +30,12 @@ var/time_to_freeze_for = (rand(5, 10) SECONDS) ai_controller.set_blackboard_key(BB_STATIONARY_SECONDS, time_to_freeze_for) ai_controller.set_blackboard_key(BB_STATIONARY_COOLDOWN, (time_to_freeze_for * (rand(3, 5)))) - ai_controller.set_blackboard_key(BB_STATIONARY_TARGETS, stationary_scary_things) + ai_controller.set_blackboard_key(BB_STATIONARY_TARGETS, typecacheof(stationary_scary_things)) /datum/ai_controller/basic_controller/deer blackboard = list( BB_STATIONARY_MOVE_TO_TARGET = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/farm_animals/goat/_goat.dm b/code/modules/mob/living/basic/farm_animals/goat/_goat.dm index db49ae8df9f..34b92f21882 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/_goat.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/_goat.dm @@ -56,7 +56,7 @@ RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) /// Called when we attack something in order to piece together the intent of the AI/user and provide desired behavior. The element might be okay here but I'd rather the fluff. /// Goats are really good at beating up plants by taking bites out of them, but we use the default attack for everything else @@ -110,8 +110,10 @@ INVOKE_ASYNC(src, PROC_REF(eat_plant), edible_plants) -/// When invoked, adds an udder. Overridden on subtypes +/// When invoked, adds an udder when applicable. Male goats do not have udders. /mob/living/basic/goat/proc/add_udder() + if(gender == MALE) + return AddComponent(/datum/component/udder) /// Proc that handles dealing with the various types of plants we might eat. Assumes that a valid list of type(s) will be passed in. diff --git a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm index f8463b19675..5928344fee4 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm @@ -1,7 +1,7 @@ /// Goats are normally content to sorta hang around and crunch any plant in sight, but they will go ape on someone who attacks them. /datum/ai_controller/basic_controller/goat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm b/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm index 19d50fb3809..16efdd528d1 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/goat_subtypes.dm @@ -8,5 +8,3 @@ if((bodytemperature < T20C) || istype(goat_area, /area/station/service/kitchen/coldroom)) . += span_notice("[p_They()] [p_do()]n't seem to be too bothered about the cold.") // special for pete -/mob/living/basic/goat/pete/add_udder() - return //no thank you diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index cd184b2d253..39bc6f87cd6 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -54,7 +54,7 @@ /mob/living/basic/gorilla/Initialize(mapload) . = ..() add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddElement(/datum/element/dextrous) AddElement(/datum/element/footstep, FOOTSTEP_MOB_BAREFOOT) AddElement(/datum/element/basic_eating, heal_amt = 10, food_types = gorilla_food) @@ -65,7 +65,7 @@ ) AddComponent(/datum/component/personal_crafting) AddComponent(/datum/component/basic_inhands, y_offset = -1) - ai_controller?.set_blackboard_key(BB_BASIC_FOODS, gorilla_food) + ai_controller?.set_blackboard_key(BB_BASIC_FOODS, typecacheof(gorilla_food)) /mob/living/basic/gorilla/update_overlays() . = ..() @@ -158,6 +158,12 @@ ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT) AddComponent(/datum/component/crate_carrier) +/mob/living/basic/gorilla/cargorilla/death(gibbed) + var/datum/component/potential_component = GetComponent(/datum/component/ghost_direct_control) + if(!QDELETED(potential_component)) + qdel(potential_component) + return ..() + /** * Poll ghosts for control of the gorilla. Not added in init because we only want to poll when the round starts. * Preferably in future we can replace this with a popup on the lobby to queue to become a gorilla. diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm index daf5b7af083..28a727fdb1b 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm @@ -1,7 +1,7 @@ /// Pretty basic, just click people to death. Also hunt and eat bananas. /datum/ai_controller/basic_controller/gorilla blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, BB_EMOTE_KEY = "ooga", BB_EMOTE_CHANCE = 40, @@ -27,7 +27,7 @@ /datum/ai_controller/basic_controller/gorilla/lesser blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_EMOTE_KEY = "ooga", BB_EMOTE_CHANCE = 60, ) diff --git a/code/modules/mob/living/basic/farm_animals/pig.dm b/code/modules/mob/living/basic/farm_animals/pig.dm index c0ad3f6b349..94183d044c5 100644 --- a/code/modules/mob/living/basic/farm_animals/pig.dm +++ b/code/modules/mob/living/basic/farm_animals/pig.dm @@ -47,7 +47,7 @@ /datum/ai_controller/basic_controller/pig blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index e1765f0fdba..df8f3a1fd4e 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -106,7 +106,7 @@ /datum/ai_controller/basic_controller/pony blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index 19fd0120ba7..f77772ab17c 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -49,7 +49,7 @@ /datum/ai_controller/basic_controller/rabbit blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index ac320d80804..e32da910ab9 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -81,7 +81,7 @@ /datum/ai_controller/basic_controller/sheep blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 058b74bfad8..aec6de74e1e 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -40,19 +40,18 @@ ///how much charge we give off to cells around us when rubbed var/recharge_value = 75 + /mob/living/basic/festivus/Initialize(mapload) . = ..() AddComponent(/datum/component/seethrough_mob) var/static/list/death_loot = list(/obj/item/stack/rods) AddElement(/datum/element/death_drops, death_loot) AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) - var/datum/action/cooldown/mob_cooldown/charge_apc/charge_ability = new(src) - charge_ability.Grant(src) - ai_controller.set_blackboard_key(BB_FESTIVE_APC, charge_ability) + grant_actions_by_list(list(/datum/action/cooldown/mob_cooldown/charge_apc = BB_FESTIVE_APC)) /datum/ai_controller/basic_controller/festivus_pole blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_LOW_PRIORITY_HUNTING_TARGET = null, // APCs ) diff --git a/code/modules/mob/living/basic/guardian/guardian.dm b/code/modules/mob/living/basic/guardian/guardian.dm new file mode 100644 index 00000000000..e36960a80ae --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian.dm @@ -0,0 +1,333 @@ +/** + * A mob which acts as a guardian angel to another mob, sharing health but protecting them using special powers. + * Usually either obtained in magical form by a wizard, or technological form by a traitor. Sometimes found by miners. + */ +/mob/living/basic/guardian + name = "Guardian Spirit" + real_name = "Guardian Spirit" + desc = "A mysterious being that stands by its charge, ever vigilant." + icon = 'icons/mob/nonhuman-player/guardian.dmi' + icon_state = "magicbase" + icon_living = "magicbase" + icon_dead = "magicbase" + gender = NEUTER + basic_mob_flags = DEL_ON_DEATH + mob_biotypes = MOB_SPECIAL + sentience_type = SENTIENCE_HUMANOID + hud_type = /datum/hud/guardian + faction = list() + speed = 0 + maxHealth = INFINITY // The spirit itself is invincible and passes damage to its host + health = INFINITY + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + unsuitable_atmos_damage = 0 + unsuitable_cold_damage = 0 + unsuitable_heat_damage = 0 + speak_emote = list("hisses") + bubble_icon = "guardian" + response_help_continuous = "passes through" + response_help_simple = "pass through" + response_disarm_continuous = "flails at" + response_disarm_simple = "flail at" + response_harm_continuous = "punches" + response_harm_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + combat_mode = TRUE + obj_damage = 40 + melee_damage_lower = 15 + melee_damage_upper = 15 + melee_attack_cooldown = CLICK_CD_MELEE + light_system = MOVABLE_LIGHT + light_range = 3 + light_on = FALSE + + /// The summoner of the guardian, we share health with them and can't move too far away (usually) + var/mob/living/summoner + /// How far from the summoner the guardian can be. + var/range = 10 + + /// The guardian's colour, used for their sprite, chat, and some effects. + var/guardian_colour + /// Coloured overlay we apply + var/mutable_appearance/overlay + + /// Which toggle button the HUD uses. + var/toggle_button_type = /atom/movable/screen/guardian/toggle_mode/inactive + /// Name used by the guardian creator. + var/creator_name = "Error" + /// Description used by the guardian creator. + var/creator_desc = "This shouldn't be here! Report it on GitHub!" + /// Icon used by the guardian creator. + var/creator_icon = "fuck" + + /// What type of guardian are we? + var/guardian_type = null + /// How are we themed? + var/datum/guardian_fluff/theme + /// A string explaining to the guardian what they can do. + var/playstyle_string = span_boldholoparasite("You are a Guardian without any type. You shouldn't exist and are an affront to god!") + + /// Are we forced to not be able to manifest/recall? + var/locked = FALSE + /// Cooldown between manifests/recalls. + COOLDOWN_DECLARE(manifest_cooldown) + /// Cooldown between the summoner resetting the guardian's client. + COOLDOWN_DECLARE(resetting_cooldown) + + /// List of actions we give to our summoner + var/static/list/control_actions = list( + /datum/action/cooldown/mob_cooldown/guardian_comms, + /datum/action/cooldown/mob_cooldown/recall_guardian, + /datum/action/cooldown/mob_cooldown/replace_guardian, + ) + +/mob/living/basic/guardian/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + GLOB.parasites += src + src.theme = theme + theme?.apply(src) + var/list/death_loot = string_list(list(/obj/item/stack/sheet/mineral/wood)) + AddElement(/datum/element/death_drops, death_loot) + AddElement(/datum/element/simple_flying) + AddComponent(/datum/component/basic_inhands) + // life link + update_appearance(UPDATE_ICON) + manifest_effects() + +/mob/living/basic/guardian/Destroy() + GLOB.parasites -= src + if (is_deployed()) + recall_effects() + cut_summoner(different_person = TRUE) + return ..() + +/mob/living/basic/guardian/update_overlays() + . = ..() + . += overlay + +/mob/living/basic/guardian/Login() //if we have a mind, set its name to ours when it logs in + . = ..() + if (!. || isnull(client)) + return FALSE + if (isnull(summoner)) + to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) + stack_trace("Guardian created with client but no summoner.") + else + to_chat(src, span_holoparasite("You are a [theme.name], bound to serve [summoner.real_name].")) + to_chat(src, span_holoparasite("You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.")) + to_chat(src, span_holoparasite("While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.")) + to_chat(src, playstyle_string) + if (!isnull(guardian_colour)) + return // Already set up so we don't need to do it again + locked = TRUE + guardian_rename() + guardian_recolour() + locked = FALSE + +/mob/living/basic/guardian/mind_initialize() + . = ..() + if (isnull(summoner)) + to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) + return + mind.enslave_mind_to_creator(summoner) // Once our mind is created, we become enslaved to our summoner. cant be done in the first run of set_summoner, because by then we dont have a mind yet. + +/// Pick a new colour for our guardian +/mob/living/basic/guardian/proc/guardian_recolour() + if (isnull(client)) + return + var/chosen_guardian_colour = input(src, "What would you like your colour to be?", "Choose Your Colour", "#ffffff") as color|null + if (isnull(chosen_guardian_colour)) //redo proc until we get a color + to_chat(src, span_warning("Invalid colour, please try again.")) + return guardian_recolour() + set_guardian_colour(chosen_guardian_colour) + +/// Apply a new colour to our guardian +/mob/living/basic/guardian/proc/set_guardian_colour(colour) + guardian_colour = colour + set_light_color(guardian_colour) + overlay?.color = guardian_colour + update_appearance(UPDATE_ICON) + +/mob/living/basic/guardian/proc/guardian_rename() + if (isnull(client)) + return + + var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", generate_random_name(), MAX_NAME_LEN))) + if (!new_name) //redo proc until we get a good name + to_chat(src, span_warning("Invalid name, please try again.")) + return guardian_rename() + to_chat(src, span_notice("Your new name [span_name(new_name)] anchors itself in your mind.")) + fully_replace_character_name(null, new_name) + +/// Picks a random name as a suggestion +/mob/living/basic/guardian/proc/generate_random_name() + var/list/surname_options = list("Guardian") // Fallback in case you define a guardian with no theme + switch(theme?.fluff_type) + if (GUARDIAN_MAGIC) + surname_options = GLOB.guardian_fantasy_surnames + if (GUARDIAN_TECH) + surname_options = GLOB.guardian_tech_surnames + + return "[pick(GLOB.guardian_first_names)] [pick(surname_options)]" + +/mob/living/basic/guardian/melee_attack(atom/target, list/modifiers, ignore_cooldown) + if (!is_deployed()) + balloon_alert(src, "not tangible!") + return FALSE + return ..() + +/mob/living/basic/guardian/death(gibbed) + if (!QDELETED(summoner)) + to_chat(summoner, span_bolddanger("Your [name] died somehow!")) + summoner.dust() + return ..() + +/mob/living/basic/guardian/ex_act(severity, target) + switch(severity) + if (EXPLODE_DEVASTATE) + investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) + gib() + return TRUE + if (EXPLODE_HEAVY) + adjustBruteLoss(60) + if (EXPLODE_LIGHT) + adjustBruteLoss(30) + + return TRUE + +/mob/living/basic/guardian/gib() + death(TRUE) + +/mob/living/basic/guardian/dust(just_ash, drop_items, force) + death(TRUE) + +/// Link up with a summoner mob. +/mob/living/basic/guardian/proc/set_summoner(mob/living/to_who, different_person = FALSE) + if (QDELETED(src)) + return // Just in case + if (QDELETED(to_who)) + ghostize(FALSE) + qdel(src) // No life of free invulnerability for you. + return + cut_summoner(different_person) + AddComponent(/datum/component/life_link, to_who, CALLBACK(src, PROC_REF(on_harm)), CALLBACK(src, PROC_REF(on_summoner_death))) + summoner = to_who + + for (var/action_type in control_actions) + if (locate(action_type) in summoner.actions) + continue + var/datum/action/new_action = new action_type(summoner) + new_action.Grant(summoner) + + if (different_person) + if (mind) + mind.enslave_mind_to_creator(to_who) + else //mindless guardian, manually give them factions + faction += summoner.faction + summoner.faction += "[REF(src)]" + remove_all_languages(LANGUAGE_MASTER) + copy_languages(to_who, LANGUAGE_MASTER) // make sure holoparasites speak same language as master + RegisterSignal(to_who, COMSIG_QDELETING, PROC_REF(on_summoner_deletion)) + RegisterSignal(to_who, COMSIG_LIVING_ON_WABBAJACKED, PROC_REF(on_summoner_wabbajacked)) + RegisterSignal(to_who, COMSIG_LIVING_SHAPESHIFTED, PROC_REF(on_summoner_shapeshifted)) + RegisterSignal(to_who, COMSIG_LIVING_UNSHAPESHIFTED, PROC_REF(on_summoner_unshapeshifted)) + recall(forced = TRUE) + leash_to(src, summoner) + if (to_who.stat == DEAD) + on_summoner_death(src, to_who) + summoner.updatehealth() + +/// Remove all references to our summoner +/mob/living/basic/guardian/proc/cut_summoner(different_person = FALSE) + if (isnull(summoner)) + return + if (is_deployed()) + recall_effects() + var/summoner_turf = get_turf(summoner) + if (!isnull(summoner_turf)) + forceMove(summoner_turf) + unleash() + UnregisterSignal(summoner, list(COMSIG_QDELETING, COMSIG_LIVING_ON_WABBAJACKED, COMSIG_LIVING_SHAPESHIFTED, COMSIG_LIVING_UNSHAPESHIFTED)) + if (different_person) + summoner.faction -= "[REF(src)]" + faction -= summoner.faction + mind?.remove_all_antag_datums() + if (!length(summoner.get_all_linked_holoparasites() - src)) + for (var/action_type in control_actions) + var/datum/action/remove_action = locate(action_type) in summoner.actions + if (isnull(remove_action)) + continue + remove_action.Remove(summoner) + summoner = null + +/// Connects these two mobs by a leash +/mob/living/basic/guardian/proc/leash_to(atom/movable/leashed, atom/movable/leashed_to) + leashed.AddComponent(\ + /datum/component/leash,\ + owner = leashed_to,\ + distance = range,\ + force_teleport_out_effect = /obj/effect/temp_visual/guardian/phase/out,\ + force_teleport_in_effect = /obj/effect/temp_visual/guardian/phase,\ + ) + +/// Removes the leash from this guardian +/mob/living/basic/guardian/proc/unleash() + qdel(GetComponent(/datum/component/leash)) + +/// Called when our owner dies. We fucked up, so now neither of us get to exist. +/mob/living/basic/guardian/proc/on_summoner_death(mob/living/source, mob/living/former_owner) + cut_summoner() + if (!isnull(former_owner.loc)) + forceMove(former_owner.loc) + to_chat(src, span_danger("Your summoner has died!")) + visible_message(span_bolddanger("\The [src] dies along with its user!")) + former_owner.visible_message(span_bolddanger("[former_owner]'s body is completely consumed by the strain of sustaining [src]!")) + former_owner.dust(drop_items = TRUE) + +/// Called when our health changes, inform our owner of why they are getting hurt (if they are) +/mob/living/basic/guardian/proc/on_harm(mob/living/source, mob/living/summoner, amount) + if (QDELETED(src) || QDELETED(summoner) || amount <= 2) + return + to_chat(summoner, span_bolddanger("[name] is under attack! You take damage!")) + summoner.visible_message(span_bolddanger("Blood sprays from [summoner] as [src] takes damage!")) + if(summoner.stat == UNCONSCIOUS || summoner.stat == HARD_CRIT) + to_chat(summoner, span_bolddanger("Your head pounds, you can't take the strain of sustaining [src] in this condition!")) + summoner.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount * 0.5) + +/// When our owner is deleted, we go too. +/mob/living/basic/guardian/proc/on_summoner_deletion(mob/living/source) + SIGNAL_HANDLER + cut_summoner() + to_chat(src, span_danger("Your summoner is gone, you feel yourself fading!")) + ghostize(FALSE) + qdel(src) + +/// Signal proc for [COMSIG_LIVING_ON_WABBAJACKED], when our summoner is wabbajacked we should be alerted. +/mob/living/basic/guardian/proc/on_summoner_wabbajacked(mob/living/source, mob/living/new_mob) + SIGNAL_HANDLER + set_summoner(new_mob) + to_chat(src, span_holoparasite("Your summoner has changed form!")) + +/// Signal proc for [COMSIG_LIVING_SHAPESHIFTED], when our summoner is shapeshifted we should change to the new mob +/mob/living/basic/guardian/proc/on_summoner_shapeshifted(mob/living/source, mob/living/new_shape) + SIGNAL_HANDLER + set_summoner(new_shape) + to_chat(src, span_holoparasite("Your summoner has shapeshifted into that of a [new_shape]!")) + +/// Signal proc for [COMSIG_LIVING_UNSHAPESHIFTED], when our summoner unshapeshifts go back to that mob +/mob/living/basic/guardian/proc/on_summoner_unshapeshifted(mob/living/source, mob/living/old_summoner) + SIGNAL_HANDLER + set_summoner(old_summoner) + to_chat(src, span_holoparasite("Your summoner has shapeshifted back into their normal form!")) + +/mob/living/basic/guardian/wabbajack(what_to_randomize, change_flags = WABBAJACK) + visible_message(span_warning("[src] resists the polymorph!")) // Ha, no + +/mob/living/basic/guardian/can_suicide() + return FALSE // You gotta persuade your boss to end it instead, sorry + +/// Returns true if you are out and about +/mob/living/basic/guardian/proc/is_deployed() + return isnull(summoner) || loc != summoner diff --git a/code/modules/mob/living/simple_animal/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm similarity index 60% rename from code/modules/mob/living/simple_animal/guardian/guardian_creator.dm rename to code/modules/mob/living/basic/guardian/guardian_creator.dm index ebd5658f07f..7ebc9737b41 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian_creator.dm +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -2,14 +2,15 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) /proc/setup_guardian_radial() . = list() - for(var/mob/living/simple_animal/hostile/guardian/guardian_path as anything in subtypesof(/mob/living/simple_animal/hostile/guardian)) + for(var/mob/living/basic/guardian/guardian_path as anything in subtypesof(/mob/living/basic/guardian)) var/datum/radial_menu_choice/option = new() option.name = initial(guardian_path.creator_name) option.image = image(icon = 'icons/hud/guardian.dmi', icon_state = initial(guardian_path.creator_icon)) option.info = span_boldnotice(initial(guardian_path.creator_desc)) .[guardian_path] = option -/obj/item/guardiancreator +/// An item which grants you your very own soul buddy +/obj/item/guardian_creator name = "enchanted deck of tarot cards" desc = "An enchanted deck of tarot cards, rumored to be a source of unimaginable power." icon = 'icons/obj/toys/playing_cards.dmi' @@ -31,36 +32,41 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) /// Message sent if we successfully get a guardian. var/success_message = span_holoparasite("%GUARDIAN has been summoned!") /// If true, you are given a random guardian rather than picking from a selection. - var/random = TRUE + var/random = FALSE /// If true, you can have multiple guardians at the same time. - var/allowmultiple = FALSE + var/allow_multiple = FALSE /// If true, lings can get guardians from this. - var/allowling = TRUE + var/allow_changeling = TRUE /// If true, a dextrous guardian can get their own guardian, infinite chain! - var/allowguardian = FALSE + var/allow_guardian = FALSE /// List of all the guardians this type can spawn. var/list/possible_guardians = list( //default, has everything but dextrous - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, + /mob/living/basic/guardian/assassin, + /mob/living/basic/guardian/charger, + /mob/living/basic/guardian/explosive, + /mob/living/basic/guardian/gaseous, + /mob/living/basic/guardian/gravitokinetic, + /mob/living/basic/guardian/lightning, + /mob/living/basic/guardian/protector, + /mob/living/basic/guardian/ranged, + /mob/living/basic/guardian/standard, + /mob/living/basic/guardian/support, ) -/obj/item/guardiancreator/attack_self(mob/living/user) - if(isguardian(user) && !allowguardian) - to_chat(user, span_holoparasite("[mob_name] chains are not allowed.")) +/obj/item/guardian_creator/Initialize(mapload) + . = ..() + var/datum/guardian_fluff/using_theme = GLOB.guardian_themes[theme] + mob_name = using_theme.name + +/obj/item/guardian_creator/attack_self(mob/living/user) + if(isguardian(user) && !allow_guardian) + balloon_alert(user, "can't do that!") return var/list/guardians = user.get_all_linked_holoparasites() - if(length(guardians) && !allowmultiple) - to_chat(user, span_holoparasite("You already have a [mob_name]!")) + if(length(guardians) && !allow_multiple) + balloon_alert(user, "already have one!") return - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allowling) + if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allow_changeling) to_chat(user, ling_failure) return if(used) @@ -71,19 +77,22 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) if(possible_guardian in possible_guardians) continue radial_options -= possible_guardian - var/mob/living/simple_animal/hostile/guardian/guardian_path + var/mob/living/basic/guardian/guardian_path if(random) guardian_path = pick(possible_guardians) else guardian_path = show_radial_menu(user, src, radial_options, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) - if(!guardian_path) + if(isnull(guardian_path)) return used = TRUE to_chat(user, use_message) - var/guardian_type_name = "a random" - if(!random) - guardian_type_name = "the " + lowertext(initial(guardian_path.creator_name)) - var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as [guardian_type_name] [mob_name] of [user.real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_HOLOPARASITE) + var/guardian_type_name = random ? "Random" : capitalize(initial(guardian_path.creator_name)) + var/list/mob/dead/observer/candidates = poll_ghost_candidates( + "Do you want to play as [user.real_name]'s [guardian_type_name] [mob_name]?", + jobban_type = ROLE_PAI, + poll_time = 10 SECONDS, + ignore_category = POLL_IGNORE_HOLOPARASITE, + ) if(LAZYLEN(candidates)) var/mob/dead/observer/candidate = pick(candidates) spawn_guardian(user, candidate, guardian_path) @@ -91,124 +100,111 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) SEND_SIGNAL(src, COMSIG_TRAITOR_ITEM_USED(type)) else to_chat(user, failure_message) + used = FALSE -/obj/item/guardiancreator/proc/spawn_guardian(mob/living/user, mob/dead/candidate, guardian_path) +/// Actually create our guy +/obj/item/guardian_creator/proc/spawn_guardian(mob/living/user, mob/dead/candidate, guardian_path) if(QDELETED(user) || user.stat == DEAD) return var/list/guardians = user.get_all_linked_holoparasites() - if(length(guardians) && !allowmultiple) - to_chat(user, span_holoparasite("You already have a [mob_name]!") ) + if(length(guardians) && !allow_multiple) + balloon_alert(user, "already got one!") used = FALSE return - var/mob/living/simple_animal/hostile/guardian/summoned_guardian = new guardian_path(user, theme) + var/datum/guardian_fluff/guardian_theme = GLOB.guardian_themes[theme] + var/mob/living/basic/guardian/summoned_guardian = new guardian_path(user, guardian_theme) summoned_guardian.set_summoner(user, different_person = TRUE) summoned_guardian.key = candidate.key user.log_message("has summoned [key_name(summoned_guardian)], a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) summoned_guardian.log_message("was summoned as a [summoned_guardian.creator_name] holoparasite.", LOG_GAME) - to_chat(user, summoned_guardian.used_fluff_string) + to_chat(user, guardian_theme.get_fluff_string(summoned_guardian.guardian_type)) to_chat(user, replacetext(success_message, "%GUARDIAN", mob_name)) summoned_guardian.client?.init_verbs() return summoned_guardian -/obj/item/guardiancreator/proc/check_menu(mob/living/user) +/// Checks to ensure we're still capable of using the radial selector +/obj/item/guardian_creator/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE if(user.incapacitated() || !user.is_holding(src) || used) return FALSE return TRUE -/obj/item/guardiancreator/choose - random = FALSE - -/obj/item/guardiancreator/choose/all/Initialize(mapload) - . = ..() - possible_guardians = subtypesof(/mob/living/simple_animal/hostile/guardian) - -/obj/item/guardiancreator/choose/wizard - allowmultiple = TRUE - possible_guardians = list( //no support, but dextrous - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/dextrous, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, +/// Guardian creator available in the wizard spellbook. All but support are available. +/obj/item/guardian_creator/wizard + allow_multiple = TRUE + possible_guardians = list( + /mob/living/basic/guardian/assassin, + /mob/living/basic/guardian/charger, + /mob/living/basic/guardian/dextrous, + /mob/living/basic/guardian/explosive, + /mob/living/basic/guardian/gaseous, + /mob/living/basic/guardian/gravitokinetic, + /mob/living/basic/guardian/lightning, + /mob/living/basic/guardian/protector, + /mob/living/basic/guardian/ranged, + /mob/living/basic/guardian/standard, ) -/obj/item/guardiancreator/choose/wizard/spawn_guardian(mob/living/user, mob/dead/candidate) - . = ..() - var/mob/guardian = . - if(!guardian) - return +/obj/item/guardian_creator/wizard/spawn_guardian(mob/living/user, mob/dead/candidate) + var/mob/guardian = ..() + if(isnull(guardian)) + return null + // Add the wizard team datum var/datum/antagonist/wizard/antag_datum = user.mind.has_antag_datum(/datum/antagonist/wizard) - if(antag_datum) - if(!antag_datum.wiz_team) - antag_datum.create_wiz_team() - guardian.mind.add_antag_datum(/datum/antagonist/wizard_minion, antag_datum.wiz_team) + if(isnull(antag_datum)) + return guardian + if(!antag_datum.wiz_team) + antag_datum.create_wiz_team() + guardian.mind.add_antag_datum(/datum/antagonist/wizard_minion, antag_datum.wiz_team) + return guardian -/obj/item/guardiancreator/tech +/// Guardian creator available in the traitor uplink. All but dextrous are available, you can pick which you want, and changelings cannot use it. +/obj/item/guardian_creator/tech name = "holoparasite injector" desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." icon = 'icons/obj/medical/syringe.dmi' icon_state = "combat_hypo" theme = GUARDIAN_THEME_TECH - mob_name = "Holoparasite" + allow_changeling = FALSE use_message = span_holoparasite("You start to power on the injector...") used_message = span_holoparasite("The injector has already been used.") failure_message = span_boldholoparasite("...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.") ling_failure = span_boldholoparasite("The holoparasites recoil in horror. They want nothing to do with a creature like you.") success_message = span_holoparasite("%GUARDIAN is now online!") -/obj/item/guardiancreator/tech/choose - random = FALSE - -/obj/item/guardiancreator/tech/choose/all/Initialize(mapload) - . = ..() - possible_guardians = subtypesof(/mob/living/simple_animal/hostile/guardian) - -/obj/item/guardiancreator/tech/choose/traitor - allowling = FALSE - -/obj/item/guardiancreator/carp +/// Guardian creator only spawned by admins, which creates a holographic fish. You can have several of them. +/obj/item/guardian_creator/carp name = "holocarp fishsticks" desc = "Using the power of Carp'sie, you can catch a carp from byond the veil of Carpthulu, and bind it to your fleshy flesh form." icon = 'icons/obj/food/meat.dmi' icon_state = "fishfingers" theme = GUARDIAN_THEME_CARP - mob_name = "Holocarp" use_message = span_holoparasite("You put the fishsticks in your mouth...") used_message = span_holoparasite("Someone's already taken a bite out of these fishsticks! Ew.") failure_message = span_boldholoparasite("You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.") ling_failure = span_boldholoparasite("Carp'sie seems to not have taken you as the chosen one. Maybe it's because of your horrifying origin.") success_message = span_holoparasite("%GUARDIAN has been caught!") - allowmultiple = TRUE + allow_multiple = TRUE -/obj/item/guardiancreator/carp/choose - random = FALSE - -/obj/item/guardiancreator/miner +/// Guardian creator available to miners from chests, very limited selection and randomly assigned. +/obj/item/guardian_creator/miner name = "dusty shard" desc = "Seems to be a very old rock, may have originated from a strange meteor." icon = 'icons/obj/mining_zones/artefacts.dmi' icon_state = "dustyshard" theme = GUARDIAN_THEME_MINER - mob_name = "Power Miner" use_message = span_holoparasite("You pierce your skin with the shard...") used_message = span_holoparasite("This shard seems to have lost all its power...") failure_message = span_boldholoparasite("The shard hasn't reacted at all. Maybe try again later...") ling_failure = span_boldholoparasite("The power of the shard seems to not react with your horrifying, mutated body.") success_message = span_holoparasite("%GUARDIAN has appeared!") - possible_guardians = list( //limited to ones useful on lavaland - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, + random = TRUE + //limited to ones which are plausibly useful on lavaland + possible_guardians = list( + /mob/living/basic/guardian/charger, // A flying mount which can cross chasms + /mob/living/basic/guardian/protector, // Bodyblocks projectiles for you + /mob/living/basic/guardian/ranged, // Shoots the bad guys + /mob/living/basic/guardian/standard, // Can mine walls + /mob/living/basic/guardian/support, // Heals and teleports you ) - -/obj/item/guardiancreator/miner/choose - random = FALSE diff --git a/code/modules/mob/living/basic/guardian/guardian_fluff.dm b/code/modules/mob/living/basic/guardian/guardian_fluff.dm new file mode 100644 index 00000000000..4ede238921e --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_fluff.dm @@ -0,0 +1,124 @@ +/** + * Defines a theme used by guardian mobs for visuals and some text output + * The default is used for ones created by wizards + */ +/datum/guardian_fluff + /// What name do we apply before one has been selected? + var/name = "Guardian Spirit" + /// Mob description to apply + var/desc = "A mysterious being that stands by its charge, ever vigilant." + /// Are we magical or technological? Mostly just used to pick a surname + var/fluff_type = GUARDIAN_MAGIC + /// What speech bubble do we use? + var/bubble_icon = "guardian" + /// What is our base icon state? + var/icon_state = "magicbase" + /// What is the icon state for our coloured overlay? + var/overlay_state = "magic" + /// Emote used for speaking + var/list/speak_emote = list("hisses") + /// Verb shown to viewers when attacking + var/attack_verb_continuous = "punches" + /// Verb shown to attacker when attacking + var/attack_verb_simple = "punch" + /// Sound played when we attack + var/attack_sound = 'sound/weapons/punch1.ogg' + /// Visible effect when we attack + var/attack_vis_effect = ATTACK_EFFECT_PUNCH + /// An associative list of type of guardian to some kind of descriptive text to show on appearance. + var/guardian_fluff = list( + GUARDIAN_ASSASSIN = "...And draw the Space Ninja, a lethal and invisible assassin.", + GUARDIAN_CHARGER = "...And draw the Hunter, alien master of rapid assault.", + GUARDIAN_DEXTROUS = "...And draw the Monkey, ascendant beast who has learned to use tools.", + GUARDIAN_EXPLOSIVE = "...And draw the Scientist, herald of explosive death.", + GUARDIAN_GASEOUS = "...And draw the Atmospheric Technician, veiled in a purple haze.", + GUARDIAN_GRAVITOKINETIC = "...And draw the Singularity, a terrible, irresistible force..", + GUARDIAN_LIGHTNING = "...And draw the Supermatter, a shockingly lethal font of power.", + GUARDIAN_PROTECTOR = "...And draw the Corgi, a stalwart protector that never leaves the side of its charge.", + GUARDIAN_RANGED = "...And draw the Watcher, impaling its prey from afar.", + GUARDIAN_STANDARD = "...And draw the Assistant, faceless but never to be underestimated.", + GUARDIAN_SUPPORT = "...And draw the Paramedic, arbiter of life and death.", + ) + +/// Applies relevant visual properties to our guardian +/datum/guardian_fluff/proc/apply(mob/living/basic/guardian/guardian) + guardian.name = name + guardian.real_name = name + guardian.bubble_icon = bubble_icon + guardian.icon_living = icon_state + guardian.icon_state = icon_state + + guardian.speak_emote = speak_emote + guardian.attack_verb_continuous = attack_verb_continuous + guardian.attack_verb_simple = attack_verb_simple + guardian.attack_sound = attack_sound + guardian.attack_vis_effect = attack_vis_effect + + guardian.overlay = mutable_appearance(guardian.icon, overlay_state) + +/// Output an appropriate fluff string for our guardian when it is created +/datum/guardian_fluff/proc/get_fluff_string(guardian_type) + return span_holoparasite(guardian_fluff[guardian_type] || "You bring forth a glitching abomination, something which should not be! Please contact a coder about it.") + +/// Used by holoparasites in the Traitor uplink +/datum/guardian_fluff/tech + name = "Holoparasite" + fluff_type = GUARDIAN_TECH + bubble_icon = "holo" + icon_state = "techbase" + overlay_state = "tech" + guardian_fluff = list( + GUARDIAN_ASSASSIN = "Boot sequence complete. Stealth modules loaded. Holoparasite swarm online.", + GUARDIAN_CHARGER = "Boot sequence complete. Overclocking motive engines. Holoparasite swarm online.", + GUARDIAN_DEXTROUS = "Boot sequence complete. Armed combat routines loaded. Holoparasite swarm online.", + GUARDIAN_EXPLOSIVE = "Boot sequence complete. Payload generator online. Holoparasite swarm online.", + GUARDIAN_GASEOUS = "Boot sequence complete. Atmospheric projectors operational. Holoparasite swarm online.", + GUARDIAN_GRAVITOKINETIC = "Boot sequence complete. Gravitic engine spinning up. Holoparasite swarm online.", + GUARDIAN_LIGHTNING = "Boot sequence complete. Tesla projectors charged. Holoparasite swarm online.", + GUARDIAN_PROTECTOR = "Boot sequence complete. Bodyguard routines loaded. Holoparasite swarm online.", + GUARDIAN_RANGED = "Boot sequence complete. Flechette launchers operational. Holoparasite swarm online.", + GUARDIAN_STANDARD = "Boot sequence complete. CQC suite engaged. Holoparasite swarm online.", + GUARDIAN_SUPPORT = "Boot sequence complete. Medical suite active. Holoparasite swarm online.", + ) + +/// Used by powerminers found in necropolis chests +/datum/guardian_fluff/miner + name = "Power Miner" + icon_state = "minerbase" + overlay_state = "miner" + guardian_fluff = list( + GUARDIAN_ASSASSIN = "The shard reveals... Glass, a sharp but fragile ambusher.", + GUARDIAN_CHARGER = "The shard reveals... Titanium, a lightweight, agile fighter.", + GUARDIAN_DEXTROUS = "The shard reveals... Gold, a malleable hoarder of treasure.", + GUARDIAN_EXPLOSIVE = "The shard reveals... Gibtonite, volatile and surprising.", + GUARDIAN_GASEOUS = "The shard reveals... Plasma, the bringer of flame.", + GUARDIAN_GRAVITOKINETIC = "The shard reveals... Bananium, a manipulator of motive forces.", + GUARDIAN_LIGHTNING = "The shard reveals... Iron, a conductive font of lightning.", + GUARDIAN_PROTECTOR = "The shard reveals... Uranium, dense and resistant.", + GUARDIAN_RANGED = "The shard reveals... Diamond, projecting a million sharp edges.", + GUARDIAN_STANDARD = "The shard reveals... Plastitanium, a powerful fighter.", + GUARDIAN_SUPPORT = "The shard reveals... Bluespace, master of relocation.", + ) + +/// Used by holocarp spawned by admins +/datum/guardian_fluff/carp + name = "Holocarp" + fluff_type = GUARDIAN_TECH + desc = "A mysterious fish that swims by its charge, ever fingilant." + icon_state = null // Handled entirely by the overlay + bubble_icon = "holo" + overlay_state = "carp" + speak_emote = list("gnashes") + guardian_fluff = list( + GUARDIAN_ASSASSIN = "CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space.", + GUARDIAN_CHARGER = "CARP CARP CARP! Caught one! It's a charger carp which likes running at people. But it doesn't have any legs...", + GUARDIAN_DEXTROUS = "CARP CARP CARP! You caught one! It's a dextrous carp ready to slap people with a fish, once it picks one up.", + GUARDIAN_EXPLOSIVE = "CARP CARP CARP! Caught one! It's an explosive carp! You two are going to have a blast.", + GUARDIAN_GASEOUS = "CARP CARP CARP! You caught one! It's a gaseous carp, but don't worry it actually smells pretty good!", + GUARDIAN_GRAVITOKINETIC = "CARP CARP CARP! Caught one! It's a gravitokinetic carp! Now do you understand the gravity of the situation?", + GUARDIAN_LIGHTNING = "CARP CARP CARP! Caught one! It's a lightning carp! What a shocking result!", + GUARDIAN_PROTECTOR = "CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy...", + GUARDIAN_RANGED = "CARP CARP CARP! You caught one! It's a ranged carp! It has been collecting glass shards in preparation for this moment.", + GUARDIAN_STANDARD = "CARP CARP CARP! You caught one! This one is a little generic and disappointing... Better punch through some walls to ease the tension.", + GUARDIAN_SUPPORT = "CARP CARP CARP! You caught a support carp! Now it's here, now you're over there!", + ) diff --git a/code/modules/mob/living/basic/guardian/guardian_helpers.dm b/code/modules/mob/living/basic/guardian/guardian_helpers.dm new file mode 100644 index 00000000000..df50a43e6a0 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_helpers.dm @@ -0,0 +1,13 @@ +/// Returns a list of all holoparasites that has this mob as a summoner. +/mob/living/proc/get_all_linked_holoparasites() + RETURN_TYPE(/list) + var/list/all_parasites = list() + for(var/mob/living/basic/guardian/stand as anything in GLOB.parasites) + if (stand.summoner != src) + continue + all_parasites += stand + return all_parasites + +/// Returns true if this holoparasite has the same summoner as the passed holoparasite. +/mob/living/basic/guardian/proc/shares_summoner(mob/living/basic/guardian/other_guardian) + return istype(other_guardian) && other_guardian.summoner == summoner diff --git a/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm new file mode 100644 index 00000000000..d62b9bcedea --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm @@ -0,0 +1,116 @@ +#define CAN_STEALTH_ALERT "can_stealth" + +/** + * Can enter stealth mode to become invisible and deal bonus damage on their next attack, an ambush predator. + */ +/mob/living/basic/guardian/assassin + guardian_type = GUARDIAN_ASSASSIN + melee_damage_lower = 15 + melee_damage_upper = 15 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + sharpness = SHARP_POINTY + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + playstyle_string = span_holoparasite("As an assassin type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage.") + creator_name = "Assassin" + creator_desc = "Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth." + creator_icon = "assassin" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode/assassin + /// How long to put stealth on cooldown if we are forced out? + var/stealth_cooldown_time = 16 SECONDS + /// Cooldown for the stealth toggle. + COOLDOWN_DECLARE(stealth_cooldown) + +/mob/living/basic/guardian/assassin/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + show_can_stealth() + RegisterSignal(src, COMSIG_GUARDIAN_ASSASSIN_REVEALED, PROC_REF(on_forced_unstealth)) + +// Toggle stealth +/mob/living/basic/guardian/assassin/toggle_modes() + var/stealthed = has_status_effect(/datum/status_effect/guardian_stealth) + if (stealthed) + to_chat(src, span_bolddanger("You exit stealth.")) + remove_status_effect(/datum/status_effect/guardian_stealth) + show_can_stealth() + return + if (COOLDOWN_FINISHED(src, stealth_cooldown)) + if (!is_deployed()) + to_chat(src, span_bolddanger("You have to be manifested to enter stealth!")) + return + apply_status_effect(/datum/status_effect/guardian_stealth) + clear_alert(CAN_STEALTH_ALERT) + return + to_chat(src, span_bolddanger("You cannot yet enter stealth, wait another [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]!")) + +/mob/living/basic/guardian/assassin/get_status_tab_items() + . = ..() + if(!COOLDOWN_FINISHED(src, stealth_cooldown)) + . += "Stealth Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]" + +/// Called when we are removed from stealth involuntarily +/mob/living/basic/guardian/assassin/proc/on_forced_unstealth(mob/living/source) + SIGNAL_HANDLER + visible_message(span_danger("\The [src] suddenly appears!")) + COOLDOWN_START(src, manifest_cooldown, 4 SECONDS) + COOLDOWN_START(src, stealth_cooldown, stealth_cooldown_time) + addtimer(CALLBACK(src, PROC_REF(show_can_stealth)), stealth_cooldown_time) + +/// Displays an alert letting us know that we can enter stealth +/mob/living/basic/guardian/assassin/proc/show_can_stealth() + if(!COOLDOWN_FINISHED(src, stealth_cooldown)) + return + throw_alert(CAN_STEALTH_ALERT, /atom/movable/screen/alert/canstealth) + +/// Status effect which makes us sneakier and do bonus damage +/datum/status_effect/guardian_stealth + id = "guardian_stealth" + alert_type = /atom/movable/screen/alert/status_effect/instealth + /// Damage added in stealth mode. + var/damage_bonus = 35 + /// Our wound bonus when in stealth mode. Allows you to actually cause wounds, unlike normal. + var/stealth_wound_bonus = -20 + +/datum/status_effect/guardian_stealth/on_apply() + new /obj/effect/temp_visual/guardian/phase/out(get_turf(owner)) + owner.melee_damage_lower += damage_bonus + owner.melee_damage_upper += damage_bonus + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.armour_penetration = 100 + basic_owner.wound_bonus = stealth_wound_bonus + basic_owner.obj_damage = 0 + to_chat(owner, span_bolddanger("You enter stealth, empowering your next attack.")) + animate(owner, alpha = 15, time = 0.5 SECONDS) + + RegisterSignals(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_HOSTILE_POST_ATTACKINGTARGET), PROC_REF(forced_exit)) + RegisterSignals(owner, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_health_changed)) + return TRUE + +/datum/status_effect/guardian_stealth/on_remove() + owner.melee_damage_lower -= damage_bonus + owner.melee_damage_upper -= damage_bonus + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.armour_penetration = initial(basic_owner.armour_penetration) + basic_owner.wound_bonus = initial(basic_owner.wound_bonus) + basic_owner.obj_damage = initial(basic_owner.obj_damage) + animate(owner, alpha = initial(owner.alpha), time = 0.5 SECONDS) + UnregisterSignal(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_HOSTILE_POST_ATTACKINGTARGET) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + +/// If we take damage, exit the status effect +/datum/status_effect/guardian_stealth/proc/on_health_changed(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (amount <= 0) + return + forced_exit() + +/// Forcibly exit the status effect +/datum/status_effect/guardian_stealth/proc/forced_exit() + SIGNAL_HANDLER + SEND_SIGNAL(owner, COMSIG_GUARDIAN_ASSASSIN_REVEALED) + qdel(src) + +#undef CAN_STEALTH_ALERT diff --git a/code/modules/mob/living/basic/guardian/guardian_types/charger.dm b/code/modules/mob/living/basic/guardian/guardian_types/charger.dm new file mode 100644 index 00000000000..93b82b7b0a9 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/charger.dm @@ -0,0 +1,69 @@ +/** + * Very fast, has a charging attack, and most importantly can be ridden like a horse. + */ +/mob/living/basic/guardian/charger + guardian_type = GUARDIAN_CHARGER + melee_damage_lower = 15 + melee_damage_upper = 15 + speed = -0.5 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a charger type you do medium damage, have light damage resistance, move very fast, can be ridden, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.") + creator_name = "Charger" + creator_desc = "Moves very fast, does medium damage on attack, can be ridden and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding." + creator_icon = "charger" + +/mob/living/basic/guardian/charger/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/ridable, /datum/component/riding/creature/guardian) + var/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/charge = new(src) + charge.Grant(src) + charge.set_click_ability(src) + +/// Guardian charger's charging attack, it knocks items out of people's hands +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian + name = "Charge!" + cooldown_time = 4 SECONDS + melee_cooldown_time = 0 SECONDS + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "speed" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + charge_delay = 0 + recoil_duration = 0 + charge_damage = 20 + charge_distance = 10 + unset_after_click = FALSE + destroy_objects = FALSE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/PreActivate(atom/target) + if (!isguardian(owner)) + return ..() + var/mob/living/basic/guardian/guardian_owner = owner + if (guardian_owner.is_deployed()) + return ..() + return FALSE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/do_charge_indicator(atom/charger, atom/charge_target) + playsound(charger, 'sound/items/modsuit/loader_launch.ogg', 75, TRUE) + var/obj/effect/temp_visual/decoy/decoy_flash = new /obj/effect/temp_visual/decoy(charger.loc, charger) + animate(decoy_flash, alpha = 0, color = "#FF0000", transform = matrix() * 2, time = 3) + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/can_hit_target(atom/movable/source, atom/target) + var/mob/living/living_target = target + if (!istype(living_target)) + return FALSE + var/mob/living/basic/guardian/guardian_owner = owner + if (!istype(guardian_owner)) + return TRUE + if (living_target == guardian_owner.summoner || guardian_owner.shares_summoner(target)) + return FALSE + return TRUE + +/datum/action/cooldown/mob_cooldown/charge/basic_charge/guardian/hit_target(atom/movable/source, mob/living/target, damage_dealt) + if(ishuman(target)) + var/mob/living/carbon/human/hit_human = target + if(hit_human.check_block(src, charge_damage, name, attack_type = LEAP_ATTACK)) + return + . = ..() + var/mob/living/hit_mob = target + hit_mob.drop_all_held_items() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm new file mode 100644 index 00000000000..ed54a23771d --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm @@ -0,0 +1,100 @@ +/// Dextrous guardians have some of the most powerful abilities of all: hands and pockets +/mob/living/basic/guardian/dextrous + guardian_type = GUARDIAN_DEXTROUS + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!") + creator_name = "Dextrous" + creator_desc = "Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item." + creator_icon = "dextrous" + hud_type = /datum/hud/dextrous/guardian + held_items = list(null, null) + /// An internal pocket we can put stuff in + var/obj/item/internal_storage + +/mob/living/basic/guardian/dextrous/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) + AddElement(/datum/element/dextrous, hud_type = hud_type) + AddComponent(/datum/component/personal_crafting) + AddComponent(/datum/component/basic_inhands) + +/mob/living/basic/guardian/dextrous/death(gibbed) + dropItemToGround(internal_storage) + return ..() + +/mob/living/basic/guardian/dextrous/examine(mob/user) + . = ..() + if(isnull(internal_storage) || (internal_storage.item_flags & ABSTRACT)) + return + . += span_info("It is holding [internal_storage.get_examine_string(user)] in its internal storage.") + +/mob/living/basic/guardian/dextrous/recall_effects() + . = ..() + drop_all_held_items() + +// Bullshit related to having a fake pocket begins here + +/mob/living/basic/guardian/dextrous/doUnEquip(obj/item/equipped_item, force, newloc, no_move, invdrop = TRUE, silent = FALSE) + . = ..() + if (!.) + return FALSE + update_held_items() + if(equipped_item == internal_storage) + internal_storage = null + update_inv_internal_storage() + return TRUE + +/mob/living/basic/guardian/dextrous/can_equip(mob/living/M, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE) + if(slot != ITEM_SLOT_DEX_STORAGE) + return FALSE + return isnull(internal_storage) + +/mob/living/basic/guardian/dextrous/get_item_by_slot(slot_id) + if(slot_id == ITEM_SLOT_DEX_STORAGE) + return internal_storage + return ..() + +/mob/living/basic/guardian/dextrous/get_slot_by_item(obj/item/looking_for) + if(internal_storage == looking_for) + return ITEM_SLOT_DEX_STORAGE + return ..() + +/mob/living/basic/guardian/dextrous/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) + if (slot != ITEM_SLOT_DEX_STORAGE) + to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) + return FALSE + + var/index = get_held_index_of_item(equipping) + if(index) + held_items[index] = null + update_held_items() + + if(equipping.pulledby) + equipping.pulledby.stop_pulling() + + equipping.screen_loc = null // will get moved if inventory is visible + equipping.forceMove(src) + SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) + + internal_storage = equipping + update_inv_internal_storage() + + equipping.on_equipped(src, slot) + return TRUE + +/mob/living/basic/guardian/dextrous/getBackSlot() + return ITEM_SLOT_DEX_STORAGE + +/mob/living/basic/guardian/dextrous/getBeltSlot() + return ITEM_SLOT_DEX_STORAGE + +/mob/living/basic/guardian/dextrous/proc/update_inv_internal_storage() + if(isnull(internal_storage) || isnull(client) || !hud_used?.hud_shown) + return + internal_storage.screen_loc = ui_id + client.screen += internal_storage + +/mob/living/basic/guardian/dextrous/regenerate_icons() + update_inv_internal_storage() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm new file mode 100644 index 00000000000..db59c3209d0 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm @@ -0,0 +1,77 @@ +/// A durable guardian which can convert objects into hidden explosives. +/mob/living/basic/guardian/explosive + guardian_type = GUARDIAN_EXPLOSIVE + melee_damage_lower = 15 + melee_damage_upper = 15 + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) + range = 13 + playstyle_string = span_holoparasite("As an explosive type, you have moderate close combat abilities and are capable of converting nearby items and objects into disguised bombs via right-click.") + creator_name = "Explosive" + creator_desc = "High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay." + creator_icon = "explosive" + /// Ability which plants bombs + var/datum/action/cooldown/mob_cooldown/explosive_booby_trap/bomb + +/mob/living/basic/guardian/explosive/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + bomb = new(src) + bomb.Grant(src) + +/mob/living/basic/guardian/explosive/Destroy() + QDEL_NULL(bomb) + return ..() + +/mob/living/basic/guardian/explosive/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) + if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isobj(attack_target)) + bomb.Trigger(target = attack_target) + return + return ..() + + +/// An ability which can turn an object into a bomb +/datum/action/cooldown/mob_cooldown/explosive_booby_trap + name = "Explosive Trap" + desc = "Convert an inanimate object into a deadly and mostly undetectable explosive, triggered on touch." + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "smoke" + cooldown_time = 20 SECONDS + melee_cooldown_time = 0 SECONDS + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + /// After this amount of time passses, bomb deactivates. + var/decay_time = 1 MINUTES + /// Static list of signals that activate the bomb. + var/static/list/boom_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_BUMPED, COMSIG_ATOM_ATTACK_HAND) + +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/PreActivate(atom/target) + if (!isobj(target)) + return FALSE + if (!owner.Adjacent(target)) + return FALSE + return ..() + +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/Activate(atom/target) + var/glow_colour = COLOR_RED + var/mob/living/basic/guardian/guardian_owner = owner + if (istype(guardian_owner)) + glow_colour = guardian_owner.guardian_colour + target.AddComponent(\ + /datum/component/direct_explosive_trap, \ + saboteur = owner, \ + expire_time = decay_time, \ + glow_colour = glow_colour,\ + explosive_checks = CALLBACK(src, PROC_REF(validate_target)), \ + triggering_signals = boom_signals, \ + ) + target.balloon_alert(owner, "bomb planted") + StartCooldown() + return TRUE + +/// Validate that we should blow up on this thing, preferably not on one of our allies +/datum/action/cooldown/mob_cooldown/explosive_booby_trap/proc/validate_target(mob/living/target) + if (target == owner) + return FALSE + var/mob/living/basic/guardian/guardian_owner = owner + if (!istype(guardian_owner)) + return TRUE + return target != guardian_owner.summoner && !guardian_owner.shares_summoner(target) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm new file mode 100644 index 00000000000..6790916be07 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm @@ -0,0 +1,159 @@ +/// Not particularly resistant, but versatile due to the selection of gases it can generate. +/mob/living/basic/guardian/gaseous + guardian_type = GUARDIAN_GASEOUS + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 0) + range = 7 + playstyle_string = span_holoparasite("As a gaseous type, you have only light damage resistance, but you can expel gas in an area. In addition, your punches cause sparks, and you make your summoner inflammable.") + creator_name = "Gaseous" + creator_desc = "Creates sparks on touch and continuously expels a gas of its choice. Automatically extinguishes the user if they catch on fire." + creator_icon = "gaseous" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode/gases + /// Ability we use to select gases + var/datum/action/cooldown/mob_cooldown/expel_gas/gas + /// Rate of temperature stabilization per second. + var/temp_stabilization_rate = 0.1 + +/mob/living/basic/guardian/gaseous/Initialize(mapload, theme) + . = ..() + RegisterSignal(src, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(pre_pressure_moved)) + gas = new(src) + gas.owner_has_control = FALSE // It's nicely integrated with the Guardian UI, no need to have two buttons + gas.Grant(src) + +/mob/living/basic/guardian/gaseous/Destroy() + QDEL_NULL(gas) + return ..() + +/mob/living/basic/guardian/gaseous/toggle_modes() + gas.Trigger() + +/mob/living/basic/guardian/gaseous/set_summoner(mob/living/to_who, different_person) + . = ..() + if (QDELETED(src)) + return + RegisterSignal(summoner, COMSIG_LIVING_IGNITED, PROC_REF(on_summoner_ignited)) + RegisterSignal(summoner, COMSIG_LIVING_LIFE, PROC_REF(on_summoner_life)) + +/mob/living/basic/guardian/gaseous/cut_summoner(different_person) + if (!isnull(summoner)) + UnregisterSignal(summoner, list(COMSIG_LIVING_IGNITED, COMSIG_LIVING_LIFE)) + return ..() + +/// Prevent our summoner from being on fire +/mob/living/basic/guardian/gaseous/proc/on_summoner_ignited(mob/living/source) + SIGNAL_HANDLER + source.extinguish_mob() + source.set_fire_stacks(0, remove_wet_stacks = FALSE) + +/// Maintain our summoner at a stable body temperature +/mob/living/basic/guardian/gaseous/proc/on_summoner_life(mob/living/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + source.adjust_bodytemperature(get_temp_change_amount((summoner.get_body_temp_normal() - summoner.bodytemperature), temp_stabilization_rate * seconds_per_tick)) + +/mob/living/basic/guardian/gaseous/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if(!. || !isliving(target)) + return + do_sparks(1, TRUE, target) + +/mob/living/basic/guardian/gaseous/recall_effects() + . = ..() + if(!isnull(summoner)) + UnregisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH) + +/mob/living/basic/guardian/gaseous/manifest_effects() + . = ..() + if (!isnull(summoner)) + RegisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(pre_pressure_moved)) + +/// We stand firm in the face of gas +/mob/living/basic/guardian/gaseous/proc/pre_pressure_moved(datum/source) + SIGNAL_HANDLER + return COMSIG_ATOM_BLOCKS_PRESSURE + + +/// Expel a range of gases +/datum/action/cooldown/mob_cooldown/expel_gas + name = "Release Gas" + desc = "Start or stop expelling a selected gas into the environment." + button_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "smoke" + cooldown_time = 0 SECONDS // We're here for the interface not the cooldown + melee_cooldown_time = 0 SECONDS + click_to_activate = FALSE + /// Gas being expelled. + var/active_gas = null + /// Associative list of types of gases to moles we create every life tick. + var/static/list/possible_gases = list( + /datum/gas/oxygen = 50, + /datum/gas/nitrogen = 750, //overpressurizing is hard!. + /datum/gas/water_vapor = 1, //you need incredibly little water vapor for the effects to kick in + /datum/gas/nitrous_oxide = 15, + /datum/gas/carbon_dioxide = 50, + /datum/gas/plasma = 3, + /datum/gas/bz = 10, + ) + +/datum/action/cooldown/mob_cooldown/expel_gas/Grant(mob/granted_to) + . = ..() + if (isnull(owner)) + return + RegisterSignal(owner, COMSIG_GUARDIAN_RECALLED, PROC_REF(stop_gas)) + +/datum/action/cooldown/mob_cooldown/expel_gas/Remove(mob/removed_from) + UnregisterSignal(owner, list(COMSIG_GUARDIAN_RECALLED, COMSIG_LIVING_LIFE)) + return ..() + +/datum/action/cooldown/mob_cooldown/expel_gas/Activate(atom/target) + StartCooldown(360 SECONDS) + // Regeneated each time just in case someone fucks with our list + var/list/gas_selection = list("None") + for(var/datum/gas/gas as anything in possible_gases) + gas_selection[initial(gas.name)] = gas + + var/picked_gas = tgui_input_list(owner, "Select a gas to emit.", "Gas Producer", gas_selection) + StartCooldown() + if(picked_gas == "None") + stop_gas() + return + + var/gas_type = gas_selection[picked_gas] + if(isnull(picked_gas) || isnull(gas_type)) + return + + to_chat(owner, span_bolddanger("You start releasing [picked_gas].")) + owner.investigate_log("set their gas type to [picked_gas].", INVESTIGATE_ATMOS) + var/had_gas = !isnull(active_gas) + active_gas = gas_type + if(isnull(owner.particles)) + owner.particles = new /particles/smoke/steam() + owner.particles.position = list(-1, 8, 0) + owner.particles.fadein = 5 + owner.particles.height = 200 + var/datum/gas/chosen_gas = active_gas // Casting it so that we can access gas vars in initial, it's still a typepath + owner.particles.color = initial(chosen_gas.primary_color) + if (!had_gas) + RegisterSignal(owner, COMSIG_LIVING_LIFE, PROC_REF(on_life)) + +/// Turns off the gas +/datum/action/cooldown/mob_cooldown/expel_gas/proc/stop_gas() + SIGNAL_HANDLER + if (!isnull(active_gas)) + to_chat(src, span_notice("You stop releasing gas.")) + active_gas = null + QDEL_NULL(owner.particles) + UnregisterSignal(owner, COMSIG_LIVING_LIFE) + +/// Release gas every life tick while active +/datum/action/cooldown/mob_cooldown/expel_gas/proc/on_life(datum/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + if (isnull(active_gas)) + return // We shouldn't even be registered at this point but just in case + var/datum/gas_mixture/mix_to_spawn = new() + mix_to_spawn.add_gas(active_gas) + mix_to_spawn.gases[active_gas][MOLES] = possible_gases[active_gas] * seconds_per_tick + mix_to_spawn.temperature = T20C + var/turf/open/our_turf = get_turf(owner) + our_turf.assume_air(mix_to_spawn) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm b/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm new file mode 100644 index 00000000000..a0ad9c8c21b --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/gravitokinetic.dm @@ -0,0 +1,107 @@ +/// Somewhat durable guardian who can increase gravity in an area +/mob/living/basic/guardian/gravitokinetic + guardian_type = GUARDIAN_GRAVITOKINETIC + melee_damage_lower = 15 + melee_damage_upper = 15 + damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) + playstyle_string = span_holoparasite("As a gravitokinetic type, you can right-click to make the gravity on the ground stronger, and punching applies this effect to a target.") + creator_name = "Gravitokinetic" + creator_desc = "Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but you are not immune to your own such effects." + creator_icon = "gravitokinetic" + /// Targets we have applied our gravity effects on. + var/list/gravity_targets = list() + /// Distance at which our ability works + var/gravity_power_range = 10 + /// Gravity added on punches. + var/punch_gravity = 5 + /// Gravity added to turfs. + var/turf_gravity = 3 + +/mob/living/basic/guardian/gravitokinetic/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/forced_gravity, 1) + + var/static/list/container_connections = list( + COMSIG_MOVABLE_MOVED = PROC_REF(on_moved), + ) + AddComponent(/datum/component/connect_containers, src, container_connections) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + +/mob/living/basic/guardian/gravitokinetic/set_summoner(mob/living/to_who, different_person) + . = ..() + if (!QDELETED(src)) + return + to_who.AddElement(/datum/element/forced_gravity, 1) + +/mob/living/basic/guardian/gravitokinetic/cut_summoner(different_person) + summoner?.RemoveElement(/datum/element/forced_gravity, 1) + return ..() + +/mob/living/basic/guardian/gravitokinetic/death(gibbed) + . = ..() + clear_gravity() + +/mob/living/basic/guardian/gravitokinetic/recall_effects() + . = ..() + if (length(gravity_targets)) + to_chat(src, span_bolddanger("You have released your gravitokinetic powers!")) + clear_gravity() + +/mob/living/basic/guardian/gravitokinetic/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if (!. || !isliving(target) || target == src || target == summoner || shares_summoner(target) || gravity_targets[target]) + return + to_chat(src, span_bolddanger("Your punch has applied heavy gravity to [target]!")) + add_gravity(target, punch_gravity) + to_chat(target, span_userdanger("Everything feels really heavy!")) + return TRUE + +/mob/living/basic/guardian/gravitokinetic/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) + if (LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && !gravity_targets[attack_target]) + slam_turf(attack_target) + return + return ..() + +/// Apply forced gravity to the floor +/mob/living/basic/guardian/gravitokinetic/proc/slam_turf(turf/open/slammed) + if (!isopenturf(slammed) || isgroundlessturf(slammed)) + return + visible_message(span_danger("[src] slams their fist into the [slammed]!"), span_notice("You amplify gravity around the [slammed].")) + do_attack_animation(slammed) + add_gravity(slammed, turf_gravity) + +/// Remove our forced gravity from all targets +/mob/living/basic/guardian/gravitokinetic/proc/clear_gravity() + for(var/gravity_target in gravity_targets) + remove_gravity(gravity_target) + +/// Make something heavier +/mob/living/basic/guardian/gravitokinetic/proc/add_gravity(atom/target, new_gravity = 3) + if (gravity_targets[target]) + return + target.AddElement(/datum/element/forced_gravity, new_gravity) + gravity_targets[target] = new_gravity + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_target_moved)) + playsound(src, 'sound/effects/gravhit.ogg', 100, TRUE) + +/// Stop making something heavier +/mob/living/basic/guardian/gravitokinetic/proc/remove_gravity(atom/target, too_far = FALSE) + if (isnull(gravity_targets[target])) + return + if (too_far) + to_chat(src, span_bolddanger("You are too far away from [target] to amplify gravity's hold on them!")) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + target.RemoveElement(/datum/element/forced_gravity, gravity_targets[target]) + gravity_targets -= target + +/// When we or something we are inside move check if we are now too far away +/mob/living/basic/guardian/gravitokinetic/proc/on_moved() + for(var/gravity_target in gravity_targets) + if (get_dist(src, gravity_target) > gravity_power_range) + remove_gravity(gravity_target, too_far = TRUE) + +/// When something we put gravity on moves check if it's too far away +/mob/living/basic/guardian/gravitokinetic/proc/on_target_moved(atom/movable/moving_target, old_loc, dir, forced) + SIGNAL_HANDLER + if (get_dist(src, moving_target) > gravity_power_range) + remove_gravity(moving_target, too_far = TRUE) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm new file mode 100644 index 00000000000..e25184372db --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm @@ -0,0 +1,95 @@ +/// A reasonably durable guardian linked to you by a chain of lightning, zapping people who get between you +/mob/living/basic/guardian/lightning + guardian_type = GUARDIAN_LIGHTNING + melee_damage_lower = 7 + melee_damage_upper = 7 + attack_verb_continuous = "shocks" + attack_verb_simple = "shock" + melee_damage_type = BURN + attack_sound = 'sound/machines/defib_zap.ogg' + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) + range = 7 + playstyle_string = span_holoparasite("As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.") + creator_name = "Lightning" + creator_desc = "Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage." + creator_icon = "lightning" + /// Link between us and our summoner + var/datum/component/summoner_chain + /// Associative list of chained enemies to their chains + var/list/enemy_chains + +/mob/living/basic/guardian/lightning/death(gibbed) + . = ..() + clear_chains() + +/mob/living/basic/guardian/lightning/Destroy() + clear_chains() + return ..() + +/mob/living/basic/guardian/lightning/manifest_effects() + . = ..() + if (isnull(summoner)) + return + summoner_chain = chain_to(summoner, max_range = INFINITY) // Functionally it's actually our leash range but admins might fuck with it + +/mob/living/basic/guardian/lightning/recall_effects() + . = ..() + clear_chains() + +/// Remove all of our chains +/mob/living/basic/guardian/lightning/proc/clear_chains() + QDEL_NULL(summoner_chain) + QDEL_LIST_ASSOC_VAL(enemy_chains) + +/mob/living/basic/guardian/lightning/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if (!. || !validate_target(target) || (target in enemy_chains)) + return + if (length(enemy_chains) == 2) + var/old_target = enemy_chains[1] + var/datum/old_chain = enemy_chains[old_target] + qdel(old_chain) + var/datum/new_chain = chain_to(target) + RegisterSignal(new_chain, COMSIG_QDELETING, PROC_REF(on_chain_deleted)) + LAZYADDASSOC(enemy_chains, target, new_chain) + +/// Create a damaging lightning chain between ourselves and a target +/mob/living/basic/guardian/lightning/proc/chain_to(atom/target, max_range = 7) + var/datum/component/chain = AddComponent(\ + /datum/component/damage_chain, \ + linked_to = target, \ + max_distance = max_range, \ + beam_state = "lightning[rand(1,12)]", \ + beam_type = /obj/effect/ebeam/chain, \ + validate_target = CALLBACK(src, PROC_REF(validate_target)), \ + chain_damage_feedback = CALLBACK(src, PROC_REF(on_chain_zap)), \ + ) + return chain + +/// Handle losing our reference when we delete a chain +/mob/living/basic/guardian/lightning/proc/on_chain_deleted(datum/source) + SIGNAL_HANDLER + for (var/target in enemy_chains) + if (enemy_chains[target] != source) + continue + enemy_chains -= target + return + +/// Confirm whether something is valid to zap with lightning +/mob/living/basic/guardian/lightning/proc/validate_target(atom/target) + return isliving(target) && target != src && target != summoner && !shares_summoner(target) + +/// Called every few zaps by a chain +/mob/living/basic/guardian/lightning/proc/on_chain_zap(mob/living/target) + target.electrocute_act(shock_damage = 0, source = "lightning chain") + target.visible_message( + span_danger("[target] was shocked by the lightning chain!"), + span_userdanger("You are shocked by the lightning chain!"), + span_hear("You hear a heavy electrical crack."), + ) + +/// Beam definition for our lightning chain +/obj/effect/ebeam/chain + name = "lightning chain" + layer = LYING_MOB_LAYER + plane = GAME_PLANE_FOV_HIDDEN diff --git a/code/modules/mob/living/basic/guardian/guardian_types/protector.dm b/code/modules/mob/living/basic/guardian/guardian_types/protector.dm new file mode 100644 index 00000000000..a0aa34ad17f --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/protector.dm @@ -0,0 +1,122 @@ +/// Very durable, and reverses the usual leash dynamic. Can slow down to become extremely durable. +/mob/living/basic/guardian/protector + guardian_type = GUARDIAN_PROTECTOR + melee_damage_lower = 15 + melee_damage_upper = 15 + range = 5 // You want this to be low so you can drag them around + damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) + playstyle_string = span_holoparasite("As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.") + creator_name = "Protector" + creator_desc = "Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower." + creator_icon = "protector" + toggle_button_type = /atom/movable/screen/guardian/toggle_mode + /// Action which toggles our shield + var/datum/action/cooldown/mob_cooldown/protector_shield/shield + +/mob/living/basic/guardian/protector/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + shield = new(src) + shield.owner_has_control = FALSE // Hide it from the user, it's integrated with guardian UI + shield.Grant(src) + +/mob/living/basic/guardian/protector/Destroy() + QDEL_NULL(shield) + return ..() + +// Invert the order +/mob/living/basic/guardian/protector/leash_to(atom/movable/leashed, atom/movable/leashed_to) + return ..(leashed_to, leashed) + +/mob/living/basic/guardian/protector/unleash() + qdel(summoner?.GetComponent(/datum/component/leash)) + +/mob/living/basic/guardian/protector/toggle_modes() + shield.Trigger() + +/mob/living/basic/guardian/protector/ex_act(severity) + if(severity >= EXPLODE_DEVASTATE) + adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner + return TRUE + return ..() + +/// Toggle a status effect which makes you slow but defensive +/datum/action/cooldown/mob_cooldown/protector_shield + name = "Protection Mode" + desc = "Enter a defensive stance which slows you down and reduces your damage, but makes you almost invincible." + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "shield-old" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 1 SECONDS + click_to_activate = FALSE + +/datum/action/cooldown/mob_cooldown/protector_shield/Activate(mob/living/target) + if (!isliving(target)) + return FALSE + if (target.has_status_effect(/datum/status_effect/protector_shield)) + target.remove_status_effect(/datum/status_effect/protector_shield) + return + target.apply_status_effect(/datum/status_effect/protector_shield) + StartCooldown() + return TRUE + +/// Makes the guardian even more durable, but slower +/datum/status_effect/protector_shield + id = "guardian_shield" + alert_type = null + /// Damage removed in protecting mode. + var/damage_penalty = 13 + /// Colour for our various overlays. + var/overlay_colour = COLOR_TEAL + /// Overlay for our protection shield. + var/mutable_appearance/shield_overlay + /// Damage coefficients when shielded + var/list/shielded_damage = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) + +/datum/status_effect/protector_shield/on_apply() + if (isguardian(owner)) + var/mob/living/basic/guardian/guardian_owner = owner + overlay_colour = guardian_owner.guardian_colour + shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") + shield_overlay.color = overlay_colour + + owner.melee_damage_lower -= damage_penalty + owner.melee_damage_upper -= damage_penalty + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/guardian_shield) + + if (isbasicmob(owner)) // Better hope you are or this status is doing basically nothing useful for you + var/mob/living/basic/basic_owner = owner + basic_owner.damage_coeff = shielded_damage + + to_chat(owner, span_bolddanger("You enter protection mode.")) + RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) + RegisterSignals(owner, COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES, PROC_REF(on_health_changed)) + owner.update_appearance(UPDATE_ICON) + return TRUE + +/datum/status_effect/protector_shield/on_remove() + owner.melee_damage_lower += damage_penalty + owner.melee_damage_upper += damage_penalty + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/guardian_shield) + + if (isbasicmob(owner)) + var/mob/living/basic/basic_owner = owner + basic_owner.damage_coeff = initial(basic_owner.damage_coeff) + + to_chat(owner, span_bolddanger("You return to your normal mode.")) + UnregisterSignal(owner, list(COMSIG_ATOM_UPDATE_OVERLAYS) + COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES) + owner.update_appearance(UPDATE_ICON) + +/// Show an extra overlay when we're in shield mode +/datum/status_effect/protector_shield/proc/on_update_overlays(atom/source, list/overlays) + SIGNAL_HANDLER + overlays += shield_overlay + +/// Flash an animation when someone tries to hurt us +/datum/status_effect/protector_shield/proc/on_health_changed(mob/living/our_mob, type, amount, forced) + SIGNAL_HANDLER + if (amount <= 0 && !QDELETED(our_mob)) + return + var/image/flash_overlay = new('icons/effects/effects.dmi', owner, "shield-flash", dir = pick(GLOB.cardinals)) + flash_overlay.color = overlay_colour + owner.flick_overlay_view(flash_overlay, 0.5 SECONDS) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm b/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm new file mode 100644 index 00000000000..293dbfc2320 --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/ranged.dm @@ -0,0 +1,205 @@ +/// A ranged guardian can fling shards of glass at people very very quickly. It can also enter a long-range scouting mode. +/mob/living/basic/guardian/ranged + guardian_type = GUARDIAN_RANGED + combat_mode = FALSE + friendly_verb_continuous = "quietly assesses" + friendly_verb_simple = "quietly assess" + melee_damage_lower = 10 + melee_damage_upper = 10 + damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9) + range = 13 + playstyle_string = span_holoparasite("As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.") + creator_name = "Ranged" + creator_desc = "Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; where it cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode." + creator_icon = "ranged" + see_invisible = SEE_INVISIBLE_LIVING + toggle_button_type = /atom/movable/screen/guardian/toggle_mode + +/mob/living/basic/guardian/ranged/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddComponent(\ + /datum/component/ranged_attacks,\ + projectile_type = /obj/projectile/guardian,\ + projectile_sound = 'sound/effects/hit_on_shattered_glass.ogg',\ + cooldown_time = 0.1 SECONDS, \ + ) + AddComponent(/datum/component/ranged_mob_full_auto, autofire_shot_delay = 0.1 SECONDS) + var/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/snare = new (src) + snare.Grant(src) + +/mob/living/basic/guardian/ranged/toggle_modes() + if(is_deployed() && !isnull(summoner)) + balloon_alert(src, "must not be manifested!") + return + if (has_status_effect(/datum/status_effect/guardian_scout_mode)) + remove_status_effect(/datum/status_effect/guardian_scout_mode) + return + apply_status_effect(/datum/status_effect/guardian_scout_mode) + +/mob/living/basic/guardian/ranged/toggle_light() + var/msg + switch(lighting_cutoff) + if (LIGHTING_CUTOFF_VISIBLE) + lighting_cutoff_red = 10 + lighting_cutoff_green = 10 + lighting_cutoff_blue = 15 + msg = "You activate your night vision." + if (LIGHTING_CUTOFF_MEDIUM) + lighting_cutoff_red = 25 + lighting_cutoff_green = 25 + lighting_cutoff_blue = 35 + msg = "You increase your night vision." + if (LIGHTING_CUTOFF_HIGH) + lighting_cutoff_red = 35 + lighting_cutoff_green = 35 + lighting_cutoff_blue = 50 + msg = "You maximize your night vision." + else + lighting_cutoff_red = 0 + lighting_cutoff_green = 0 + lighting_cutoff_blue = 0 + msg = "You deactivate your night vision." + sync_lighting_plane_cutoff() + to_chat(src, span_notice(msg)) + +/// Become an incorporeal scout +/datum/status_effect/guardian_scout_mode + id = "guardian_scout" + alert_type = null + +/datum/status_effect/guardian_scout_mode/on_apply() + animate(owner, alpha = 45, time = 0.5 SECONDS) + RegisterSignal(owner, COMSIG_GUARDIAN_MANIFESTED, PROC_REF(on_manifest)) + RegisterSignal(owner, COMSIG_GUARDIAN_RECALLED, PROC_REF(on_recall)) + RegisterSignal(owner, COMSIG_MOB_CLICKON, PROC_REF(on_click)) + + var/mob/living/basic/guardian/guardian_mob = owner + guardian_mob.unleash() + to_chat(owner, span_bolddanger("You enter scouting mode.")) + return TRUE + +/datum/status_effect/guardian_scout_mode/on_remove() + animate(owner, alpha = initial(owner.alpha), time = 0.5 SECONDS) + UnregisterSignal(owner, list(COMSIG_GUARDIAN_MANIFESTED, COMSIG_GUARDIAN_RECALLED, COMSIG_MOB_CLICKON)) + to_chat(owner, span_bolddanger("You return to your normal mode.")) + var/mob/living/basic/guardian/guardian_mob = owner + guardian_mob.leash_to(owner, guardian_mob.summoner) + +/// Restore incorporeal move when we become corporeal, yes I know that suonds silly +/datum/status_effect/guardian_scout_mode/proc/on_manifest() + SIGNAL_HANDLER + owner.incorporeal_move = INCORPOREAL_MOVE_BASIC + +/// Stop having incorporeal move when we recall so that we can't move +/datum/status_effect/guardian_scout_mode/proc/on_recall() + SIGNAL_HANDLER + owner.incorporeal_move = FALSE + +/// While this is active we can't click anything +/datum/status_effect/guardian_scout_mode/proc/on_click() + SIGNAL_HANDLER + return COMSIG_MOB_CANCEL_CLICKON + + +/// Place an invisible trap which alerts the guardian when it is crossed +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare + name = "Surveillance Snare" + desc = "Place an invisible snare which will alert you when it is crossed." + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "eye" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 2 SECONDS + melee_cooldown_time = 0 + click_to_activate = FALSE + /// How many snares can we have? + var/maximum_snares = 5 + /// What snares have we already placed? + var/list/placed_snares = list() + +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/Activate(atom/target) + StartCooldown(360 SECONDS) + + if (length(placed_snares) >= maximum_snares) + var/picked_snare = tgui_input_list(owner, "Choose a snare to replace.", "Remove Snare", sort_names(placed_snares)) + if(isnull(picked_snare)) + return FALSE + qdel(picked_snare) + if (length(placed_snares) >= maximum_snares) + StartCooldown(0) + return FALSE + + owner.balloon_alert(owner, "snare deployed") // We need feedback because they are invisible + var/turf/snare_loc = get_turf(owner) + var/obj/effect/abstract/surveillance_snare/new_snare = new(snare_loc, owner) + new_snare.assign_owner(owner) + RegisterSignal(new_snare, COMSIG_QDELETING, PROC_REF(on_snare_deleted)) + placed_snares += new_snare + + StartCooldown() + return TRUE + +/// When a snare is deleted remove it from tracking +/datum/action/cooldown/mob_cooldown/guardian_alarm_snare/proc/on_snare_deleted(atom/snare) + SIGNAL_HANDLER + placed_snares -= snare + + +/// An invisible marker placed by a ranged guardian, alerts the owner when crossed +/obj/effect/abstract/surveillance_snare + name = "surveillance snare" + desc = "This thing is invisible, how are you examining it?" + invisibility = INVISIBILITY_ABSTRACT + /// Who do we notify when someone steps on us? + var/mob/living/owner + +/obj/effect/abstract/surveillance_snare/Initialize(mapload, spawning_guardian) + . = ..() + name = "[get_area(src)] snare ([rand(1, 1000)])" + var/static/list/loc_connections = list(COMSIG_ATOM_ENTERED = PROC_REF(on_entered)) + AddElement(/datum/element/connect_loc, loc_connections) + +/// Set up crossed notification +/obj/effect/abstract/surveillance_snare/proc/assign_owner(mob/living/new_owner) + if (isnull(new_owner)) + qdel(src) + return + owner = new_owner + RegisterSignal(owner, COMSIG_QDELETING, PROC_REF(owner_destroyed)) + +/// When crossed notify our owner +/obj/effect/abstract/surveillance_snare/proc/on_entered(atom/source, crossed_object) + SIGNAL_HANDLER + if (isnull(owner)) + qdel(src) + return + if (!isliving(crossed_object) || crossed_object == owner) + return + var/mob/living/basic/guardian/guardian_owner = owner + if (isguardian(owner) && crossed_object == guardian_owner.summoner || guardian_owner.shares_summoner(crossed_object)) + return + + var/send_message = span_bolddanger("[crossed_object] has crossed [name].") + if (!isguardian(owner) || isnull(guardian_owner.summoner)) + to_chat(owner, send_message) + return + + to_chat(guardian_owner.summoner, send_message) + var/list/guardians = guardian_owner.summoner.get_all_linked_holoparasites() + for(var/guardian in guardians) + to_chat(guardian, send_message) + +/// If the person who placed us doesn't exist we might as well die +/obj/effect/abstract/surveillance_snare/proc/owner_destroyed() + SIGNAL_HANDLER + owner = null + qdel(src) + + +/// The glass shards we throw as a guardian. They have low damage because you can fire them very very quickly. +/obj/projectile/guardian + name = "crystal spray" + icon_state = "guardian" + damage = 5 + damage_type = BRUTE + armour_penetration = 100 diff --git a/code/modules/mob/living/basic/guardian/guardian_types/standard.dm b/code/modules/mob/living/basic/guardian/guardian_types/standard.dm new file mode 100644 index 00000000000..2ca006b385c --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/standard.dm @@ -0,0 +1,63 @@ +/// Plain, but durable and strong. Can destroy walls. +/mob/living/basic/guardian/standard + guardian_type = GUARDIAN_STANDARD + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) + melee_damage_lower = 20 + melee_damage_upper = 20 + melee_attack_cooldown = 0.6 SECONDS + wound_bonus = -5 //you can wound! + obj_damage = 80 + environment_smash = ENVIRONMENT_SMASH_WALLS + playstyle_string = span_holoparasite("As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.") + creator_name = "Standard" + creator_desc = "Devastating close combat attacks and high damage resistance. Can smash through weak walls." + creator_icon = "standard" + /// The text we shout when attacking. + var/battlecry = "AT" + +/mob/living/basic/guardian/standard/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE, tear_time = 1.5 SECONDS) + var/datum/action/select_guardian_battlecry/cry = new(src) + cry.Grant(src) + +/mob/living/basic/guardian/standard/do_attack_animation(atom/attacked_atom, visual_effect_icon, used_item, no_effect) + . = ..() + if (!isliving(attacked_atom) || !isclosedturf(attacked_atom)) + return + var/msg = "" + for(var/i in 1 to 9) + msg += battlecry + say("[msg]!!", ignore_spam = TRUE) + for(var/sounds in 1 to 4) + addtimer(CALLBACK(src, PROC_REF(do_attack_sound), attacked_atom.loc), sounds DECISECONDS, TIMER_DELETE_ME) + +/// Echo our punching sounds +/mob/living/basic/guardian/standard/proc/do_attack_sound(atom/playing_from) + playsound(playing_from, attack_sound, 50, TRUE, TRUE) + +/// Action to change our battlecry +/datum/action/select_guardian_battlecry + name = "Select Battlecry" + desc = "Update the really cool thing you shout whenever you attack." + button_icon = 'icons/obj/clothing/gloves.dmi' + button_icon_state = "boxing" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + /// How long can it be? Shouldn't be too long because we repeat this a shitload of times + var/max_length = 6 + +/datum/action/select_guardian_battlecry/IsAvailable(feedback) + if (!istype(owner, /mob/living/basic/guardian/standard)) + return FALSE + return ..() + +/datum/action/select_guardian_battlecry/Trigger(trigger_flags) + . = ..() + if (!.) + return + var/mob/living/basic/guardian/standard/stand = owner + var/input = tgui_input_text(owner, "What do you want your battlecry to be?", "Battle Cry", max_length = max_length) + if(!input) + return + stand.battlecry = input diff --git a/code/modules/mob/living/basic/guardian/guardian_types/support.dm b/code/modules/mob/living/basic/guardian/guardian_types/support.dm new file mode 100644 index 00000000000..e22762bcada --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_types/support.dm @@ -0,0 +1,164 @@ +/// Quick-moving mob which can teleport things to a beacon and heal its allies +/mob/living/basic/guardian/support + guardian_type = GUARDIAN_SUPPORT + speed = 0 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) + melee_damage_lower = 15 + melee_damage_upper = 15 + playstyle_string = span_holoparasite("As a support type, you may right-click to heal targets. In addition, alt-clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.") + creator_name = "Support" + creator_desc = "Does medium damage, but can heal its targets and create beacons to teleport people and things to." + creator_icon = "support" + /// Amount of each damage type to heal per hit + var/healing_amount = 5 + +/mob/living/basic/guardian/support/Initialize(mapload, datum/guardian_fluff/theme) + . = ..() + AddComponent(\ + /datum/component/healing_touch,\ + heal_brute = healing_amount,\ + heal_burn = healing_amount,\ + heal_tox = healing_amount,\ + heal_oxy = healing_amount,\ + heal_time = 0,\ + action_text = "",\ + complete_text = "",\ + required_modifier = RIGHT_CLICK,\ + after_healed = CALLBACK(src, PROC_REF(after_healed)),\ + ) + + var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + medsensor.show_to(src) + + var/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/teleport = new(src) + teleport.Grant(src) + +/mob/living/basic/guardian/support/set_guardian_colour(colour) + . = ..() + AddComponent(/datum/component/healing_touch, heal_color = guardian_colour) + +/// Called after we heal someone, show some visuals +/mob/living/basic/guardian/support/proc/after_healed(mob/living/healed) + do_attack_animation(healed, ATTACK_EFFECT_PUNCH) + healed.visible_message( + message = span_notice("[src] heals [healed]!"), + self_message = span_userdanger("[src] heals you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = src, + ) + to_chat(src, span_notice("You heal [healed]!")) + playsound(healed, attack_sound, 50, TRUE, TRUE, frequency = -1) // play punch sound in REVERSE + + +/// Place a beacon and then listen for clicks to teleport people to it +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon + name = "Place Bluespace Beacon" + desc = "Mark the ground under your feet as a teleportation point. Alt-click things to teleport them to your beacon." + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "the_freezer" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + cooldown_time = 5 MINUTES + melee_cooldown_time = 0 + cooldown_rounding = 1 + click_to_activate = FALSE + /// Our teleportation beacon. + var/obj/structure/guardian_beacon/beacon + /// Time it takes to teleport something. + var/teleport_time = 6 SECONDS + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Grant(mob/granted_to) + . = ..() + RegisterSignal(owner, COMSIG_MOB_ALTCLICKON, PROC_REF(try_teleporting)) + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Remove(mob/removed_from) + UnregisterSignal(owner, COMSIG_MOB_ALTCLICKON) + return ..() + +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/Activate(atom/movable/target) + var/turf/beacon_loc = owner.loc + if(!isfloorturf(beacon_loc)) + owner.balloon_alert(owner, "no room!") + return FALSE + + if (!isnull(beacon)) + beacon.visible_message("[beacon] vanishes!") + new /obj/effect/temp_visual/guardian/phase/out(beacon.loc) + qdel(beacon) + + beacon = new(beacon_loc, src) + if (isguardian(owner)) + var/mob/living/basic/guardian/guardian_owner = owner + beacon.add_atom_colour(guardian_owner.guardian_colour, FIXED_COLOUR_PRIORITY) + RegisterSignal(beacon, COMSIG_QDELETING, PROC_REF(on_beacon_deleted)) + to_chat(src, span_bolddanger("Beacon placed! You may now warp targets and objects to it, including your user, via Alt+Click.")) + StartCooldown() + return TRUE + +/// Don't hold a reference to a deleted beacon +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/on_beacon_deleted() + SIGNAL_HANDLER + beacon = null + +/// Try and teleport something to our beacon +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/try_teleporting(mob/living/source, atom/target) + SIGNAL_HANDLER + if (!can_teleport(source, target)) + return + INVOKE_ASYNC(src, PROC_REF(perform_teleport), source, target) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/// Validate whether we can teleport this object +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/can_teleport(mob/living/source, atom/movable/target) + if (isnull(beacon)) + source.balloon_alert(source, "no beacon!") + return FALSE + if (isguardian(source)) + var/mob/living/basic/guardian/guardian_mob = source + if (!guardian_mob.is_deployed()) + source.balloon_alert(source, "manifest yourself!") + return FALSE + if (!source.Adjacent(target)) + target.balloon_alert(source, "too far!") + return FALSE + if (target.anchored) + target.balloon_alert(source, "it won't budge!") + return FALSE + if(beacon.z != target.z) + target.balloon_alert(source, "too far from beacon!") + return FALSE + return TRUE + +/// Start teleporting +/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/perform_teleport(mob/living/source, atom/target) + source.do_attack_animation(target) + playsound(target, 'sound/weapons/punch1.ogg', 50, TRUE, TRUE, frequency = -1) + source.balloon_alert(source, "teleporting...") + target.visible_message( + span_danger("[target] starts to glow faintly!"), \ + span_userdanger("You start to faintly glow, and you feel strangely weightless!")) + if(!do_after(source, teleport_time, target)) + return + new /obj/effect/temp_visual/guardian/phase/out(target.loc) + if(isliving(target)) + var/mob/living/living_target = target + living_target.flash_act() + target.visible_message( + span_danger("[target] disappears in a flash of light!"), \ + span_userdanger("Your vision is obscured by a flash of light!"), \ + ) + do_teleport(target, beacon, precision = 0, channel = TELEPORT_CHANNEL_BLUESPACE) + new /obj/effect/temp_visual/guardian/phase(get_turf(target)) + + +/// Structure which acts as the landing point for a support guardian's teleportation effects +/obj/structure/guardian_beacon + name = "guardian beacon" + icon = 'icons/turf/floors.dmi' + desc = "A glowing zone which acts as a beacon for teleportation." + icon_state = "light_on-8" + light_range = MINIMUM_USEFUL_LIGHT_RANGE + density = FALSE + anchored = TRUE + plane = FLOOR_PLANE + layer = ABOVE_OPEN_TURF_LAYER diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm new file mode 100644 index 00000000000..02d1fd1ed3a --- /dev/null +++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm @@ -0,0 +1,187 @@ +/// Pop out into the realm of the living. +/mob/living/basic/guardian/proc/manifest(forced) + if (is_deployed() || isnull(summoner) || isnull(summoner.loc) || istype(summoner.loc, /obj/effect) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) + return FALSE + forceMove(summoner.loc) + new /obj/effect/temp_visual/guardian/phase(loc) + COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) + reset_perspective() + manifest_effects() + return TRUE + +/// Go and hide inside your boss. +/mob/living/basic/guardian/proc/recall(forced) + if (!is_deployed() || isnull(summoner) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) + return FALSE + new /obj/effect/temp_visual/guardian/phase/out(loc) + recall_effects() + forceMove(summoner) + COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) + return TRUE + +/// Do something when we appear. +/mob/living/basic/guardian/proc/manifest_effects() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_GUARDIAN_MANIFESTED) + +/// Do something when we vanish. +/mob/living/basic/guardian/proc/recall_effects() + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_GUARDIAN_RECALLED) + +/// Swap to a different mode... if we have one +/mob/living/basic/guardian/proc/toggle_modes() + to_chat(src, span_bolddanger("You don't have another mode!")) + + +/// Turn an internal light on or off. +/mob/living/basic/guardian/proc/toggle_light() + if (!light_on) + to_chat(src, span_notice("You activate your light.")) + set_light_on(TRUE) + else + to_chat(src, span_notice("You deactivate your light.")) + set_light_on(FALSE) + + +/// Prints what type of guardian we are and what we can do. +/mob/living/basic/guardian/verb/check_type() + set name = "Check Guardian Type" + set category = "Guardian" + set desc = "Check what type you are." + to_chat(src, playstyle_string) + + +/// Speak with our boss at a distance +/mob/living/basic/guardian/proc/communicate() + if (isnull(summoner)) + return + var/sender_key = key + var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") + if (sender_key != key || !input) //guardian got reset, or did not enter anything + return + + var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding + var/my_message = "[span_bolditalic(src.name)]: [preliminary_message]" //add source, color source with the guardian's color + + to_chat(summoner, "[my_message]") + var/list/guardians = summoner.get_all_linked_holoparasites() + for(var/guardian in guardians) + to_chat(guardian, "[my_message]") + for(var/dead_mob in GLOB.dead_mob_list) + var/link = FOLLOW_LINK(dead_mob, src) + to_chat(dead_mob, "[link] [my_message]") + + src.log_talk(input, LOG_SAY, tag="guardian") + + +/// Speak with your guardian(s) at a distance. +/datum/action/cooldown/mob_cooldown/guardian_comms + name = "Guardian Communication" + desc = "Communicate telepathically with your guardian." + button_icon = 'icons/hud/guardian.dmi' + button_icon_state = "communicate" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + click_to_activate = FALSE + cooldown_time = 0 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/guardian_comms/Activate(atom/target) + StartCooldown(360 SECONDS) + var/input = tgui_input_text(owner, "Enter a message to tell your guardian", "Message") + StartCooldown() + if (!input) + return FALSE + + var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding + var/my_message = span_boldholoparasite("[owner]: [preliminary_message]") //add source, color source with default grey... + + to_chat(owner, "[my_message]") + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/guardian as anything in guardians) + to_chat(guardian, "[span_bolditalic(owner.real_name)]: [preliminary_message]" ) + for(var/dead_mob in GLOB.dead_mob_list) + var/link = FOLLOW_LINK(dead_mob, owner) + to_chat(dead_mob, "[link] [my_message]") + owner.log_talk(input, LOG_SAY, tag="guardian") + + return TRUE + + +/// Tell your slacking or distracted guardian to come home. +/datum/action/cooldown/mob_cooldown/recall_guardian + name = "Recall Guardian" + desc = "Forcibly recall your guardian." + button_icon = 'icons/hud/guardian.dmi' + button_icon_state = "recall" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + click_to_activate = FALSE + cooldown_time = 0 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/recall_guardian/Activate(atom/target) + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/guardian in guardians) + guardian.recall() + StartCooldown() + return TRUE + +/// Replace an annoying griefer you were paired up to with a different but probably no less annoying player. +/datum/action/cooldown/mob_cooldown/replace_guardian + name = "Reset Guardian Consciousness" + desc = "Replaces the mind of your guardian with that of a different ghost." + button_icon = 'icons/mob/simple/mob.dmi' + button_icon_state = "ghost" + background_icon = 'icons/hud/guardian.dmi' + background_icon_state = "base" + click_to_activate = FALSE + cooldown_time = 5 SECONDS + melee_cooldown_time = 0 + shared_cooldown = NONE + +/datum/action/cooldown/mob_cooldown/replace_guardian/Activate(atom/target) + StartCooldown(5 MINUTES) + + var/mob/living/living_owner = owner + var/list/guardians = living_owner.get_all_linked_holoparasites() + for(var/mob/living/basic/guardian/resetting_guardian as anything in guardians) + if (!COOLDOWN_FINISHED(resetting_guardian, resetting_cooldown)) + guardians -= resetting_guardian //clear out guardians that are already reset + + if (!length(guardians)) + to_chat(owner, span_holoparasite("You cannot reset [length(guardians) > 1 ? "any of your guardians":"your guardian"] yet.")) + StartCooldown() + return FALSE + + var/mob/living/basic/guardian/chosen_guardian = tgui_input_list(owner, "Pick the guardian you wish to reset", "Guardian Reset", sort_names(guardians)) + if (isnull(chosen_guardian)) + to_chat(owner, span_holoparasite("You decide not to reset [length(guardians) > 1 ? "any of your guardians":"your guardian"].")) + StartCooldown() + return FALSE + + to_chat(owner, span_holoparasite("You attempt to reset [span_bold(chosen_guardian.real_name)]'s personality...")) + var/list/mob/dead/observer/ghost_candidates = poll_ghost_candidates("Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", ROLE_PAI, FALSE, 100) + if (!LAZYLEN(ghost_candidates)) + to_chat(owner, span_holoparasite("Your attempt to reset the personality of \ + [span_bold(chosen_guardian.real_name)] appears to have failed... \ + Looks like you're stuck with it for now.")) + StartCooldown() + return FALSE + + var/mob/dead/observer/candidate = pick(ghost_candidates) + to_chat(chosen_guardian, span_holoparasite("Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")) + to_chat(owner, span_boldholoparasite("The personality of [chosen_guardian.theme.name] has been successfully reset.")) + message_admins("[key_name_admin(candidate)] has taken control of ([ADMIN_LOOKUPFLW(chosen_guardian)])") + chosen_guardian.ghostize(FALSE) + chosen_guardian.key = candidate.key + COOLDOWN_START(chosen_guardian, resetting_cooldown, 5 MINUTES) + chosen_guardian.guardian_rename() //give it a new color and name, to show it's a new person + chosen_guardian.guardian_recolour() + StartCooldown() + return TRUE diff --git a/code/modules/mob/living/basic/health_adjustment.dm b/code/modules/mob/living/basic/health_adjustment.dm index 9644a1a6299..43352c689c4 100644 --- a/code/modules/mob/living/basic/health_adjustment.dm +++ b/code/modules/mob/living/basic/health_adjustment.dm @@ -17,6 +17,12 @@ updatehealth() return . - bruteloss +/mob/living/basic/get_damage_mod(damage_type) + var/modifier = ..() + if (damage_type in damage_coeff) + return modifier * damage_coeff[damage_type] + return modifier + /mob/living/basic/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) if(!can_adjust_brute_loss(amount, forced, required_bodytype)) return 0 diff --git a/code/modules/mob/living/basic/heretic/heretic_summon.dm b/code/modules/mob/living/basic/heretic/_heretic_summon.dm similarity index 100% rename from code/modules/mob/living/basic/heretic/heretic_summon.dm rename to code/modules/mob/living/basic/heretic/_heretic_summon.dm diff --git a/code/modules/mob/living/basic/heretic/ash_spirit.dm b/code/modules/mob/living/basic/heretic/ash_spirit.dm index d12ad5eb8d1..fed64db8adc 100644 --- a/code/modules/mob/living/basic/heretic/ash_spirit.dm +++ b/code/modules/mob/living/basic/heretic/ash_spirit.dm @@ -20,6 +20,4 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash, /datum/action/cooldown/spell/pointed/cleave, ) - for (var/action in actions_to_add) - var/datum/action/cooldown/new_action = new action(src) - new_action.Grant(src) + grant_actions_by_list(actions_to_add) diff --git a/code/modules/mob/living/basic/heretic/flesh_stalker.dm b/code/modules/mob/living/basic/heretic/flesh_stalker.dm index 00fecd2f608..c8a3342141f 100644 --- a/code/modules/mob/living/basic/heretic/flesh_stalker.dm +++ b/code/modules/mob/living/basic/heretic/flesh_stalker.dm @@ -11,7 +11,7 @@ melee_damage_upper = 20 sight = SEE_MOBS ai_controller = /datum/ai_controller/basic_controller/stalker - /// Associative list of action types we would like to have, and what blackboard key (if any) to put it in + /// Actions to grant on spawn var/static/list/actions_to_add = list( /datum/action/cooldown/spell/emp/eldritch = BB_GENERIC_ACTION, /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash = null, @@ -21,18 +21,13 @@ /mob/living/basic/heretic_summon/stalker/Initialize(mapload) . = ..() AddComponent(/datum/component/ai_target_timer) - for (var/action_type in actions_to_add) - var/datum/action/new_action = new action_type(src) - new_action.Grant(src) - var/blackboard_key = actions_to_add[action_type] - if (!isnull(blackboard_key)) - ai_controller?.set_blackboard_key(blackboard_key, new_action) + grant_actions_by_list(actions_to_add) /// Changes shape and lies in wait when it has no target, uses EMP and attacks once it does /datum/ai_controller/basic_controller/stalker ai_traits = CAN_ACT_IN_STASIS blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm index 26eaa9d7ebe..b83c4f253f3 100644 --- a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm +++ b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm @@ -32,8 +32,7 @@ /obj/item/shard, ) AddElement(/datum/element/death_drops, loot) - var/datum/action/cooldown/spell/jaunt/mirror_walk/jaunt = new (src) - jaunt.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/jaunt/mirror_walk) /mob/living/basic/heretic_summon/maid_in_the_mirror/death(gibbed) var/turf/death_turf = get_turf(src) diff --git a/code/modules/mob/living/basic/heretic/raw_prophet.dm b/code/modules/mob/living/basic/heretic/raw_prophet.dm index 1b701596095..f4ed7229a00 100644 --- a/code/modules/mob/living/basic/heretic/raw_prophet.dm +++ b/code/modules/mob/living/basic/heretic/raw_prophet.dm @@ -15,8 +15,12 @@ maxHealth = 65 health = 65 sight = SEE_MOBS|SEE_OBJS|SEE_TURFS - /// Some ability we use to make people go blind - var/blind_action_type = /datum/action/cooldown/spell/pointed/blind/eldritch + /// List of innate abilities we have to add. + var/static/list/innate_abilities = list( + /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long = null, + /datum/action/cooldown/spell/list_target/telepathy/eldritch = null, + /datum/action/innate/expand_sight = null, + ) /mob/living/basic/heretic_summon/raw_prophet/Initialize(mapload) . = ..() @@ -39,19 +43,13 @@ unlink_message = on_unlink_message, \ ) - // We don't use these for AI so we can just repeat the same adding process - var/static/list/add_abilities = list( - /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long, - /datum/action/cooldown/spell/list_target/telepathy/eldritch, - /datum/action/innate/expand_sight, - ) - for (var/ability_type in add_abilities) - var/datum/action/new_action = new ability_type(src) - new_action.Grant(src) + grant_actions_by_list(get_innate_abilities()) - var/datum/action/cooldown/blind = new blind_action_type(src) - blind.Grant(src) - ai_controller?.set_blackboard_key(BB_TARGETTED_ACTION, blind) +/// Returns a list of abilities that we should add. +/mob/living/basic/heretic_summon/raw_prophet/proc/get_innate_abilities() + var/list/returnable_list = innate_abilities.Copy() + returnable_list += list(/datum/action/cooldown/spell/pointed/blind/eldritch = BB_TARGETED_ACTION) + return returnable_list /* * Callback for the mind_linker component. @@ -78,12 +76,16 @@ /// NPC variant with a less bullshit ability /mob/living/basic/heretic_summon/raw_prophet/ruins ai_controller = /datum/ai_controller/basic_controller/raw_prophet - blind_action_type = /datum/action/cooldown/mob_cooldown/watcher_gaze + +/mob/living/basic/heretic_summon/raw_prophet/ruins/get_innate_abilities() + var/list/returnable_list = innate_abilities.Copy() + returnable_list += list(/datum/action/cooldown/mob_cooldown/watcher_gaze = BB_TARGETED_ACTION) + return returnable_list /// Walk and attack people, blind them when we can /datum/ai_controller/basic_controller/raw_prophet blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/rust_walker.dm b/code/modules/mob/living/basic/heretic/rust_walker.dm index 0031ce2388d..ff56c311f73 100644 --- a/code/modules/mob/living/basic/heretic/rust_walker.dm +++ b/code/modules/mob/living/basic/heretic/rust_walker.dm @@ -17,13 +17,12 @@ /mob/living/basic/heretic_summon/rust_walker/Initialize(mapload) . = ..() AddElement(/datum/element/footstep, FOOTSTEP_MOB_RUST) - var/datum/action/cooldown/spell/aoe/rust_conversion/small/conversion = new(src) - conversion.Grant(src) - ai_controller?.set_blackboard_key(BB_GENERIC_ACTION, conversion) - var/datum/action/cooldown/spell/basic_projectile/rust_wave/short/wave = new(src) - wave.Grant(src) - ai_controller?.set_blackboard_key(BB_TARGETTED_ACTION, wave) + var/static/list/grantable_spells = list( + /datum/action/cooldown/spell/aoe/rust_conversion/small = BB_GENERIC_ACTION, + /datum/action/cooldown/spell/basic_projectile/rust_wave/short = BB_TARGETED_ACTION, + ) + grant_actions_by_list(grantable_spells) /mob/living/basic/heretic_summon/rust_walker/setDir(newdir) . = ..() @@ -51,7 +50,7 @@ /// Converts unconverted terrain, sprays pocket sand around /datum/ai_controller/basic_controller/rust_walker blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm index a8af89a7f71..f7ab925440d 100644 --- a/code/modules/mob/living/basic/heretic/star_gazer.dm +++ b/code/modules/mob/living/basic/heretic/star_gazer.dm @@ -66,7 +66,7 @@ target.apply_status_effect(/datum/status_effect/star_mark) target.apply_damage(damage = 5, damagetype = CLONE) - var/datum/targetting_datum/target_confirmer = ai_controller.blackboard[BB_TARGETTING_DATUM] + var/datum/targeting_strategy/target_confirmer = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]) for(var/mob/living/nearby_mob in range(1, src)) if(target == nearby_mob || !target_confirmer?.can_attack(src, nearby_mob)) continue @@ -78,9 +78,9 @@ /datum/ai_controller/basic_controller/star_gazer blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends/attack_closed_turfs, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/attack_closed_turfs, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -104,7 +104,7 @@ can_attack_turfs = TRUE can_attack_dense_objects = TRUE -/datum/pet_command/point_targetting/attack/star_gazer +/datum/pet_command/point_targeting/attack/star_gazer speech_commands = list("attack", "sic", "kill", "slash them") command_feedback = "stares!" pointed_reaction = "stares intensely!" diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm index 960f875365b..a83953ae1c9 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon.dm @@ -28,15 +28,13 @@ /mob/living/basic/mining/ice_demon/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/slippery_ice_floors/ice_floor = new(src) - ice_floor.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_SLIP_ABILITY, ice_floor) - var/datum/action/cooldown/mob_cooldown/ice_demon_teleport/demon_teleport = new(src) - demon_teleport.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_TELEPORT_ABILITY, demon_teleport) - var/datum/action/cooldown/spell/conjure/create_afterimages/afterimage = new(src) - afterimage.Grant(src) - ai_controller.set_blackboard_key(BB_DEMON_CLONE_ABILITY, afterimage) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/slippery_ice_floors = BB_DEMON_SLIP_ABILITY, + /datum/action/cooldown/mob_cooldown/ice_demon_teleport = BB_DEMON_TELEPORT_ABILITY, + /datum/action/cooldown/spell/conjure/limit_summons/create_afterimages = BB_DEMON_CLONE_ABILITY, + ) + grant_actions_by_list(innate_actions) + AddComponent(\ /datum/component/ranged_attacks,\ projectile_type = /obj/projectile/temp/ice_demon,\ diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm index 79c9ee9bd58..b143f471138 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm @@ -82,7 +82,7 @@ /obj/effect/temp_visual/slippery_ice/proc/add_slippery_component() AddComponent(/datum/component/slippery, 2 SECONDS) -/datum/action/cooldown/spell/conjure/create_afterimages +/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages name = "Create After Images" button_icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' button_icon_state = "ice_demon" @@ -91,27 +91,8 @@ summon_type = list(/mob/living/basic/mining/demon_afterimage) summon_radius = 1 summon_amount = 2 - ///max number of after images - var/max_afterimages = 2 - ///How many clones do we have summoned - var/number_of_afterimages = 0 + max_summons = 2 -/datum/action/cooldown/spell/conjure/create_afterimages/can_cast_spell(feedback = TRUE) +/datum/action/cooldown/spell/conjure/limit_summons/create_afterimages/post_summon(atom/summoned_object, atom/cast_on) . = ..() - if(!.) - return FALSE - if(number_of_afterimages >= max_afterimages) - return FALSE - return TRUE - -/datum/action/cooldown/spell/conjure/create_afterimages/post_summon(atom/summoned_object, atom/cast_on) - var/mob/living/basic/created_copy = summoned_object - created_copy.AddComponent(/datum/component/joint_damage, overlord_mob = owner) - RegisterSignals(created_copy, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(delete_copy)) - number_of_afterimages++ - -/datum/action/cooldown/spell/conjure/create_afterimages/proc/delete_copy(mob/source) - SIGNAL_HANDLER - - UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH)) - number_of_afterimages-- + summoned_object.AddComponent(/datum/component/joint_damage, overlord_mob = owner) diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm index 28ddd38324a..20bcd8a69a1 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm @@ -1,11 +1,10 @@ /datum/ai_controller/basic_controller/ice_demon blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_LIST_SCARY_ITEMS = list( /obj/item/weldingtool, /obj/item/flashlight/flare, ), - BB_MINIMUM_DISTANCE_RANGE = 3, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm index 8fb02ec83df..768375cfce8 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm @@ -40,17 +40,20 @@ /mob/living/basic/mining/ice_whelp/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) + AddElement(/datum/element/footstep, FOOTSTEP_MOB_HEAVY) AddComponent(/datum/component/basic_mob_ability_telegraph) AddComponent(/datum/component/basic_mob_attack_telegraph, telegraph_duration = 0.6 SECONDS) - var/datum/action/cooldown/mob_cooldown/fire_breath/ice/flamethrower = new(src) - flamethrower.Grant(src) - ai_controller.set_blackboard_key(BB_WHELP_STRAIGHTLINE_FIRE, flamethrower) - var/datum/action/cooldown/mob_cooldown/fire_breath/ice/cross/wide_flames = new(src) - wide_flames.Grant(src) - ai_controller.set_blackboard_key(BB_WHELP_WIDESPREAD_FIRE, wide_flames) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/fire_breath/ice = BB_WHELP_STRAIGHTLINE_FIRE, + /datum/action/cooldown/mob_cooldown/fire_breath/ice/cross = BB_WHELP_WIDESPREAD_FIRE, + ) + + grant_actions_by_list(innate_actions) + /mob/living/basic/mining/ice_whelp/proc/pre_attack(mob/living/sculptor, atom/target) SIGNAL_HANDLER diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm index 2d9715caf37..725dcc09b5e 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm @@ -1,7 +1,7 @@ #define ENRAGE_ADDITION 25 /datum/ai_controller/basic_controller/ice_whelp blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_WHELP_ENRAGED = 0, ) diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper.dm b/code/modules/mob/living/basic/jungle/leaper/leaper.dm new file mode 100644 index 00000000000..f3213897f9b --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper.dm @@ -0,0 +1,100 @@ +/mob/living/basic/leaper + name = "leaper" + desc = "Commonly referred to as 'leapers', the Geron Toad is a massive beast that spits out highly pressurized bubbles containing a unique toxin, knocking down its prey and then crushing it with its girth." + icon = 'icons/mob/simple/jungle/leaper.dmi' + icon_state = "leaper" + icon_living = "leaper" + icon_dead = "leaper_dead" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + + melee_damage_lower = 15 + melee_damage_upper = 20 + maxHealth = 350 + health = 350 + speed = 10 + + pixel_x = -16 + base_pixel_x = -16 + + faction = list(FACTION_JUNGLE) + obj_damage = 30 + + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = 0 + maximum_survivable_temperature = INFINITY + + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + status_flags = NONE + lighting_cutoff_red = 5 + lighting_cutoff_green = 20 + lighting_cutoff_blue = 25 + mob_size = MOB_SIZE_LARGE + ai_controller = /datum/ai_controller/basic_controller/leaper + move_resist = MOVE_FORCE_VERY_STRONG + pull_force = MOVE_FORCE_VERY_STRONG + ///appearance when we dead + var/mutable_appearance/dead_overlay + ///appearance when we are alive + var/mutable_appearance/living_overlay + ///list of pet commands we can issue + var/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + /datum/pet_command/untargeted_ability/blood_rain, + /datum/pet_command/untargeted_ability/summon_toad, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/flop, + /datum/pet_command/point_targeting/use_ability/bubble, + ) + +/mob/living/basic/leaper/Initialize(mapload) + . = ..() + AddElement(\ + /datum/element/change_force_on_death,\ + move_resist = MOVE_RESIST_DEFAULT,\ + pull_force = PULL_FORCE_DEFAULT,\ + ) + AddComponent(/datum/component/obeys_commands, pet_commands) + AddComponent(/datum/component/seethrough_mob) + AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/ridable, component_type = /datum/component/riding/creature/leaper) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_HEAVY) + var/datum/action/cooldown/mob_cooldown/blood_rain/volley = new(src) + volley.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_VOLLEY, volley) + var/datum/action/cooldown/mob_cooldown/belly_flop/flop = new(src) + flop.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_FLOP, flop) + var/datum/action/cooldown/mob_cooldown/projectile_attack/leaper_bubble/bubble = new(src) + bubble.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_BUBBLE, bubble) + var/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads/toads = new(src) + toads.Grant(src) + ai_controller.set_blackboard_key(BB_LEAPER_SUMMON, toads) + +/mob/living/basic/leaper/proc/set_color_overlay(toad_color) + dead_overlay = mutable_appearance(icon, "[icon_state]_dead_overlay") + dead_overlay.color = toad_color + + living_overlay = mutable_appearance(icon, "[icon_state]_overlay") + living_overlay.color = toad_color + update_appearance(UPDATE_OVERLAYS) + +/mob/living/basic/leaper/update_overlays() + . = ..() + if(stat == DEAD && dead_overlay) + . += dead_overlay + return + + if(living_overlay) + . += living_overlay + +/mob/living/basic/leaper/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) + ADD_TRAIT(src, TRAIT_IMMOBILIZED, LEAPING_TRAIT) + return ..() + +/mob/living/basic/leaper/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LEAPING_TRAIT) diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm new file mode 100644 index 00000000000..8ff9edd1476 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm @@ -0,0 +1,256 @@ +// fire leaper bubble ability +/datum/action/cooldown/mob_cooldown/projectile_attack/leaper_bubble + name = "Fire Leaper Bubble" + button_icon = 'icons/obj/weapons/guns/projectiles.dmi' + button_icon_state = "leaper" + desc = "Fires a poisonous leaper bubble towards the victim!" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + cooldown_time = 7 SECONDS + projectile_type = /obj/projectile/leaper + projectile_sound = 'sound/effects/snap.ogg' + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + +// bubble ability objects and effects +/obj/projectile/leaper + name = "leaper bubble" + icon_state = "leaper" + paralyze = 5 SECONDS + damage = 0 + range = 7 + hitsound = 'sound/effects/snap.ogg' + nondirectional_sprite = TRUE + impact_effect_type = /obj/effect/temp_visual/leaper_projectile_impact + +/obj/projectile/leaper/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if (!isliving(target)) + return + var/mob/living/bubbled = target + if(iscarbon(target)) + bubbled.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) + return + bubbled.apply_damage(30) + +/obj/projectile/leaper/on_range() + new /obj/structure/leaper_bubble(get_turf(src)) + return ..() + +/obj/effect/temp_visual/leaper_projectile_impact + name = "leaper bubble" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper_bubble_pop" + layer = ABOVE_ALL_MOB_LAYER + plane = GAME_PLANE_UPPER_FOV_HIDDEN + duration = 3 SECONDS + +/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload) + . = ..() + new /obj/effect/decal/cleanable/leaper_sludge(get_turf(src)) + +/obj/effect/decal/cleanable/leaper_sludge + name = "leaper sludge" + desc = "A small pool of sludge, containing trace amounts of leaper venom." + icon = 'icons/effects/tomatodecal.dmi' + icon_state = "tomato_floor1" + +// bubble ability reagent +/datum/reagent/toxin/leaper_venom + name = "Leaper venom" + description = "A toxin spat out by leapers that, while harmless in small doses, quickly creates a toxic reaction if too much is in the body." + color = "#801E28" // rgb: 128, 30, 40 + toxpwr = 0 + taste_description = "french cuisine" + taste_mult = 1.3 + +/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/poisoned_mob, seconds_per_tick, times_fired) + . = ..() + if(volume <= 5) + return + if(poisoned_mob.adjustToxLoss(2.5 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH + +// bubble ability structure +/obj/structure/leaper_bubble + name = "leaper bubble" + desc = "A floating bubble containing leaper venom. The contents are under a surprising amount of pressure." + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper" + max_integrity = 10 + density = FALSE + +/obj/structure/leaper_bubble/Initialize(mapload) + . = ..() + AddElement(/datum/element/movetype_handler) + ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPER_BUBBLE_TRAIT) + QDEL_IN(src, 10 SECONDS) + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/structure/leaper_bubble/Destroy() + new /obj/effect/temp_visual/leaper_projectile_impact(get_turf(src)) + playsound(src,'sound/effects/snap.ogg', 50, TRUE) + return ..() + +/obj/structure/leaper_bubble/proc/on_entered(datum/source, atom/movable/bubbled) + SIGNAL_HANDLER + if(!isliving(bubbled) || istype(bubbled, /mob/living/basic/leaper)) + return + var/mob/living/bubbled_mob = bubbled + + playsound(src, 'sound/effects/snap.ogg',50, TRUE) + bubbled_mob.Paralyze(5 SECONDS) + if(iscarbon(bubbled_mob)) + bubbled_mob.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) + else + bubbled_mob.apply_damage(30) + qdel(src) + +// blood rain ability +/datum/action/cooldown/mob_cooldown/blood_rain + name = "Blood Rain" + button_icon = 'icons/effects/effects.dmi' + button_icon_state = "blood_effect_falling" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + desc = "Rain down poisonous dropplets of blood!" + cooldown_time = 10 SECONDS + click_to_activate = FALSE + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + /// how many droplets we will fire + var/volley_count = 8 + /// time between each droplet launched + var/fire_interval = 0.1 SECONDS + +/datum/action/cooldown/mob_cooldown/blood_rain/Activate(mob/living/firer, atom/target) + var/list/possible_turfs = list() + for(var/turf/possible_turf in oview(5, owner)) + if(possible_turf.is_blocked_turf() || isopenspaceturf(possible_turf) || isspaceturf(possible_turf)) + continue + if(locate(/obj/structure/leaper_bubble) in possible_turf) + continue + possible_turfs += possible_turf + + if(!length(possible_turfs)) + return FALSE + + playsound(owner, 'sound/magic/fireball.ogg', 70, TRUE) + new /obj/effect/temp_visual/blood_drop_rising(get_turf(owner)) + addtimer(CALLBACK(src, PROC_REF(fire_droplets), possible_turfs), 1.5 SECONDS) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/blood_rain/proc/fire_droplets(list/possible_turfs) + var/fire_count = min(volley_count, possible_turfs.len) + for(var/i in 1 to fire_count) + addtimer(CALLBACK(src, PROC_REF(fall_effect), pick_n_take(possible_turfs)), i * fire_interval) + +/datum/action/cooldown/mob_cooldown/blood_rain/proc/fall_effect(turf/selected_turf) + new /obj/effect/temp_visual/blood_drop_falling(selected_turf) + var/obj/effect/temp_visual/falling_shadow = new /obj/effect/temp_visual/shadow_telegraph(selected_turf) + animate(falling_shadow, transform = matrix().Scale(0.1, 0.1), time = falling_shadow.duration) + +// blood rain effects +/obj/effect/temp_visual/blood_drop_rising + name = "leaper bubble" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "leaper" + layer = ABOVE_ALL_MOB_LAYER + plane = GAME_PLANE_UPPER_FOV_HIDDEN + duration = 1 SECONDS + +/obj/effect/temp_visual/blood_drop_rising/Initialize(mapload) + . = ..() + animate(src, pixel_y = base_pixel_y + 150, time = duration) + +/obj/effect/temp_visual/blood_drop_falling + name = "leaper bubble" + icon = 'icons/effects/effects.dmi' + icon_state = "blood_effect_falling" + layer = ABOVE_ALL_MOB_LAYER + plane = GAME_PLANE_UPPER_FOV_HIDDEN + duration = 0.7 SECONDS + pixel_y = 60 + +/obj/effect/temp_visual/blood_drop_falling/Initialize(mapload) + . = ..() + addtimer(CALLBACK(src, PROC_REF(create_blood_structure)), duration) + animate(src, pixel_y = 0, time = duration) + +/obj/effect/temp_visual/blood_drop_falling/proc/create_blood_structure() + playsound(src, 'sound/effects/snap.ogg', 50, TRUE) + new /obj/structure/leaper_bubble(get_turf(src)) + +/obj/effect/temp_visual/shadow_telegraph + name = "shadow" + icon = 'icons/effects/effects.dmi' + icon_state = "shadow_telegraph" + duration = 1.5 SECONDS + + +// flop ability +/datum/action/cooldown/mob_cooldown/belly_flop + name = "Belly Flop" + desc = "Belly flop your enemy!" + cooldown_time = 14 SECONDS + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + +/datum/action/cooldown/mob_cooldown/belly_flop/Activate(atom/target) + var/turf/target_turf = get_turf(target) + if(isclosedturf(target_turf) || isspaceturf(target_turf)) + owner.balloon_alert(owner, "base not suitable!") + return FALSE + new /obj/effect/temp_visual/leaper_crush(target_turf) + owner.throw_at(target = target_turf, range = 7, speed = 1, spin = FALSE, callback = CALLBACK(src, PROC_REF(flop_on_turf), target_turf)) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/belly_flop/proc/flop_on_turf(turf/target, original_pixel_y) + playsound(get_turf(owner), 'sound/effects/meteorimpact.ogg', 200, TRUE) + for(var/mob/living/victim in oview(1, owner)) + if(victim in owner.buckled_mobs) + continue + victim.apply_damage(35) + if(QDELETED(victim)) // Some mobs are deleted on death + continue + var/throw_dir = victim.loc == owner.loc ? get_dir(owner, victim) : pick(GLOB.alldirs) + var/throwtarget = get_edge_target_turf(victim, throw_dir) + victim.throw_at(target = throwtarget, range = 3, speed = 1) + victim.visible_message(span_warning("[victim] is thrown clear of [owner]!")) + +// flop ability effects +/obj/effect/temp_visual/leaper_crush + name = "grim tidings" + desc = "Incoming leaper!" + icon = 'icons/effects/96x96.dmi' + icon_state = "lily_pad" + layer = BELOW_MOB_LAYER + plane = GAME_PLANE + SET_BASE_PIXEL(-32, -32) + duration = 3 SECONDS + +// summon toads ability +/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads + name = "Summon Suicide Toads" + button_icon = 'icons/mob/simple/animal.dmi' + button_icon_state = "frog_trash" + background_icon_state = "bg_revenant" + overlay_icon_state = "bg_revenant_border" + spell_requirements = NONE + cooldown_time = 30 SECONDS + summon_type = list(/mob/living/basic/frog/frog_suicide) + summon_radius = 2 + summon_amount = 2 + max_summons = 2 + +/datum/action/cooldown/spell/conjure/limit_summons/create_suicide_toads/post_summon(atom/summoned_object, atom/cast_on) + . = ..() + var/mob/living/summoned_toad = summoned_object + summoned_toad.faction = owner.faction ///so they dont attack the leaper or the wizard master diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm new file mode 100644 index 00000000000..e776117a3a5 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm @@ -0,0 +1,73 @@ +/datum/ai_controller/basic_controller/leaper + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/targeted_mob_ability/pointed_bubble, + /datum/ai_planning_subtree/targeted_mob_ability/flop, + /datum/ai_planning_subtree/targeted_mob_ability/volley, + /datum/ai_planning_subtree/targeted_mob_ability/summon, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/go_for_swim, + ) + +/datum/ai_planning_subtree/targeted_mob_ability/pointed_bubble + ability_key = BB_LEAPER_BUBBLE + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/flop + ability_key = BB_LEAPER_FLOP + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/flop/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/current_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(isclosedturf(current_target) || isspaceturf(current_target)) + return + return ..() + +/datum/ai_planning_subtree/targeted_mob_ability/volley + ability_key = BB_LEAPER_VOLLEY + finish_planning = FALSE + +/datum/ai_planning_subtree/targeted_mob_ability/summon + ability_key = BB_LEAPER_SUMMON + finish_planning = FALSE + +/datum/pet_command/point_targeting/use_ability/flop + command_name = "Flop" + command_desc = "Command your pet to belly flop your target!" + radial_icon = 'icons/mob/actions/actions_items.dmi' + radial_icon_state = "sniper_zoom" + speech_commands = list("flop", "crush") + pet_ability_key = BB_LEAPER_FLOP + +/datum/pet_command/point_targeting/use_ability/bubble + command_name = "Poison Bubble" + command_desc = "Launch poisonous bubbles at your target!" + radial_icon = 'icons/obj/weapons/guns/projectiles.dmi' + radial_icon_state = "leaper" + speech_commands = list("bubble", "shoot") + pet_ability_key = BB_LEAPER_BUBBLE + +/datum/pet_command/untargeted_ability/blood_rain + command_name = "Blood Rain" + command_desc = "Let it rain poisonous blood!" + radial_icon = 'icons/effects/effects.dmi' + radial_icon_state = "blood_effect_falling" + speech_commands = list("blood", "rain", "volley") + ability_key = BB_LEAPER_VOLLEY + + +/datum/pet_command/untargeted_ability/summon_toad + command_name = "Summon Toads" + command_desc = "Summon crazy suicide frogs!" + radial_icon = 'icons/mob/simple/animal.dmi' + radial_icon_state = "frog_trash" + speech_commands = list("frogs", "bombers") + ability_key = BB_LEAPER_SUMMON diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm index bb109fdde61..3a6ed50db10 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm @@ -36,16 +36,16 @@ /mob/living/basic/mega_arachnid/Initialize(mapload) . = ..() - AddComponent(/datum/component/seethrough_mob) - var/datum/action/cooldown/spell/pointed/projectile/flesh_restraints/restrain = new(src) - var/datum/action/cooldown/mob_cooldown/secrete_acid/acid_spray = new(src) - acid_spray.Grant(src) - restrain.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/secrete_acid = BB_ARACHNID_SLIP, + /datum/action/cooldown/spell/pointed/projectile/flesh_restraints = BB_ARACHNID_RESTRAIN, + ) + grant_actions_by_list(innate_actions) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddComponent(/datum/component/seethrough_mob) AddComponent(/datum/component/appearance_on_aggro, alpha_on_aggro = 255, alpha_on_deaggro = alpha) AddComponent(/datum/component/tree_climber, climbing_distance = 15) - ai_controller.set_blackboard_key(BB_ARACHNID_RESTRAIN, restrain) - ai_controller.set_blackboard_key(BB_ARACHNID_SLIP, acid_spray) /mob/living/basic/mega_arachnid/Login() . = ..() diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm index 8964ebf837e..fa2a86787d8 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/mega_arachnid blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_FLEE_DISTANCE = 5, ) diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 998f693d6da..5a958d3ca7c 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -56,12 +56,12 @@ /mob/living/basic/seedling/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/seedling/seed_attack = new(src) - seed_attack.Grant(src) - ai_controller.set_blackboard_key(BB_RAPIDSEEDS_ABILITY, seed_attack) - var/datum/action/cooldown/mob_cooldown/solarbeam/beam_attack = new(src) - beam_attack.Grant(src) - ai_controller.set_blackboard_key(BB_SOLARBEAM_ABILITY, beam_attack) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/seedling = BB_RAPIDSEEDS_ABILITY, + /datum/action/cooldown/mob_cooldown/solarbeam = BB_SOLARBEAM_ABILITY, + ) + + grant_actions_by_list(innate_actions) var/petal_color = pick(possible_colors) @@ -77,7 +77,7 @@ petal_dead = mutable_appearance(icon, "[icon_state]_dead_overlay") petal_dead.color = petal_color - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddComponent(/datum/component/obeys_commands, seedling_commands) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(drop_can)) @@ -212,9 +212,9 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/use_ability/solarbeam, - /datum/pet_command/point_targetting/use_ability/rapidseeds, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/solarbeam, + /datum/pet_command/point_targeting/use_ability/rapidseeds, ) //abilities diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm index e3f9fe083a6..2ed4811e46f 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/seedling blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_WEEDLEVEL_THRESHOLD = 3, BB_WATERLEVEL_THRESHOLD = 90, ) @@ -141,8 +141,8 @@ /datum/ai_controller/basic_controller/seedling/meanie blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, @@ -161,7 +161,7 @@ finish_planning = FALSE ///pet commands -/datum/pet_command/point_targetting/use_ability/solarbeam +/datum/pet_command/point_targeting/use_ability/solarbeam command_name = "Launch solarbeam" command_desc = "Command your pet to launch a solarbeam at your target!" radial_icon = 'icons/effects/beam.dmi' @@ -169,7 +169,7 @@ speech_commands = list("beam", "solar") pet_ability_key = BB_SOLARBEAM_ABILITY -/datum/pet_command/point_targetting/use_ability/rapidseeds +/datum/pet_command/point_targeting/use_ability/rapidseeds command_name = "Rapid seeds" command_desc = "Command your pet to launch a volley of seeds at your target!" radial_icon = 'icons/obj/weapons/guns/projectiles.dmi' diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index ac4e5c9db24..b59ec233bd0 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -165,7 +165,7 @@ melee_attack_cooldown = 1.2 SECONDS ai_controller = /datum/ai_controller/basic_controller/human_trap ///how much damage we take out of weeds - var/no_weed_damage = 20 + var/no_weed_damage = 12.5 ///how much do we heal in weeds var/weed_heal = 10 ///if the balloon alert was shown atleast once, reset after healing in weeds @@ -174,14 +174,15 @@ /mob/living/basic/venus_human_trap/Initialize(mapload) . = ..() AddElement(/datum/element/lifesteal, 5) - var/datum/action/cooldown/vine_tangle/tangle = new(src) - tangle.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, tangle) + var/static/list/innate_actions = list( + /datum/action/cooldown/vine_tangle = BB_TARGETED_ACTION, + ) + grant_actions_by_list(innate_actions) /mob/living/basic/venus_human_trap/RangedAttack(atom/victim) if(!combat_mode) return - var/datum/action/cooldown/mob_cooldown/tangle_ability = ai_controller.blackboard[BB_TARGETTED_ACTION] + var/datum/action/cooldown/mob_cooldown/tangle_ability = ai_controller.blackboard[BB_TARGETED_ACTION] if(!istype(tangle_ability)) return tangle_ability.Trigger(target = victim) @@ -198,7 +199,7 @@ else if(vines_in_range) alert_shown = FALSE - apply_damage(vines_in_range ? -weed_heal : no_weed_damage, BRUTE) //every life tick take 20 brute if not near vines or heal 10 if near vines, 5 times out of weeds = u ded + adjustBruteLoss(vines_in_range ? -weed_heal : no_weed_damage) //every life tick take 20 damage if not near vines or heal 10 if near vines, 5 times out of weeds = u ded /datum/action/cooldown/vine_tangle name = "Tangle" @@ -254,7 +255,7 @@ /datum/ai_controller/basic_controller/human_trap blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm index d4fef239bf8..90b99a533f9 100644 --- a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm +++ b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm @@ -77,7 +77,7 @@ /datum/ai_controller/basic_controller/basilisk blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_AGGRO_RANGE = 5, ) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm b/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm index 3d6bc299ccd..b66e5eff8a5 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/_bileworm.dm @@ -37,8 +37,6 @@ /mob/living/basic/mining/bileworm/Initialize(mapload) . = ..() - //traits and elements - ADD_TRAIT(src, TRAIT_IMMOBILIZED, INNATE_TRAIT) if(ispath(evolve_path)) @@ -47,16 +45,15 @@ //setup mob abilities - var/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/bileworm/spew_bile = new attack_action_path(src) - spew_bile.Grant(src) //well, one of them has to start on infinite cooldown + var/datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/bileworm/spew_bile = new(src) + spew_bile.Grant(src) spew_bile.StartCooldownSelf(INFINITY) - var/datum/action/cooldown/mob_cooldown/resurface/resurface = new(src) - resurface.Grant(src) - var/datum/action/cooldown/mob_cooldown/devour/devour = new(src) - devour.Grant(src) - var/datum/action/adjust_vision/bileworm/adjust_vision = new(src) - adjust_vision.Grant(src) - ai_controller.set_blackboard_key(BB_BILEWORM_SPEW_BILE, spew_bile) - ai_controller.set_blackboard_key(BB_BILEWORM_RESURFACE, resurface) - ai_controller.set_blackboard_key(BB_BILEWORM_DEVOUR, devour) + ai_controller?.set_blackboard_key(BB_BILEWORM_SPEW_BILE, spew_bile) + + var/static/list/other_innate_actions = list( + /datum/action/adjust_vision/bileworm = null, + /datum/action/cooldown/mob_cooldown/devour = BB_BILEWORM_DEVOUR, + /datum/action/cooldown/mob_cooldown/resurface = BB_BILEWORM_RESURFACE, + ) + grant_actions_by_list(other_innate_actions) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm index 0093e69220c..ea979febff3 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/bileworm blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/bileworm(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bileworm, ) planning_subtrees = list( @@ -9,7 +9,7 @@ /datum/ai_planning_subtree/bileworm_execute, ) -/datum/targetting_datum/basic/bileworm +/datum/targeting_strategy/basic/bileworm ignore_sight = TRUE /datum/ai_planning_subtree/bileworm_attack diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm index b8e2bb68c69..21169ffd368 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm @@ -66,9 +66,10 @@ break if(blocked) break - var/atom/new_brimbeam = new /obj/effect/brimbeam(affected_turf) + var/obj/effect/brimbeam/new_brimbeam = new(affected_turf) new_brimbeam.dir = owner.dir beam_parts += new_brimbeam + new_brimbeam.assign_creator(owner) for(var/mob/living/hit_mob in affected_turf.contents) hit_mob.apply_damage(damage = 25, damagetype = BURN) to_chat(hit_mob, span_userdanger("You're blasted by [owner]'s brimbeam!")) @@ -101,6 +102,8 @@ light_color = LIGHT_COLOR_BLOOD_MAGIC light_power = 3 light_range = 2 + /// Who made us? + var/datum/weakref/creator /obj/effect/brimbeam/Initialize(mapload) . = ..() @@ -111,7 +114,10 @@ return ..() /obj/effect/brimbeam/process() + var/atom/ignore = creator?.resolve() for(var/mob/living/hit_mob in get_turf(src)) + if(hit_mob == ignore) + continue damage(hit_mob) /// Hurt the passed mob @@ -119,6 +125,10 @@ hit_mob.apply_damage(damage = 5, damagetype = BURN) to_chat(hit_mob, span_danger("You're damaged by [src]!")) +/// Ignore damage dealt to this mob +/obj/effect/brimbeam/proc/assign_creator(mob/living/maker) + creator = WEAKREF(maker) + /// Disappear /obj/effect/brimbeam/proc/disperse() animate(src, time = 0.5 SECONDS, alpha = 0) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm index 2c22977d9c6..9a88c636cf5 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm @@ -41,11 +41,7 @@ AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) beam = new(src) beam.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, beam) - -/mob/living/basic/mining/brimdemon/Destroy() - QDEL_NULL(beam) - return ..() + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, beam) /mob/living/basic/mining/brimdemon/RangedAttack(atom/target, modifiers) beam.Trigger(target = target) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm index 18f614359c0..fe209387e00 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm @@ -3,7 +3,7 @@ */ /datum/ai_controller/basic_controller/brimdemon blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -28,7 +28,7 @@ if (!succeeded) return var/mob/living/target = controller.blackboard[target_key] - var/datum/action/cooldown/ability = controller.blackboard[BB_TARGETTED_ACTION] + var/datum/action/cooldown/ability = controller.blackboard[BB_TARGETED_ACTION] if(!ability?.IsAvailable()) return ability.InterceptClickOn(caller = controller.pawn, target = target) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm index fe1cc001101..0cf80b0e68f 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm @@ -36,7 +36,7 @@ /datum/pet_command/free, /datum/pet_command/grub_spit, /datum/pet_command/follow, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/fetch, ) /mob/living/basic/mining/goldgrub/Initialize(mapload) @@ -47,13 +47,14 @@ else can_lay_eggs = FALSE - var/datum/action/cooldown/mob_cooldown/spit_ore/spit = new(src) - var/datum/action/cooldown/mob_cooldown/burrow/burrow = new(src) - spit.Grant(src) - burrow.Grant(src) - ai_controller.set_blackboard_key(BB_SPIT_ABILITY, spit) - ai_controller.set_blackboard_key(BB_BURROW_ABILITY, burrow) - AddElement(/datum/element/wall_smasher) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/spit_ore = BB_SPIT_ABILITY, + /datum/action/cooldown/mob_cooldown/burrow = BB_BURROW_ABILITY, + ) + grant_actions_by_list(innate_actions) + + AddElement(/datum/element/ore_collecting) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddComponent(/datum/component/ai_listen_to_weather) AddComponent(\ /datum/component/appearance_on_aggro,\ @@ -67,17 +68,6 @@ RegisterSignal(src, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(block_bullets)) -/mob/living/basic/mining/goldgrub/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - . = ..() - if(!.) - return - - if(!proximity_flag) - return - - if(istype(attack_target, /obj/item/stack/ore)) - consume_ore(attack_target) - /mob/living/basic/mining/goldgrub/proc/block_bullets(datum/source, obj/projectile/hitting_projectile) SIGNAL_HANDLER @@ -135,12 +125,14 @@ max_eggs_held = 1,\ ) -/mob/living/basic/mining/goldgrub/proc/consume_ore(obj/item/target_ore) +/mob/living/basic/mining/goldgrub/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(!istype(arrived, /obj/item/stack/ore)) + return playsound(src,'sound/items/eatfood.ogg', rand(10,50), TRUE) - target_ore.forceMove(src) if(!can_lay_eggs) return - if(!istype(target_ore, /obj/item/stack/ore/bluespace_crystal) || prob(60)) + if(!istype(arrived, /obj/item/stack/ore/bluespace_crystal) || prob(60)) return new /obj/item/food/egg/green/grub_egg(get_turf(src)) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm index 7e7a72ec412..53054052e58 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/goldgrub blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_ORE_IGNORE_TYPES = list(/obj/item/stack/ore/iron, /obj/item/stack/ore/glass), BB_STORM_APPROACHING = FALSE, ) @@ -20,7 +20,7 @@ /datum/ai_controller/basic_controller/babygrub blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_ORE_IGNORE_TYPES = list(/obj/item/stack/ore/glass), BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/goldgrub), BB_IGNORE_MOM_TYPES = list(/mob/living/basic/mining/goldgrub/baby), diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index 6f57e1dec67..6d197d8853a 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -44,6 +44,8 @@ COOLDOWN_DECLARE(ability_animation_cooldown) /// Our base tentacles ability var/datum/action/cooldown/mob_cooldown/goliath_tentacles/tentacles + /// Our melee tentacles ability + var/datum/action/cooldown/mob_cooldown/tentacle_burst/melee_tentacles /// Our long-ranged tentacles ability var/datum/action/cooldown/mob_cooldown/tentacle_grasp/tentacle_line /// Things we want to eat off the floor (or a plate, we're not picky) @@ -76,24 +78,18 @@ tentacles = new (src) tentacles.Grant(src) - var/datum/action/cooldown/mob_cooldown/tentacle_burst/melee_tentacles = new (src) + melee_tentacles = new(src) melee_tentacles.Grant(src) - AddComponent(/datum/component/revenge_ability, melee_tentacles, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], max_range = 1, target_self = TRUE) + AddComponent(/datum/component/revenge_ability, melee_tentacles, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]), max_range = 1, target_self = TRUE) tentacle_line = new (src) tentacle_line.Grant(src) - AddComponent(/datum/component/revenge_ability, tentacle_line, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM], min_range = 2, max_range = 9) + AddComponent(/datum/component/revenge_ability, tentacle_line, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]), min_range = 2, max_range = 9) tentacles_ready() RegisterSignal(src, COMSIG_MOB_ABILITY_FINISHED, PROC_REF(used_ability)) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, goliath_foods) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(goliath_foods)) ai_controller.set_blackboard_key(BB_GOLIATH_TENTACLES, tentacles) - -/mob/living/basic/mining/goliath/Destroy() - QDEL_NULL(tentacles) - QDEL_NULL(tentacle_line) - return ..() - /mob/living/basic/mining/goliath/examine(mob/user) . = ..() if (saddled) diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm index b484afa0cea..31eecc03629 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_actions.dm @@ -1,7 +1,7 @@ /// Place some grappling tentacles underfoot /datum/action/cooldown/mob_cooldown/goliath_tentacles name = "Unleash Tentacles" - desc = "Unleash burrowed tentacles at a targetted location, grappling targets after a delay." + desc = "Unleash burrowed tentacles at a targeted location, grappling targets after a delay." button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "goliath_tentacle_wiggle" background_icon_state = "bg_demon" @@ -59,7 +59,7 @@ /// Summon a line of tentacles towards the target /datum/action/cooldown/mob_cooldown/tentacle_grasp name = "Tentacle Grasp" - desc = "Unleash burrowed tentacles in a line towards a targetted location, grappling targets after a delay." + desc = "Unleash burrowed tentacles in a line towards a targeted location, grappling targets after a delay." button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' button_icon_state = "goliath_tentacle_wiggle" background_icon_state = "bg_demon" diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm index 48f0e213e73..76c230520df 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -3,7 +3,7 @@ /datum/ai_controller/basic_controller/goliath blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -27,7 +27,7 @@ /// Go for the tentacles if they're available /datum/ai_behavior/basic_melee_attack/goliath -/datum/ai_behavior/basic_melee_attack/goliath/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, health_ratio_key) +/datum/ai_behavior/basic_melee_attack/goliath/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, health_ratio_key) var/time_on_target = controller.blackboard[BB_BASIC_MOB_HAS_TARGET_TIME] || 0 if (time_on_target < MIN_TIME_TO_TENTACLE) return ..() diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm new file mode 100644 index 00000000000..16139da00be --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm @@ -0,0 +1,40 @@ +/obj/structure/ore_container/gutlunch_trough + name = "gutlunch trough" + desc = "The gutlunches will eat out of it!" + icon = 'icons/obj/structures.dmi' + icon_state = "gutlunch_trough" + density = TRUE + anchored = TRUE + ///list of materials in the trough + var/list/list_of_materials = list() + +/obj/structure/ore_container/gutlunch_trough/Entered(atom/movable/mover) + if(!istype(mover, /obj/item/stack/ore)) + return ..() + if(list_of_materials[mover.type]) + return ..() + list_of_materials[mover.type] = list("pixel_x" = rand(-5, 8), "pixel_y" = rand(-2, -7)) + return ..() + +/obj/structure/ore_container/gutlunch_trough/Exited(atom/movable/mover) + if(!istype(mover, /obj/item/stack/ore) || !isnull(locate(mover.type) in contents)) + return ..() + list_of_materials -= mover.type + return ..() + +/obj/structure/ore_container/gutlunch_trough/deconstruct(disassembled = TRUE) + if(flags_1 & NODECONSTRUCT_1) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) + qdel(src) + +/obj/structure/ore_container/gutlunch_trough/update_overlays() + . = ..() + for(var/ore_entry in list_of_materials) + var/obj/item/ore_item = ore_entry + var/image/ore_icon = image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state), layer = LOW_ITEM_LAYER) + var/list/pixel_positions = list_of_materials[ore_entry] + ore_icon.transform = ore_icon.transform.Scale(0.4, 0.4) + ore_icon.pixel_x = pixel_positions["pixel_x"] + ore_icon.pixel_y = pixel_positions["pixel_y"] + . += ore_icon diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm new file mode 100644 index 00000000000..6d8f91ff8ce --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -0,0 +1,172 @@ +#define MAX_ATTACK_DIFFERENCE 3 +#define MAX_LOWER_ATTACK 15 +#define MINIMUM_POSSIBLE_SPEED 1 +#define MAX_POSSIBLE_HEALTH 100 + +/mob/living/basic/mining/gutlunch + name = "gutlunch" + desc = "A scavenger that eats raw ores, often found alongside ash walkers. Produces a thick, nutritious milk." + icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + icon_state = "gutlunch" + combat_mode = FALSE + icon_living = "gutlunch" + icon_dead = "gutlunch" + mob_biotypes = MOB_ORGANIC|MOB_BEAST + basic_mob_flags = DEL_ON_DEATH + speak_emote = list("warbles", "quavers") + faction = list(FACTION_ASHWALKER) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "squishes" + response_harm_simple = "squish" + friendly_verb_continuous = "pinches" + friendly_verb_simple = "pinch" + gold_core_spawnable = FRIENDLY_SPAWN + death_message = "is pulped into bugmash." + greyscale_config = /datum/greyscale_config/gutlunch + ///possible colors we can have + var/list/possible_colors = list(COLOR_WHITE) + ///can we breed? + var/can_breed = TRUE + +/mob/living/basic/mining/gutlunch/Initialize(mapload) + . = ..() + GLOB.gutlunch_count++ + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + if(greyscale_config) + set_greyscale(colors = list(pick(possible_colors))) + AddElement(/datum/element/ai_retaliate) + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/mining/gutlunch)),\ + baby_path = /mob/living/basic/mining/gutlunch/grub,\ + post_birth = CALLBACK(src, PROC_REF(after_birth)),\ + breed_timer = 3 MINUTES,\ + ) + +/mob/living/basic/mining/gutlunch/Destroy() + GLOB.gutlunch_count-- + return ..() + +/mob/living/basic/mining/gutlunch/proc/pre_attack(mob/living/puncher, atom/target) + SIGNAL_HANDLER + + if(!istype(target, /obj/structure/ore_container/gutlunch_trough)) + return + + var/obj/ore_food = locate(/obj/item/stack/ore) in target + + if(isnull(ore_food)) + balloon_alert(src, "no food!") + else + melee_attack(ore_food) + return COMPONENT_HOSTILE_NO_ATTACK + +/mob/living/basic/mining/gutlunch/proc/after_birth(mob/living/basic/mining/gutlunch/grub/baby, mob/living/partner) + var/our_color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + var/partner_color = LAZYACCESS(partner.atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + baby.add_atom_colour(BlendRGB(our_color, partner_color, 1), FIXED_COLOUR_PRIORITY) + var/atom/male_parent = (gender == MALE) ? src : partner + baby.inherited_stats = new(male_parent) + +/mob/living/basic/mining/gutlunch/proc/roll_stats(input_attack, input_speed, input_health) + melee_damage_lower = rand(input_attack, min(MAX_LOWER_ATTACK, input_attack + MAX_ATTACK_DIFFERENCE)) + melee_damage_upper = melee_damage_lower + MAX_ATTACK_DIFFERENCE + speed = rand(MINIMUM_POSSIBLE_SPEED, input_speed) + maxHealth = rand(input_health, MAX_POSSIBLE_HEALTH) + health = maxHealth + +/mob/living/basic/mining/gutlunch/milk + name = "gubbuck" + gender = FEMALE + possible_colors = list("#E39FBB","#817178","#9d667d") + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_milk + ///overlay we display when our udder is full! + var/mutable_appearance/full_udder + +/mob/living/basic/mining/gutlunch/milk/Initialize(mapload) + . = ..() + var/datum/callback/milking_callback = CALLBACK(src, TYPE_PROC_REF(/atom/movable, update_overlays)) + AddComponent(\ + /datum/component/udder,\ + udder_type = /obj/item/udder/gutlunch,\ + on_milk_callback = milking_callback,\ + on_generate_callback = milking_callback,\ + ) + full_udder = mutable_appearance(icon, "gl_full") + full_udder.color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_GRAY + +/mob/living/basic/mining/gutlunch/warrior + name = "gunther" + gender = MALE + melee_damage_lower = 8 + melee_damage_upper = 13 + speed = 5 + maxHealth = 70 + health = 70 + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_warrior + possible_colors = list("#6d77ff","#8578e4","#97b6f6") + //pet commands when we tame the gutluncher + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/breed/gutlunch, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/fetch, + /datum/pet_command/mine_walls, + ) + +/mob/living/basic/mining/gutlunch/warrior/Initialize(mapload) + . = ..() + roll_stats(melee_damage_lower, speed, maxHealth) + AddComponent(/datum/component/obeys_commands, pet_commands) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) + +/mob/living/basic/mining/gutlunch/milk/update_overlays(new_udder_volume, max_udder_volume) + . = ..() + if(new_udder_volume != max_udder_volume) + return + . += full_udder + +/mob/living/basic/mining/gutlunch/grub + name = "grublunch" + possible_colors = list("#cc9797", "#b74c4c") + can_breed = FALSE + gender = NEUTER + ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby + ///list of stats we inherited + var/datum/gutlunch_inherited_stats/inherited_stats + +/mob/living/basic/mining/gutlunch/grub/Initialize(mapload) + . = ..() + transform = transform.Scale(0.6, 0.6) + AddComponent(\ + /datum/component/growth_and_differentiation,\ + growth_time = 3 MINUTES,\ + growth_probability = 100,\ + lower_growth_value = 0.5,\ + upper_growth_value = 1,\ + signals_to_kill_on = list(COMSIG_MOB_CLIENT_LOGIN),\ + optional_checks = CALLBACK(src, PROC_REF(ready_to_grow)),\ + optional_grow_behavior = CALLBACK(src, PROC_REF(determine_growth_path)),\ + ) + +/mob/living/basic/mining/gutlunch/grub/proc/ready_to_grow() + return (stat == CONSCIOUS) + +/mob/living/basic/mining/gutlunch/grub/proc/determine_growth_path() + var/final_type = prob(50) ? /mob/living/basic/mining/gutlunch/warrior : /mob/living/basic/mining/gutlunch/milk + var/mob/living/basic/mining/gutlunch/grown_mob = new final_type(get_turf(src)) + if(grown_mob.gender == MALE && inherited_stats) + grown_mob.roll_stats(inherited_stats.attack, inherited_stats.speed, inherited_stats.health) + qdel(src) + +#undef MAX_ATTACK_DIFFERENCE +#undef MAX_LOWER_ATTACK +#undef MINIMUM_POSSIBLE_SPEED +#undef MAX_POSSIBLE_HEALTH diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm new file mode 100644 index 00000000000..be45879c64b --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -0,0 +1,136 @@ +#define MAXIMUM_GUTLUNCH_POP 20 +/datum/ai_controller/basic_controller/gutlunch + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_warrior + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/mining/gutlunch/milk), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/mining/gutlunch/grub), + BB_MAX_CHILDREN = 5, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/check_faction, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/befriend_ashwalkers, + /datum/ai_planning_subtree/make_babies/gutlunch, + ) + +/datum/ai_planning_subtree/make_babies/gutlunch/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(GLOB.gutlunch_count >= MAXIMUM_GUTLUNCH_POP) + return + return ..() + +///find ashwalkers and add them to the list of masters +/datum/ai_planning_subtree/befriend_ashwalkers + +/datum/ai_planning_subtree/befriend_ashwalkers/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + controller.queue_behavior(/datum/ai_behavior/befriend_ashwalkers) + +/datum/ai_behavior/befriend_ashwalkers + action_cooldown = 5 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/befriend_ashwalkers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/mob/living/living_pawn = controller.pawn + + for(var/mob/living/potential_friend in oview(9, living_pawn)) + if(!isashwalker(potential_friend)) + continue + if((living_pawn.faction.Find(REF(potential_friend)))) + continue + living_pawn.befriend(potential_friend) + to_chat(potential_friend, span_nicegreen("[living_pawn] looks at you with endearing eyes!")) + finish_action(controller, TRUE) + return + + finish_action(controller, FALSE) + return + + + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_baby + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/gutlunch/milk), + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/look_for_adult, + ) + +/datum/ai_controller/basic_controller/gutlunch/gutlunch_milk + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/find_and_hunt_target/food_trough + ) + +///consume food! +/datum/ai_planning_subtree/find_and_hunt_target/food_trough + target_key = BB_TROUGH_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough + hunt_targets = list(/obj/structure/ore_container/gutlunch_trough) + hunt_chance = 75 + hunt_range = 9 + + +/datum/ai_planning_subtree/find_and_hunt_target/food_trough/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_CHECK_HUNGRY]) + return + return ..() + +/datum/ai_behavior/find_hunt_target/food_trough + +/datum/ai_behavior/find_hunt_target/food_trough/valid_dinner(mob/living/basic/source, obj/target, radius) + if(isnull(target)) + return FALSE + + if(isnull(locate(/obj/item/stack/ore) in target)) + return FALSE + + return can_see(source, target, radius) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + always_reset_target = TRUE + switch_combat_mode = TRUE + +/datum/pet_command/mine_walls + command_name = "Mine" + command_desc = "Command your pet to mine down walls." + speech_commands = list("mine", "smash") + +/datum/pet_command/mine_walls/try_activate_command(mob/living/commander) + var/mob/living/parent = weak_parent.resolve() + if(isnull(parent)) + return + //no walls for us to mine + var/target_in_vicinity = locate(/turf/closed/mineral) in oview(9, parent) + if(isnull(target_in_vicinity)) + return + return ..() + +/datum/pet_command/mine_walls/execute_action(datum/ai_controller/controller) + if(controller.blackboard_key_exists(BB_CURRENT_PET_TARGET)) + controller.queue_behavior(/datum/ai_behavior/mine_wall, BB_CURRENT_PET_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + controller.queue_behavior(/datum/ai_behavior/find_mineral_wall, BB_CURRENT_PET_TARGET) + +//pet commands +/datum/pet_command/point_targeting/breed/gutlunch + +/datum/pet_command/point_targeting/breed/gutlunch/set_command_target(mob/living/parent, atom/target) + if(GLOB.gutlunch_count >= MAXIMUM_GUTLUNCH_POP) + parent.balloon_alert_to_viewers("can't reproduce anymore!") + return + return ..() + +#undef MAXIMUM_GUTLUNCH_POP diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_inherit_datum.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_inherit_datum.dm new file mode 100644 index 00000000000..7051dfc2f4b --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_inherit_datum.dm @@ -0,0 +1,14 @@ +///stats we inherit from the parent +/datum/gutlunch_inherited_stats + ///attack we inherited + var/attack + ///speed we inherited + var/speed + ///health we inherited + var/health + +/datum/gutlunch_inherited_stats/New(mob/living/basic/parent) + . = ..() + attack = parent.melee_damage_lower + speed = parent.speed + health = parent.maxHealth diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm index 11043e58d11..7b1e461991c 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm @@ -36,7 +36,7 @@ AddComponent(/datum/component/appearance_on_aggro, aggro_state = "hivelord_alert") spawn_brood = new(src) spawn_brood.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, spawn_brood) + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, spawn_brood) /mob/living/basic/mining/hivelord/Destroy() QDEL_NULL(spawn_brood) diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm index fd7983de397..1fb05cd7a01 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm @@ -1,7 +1,7 @@ /// Basically just keep away and shit out worms /datum/ai_controller/basic_controller/hivelord blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_AGGRO_RANGE = 5, // Only get mad at people nearby ) diff --git a/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm b/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm index 63a66d4c4e3..7d50806e63a 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/spawn_hivelord_brood.dm @@ -10,7 +10,7 @@ cooldown_time = 2 SECONDS melee_cooldown_time = 0 shared_cooldown = NONE - /// If a mob is not clicked directly, inherit targetting data from this blackboard key and setting it upon this target key + /// If a mob is not clicked directly, inherit targeting data from this blackboard key and setting it upon this target key var/ai_target_key = BB_BASIC_MOB_CURRENT_TARGET /// What are we actually spawning? var/spawn_type = /mob/living/basic/hivelord_brood diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm index 7c6bd0fd170..b64c3b257a0 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm @@ -41,7 +41,7 @@ var/datum/action/cooldown/mob_cooldown/skull_launcher/skull_launcher = new(src) skull_launcher.Grant(src) skull_launcher.spawn_type = brood_type - ai_controller.blackboard[BB_TARGETTED_ACTION] = skull_launcher + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, skull_launcher) /// Create what we want to drop on death, in proc form so we can always return a static list /mob/living/basic/mining/legion/proc/get_loot_list() diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm index 9167846b685..1bae1b30353 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm @@ -1,7 +1,7 @@ /// Keep away and launch skulls at every opportunity, prioritising injured allies /datum/ai_controller/basic_controller/legion blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/legion, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/legion, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_AGGRO_RANGE = 5, // Unobservant BB_BASIC_MOB_FLEE_DISTANCE = 6, @@ -16,10 +16,10 @@ /datum/ai_planning_subtree/flee_target/legion, ) -/// Chase and attack whatever we are targetting, if it's friendly we will heal them +/// Chase and attack whatever we are targeting, if it's friendly we will heal them /datum/ai_controller/basic_controller/legion_brood blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/legion, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/legion, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -31,9 +31,9 @@ ) /// Target nearby friendlies if they are hurt (and are not themselves Legions) -/datum/targetting_datum/basic/legion +/datum/targeting_strategy/basic/legion -/datum/targetting_datum/basic/legion/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/legion/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) if (!living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly)) return FALSE if (istype(the_target, living_mob.type)) diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm index 7ce568d5760..797426058a1 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -57,7 +57,7 @@ return return ..() -/// Turn the targetted mob into one of us +/// Turn the targeted mob into one of us /mob/living/basic/legion_brood/proc/infest(mob/living/target) visible_message(span_warning("[name] burrows into the flesh of [target]!")) var/spawn_type = get_legion_type(target) diff --git a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm index f68c5f7fafe..bd9b2c2aff9 100644 --- a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm +++ b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm @@ -10,7 +10,7 @@ cooldown_time = 2 SECONDS melee_cooldown_time = 0 shared_cooldown = NONE - /// If a mob is not clicked directly, inherit targetting data from this blackboard key and setting it upon this target key + /// If a mob is not clicked directly, inherit targeting data from this blackboard key and setting it upon this target key var/ai_target_key = BB_BASIC_MOB_CURRENT_TARGET /// What are we actually spawning? var/spawn_type = /mob/living/basic/legion_brood diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index a048fe77ab1..ef6d846970d 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -44,7 +44,7 @@ ) charge = new(src) charge.Grant(src) - ai_controller.set_blackboard_key(BB_TARGETTED_ACTION, charge) + ai_controller.set_blackboard_key(BB_TARGETED_ACTION, charge) /mob/living/basic/mining/lobstrosity/Destroy() QDEL_NULL(charge) @@ -69,7 +69,7 @@ /datum/action/cooldown/mob_cooldown/charge/basic_charge/lobster/hit_target(atom/movable/source, atom/target, damage_dealt) . = ..() - if(!isliving(target) || !isbasicmob(source)) + if(!isbasicmob(source)) return var/mob/living/basic/basic_source = source var/mob/living/living_target = target diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index c89cc3b9c07..b80d5d6b9f7 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/lobstrosity blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_LOBSTROSITY_EXPLOIT_TRAITS = list(TRAIT_INCAPACITATED, TRAIT_FLOORED, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT), BB_LOBSTROSITY_FINGER_LUST = 0 @@ -34,7 +34,7 @@ /datum/ai_behavior/basic_melee_attack/lobster -/datum/ai_behavior/basic_melee_attack/lobster/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) +/datum/ai_behavior/basic_melee_attack/lobster/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/mob/living/target = controller.blackboard[target_key] if (isnull(target)) return ..() @@ -55,7 +55,7 @@ flee_behaviour = /datum/ai_behavior/run_away_from_target/lobster /datum/ai_planning_subtree/flee_target/lobster/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - var/datum/action/cooldown/using_action = controller.blackboard[BB_TARGETTED_ACTION] + var/datum/action/cooldown/using_action = controller.blackboard[BB_TARGETED_ACTION] if (using_action?.IsAvailable()) return return ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook.dm b/code/modules/mob/living/basic/lavaland/mook/mook.dm index d36973cff03..6ecf54bc264 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook.dm @@ -41,8 +41,8 @@ var/list/pet_commands = list( /datum/pet_command/idle, /datum/pet_command/free, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/fetch, ) /mob/living/basic/mining/mook/Initialize(mapload) @@ -52,14 +52,12 @@ move_resist = MOVE_RESIST_DEFAULT,\ ) AddComponent(/datum/component/ai_retaliate_advanced, CALLBACK(src, PROC_REF(attack_intruder))) - var/datum/action/cooldown/mob_cooldown/mook_ability/mook_jump/jump = new(src) - jump.Grant(src) - ai_controller.set_blackboard_key(BB_MOOK_JUMP_ABILITY, jump) + grant_actions_by_list(get_innate_abilities()) ore_overlay = mutable_appearance(icon, "mook_ore_overlay") AddComponent(/datum/component/ai_listen_to_weather) - AddElement(/datum/element/wall_smasher) + AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(drop_ore)) @@ -68,6 +66,13 @@ AddComponent(/datum/component/obeys_commands, pet_commands) +/// Returns a list of actions and blackboard keys to pass into `grant_actions_by_list`. +/mob/living/basic/mining/mook/proc/get_innate_abilities() + var/static/list/innate_abilities = list( + /datum/action/cooldown/mob_cooldown/mook_ability/mook_jump = BB_MOOK_JUMP_ABILITY, + ) + return innate_abilities + /mob/living/basic/mining/mook/proc/grant_healer_abilities() AddComponent(\ /datum/component/healing_touch,\ @@ -102,7 +107,7 @@ ore_target.forceMove(src) return COMPONENT_HOSTILE_NO_ATTACK - if(istype(target, /obj/structure/material_stand)) + if(istype(target, /obj/structure/ore_container/material_stand)) if(held_ore) held_ore.forceMove(target) return COMPONENT_HOSTILE_NO_ATTACK @@ -198,9 +203,18 @@ neutral_stance = mutable_appearance(icon, "mook_axe_overlay") attack_stance = mutable_appearance(icon, "axe_strike_overlay") update_appearance() - var/datum/action/cooldown/mob_cooldown/mook_ability/mook_leap/leap = new(src) - leap.Grant(src) - ai_controller.set_blackboard_key(BB_MOOK_LEAP_ABILITY, leap) + +/mob/living/basic/mining/mook/worker/get_innate_abilities() + var/static/list/worker_innate_abilites = null + + if(isnull(worker_innate_abilites)) + worker_innate_abilites = list() + worker_innate_abilites += ..() + worker_innate_abilites += list( + /datum/action/cooldown/mob_cooldown/mook_ability/mook_leap = BB_MOOK_LEAP_ABILITY, + ) + + return worker_innate_abilites /mob/living/basic/mining/mook/worker/attack_sequence(atom/target) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index 0fc2873531e..cf79eb06aa6 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -1,12 +1,12 @@ ///commands the chief can pick from GLOBAL_LIST_INIT(mook_commands, list( - new /datum/pet_command/point_targetting/attack, - new /datum/pet_command/point_targetting/fetch, + new /datum/pet_command/point_targeting/attack, + new /datum/pet_command/point_targeting/fetch, )) /datum/ai_controller/basic_controller/mook blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite, /turf/closed/mineral/strong), BB_MAXIMUM_DISTANCE_TO_VILLAGE = 7, BB_STORM_APPROACHING = FALSE, @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ) ///check for faction if not a ash walker, otherwise just attack -/datum/targetting_datum/basic/mook/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/mook/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) if(FACTION_ASHWALKER in living_mob.faction) return FALSE @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(mook_commands, list( target_key = BB_MATERIAL_STAND_TARGET hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand finding_behavior = /datum/ai_behavior/find_hunt_target - hunt_targets = list(/obj/structure/material_stand) + hunt_targets = list(/obj/structure/ore_container/material_stand) hunt_range = 9 /datum/ai_planning_subtree/find_and_hunt_target/material_stand/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -83,6 +83,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand required_distance = 0 always_reset_target = TRUE + switch_combat_mode = TRUE behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT ///try to face the counter when depositing ores @@ -212,7 +213,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///bard mook plays nice music for the village /datum/ai_controller/basic_controller/mook/bard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_MAXIMUM_DISTANCE_TO_VILLAGE = 10, BB_STORM_APPROACHING = FALSE, BB_SONG_LINES = MOOK_SONG, @@ -264,10 +265,10 @@ GLOBAL_LIST_INIT(mook_commands, list( ///healer mooks guard the village from intruders and heal the miner mooks when they come home /datum/ai_controller/basic_controller/mook/support blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_MAXIMUM_DISTANCE_TO_VILLAGE = 10, BB_STORM_APPROACHING = FALSE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village planning_subtrees = list( @@ -324,7 +325,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///the chief would rather command his mooks to attack people than attack them himself /datum/ai_controller/basic_controller/mook/tribal_chief blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mook, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mook, BB_STORM_APPROACHING = FALSE, ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village @@ -349,7 +350,7 @@ GLOBAL_LIST_INIT(mook_commands, list( if(!locate(/mob/living/basic/mining/mook) in oview(command_distance, controller.pawn)) return if(controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) - controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_BASIC_MOB_CURRENT_TARGET, /datum/pet_command/point_targetting/attack) + controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_BASIC_MOB_CURRENT_TARGET, /datum/pet_command/point_targeting/attack) return var/atom/ore_target = controller.blackboard[BB_ORE_TARGET] @@ -359,7 +360,7 @@ GLOBAL_LIST_INIT(mook_commands, list( if(get_dist(ore_target, living_pawn) <= 1) return - controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_ORE_TARGET, /datum/pet_command/point_targetting/fetch) + controller.queue_behavior(/datum/ai_behavior/issue_commands, BB_ORE_TARGET, /datum/pet_command/point_targeting/fetch) /datum/ai_behavior/issue_commands action_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_village.dm b/code/modules/mob/living/basic/lavaland/mook/mook_village.dm index e3a091f6f0e..ca2719ed7c6 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_village.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_village.dm @@ -1,5 +1,5 @@ ///unique items that spawn at the mook village -/obj/structure/material_stand +/obj/structure/ore_container/material_stand name = "material stand" desc = "Is everyone free to use this thing?" icon = 'icons/mob/simple/jungle/mook.dmi' @@ -10,22 +10,8 @@ bound_width = 64 bound_height = 64 -/obj/structure/material_stand/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers) - if(istype(ore, /obj/item/stack/ore)) - ore.forceMove(src) - return - return ..() - -/obj/structure/material_stand/Entered(atom/movable/mover) - . = ..() - update_appearance(UPDATE_OVERLAYS) - -/obj/structure/material_stand/Exited(atom/movable/mover) - . = ..() - update_appearance(UPDATE_OVERLAYS) - ///put ore icons on the counter! -/obj/structure/material_stand/update_overlays() +/obj/structure/ore_container/material_stand/update_overlays() . = ..() for(var/obj/item/stack/ore/ore_item in contents) var/image/ore_icon = image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state), layer = LOW_ITEM_LAYER) @@ -34,52 +20,6 @@ ore_icon.pixel_y = rand(2, 4) . += ore_icon -/obj/structure/material_stand/ui_interact(mob/user, datum/tgui/ui) - . = ..() - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MaterialStand") - ui.open() - -/obj/structure/material_stand/ui_data(mob/user) - var/list/data = list() - data["ores"] = list() - for(var/obj/item/stack/ore/ore_item in contents) - data["ores"] += list(list( - "id" = REF(ore_item), - "name" = ore_item.name, - "amount" = ore_item.amount, - )) - return data - -/obj/structure/material_stand/ui_static_data(mob/user) - var/list/data = list() - data["ore_images"] = list() - for(var/obj/item/stack/ore_item as anything in subtypesof(/obj/item/stack/ore)) - data["ore_images"] += list(list( - "name" = initial(ore_item.name), - "icon" = icon2base64(getFlatIcon(image(icon = initial(ore_item.icon), icon_state = initial(ore_item.icon_state)), no_anim=TRUE)) - )) - return data - -/obj/structure/material_stand/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - - if(. || !isliving(usr)) - return TRUE - - var/mob/living/customer = usr - var/obj/item/stack_to_move - switch(action) - if("withdraw") - if(isnull(params["reference"])) - return TRUE - stack_to_move = locate(params["reference"]) in contents - if(isnull(stack_to_move)) - return TRUE - stack_to_move.forceMove(get_turf(customer)) - return TRUE - /obj/effect/landmark/mook_village name = "mook village landmark" icon_state = "x" diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm index 28ed712d061..c3c30526dff 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm @@ -62,7 +62,7 @@ var/datum/action/cooldown/mob_cooldown/watcher_gaze/gaze = new gaze_attack(src) gaze.Grant(src) ai_controller.set_blackboard_key(BB_GENERIC_ACTION, gaze) - AddComponent(/datum/component/revenge_ability, gaze, targetting = ai_controller.blackboard[BB_TARGETTING_DATUM]) + AddComponent(/datum/component/revenge_ability, gaze, targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY])) /mob/living/basic/mining/watcher/update_overlays() . = ..() diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm index 348bbcfcaa7..c962ca50c12 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/watcher blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = PAUSE_DURING_DO_AFTER diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 061c9a624f7..6bc0202aed5 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -40,7 +40,7 @@ /datum/pet_command/automate_mining, /datum/pet_command/free/minebot, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/minebot, + /datum/pet_command/point_targeting/attack/minebot, ) /mob/living/basic/mining_drone/Initialize(mapload) @@ -58,14 +58,13 @@ after_tame = CALLBACK(src, PROC_REF(activate_bot)),\ ) - var/datum/action/cooldown/mob_cooldown/minedrone/toggle_light/toggle_light_action = new(src) - var/datum/action/cooldown/mob_cooldown/minedrone/toggle_meson_vision/toggle_meson_vision_action = new(src) - var/datum/action/cooldown/mob_cooldown/minedrone/dump_ore/dump_ore_action = new(src) - toggle_light_action.Grant(src) - toggle_meson_vision_action.Grant(src) - dump_ore_action.Grant(src) - ai_controller.set_blackboard_key(BB_MINEBOT_LIGHT_ABILITY, toggle_light_action) - ai_controller.set_blackboard_key(BB_MINEBOT_DUMP_ABILITY, dump_ore_action) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/minedrone/toggle_light = BB_MINEBOT_LIGHT_ABILITY, + /datum/action/cooldown/mob_cooldown/minedrone/toggle_meson_vision = null, + /datum/action/cooldown/mob_cooldown/minedrone/dump_ore = BB_MINEBOT_DUMP_ABILITY, + ) + + grant_actions_by_list(innate_actions) stored_gun = new(src) var/obj/item/implant/radio/mining/comms = new(src) diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index f4a2adda9e1..4aba93c4265 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/minebot blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite), BB_AUTOMATED_MINING = FALSE, ) @@ -201,10 +201,10 @@ radial_icon_state = "mech_eject" ability_key = BB_MINEBOT_DUMP_ABILITY -/datum/pet_command/point_targetting/attack/minebot +/datum/pet_command/point_targeting/attack/minebot attack_behaviour = /datum/ai_behavior/basic_ranged_attack/minebot -/datum/pet_command/point_targetting/attack/minebot/execute_action(datum/ai_controller/controller) +/datum/pet_command/point_targeting/attack/minebot/execute_action(datum/ai_controller/controller) controller.set_blackboard_key(BB_AUTOMATED_MINING, FALSE) var/mob/living/living_pawn = controller.pawn if(!living_pawn.combat_mode) diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index dd3b3b3a463..f835d7c5e17 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -7,10 +7,10 @@ speech_commands = list("good dog") // Set correct attack behaviour -/datum/pet_command/point_targetting/attack/dog +/datum/pet_command/point_targeting/attack/dog attack_behaviour = /datum/ai_behavior/basic_melee_attack/dog -/datum/pet_command/point_targetting/attack/dog/set_command_active(mob/living/parent, mob/living/commander) +/datum/pet_command/point_targeting/attack/dog/set_command_active(mob/living/parent, mob/living/commander) . = ..() parent.ai_controller.set_blackboard_key(BB_DOG_HARASS_HARM, TRUE) @@ -40,8 +40,8 @@ /datum/pet_command/free, /datum/pet_command/good_boy/dog, /datum/pet_command/follow/dog, - /datum/pet_command/point_targetting/attack/dog, - /datum/pet_command/point_targetting/fetch, + /datum/pet_command/point_targeting/attack/dog, + /datum/pet_command/point_targeting/fetch, /datum/pet_command/play_dead, ) diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index 9e120c4e8c0..61c18ab5354 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -26,6 +26,8 @@ var/is_slow = FALSE ///Item slots that are available for this corgi to equip stuff into var/list/strippable_inventory_slots = list() + ///can this mob breed? + var/can_breed = TRUE /mob/living/basic/pet/dog/corgi/Initialize(mapload) . = ..() @@ -34,6 +36,13 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(on_tried_access)) RegisterSignals(src, list(COMSIG_BASICMOB_LOOK_ALIVE, COMSIG_BASICMOB_LOOK_DEAD), PROC_REF(on_appearance_change)) + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/dog/corgi)),\ + baby_path = /mob/living/basic/pet/dog/corgi/puppy,\ + ) /mob/living/basic/pet/dog/corgi/Destroy() QDEL_NULL(inventory_head) @@ -532,9 +541,11 @@ icon_dead = "puppy_dead" density = FALSE pass_flags = PASSMOB + ai_controller = /datum/ai_controller/basic_controller/dog/puppy mob_size = MOB_SIZE_SMALL collar_icon_state = "puppy" strippable_inventory_slots = list(/datum/strippable_item/pet_collar, /datum/strippable_item/corgi_id) //puppies are too small to handle hats and back slot items + can_breed = FALSE //PUPPY IAN! SQUEEEEEEEEE~ /mob/living/basic/pet/dog/corgi/puppy/ian diff --git a/code/modules/mob/living/basic/pets/fox.dm b/code/modules/mob/living/basic/pets/fox.dm index 150abdc676b..7d74a6a36e4 100644 --- a/code/modules/mob/living/basic/pets/fox.dm +++ b/code/modules/mob/living/basic/pets/fox.dm @@ -39,8 +39,8 @@ /datum/ai_controller/basic_controller/fox blackboard = list( BB_ALWAYS_IGNORE_FACTION = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/pets/penguin.dm b/code/modules/mob/living/basic/pets/penguin.dm index 35abc784e37..671c2cf30c1 100644 --- a/code/modules/mob/living/basic/pets/penguin.dm +++ b/code/modules/mob/living/basic/pets/penguin.dm @@ -84,7 +84,7 @@ /datum/ai_controller/basic_controller/penguin blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -178,7 +178,7 @@ /datum/ai_controller/basic_controller/penguin/baby blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_FIND_MOM_TYPES = list(/mob/living/basic/pet/penguin), BB_IGNORE_MOM_TYPES = list(/mob/living/basic/pet/penguin/baby), ) diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index aaeeb218b2c..0b1546ccf93 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -75,8 +75,8 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) /// They're really passive in game, so they just wanna get away if you start smacking them. No trees in space from them to use for clawing your eyes out, but they will try if desperate. /datum/ai_controller/basic_controller/sloth blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 7d13c7e6621..85f48a8f672 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/living_limb_flesh blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -78,13 +78,13 @@ return step(victim, pick(GLOB.cardinals)) to_chat(victim, span_warning("Your [current_bodypart] moves on its own!")) - + /mob/living/basic/living_limb_flesh/melee_attack(mob/living/carbon/human/target, list/modifiers, ignore_cooldown) . = ..() if (!ishuman(target) || target.stat == DEAD || HAS_TRAIT(target, TRAIT_NODISMEMBER)) return - + var/list/zone_candidates = target.get_missing_limbs() for(var/obj/item/bodypart/bodypart in target.bodyparts) if(bodypart.body_zone == BODY_ZONE_HEAD || bodypart.body_zone == BODY_ZONE_CHEST) @@ -96,10 +96,10 @@ if(bodypart.brute_dam < 20) continue zone_candidates += bodypart.body_zone - + if(!length(zone_candidates)) return - + var/target_zone = pick(zone_candidates) var/obj/item/bodypart/target_part = target.get_bodypart(target_zone) if(isnull(target_part)) @@ -117,7 +117,7 @@ part_type = /obj/item/bodypart/leg/left/flesh if(BODY_ZONE_R_LEG) part_type = /obj/item/bodypart/leg/right/flesh - + target.visible_message(span_danger("[src] [target_part ? "tears off and attaches itself" : "attaches itself"] to where [target][target.p_s()] limb used to be!")) current_bodypart = new part_type(TRUE) //dont_spawn_flesh, we cant use named arguments here current_bodypart.replace_limb(target, TRUE) diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm index f7e8cefa12e..851a0873657 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -9,7 +9,7 @@ /datum/ai_controller/basic_controller/living_floor max_target_distance = 2 blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -46,7 +46,7 @@ attack_verb_simple = "bite" ai_controller = /datum/ai_controller/basic_controller/living_floor melee_attack_cooldown = 0.5 SECONDS // get real - + var/icon_aggro = "floor-hostile" var/desc_aggro = "This flooring is alive and filled with teeth, better not step on that. Being covered in plating, it is immune to damage. Seems vulnerable to prying though." @@ -61,8 +61,8 @@ if(!istype(victim) || istype(victim, /mob/living/basic/living_floor) || victim.stat == DEAD) return if(victim.loc == loc) //guaranteed bite - var/datum/targetting_datum/basic/targetting = ai_controller.blackboard[BB_TARGETTING_DATUM] - if(targetting.can_attack(src, victim)) + var/datum/targeting_strategy/basic/targeting = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]) + if(targeting.can_attack(src, victim)) melee_attack(victim) icon_state = icon_aggro desc = desc_aggro diff --git a/code/modules/mob/living/basic/ruin_defender/skeleton.dm b/code/modules/mob/living/basic/ruin_defender/skeleton.dm index 125787319b0..aa41a399b7f 100644 --- a/code/modules/mob/living/basic/ruin_defender/skeleton.dm +++ b/code/modules/mob/living/basic/ruin_defender/skeleton.dm @@ -51,7 +51,8 @@ AddElement(/datum/element/basic_eating, heal_amt = 50, drinking = TRUE, food_types = good_drinks) AddElement(/datum/element/basic_eating, heal_amt = 0, damage_amount = 25, damage_type = BURN, drinking = TRUE, food_types = bad_drinks) ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) - ai_controller?.set_blackboard_key(BB_BASIC_FOODS, good_drinks + bad_drinks) + var/list/foods_list = good_drinks + bad_drinks + ai_controller?.set_blackboard_key(BB_BASIC_FOODS, typecacheof(foods_list)) /mob/living/basic/skeleton/settler name = "undead settler" @@ -85,7 +86,7 @@ maxHealth = 150 health = 150 speed = 2 - force_threshold = 10 //trying to simulate actually having armor + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //trying to simulate actually having armor obj_damage = 50 melee_damage_lower = 25 melee_damage_upper = 30 @@ -161,7 +162,7 @@ /// Skeletons mostly just beat people to death, but they'll also find and drink milk. /datum/ai_controller/basic_controller/skeleton blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_EMOTE_KEY = "rattles", BB_EMOTE_CHANCE = 20, diff --git a/code/modules/mob/living/basic/ruin_defender/stickman.dm b/code/modules/mob/living/basic/ruin_defender/stickman.dm index 107973135c7..588a75c6346 100644 --- a/code/modules/mob/living/basic/ruin_defender/stickman.dm +++ b/code/modules/mob/living/basic/ruin_defender/stickman.dm @@ -33,7 +33,7 @@ /datum/ai_controller/basic_controller/stickman blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm new file mode 100644 index 00000000000..7c35184af37 --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm @@ -0,0 +1,90 @@ +/mob/living/basic/wizard + name = "Space Wizard" + desc = "A wizard is never early. Nor is he late. He arrives exactly at the worst possible moment." + icon = 'icons/mob/simple/simple_human.dmi' + icon_state = "wizard" + icon_living = "wizard" + icon_dead = "wizard_dead" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + speed = 0 + maxHealth = 100 + health = 100 + melee_damage_lower = 5 + melee_damage_upper = 5 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + combat_mode = TRUE + habitable_atmos = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + faction = list(ROLE_WIZARD) + basic_mob_flags = DEL_ON_DEATH + ai_controller = /datum/ai_controller/basic_controller/wizard + + /// A list of possible wizard corpses, and therefore wizard outfits, to select from + var/static/list/wizard_outfits = list( + /obj/effect/mob_spawn/corpse/human/wizard = 5, + /obj/effect/mob_spawn/corpse/human/wizard/red = 3, + /obj/effect/mob_spawn/corpse/human/wizard/yellow = 3, + /obj/effect/mob_spawn/corpse/human/wizard/black = 3, + /obj/effect/mob_spawn/corpse/human/wizard/marisa = 1, + //The tape wizard should go here, but its hat doesn't render correctly for some reason. + ) + /// A specified wizard corpse spawner to use. If null, picks from the list above instead. + var/selected_outfit + + /// Typepath for the wizard's targeted spell. If null, selects randomly. + var/targeted_spell_path + /// List of possible targeted spells to pick from + var/static/list/targeted_spell_list = list( + /datum/action/cooldown/spell/pointed/projectile/fireball/lesser, + /datum/action/cooldown/spell/pointed/projectile/lightningbolt, + ) + + /// Typepath for the wizard's secondary spell. If null, selects randomly. + var/secondary_spell_path + /// List of possible secondary spells to pick from + var/static/list/secondary_spell_list = list( + /datum/action/cooldown/spell/aoe/magic_missile, + /datum/action/cooldown/spell/charged/beam/tesla, + /datum/action/cooldown/spell/aoe/repulse, + /datum/action/cooldown/spell/conjure/the_traps, + ) + +/mob/living/basic/wizard/Initialize(mapload) + . = ..() + if(!selected_outfit) + selected_outfit = pick_weight(wizard_outfits) + apply_dynamic_human_appearance(src, mob_spawn_path = selected_outfit, r_hand = /obj/item/staff) + var/list/remains = string_list(list( + selected_outfit, + /obj/item/staff + )) + AddElement(/datum/element/death_drops, remains) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE) + + if(isnull(targeted_spell_path)) + targeted_spell_path = pick(targeted_spell_list) + if(isnull(secondary_spell_path)) + secondary_spell_path = pick(secondary_spell_list) + + var/datum/action/cooldown/spell/targeted_spell = new targeted_spell_path(src) + targeted_spell.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) + targeted_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_TARGETED_SPELL, targeted_spell) + + var/datum/action/cooldown/spell/secondary_spell = new secondary_spell_path(src) + secondary_spell.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) + secondary_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_SECONDARY_SPELL, secondary_spell) + + var/datum/action/cooldown/spell/teleport/radius_turf/blink/lesser/blink_spell = new(src) + blink_spell.Grant(src) + ai_controller.set_blackboard_key(BB_WIZARD_BLINK_SPELL, blink_spell) + +/// Uses the colors and loadout of the original wizard simplemob +/mob/living/basic/wizard/classic + selected_outfit = /obj/effect/mob_spawn/corpse/human/wizard + targeted_spell_path = /datum/action/cooldown/spell/pointed/projectile/fireball/lesser + secondary_spell_path = /datum/action/cooldown/spell/aoe/magic_missile diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm new file mode 100644 index 00000000000..4430b1339a7 --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm @@ -0,0 +1,53 @@ +#define WIZARD_SPELL_COOLDOWN (1 SECONDS) + +/** + * Wizards run away from their targets while flinging spells at them and blinking constantly. + */ +/datum/ai_controller/basic_controller/wizard + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/maintain_distance/cover_minimum_distance, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/primary, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/secondary, + /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/blink, + ) + +/** + * Cast a wizard spell. There is a minimum cooldown between spellcasts to prevent overwhelming spam. + * + * Though only the primary spell is actually targeted, all spells use targeted behavior so that they + * only get used in combat. + */ +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell + use_ability_behaviour = /datum/ai_behavior/targeted_mob_ability/wizard_spell + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if (controller.blackboard[BB_WIZARD_SPELL_COOLDOWN] > world.time) + return + return ..() + +/datum/ai_behavior/targeted_mob_ability/wizard_spell/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) + . = ..() + controller.set_blackboard_key(BB_WIZARD_SPELL_COOLDOWN, world.time + WIZARD_SPELL_COOLDOWN) + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/primary + ability_key = BB_WIZARD_TARGETED_SPELL + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/secondary + ability_key = BB_WIZARD_SECONDARY_SPELL + +/datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/blink + ability_key = BB_WIZARD_BLINK_SPELL + +/datum/ai_behavior/use_mob_ability/wizard_spell/perform(seconds_per_tick, datum/ai_controller/controller, ability_key) + . = ..() + controller.set_blackboard_key(BB_WIZARD_SPELL_COOLDOWN, world.time + WIZARD_SPELL_COOLDOWN) + +#undef WIZARD_SPELL_COOLDOWN diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm new file mode 100644 index 00000000000..c49d87c730a --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_spells.dm @@ -0,0 +1,17 @@ +// Lesser versions of wizard spells to be used by AI wizards + +/// Lesser fireball, which is slightly less "instant death" than the normal one +/datum/action/cooldown/spell/pointed/projectile/fireball/lesser + name = "Lesser Fireball" + projectile_type = /obj/projectile/magic/fireball/lesser + cooldown_time = 10 SECONDS + +/obj/projectile/magic/fireball/lesser + damage = 0 + exp_light = 1 + +/// Lesser Blink, shorter range than the normal blink spell +/datum/action/cooldown/spell/teleport/radius_turf/blink/lesser + name = "Lesser Blink" + outer_tele_radius = 3 + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC diff --git a/code/modules/mob/living/basic/space_fauna/ant.dm b/code/modules/mob/living/basic/space_fauna/ant.dm index 7748d9120d7..26a904340b7 100644 --- a/code/modules/mob/living/basic/space_fauna/ant.dm +++ b/code/modules/mob/living/basic/space_fauna/ant.dm @@ -45,7 +45,7 @@ /datum/ai_controller/basic_controller/ant blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm index 851c0bb8029..335e7257e50 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/bear blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index 27b28400b39..ebb6f1d23f7 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -58,7 +58,7 @@ /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack + /datum/pet_command/point_targeting/attack ) /// Carp want to eat raw meat var/static/list/desired_food = list(/obj/item/food/meat/slab, /obj/item/food/meat/rawcutlet) @@ -103,18 +103,14 @@ teleport = new(src) teleport.Grant(src) ai_controller.set_blackboard_key(BB_CARP_RIFT, teleport) - ai_controller.set_blackboard_key(BB_OBSTACLE_TARGETTING_WHITELIST, allowed_obstacle_targets) - - -/mob/living/basic/carp/Destroy() - QDEL_NULL(teleport) - return ..() + ai_controller.set_blackboard_key(BB_OBSTACLE_TARGETING_WHITELIST, allowed_obstacle_targets) /// Tell the elements and the blackboard what food we want to eat /mob/living/basic/carp/proc/setup_eating() AddElement(/datum/element/basic_eating, food_types = desired_food) AddElement(/datum/element/basic_eating, heal_amt = 0, damage_amount = 10, damage_type = BRUTE, food_types = desired_trash) // We are killing our planet - ai_controller.set_blackboard_key(BB_BASIC_FOODS, desired_food + desired_trash) + var/list/foods_list = desired_food + desired_trash + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(foods_list)) /// Set a random colour on the carp, override to do something else /mob/living/basic/carp/proc/apply_colour() @@ -252,6 +248,7 @@ /mob/living/basic/carp/advanced health = 40 + maxHealth = 40 obj_damage = 15 #undef RARE_CAYENNE_CHANCE diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm index b1343a7aeed..9e767bab3af 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm @@ -1,6 +1,6 @@ #define MAGICARP_SPELL_TARGET_SEEK_RANGE 4 -/datum/pet_command/point_targetting/use_ability/magicarp +/datum/pet_command/point_targeting/use_ability/magicarp pet_ability_key = BB_MAGICARP_SPELL /datum/ai_planning_subtree/attack_obstacle_in_path/carp @@ -16,18 +16,18 @@ /// Interrupt your attack chain if: you have a spell, it's not on cooldown, and it has a target /datum/ai_behavior/basic_melee_attack/magicarp -/datum/ai_behavior/basic_melee_attack/magicarp/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key, health_ratio_key) +/datum/ai_behavior/basic_melee_attack/magicarp/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, health_ratio_key) var/datum/action/cooldown/using_action = controller.blackboard[BB_MAGICARP_SPELL] if (QDELETED(using_action)) return ..() - if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETTING] && using_action.IsAvailable()) + if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] && using_action.IsAvailable()) finish_action(controller, succeeded = FALSE) return return ..() /** * Find a target for the magicarp's spell - * This gets weird because different spells want different targetting + * This gets weird because different spells want different targeting * but I didn't want a new ai controller for every different spell */ /datum/ai_planning_subtree/find_nearest_magicarp_spell_target @@ -37,12 +37,12 @@ if (!using_action?.IsAvailable()) return - var/spell_targetting = controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETTING] - if (!spell_targetting) - controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest/magicarp, BB_MAGICARP_SPELL_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + var/spell_targeting = controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] + if (!spell_targeting) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest/magicarp, BB_MAGICARP_SPELL_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return - switch(spell_targetting) + switch(spell_targeting) if (MAGICARP_SPELL_CORPSES) controller.queue_behavior(/datum/ai_behavior/find_and_set/friendly_corpses, BB_MAGICARP_SPELL_TARGET, MAGICARP_SPELL_TARGET_SEEK_RANGE) return diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm index 5bf664d1687..0befb20987c 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm @@ -10,8 +10,8 @@ /datum/ai_controller/basic_controller/carp blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -37,8 +37,8 @@ /datum/ai_controller/basic_controller/carp/pet blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED planning_subtrees = list( @@ -81,8 +81,8 @@ /datum/ai_controller/basic_controller/carp/passive blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED planning_subtrees = list( diff --git a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm index 32f02b880db..65d16cfb490 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm @@ -56,8 +56,8 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( /datum/pet_command/idle, /datum/pet_command/free, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack, - /datum/pet_command/point_targetting/use_ability/magicarp, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/point_targeting/use_ability/magicarp, ) /// List of all projectiles we can fire. /// Non-static, because subtypes can have their own lists. @@ -91,15 +91,15 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( ai_controller.set_blackboard_key(BB_MAGICARP_SPELL, spell) assign_spell_ai(spell_type) -/// If you have certain spells, use a different targetting datum +/// If you have certain spells, use a different targeting strategy /mob/living/basic/carp/magic/proc/assign_spell_ai(spell_type) - var/static/list/spell_special_targetting = list( + var/static/list/spell_special_targeting = list( /obj/projectile/magic/animate = MAGICARP_SPELL_OBJECTS, /obj/projectile/magic/door = MAGICARP_SPELL_WALLS, /obj/projectile/magic/resurrection = MAGICARP_SPELL_CORPSES, ) - ai_controller.set_blackboard_key(BB_MAGICARP_SPELL_SPECIAL_TARGETTING, spell_special_targetting[spell_type]) + ai_controller.set_blackboard_key(BB_MAGICARP_SPELL_SPECIAL_TARGETING, spell_special_targeting[spell_type]) /// Shoot when you click away from you /mob/living/basic/carp/magic/RangedAttack(atom/atom_target, modifiers) diff --git a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm index 487727fb53c..02faf7c2cc9 100644 --- a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm +++ b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm @@ -64,7 +64,7 @@ /datum/ai_controller/basic_controller/cat_butcherer blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm b/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm index a64250d891c..606df8f136f 100644 --- a/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/changeling/flesh_spider.dm @@ -63,13 +63,12 @@ outline_colour = COLOR_PINK,\ ) - var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new(src) - webbing.webbing_time *= 0.7 - webbing.Grant(src) - ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web = BB_SPIDER_WEB_ACTION, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web = null, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes = null, + ) + grant_actions_by_list(innate_actions) - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) +/datum/action/cooldown/mob_cooldown/lay_web/flesh + webbing_time = 3 SECONDS diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm index ed3c131949d..d8c419ea2e3 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm @@ -37,8 +37,7 @@ /mob/living/basic/demon/slaughter/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon/crawl = new crawl_type(src) - crawl.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/jaunt/bloodcrawl/slaughter_demon) RegisterSignal(src, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attack)) RegisterSignals(src, list(COMSIG_MOB_ENTER_JAUNT, COMSIG_MOB_AFTER_EXIT_JAUNT), PROC_REF(on_crawl)) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm index 47e43704079..b72815d8325 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm @@ -52,9 +52,11 @@ /mob/living/basic/eyeball/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/pointed/death_glare/glare = new(src) - glare.Grant(src) - ai_controller.set_blackboard_key(BB_GLARE_ABILITY, glare) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/pointed/death_glare = BB_GLARE_ABILITY + ) + grant_actions_by_list(innate_actions) + AddElement(/datum/element/simple_flying) AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/carrot), tame_chance = 100, after_tame = CALLBACK(src, PROC_REF(on_tame))) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm index b3033b27a4b..29ea1dfc352 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/eyeball blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/eyeball, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/eyeball, BB_EYE_DAMAGE_THRESHOLD = 10, ) @@ -22,7 +22,7 @@ return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_the_blind, BB_BLIND_TARGET, BB_EYE_DAMAGE_THRESHOLD) -/datum/targetting_datum/basic/eyeball/can_attack(mob/living/owner, atom/target, vision_range) +/datum/targeting_strategy/basic/eyeball/can_attack(mob/living/owner, atom/target, vision_range) . = ..() if(!.) return FALSE diff --git a/code/modules/mob/living/basic/space_fauna/faithless.dm b/code/modules/mob/living/basic/space_fauna/faithless.dm index 5cfdd4b47b6..39f5652d1a0 100644 --- a/code/modules/mob/living/basic/space_fauna/faithless.dm +++ b/code/modules/mob/living/basic/space_fauna/faithless.dm @@ -55,7 +55,7 @@ /datum/ai_controller/basic_controller/faithless blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, BB_LOW_PRIORITY_HUNTING_TARGET = null, // lights ) diff --git a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm index d9dfc3c5343..40debc7622b 100644 --- a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm +++ b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm @@ -125,7 +125,7 @@ /datum/ai_controller/basic_controller/garden_gnome blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index ad79fefc3e6..981357d1a13 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -94,7 +94,7 @@ /datum/ai_controller/basic_controller/ghost blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm index db0d310a71c..d914e0589c4 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm @@ -95,8 +95,7 @@ /mob/living/basic/hivebot/mechanic/Initialize(mapload) . = ..() - var/datum/action/cooldown/spell/conjure/foam_wall/foam = new(src) - foam.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/conjure/foam_wall) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) /mob/living/basic/hivebot/mechanic/proc/pre_attack(mob/living/fixer, atom/target) diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm index 5bd957a7609..067b0a03c13 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/hivebot blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm index a3fd64eb798..c859289b56d 100644 --- a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm +++ b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm @@ -42,7 +42,7 @@ /datum/ai_controller/basic_controller/killer_tomato blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/lightgeist.dm b/code/modules/mob/living/basic/space_fauna/lightgeist.dm index 9ab6ffe6778..5847b2b6d77 100644 --- a/code/modules/mob/living/basic/space_fauna/lightgeist.dm +++ b/code/modules/mob/living/basic/space_fauna/lightgeist.dm @@ -78,7 +78,7 @@ /datum/ai_controller/basic_controller/lightgeist blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/lightgeist, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/lightgeist, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -91,13 +91,13 @@ ) /// Attack only mobs who have damage that we can heal, I think this is specific enough not to be a generic type -/datum/targetting_datum/lightgeist +/datum/targeting_strategy/lightgeist /// Types of mobs we can heal, not in a blackboard key because there is no point changing this at runtime because the component will already exist var/heal_biotypes = MOB_ORGANIC | MOB_MINERAL /// Type of limb we can heal var/required_bodytype = BODYTYPE_ORGANIC -/datum/targetting_datum/lightgeist/can_attack(mob/living/living_mob, mob/living/target, vision_range) +/datum/targeting_strategy/lightgeist/can_attack(mob/living/living_mob, mob/living/target, vision_range) if (!isliving(target) || target.stat == DEAD) return FALSE if (!(heal_biotypes & target.mob_biotypes)) diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm index 6a41993526e..72f2001011c 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart.dm @@ -2,6 +2,8 @@ #define HEARTBEAT_FAST (0.6 SECONDS) #define HEARTBEAT_FRANTIC (0.4 SECONDS) +#define SPIKES_ABILITY_TYPEPATH /datum/action/cooldown/mob_cooldown/chasing_spikes + /mob/living/basic/meteor_heart name = "meteor heart" desc = "A pulsing lump of flesh and bone growing directly out of the ground." @@ -25,10 +27,7 @@ maximum_survivable_temperature = 1500 combat_mode = TRUE move_resist = INFINITY // This mob IS the floor - /// Action which sends a line of spikes chasing a player - var/datum/action/cooldown/mob_cooldown/chasing_spikes/spikes - /// Action which summons areas the player can't stand in - var/datum/action/cooldown/mob_cooldown/spine_traps/traps + /// Looping heartbeat sound var/datum/looping_sound/heartbeat/soundloop @@ -39,14 +38,11 @@ AddElement(/datum/element/death_drops, death_loot) AddElement(/datum/element/relay_attackers) - spikes = new(src) - spikes.Grant(src) - ai_controller.set_blackboard_key(BB_METEOR_HEART_GROUND_SPIKES, spikes) - - traps = new(src) - traps.Grant(src) - ai_controller.set_blackboard_key(BB_METEOR_HEART_SPINE_TRAPS, traps) - + var/static/list/innate_actions = list( + SPIKES_ABILITY_TYPEPATH = BB_METEOR_HEART_GROUND_SPIKES, + /datum/action/cooldown/mob_cooldown/spine_traps = BB_METEOR_HEART_SPINE_TRAPS, + ) + grant_actions_by_list(innate_actions) ai_controller.set_ai_status(AI_STATUS_OFF) RegisterSignal(src, COMSIG_MOB_ABILITY_FINISHED, PROC_REF(used_ability)) @@ -60,12 +56,13 @@ soundloop.pressure_affected = FALSE soundloop.start() - - AddComponent(/datum/component/bloody_spreader,\ + AddComponent(\ + /datum/component/bloody_spreader,\ blood_left = INFINITY,\ blood_dna = list("meaty DNA" = "MT-"),\ diseases = null,\ ) + /// Called when we get mad at something, either for attacking us or attacking the nearby area /mob/living/basic/meteor_heart/proc/aggro() if (ai_controller.ai_status == AI_STATUS_ON) @@ -85,13 +82,11 @@ /// Animate when using certain abilities /mob/living/basic/meteor_heart/proc/used_ability(mob/living/owner, datum/action/cooldown/mob_cooldown/ability) SIGNAL_HANDLER - if (ability != spikes) + if(!istype(ability, SPIKES_ABILITY_TYPEPATH)) return Shake(1, 0, 1.5 SECONDS) /mob/living/basic/meteor_heart/Destroy() - QDEL_NULL(spikes) - QDEL_NULL(traps) QDEL_NULL(soundloop) return ..() @@ -136,3 +131,5 @@ #undef HEARTBEAT_NORMAL #undef HEARTBEAT_FAST #undef HEARTBEAT_FRANTIC + +#undef SPIKES_ABILITY_TYPEPATH diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm index 7684011bd66..09659956c58 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm @@ -1,7 +1,7 @@ /// A spellcasting AI which does not move /datum/ai_controller/basic_controller/meteor_heart blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGETLESS_TIME = 0, ) diff --git a/code/modules/mob/living/basic/space_fauna/morph.dm b/code/modules/mob/living/basic/space_fauna/morph.dm index 32115d05602..22cce322b13 100644 --- a/code/modules/mob/living/basic/space_fauna/morph.dm +++ b/code/modules/mob/living/basic/space_fauna/morph.dm @@ -200,7 +200,7 @@ /// Only real human-powered intelligence is capable of playing prop hunt in SS13 (until further notice). /datum/ai_controller/basic_controller/morph blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index 056a4558081..b45c2714d4a 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -57,7 +57,7 @@ /datum/ai_controller/basic_controller/mushroom blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/mushroom, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/mushroom, BB_TARGET_MINIMUM_STAT = DEAD, ) @@ -70,10 +70,10 @@ ) -/datum/targetting_datum/basic/mushroom +/datum/targeting_strategy/basic/mushroom ///we only attacked another mushrooms -/datum/targetting_datum/basic/mushroom/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) +/datum/targeting_strategy/basic/mushroom/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) return !living_mob.faction_check_atom(the_target, exact_match = check_factions_exactly) /datum/ai_planning_subtree/find_and_hunt_target/mushroom_food diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm index cdde6ad05e4..c55376c4fcc 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -39,8 +39,7 @@ min_health_slowdown = -1.5,\ ) - var/datum/action/cooldown/spell/jaunt/creature_teleport/teleport = new(src) - teleport.Grant(src) + GRANT_ACTION(/datum/action/cooldown/spell/jaunt/creature_teleport) /mob/living/basic/creature/proc/can_be_seen(turf/location) // Check for darkness diff --git a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm index 519e8ba1a73..720e0c031c0 100644 --- a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm +++ b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm @@ -36,24 +36,19 @@ AddElement(/datum/element/effect_trail, /obj/effect/temp_visual/paper_scatter) /mob/living/basic/paper_wizard/proc/grant_abilities() - summon = new(src) - summon.Grant(src) - ai_controller.set_blackboard_key(BB_WIZARD_SUMMON_MINIONS, summon) - mimic = new(src) - mimic.Grant(src) - ai_controller.set_blackboard_key(BB_WIZARD_MIMICS, mimic) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/conjure/wizard_summon_minions = BB_WIZARD_SUMMON_MINIONS, + /datum/action/cooldown/spell/pointed/wizard_mimic = BB_WIZARD_MIMICS, + ) + + grant_actions_by_list(innate_actions) /mob/living/basic/paper_wizard/proc/grant_loot() AddElement(/datum/element/death_drops, dropped_loot) -/mob/living/basic/paper_wizard/Destroy() - QDEL_NULL(summon) - QDEL_NULL(mimic) - return ..() - /datum/ai_controller/basic_controller/paper_wizard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_WRITING_LIST = list( "I can turn the paper into gold and ink into diamonds!", "Your fate is written and sealed!", diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm index 24e53b3bf44..3602d5e8a99 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm @@ -64,13 +64,18 @@ after_assumed_control = CALLBACK(src, PROC_REF(became_player_controlled)),\ ) - var/datum/action/cooldown/mob_cooldown/domain/domain = new(src) - domain.Grant(src) - ai_controller.set_blackboard_key(BB_DOMAIN_ABILITY, domain) + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/domain = BB_DOMAIN_ABILITY, + /datum/action/cooldown/mob_cooldown/riot = BB_RAISE_HORDE_ABILITY, + ) - var/datum/action/cooldown/mob_cooldown/riot/riot = new(src) - riot.Grant(src) - ai_controller.set_blackboard_key(BB_RAISE_HORDE_ABILITY, riot) + grant_actions_by_list(innate_actions) + +/mob/living/basic/regal_rat/death(gibbed) + var/datum/component/potential_component = GetComponent(/datum/component/ghost_direct_control) + if(!QDELETED(potential_component)) + qdel(potential_component) + return ..() /mob/living/basic/regal_rat/examine(mob/user) . = ..() @@ -103,9 +108,8 @@ notify_ghosts( "All rise for [name], ascendant to the throne in \the [get_area(src)].", source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, header = "Sentient Rat Created", + notify_flags = NOTIFY_CATEGORY_NOFLASH, ) /// Supplementary work we do when we login. Done this way so we synchronize with the ai controller shutting off and all that jazz as well as allowing more shit to be passed in if need be in future. diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm index e617ae0a670..1ab7bd36594 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm @@ -56,7 +56,7 @@ /datum/pet_command/free, /datum/pet_command/protect_owner, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/mouse + /datum/pet_command/point_targeting/attack/mouse ) /// Commands you can give to glockroaches var/static/list/glockroach_commands = list( @@ -64,7 +64,7 @@ /datum/pet_command/free, /datum/pet_command/protect_owner/glockroach, /datum/pet_command/follow, - /datum/pet_command/point_targetting/attack/glockroach + /datum/pet_command/point_targeting/attack/glockroach ) /datum/action/cooldown/mob_cooldown/riot/Activate(atom/target) @@ -193,7 +193,7 @@ return TRUE // Command you can give to a mouse to make it kill someone -/datum/pet_command/point_targetting/attack/mouse +/datum/pet_command/point_targeting/attack/mouse speech_commands = list("attack", "sic", "kill", "cheese em") command_feedback = "squeak!" // Frogs and roaches can squeak too it's fine pointed_reaction = "and squeaks aggressively" @@ -201,7 +201,7 @@ attack_behaviour = /datum/ai_behavior/basic_melee_attack // Command you can give to a mouse to make it kill someone -/datum/pet_command/point_targetting/attack/glockroach +/datum/pet_command/point_targeting/attack/glockroach speech_commands = list("attack", "sic", "kill", "cheese em") command_feedback = "squeak!" pointed_reaction = "and cocks its gun" diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm index 8a7013b9623..073029bef3c 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm @@ -1,7 +1,7 @@ /datum/ai_controller/basic_controller/regal_rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 856b5820b98..6da3352c9d6 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -97,9 +97,7 @@ AddElement(/datum/element/simple_flying) add_traits(list(TRAIT_SPACEWALK, TRAIT_SIXTHSENSE, TRAIT_FREE_HYPERSPACE_MOVEMENT), INNATE_TRAIT) - for(var/ability in abilities) - var/datum/action/spell = new ability(src) - spell.Grant(src) + grant_actions_by_list(abilities) RegisterSignal(src, COMSIG_LIVING_BANED, PROC_REF(on_baned)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) diff --git a/code/modules/mob/living/basic/space_fauna/snake/snake.dm b/code/modules/mob/living/basic/space_fauna/snake/snake.dm index 164752e277d..7a30d713a4d 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake.dm @@ -50,7 +50,7 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_SNAKE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) AddElement(/datum/element/basic_eating, heal_amt = 2, food_types = edibles) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) AddComponent(\ /datum/component/tameable,\ @@ -71,7 +71,7 @@ /// Snakes are primarily concerned with getting those tasty, tasty mice, but aren't afraid to strike back at those who attack them /datum/ai_controller/basic_controller/snake blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index 50c54da6c9b..547e35cf413 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -63,7 +63,7 @@ add_traits(list(TRAIT_SPACEWALK, TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_NO_FLOATING_ANIM, TRAIT_HEALS_FROM_CARP_RIFTS), INNATE_TRAIT) AddElement(/datum/element/simple_flying) AddElement(/datum/element/content_barfer) - AddElement(/datum/element/wall_tearer, do_after_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) + AddElement(/datum/element/wall_tearer, tear_time = 4 SECONDS, reinforced_multiplier = 3, do_after_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddElement(/datum/element/door_pryer, pry_time = 4 SECONDS, interaction_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddComponent(/datum/component/seethrough_mob) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) @@ -76,11 +76,6 @@ buffet = new(src) buffet.Grant(src) -/mob/living/basic/space_dragon/Destroy() - QDEL_NULL(fire_breath) - QDEL_NULL(buffet) - return ..() - /mob/living/basic/space_dragon/Login() . = ..() if(!isnull(chosen_colour)) diff --git a/code/modules/mob/living/basic/space_fauna/spaceman.dm b/code/modules/mob/living/basic/space_fauna/spaceman.dm index 5851bfa531b..8a9ba36287a 100644 --- a/code/modules/mob/living/basic/space_fauna/spaceman.dm +++ b/code/modules/mob/living/basic/space_fauna/spaceman.dm @@ -32,7 +32,7 @@ /datum/ai_controller/basic_controller/spaceman blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm index 7dd61b72070..ae971fd2558 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm @@ -1,7 +1,7 @@ /// Attacks people it can see, spins webs if it can't see anything to attack. /datum/ai_controller/basic_controller/giant_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED | PAUSE_DURING_DO_AFTER @@ -30,7 +30,7 @@ /// Used by Araneus, who only attacks those who attack first. He is house-trained and will not web up the HoS office. /datum/ai_controller/basic_controller/giant_spider/retaliate blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( @@ -43,8 +43,8 @@ /// Retaliates, hunts other maintenance creatures, runs away from larger attackers, and spins webs. /datum/ai_controller/basic_controller/giant_spider/pest blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller(), // Hunt mobs our size - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/larger(), // Run away from mobs bigger than we are + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, // Hunt mobs our size + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/larger, // Run away from mobs bigger than we are ) idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm index 5db32316753..ffcb1ae7aac 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm @@ -19,7 +19,12 @@ melee_damage_upper = 25 gold_core_spawnable = HOSTILE_SPAWN ai_controller = /datum/ai_controller/basic_controller/giant_spider + /// Actions to grant on Initialize + var/list/innate_actions = null +/mob/living/basic/spider/giant/Initialize(mapload) + . = ..() + grant_actions_by_list(innate_actions) /** * ### Ambush Spider @@ -42,7 +47,8 @@ melee_damage_upper = 30 speed = 5 player_speed_modifier = -3.1 - menu_description = "Slow spider, with a strong disarming pull and above avarage health and damage." + menu_description = "Slow spider, with a strong disarming pull and above average health and damage." + innate_actions = list(/datum/action/cooldown/mob_cooldown/sneak/spider) /mob/living/basic/spider/giant/ambush/Initialize(mapload) . = ..() @@ -50,9 +56,6 @@ AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) - var/datum/action/cooldown/mob_cooldown/sneak/spider/sneak_web = new(src) - sneak_web.Grant(src) - /** * ### Guard Spider * A subtype of the giant spider which is similar on every single way, @@ -74,13 +77,11 @@ speed = 5 player_speed_modifier = -4 menu_description = "Tanky and strong able to shed a carcass for protection." + innate_actions = list(/datum/action/cooldown/mob_cooldown/web_effigy) /mob/living/basic/spider/giant/guard/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) - var/datum/action/cooldown/mob_cooldown/web_effigy/shed = new(src) - shed.Grant(src) /** * ### Hunter Spider @@ -105,9 +106,11 @@ /mob/living/basic/spider/giant/hunter/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web) +/mob/living/basic/spider/giant/hunter/mold //skyrat edit: exists to make molds not spam the world with simple mobs + basic_mob_flags = DEL_ON_DEATH + /** * ### Scout Spider * A subtype of the giant spider which is faster, has thermal vision, but less health and damage. @@ -131,14 +134,12 @@ player_speed_modifier = -3.1 sight = SEE_SELF|SEE_MOBS menu_description = "Fast spider able to see enemies through walls, send messages to the nest and the ability to travel in vents." + innate_actions = list(/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders) /mob/living/basic/spider/giant/scout/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - var/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/spiders_communication = new(src) - spiders_communication.Grant(src) - /** * ### Nurse Spider * @@ -210,21 +211,16 @@ speed = 4 player_speed_modifier = -3.1 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer - menu_description = "Avarage speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health." + menu_description = "Average speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + ) /mob/living/basic/spider/giant/tangle/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src) - web_solid.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src) - passage_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) @@ -232,7 +228,7 @@ heal_brute = 15,\ heal_burn = 15,\ heal_time = 3 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tangle, /mob/living/basic/spider/giant/tangle)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -282,7 +278,7 @@ heal_brute = 50,\ heal_burn = 50,\ heal_time = 5 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -335,7 +331,7 @@ var/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/spiders_warning = new(src) spiders_warning.Grant(src) - AddElement(/datum/element/tear_wall) + AddElement(/datum/element/wall_tearer) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web) /** @@ -364,7 +360,12 @@ web_speed = 0.7 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup." - /// Charging ability + innate_actions = list( + /datum/action/cooldown/mob_cooldown/charge/basic_charge, + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + ) + /// Charging ability, kept seperate from innate_actions due to implementation details var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge /mob/living/basic/spider/giant/tarantula/Initialize(mapload) @@ -405,15 +406,14 @@ player_speed_modifier = -2.5 gold_core_spawnable = NO_SPAWN menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/defensive_mode, + ) /mob/living/basic/spider/giant/viper/Initialize(mapload) . = ..() - AddElement(/datum/element/bonus_damage) - var/datum/action/cooldown/mob_cooldown/defensive_mode/defensive_action = new(src) - defensive_action.Grant(src) - /** * ### Spider Broodmother * @@ -440,38 +440,21 @@ web_speed = 0.5 web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer menu_description = "Royal spider variant specializing in reproduction and leadership, deals low damage." + innate_actions = list( + /datum/action/cooldown/mob_cooldown/command_spiders, + /datum/action/cooldown/mob_cooldown/lay_eggs, + /datum/action/cooldown/mob_cooldown/lay_eggs/abnormal, + /datum/action/cooldown/mob_cooldown/lay_eggs/enriched, + /datum/action/cooldown/mob_cooldown/lay_web/solid_web, + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_passage, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + /datum/action/cooldown/mob_cooldown/set_spider_directive, + /datum/action/cooldown/mob_cooldown/wrap, + ) /mob/living/basic/spider/giant/midwife/Initialize(mapload) . = ..() - var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src) - web_solid.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src) - passage_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) - - var/datum/action/cooldown/mob_cooldown/wrap/wrapping = new(src) - wrapping.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs_tier1 = new(src) - make_eggs_tier1.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal/make_eggs_tier2 = new(src) - make_eggs_tier2.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_eggs_tier3 = new(src) - make_eggs_tier3.Grant(src) - - var/datum/action/cooldown/mob_cooldown/set_spider_directive/give_orders = new(src) - give_orders.Grant(src) - - var/datum/action/cooldown/mob_cooldown/command_spiders/not_hivemind_talk = new(src) - not_hivemind_talk.Grant(src) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) @@ -586,18 +569,15 @@ unsuitable_heat_damage = 1 menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl." apply_spider_antag = FALSE + innate_actions = list( + /datum/action/cooldown/mob_cooldown/lay_web/sticky_web, + /datum/action/cooldown/mob_cooldown/lay_web/web_spikes, + ) /mob/living/basic/spider/giant/viper/wizard/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src) - spikes_web.Grant(src) - - var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src) - web_sticky.Grant(src) - - /** * ### Sergeant Araneus * diff --git a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm index f36b1bc46ba..2bce05b1a61 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm @@ -61,7 +61,7 @@ /// Opportunistically hops in and out of vents, if it can find one. We aren't interested in attacking due to how weak we are, we gotta be quick and hidey. /datum/ai_controller/basic_controller/spiderling blackboard = list( - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/larger, // Run away from mobs bigger than we are + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/larger, // Run away from mobs bigger than we are BB_VENTCRAWL_COOLDOWN = 20 SECONDS, // enough time to get splatted while we're out in the open. BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm index bdaf7d03faa..8c17833c0c7 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm @@ -29,7 +29,7 @@ /// Used by all young spiders if they ever appear. /datum/ai_controller/basic_controller/young_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_FLEE_DISTANCE = 6, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm index de44bc74180..3a9bad4e75f 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider_subtypes.dm @@ -32,10 +32,9 @@ /mob/living/basic/spider/growing/young/ambush/Initialize(mapload) . = ..() - AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) - var/datum/action/cooldown/mob_cooldown/sneak/spider/sneak_web = new(src) - sneak_web.Grant(src) + GRANT_ACTION(/datum/action/cooldown/mob_cooldown/sneak/spider) + AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web) /// Will differentiate into the "scout" giant spider. /mob/living/basic/spider/growing/young/scout @@ -136,7 +135,7 @@ heal_brute = 10,\ heal_burn = 10,\ heal_time = 3 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tangle, /mob/living/basic/spider/giant/tangle)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ @@ -175,7 +174,7 @@ heal_brute = 5,\ heal_burn = 5,\ heal_time = 2 SECONDS,\ - self_targetting = HEALING_TOUCH_SELF_ONLY,\ + self_targeting = HEALING_TOUCH_SELF_ONLY,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\ extra_checks = CALLBACK(src, PROC_REF(can_mend)),\ diff --git a/code/modules/mob/living/basic/space_fauna/statue/statue.dm b/code/modules/mob/living/basic/space_fauna/statue/statue.dm index d2ea5e8a831..801aa271d91 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/statue.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/statue.dm @@ -56,14 +56,14 @@ /mob/living/basic/statue/Initialize(mapload, mob/living/creator) . = ..() - AddComponent(/datum/component/unobserved_actor, unobserved_flags = NO_OBSERVED_MOVEMENT | NO_OBSERVED_ATTACKS) ADD_TRAIT(src, TRAIT_UNOBSERVANT, INNATE_TRAIT) + AddComponent(/datum/component/unobserved_actor, unobserved_flags = NO_OBSERVED_MOVEMENT | NO_OBSERVED_ATTACKS) - // Give spells - var/datum/action/cooldown/spell/aoe/flicker_lights/flicker = new(src) - flicker.Grant(src) - var/datum/action/cooldown/spell/aoe/blindness/blind = new(src) - blind.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/blindness, + /datum/action/cooldown/spell/aoe/flicker_lights, + ) + grant_actions_by_list(innate_actions) // Set creator if(creator) @@ -141,7 +141,7 @@ /datum/ai_controller/basic_controller/statue blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_LOW_PRIORITY_HUNTING_TARGET = null, // lights ) diff --git a/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm b/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm index 2a3ba326eac..02fd9ed1bcf 100644 --- a/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/supermatter_spider.dm @@ -82,7 +82,7 @@ /datum/ai_controller/basic_controller/supermatter_spider blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm index 63eb39c74e6..98daeb6d8c2 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm @@ -15,7 +15,7 @@ if(fugu_blacklist) return fugu_blacklist = typecacheof(list( - /mob/living/simple_animal/hostile/guardian, + /mob/living/basic/guardian, )) /obj/item/fugu_gland/afterattack(atom/target, mob/user, proximity_flag) @@ -38,6 +38,6 @@ animal.melee_damage_lower = max((animal.melee_damage_lower * 2), 10) animal.melee_damage_upper = max((animal.melee_damage_upper * 2), 10) animal.transform *= 2 - animal.AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_RWALLS) + AddElement(/datum/element/wall_tearer) to_chat(user, span_info("You increase the size of [animal], giving [animal.p_them()] a surge of strength!")) qdel(src) diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm index a9e2b538bdd..70b3506527a 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm @@ -58,7 +58,7 @@ RegisterSignal(fugu, COMSIG_MOB_STATCHANGE, PROC_REF(check_death)) fugu.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) ADD_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) - fugu.AddElement(/datum/element/wall_smasher) + fugu.AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_LARGE fugu.icon_state = "Fugu1" fugu.melee_damage_lower = 15 @@ -76,7 +76,7 @@ UnregisterSignal(fugu, COMSIG_MOB_STATCHANGE) fugu.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) REMOVE_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) - fugu.RemoveElement(/datum/element/wall_smasher) + fugu.RemoveElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_SMALL fugu.melee_damage_lower = 0 fugu.melee_damage_upper = 0 diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm index e405ee3755a..1b4e2cdd620 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm @@ -1,7 +1,7 @@ /// Cowardly when small, aggressive when big. Tries to transform whenever possible. /datum/ai_controller/basic_controller/wumborian_fugu blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/trader/trader_ai.dm b/code/modules/mob/living/basic/trader/trader_ai.dm index d6cf0095c7d..5f447ab3229 100644 --- a/code/modules/mob/living/basic/trader/trader_ai.dm +++ b/code/modules/mob/living/basic/trader/trader_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/trader blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index 2a0806b105c..3f3894f190b 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -56,7 +56,7 @@ . = ..() AddComponent(/datum/component/seethrough_mob) AddElement(/datum/element/swabable, CELL_LINE_TABLE_PINE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - var/static/list/death_loot = list(/obj/item/stack/sheet/mineral/wood) + var/list/death_loot = string_list(list(/obj/item/stack/sheet/mineral/wood)) AddElement(/datum/element/death_drops, death_loot) AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) @@ -100,7 +100,7 @@ /datum/ai_controller/basic_controller/tree blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/trooper/nanotrasen.dm b/code/modules/mob/living/basic/trooper/nanotrasen.dm index 7dfab5298c2..6da3d2d9fb2 100644 --- a/code/modules/mob/living/basic/trooper/nanotrasen.dm +++ b/code/modules/mob/living/basic/trooper/nanotrasen.dm @@ -34,6 +34,8 @@ cooldown_time = ranged_cooldown,\ burst_shots = burst_shots,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /mob/living/basic/trooper/nanotrasen/ranged/smg ai_controller = /datum/ai_controller/basic_controller/trooper/ranged/burst diff --git a/code/modules/mob/living/basic/trooper/syndicate.dm b/code/modules/mob/living/basic/trooper/syndicate.dm index 7075e293add..76ad808ceb3 100644 --- a/code/modules/mob/living/basic/trooper/syndicate.dm +++ b/code/modules/mob/living/basic/trooper/syndicate.dm @@ -121,6 +121,8 @@ cooldown_time = ranged_cooldown,\ burst_shots = burst_shots,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /mob/living/basic/trooper/syndicate/ranged/infiltrator //shuttle loan event projectilesound = 'sound/weapons/gun/smg/shot_suppressed.ogg' diff --git a/code/modules/mob/living/basic/trooper/trooper_ai.dm b/code/modules/mob/living/basic/trooper/trooper_ai.dm index 3b89807ea62..cf71b38f45b 100644 --- a/code/modules/mob/living/basic/trooper/trooper_ai.dm +++ b/code/modules/mob/living/basic/trooper/trooper_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/trooper blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_REINFORCEMENTS_SAY = "411 in progress, requesting backup!" ) @@ -90,10 +90,10 @@ /datum/ai_behavior/basic_ranged_attack/trooper_shotgun action_cooldown = 3 SECONDS - required_distance = 1 + required_distance = 3 avoid_friendly_fire = TRUE /datum/ai_controller/basic_controller/trooper/viscerator blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index 639a9720dbc..595ef0b37d7 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -60,8 +60,8 @@ /datum/ai_controller/basic_controller/cockroach blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -106,6 +106,8 @@ burst_shots = burst_shots,\ cooldown_time = ranged_cooldown,\ ) + if (ranged_cooldown <= 1 SECONDS) + AddComponent(/datum/component/ranged_mob_full_auto) /datum/ai_controller/basic_controller/cockroach/glockroach planning_subtrees = list( diff --git a/code/modules/mob/living/basic/vermin/crab.dm b/code/modules/mob/living/basic/vermin/crab.dm index bb81fd29c4d..3dd3d0db0fe 100644 --- a/code/modules/mob/living/basic/vermin/crab.dm +++ b/code/modules/mob/living/basic/vermin/crab.dm @@ -78,8 +78,8 @@ /datum/ai_controller/basic_controller/crab blackboard = list( BB_ALWAYS_IGNORE_FACTION = TRUE, - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/of_size/ours_or_smaller, - BB_FLEE_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -92,4 +92,5 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/crab, + /datum/ai_planning_subtree/go_for_swim, ) diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm index 7ff5260ccb7..162848d062a 100644 --- a/code/modules/mob/living/basic/vermin/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -75,10 +75,27 @@ if(L.mob_size > MOB_SIZE_TINY) playsound(src, stepped_sound, 50, TRUE) +/mob/living/basic/frog/frog_suicide + name = "suicide frog" + desc = "Driven by sheer will." + icon_state = "frog_trash" + icon_living = "frog_trash" + icon_dead = "frog_trash_dead" + maxHealth = 5 + health = 5 + ai_controller = /datum/ai_controller/basic_controller/frog/suicide_frog + ///how long do we exist for + var/existence_period = 15 SECONDS + +/mob/living/basic/frog/frog_suicide/Initialize(mapload) + . = ..() + AddComponent(/datum/component/explode_on_attack, mob_type_dont_bomb = typecacheof(list(/mob/living/basic/frog, /mob/living/basic/leaper))) + addtimer(CALLBACK(src, PROC_REF(death)), existence_period) + /datum/ai_controller/basic_controller/frog blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -87,6 +104,7 @@ /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/random_speech/frog, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/go_for_swim, ) /datum/ai_controller/basic_controller/frog/trash @@ -96,3 +114,9 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) + +/datum/ai_controller/basic_controller/frog/suicide_frog + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) diff --git a/code/modules/mob/living/basic/vermin/lizard.dm b/code/modules/mob/living/basic/vermin/lizard.dm index d1a30826f4a..da68087d70f 100644 --- a/code/modules/mob/living/basic/vermin/lizard.dm +++ b/code/modules/mob/living/basic/vermin/lizard.dm @@ -51,11 +51,11 @@ ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/pet_bonus, "sticks its tongue out contentedly!") AddElement(/datum/element/basic_eating, heal_amt = 5, food_types = edibles) - ai_controller.set_blackboard_key(BB_BASIC_FOODS, edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) /datum/ai_controller/basic_controller/lizard blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 2929085fb93..c1ba3c12e36 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -379,7 +379,7 @@ blackboard = list( // Always cowardly BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), // Use this to find people to run away from + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find people to run away from BB_BASIC_MOB_FLEE_DISTANCE = 3, ) @@ -411,8 +411,8 @@ /// AI controller for rats, slightly more complex than mice becuase they attack people /datum/ai_controller/basic_controller/mouse/rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_BASIC_MOB_CURRENT_TARGET = null, // heathen BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable diff --git a/code/modules/mob/living/basic/vermin/space_bat.dm b/code/modules/mob/living/basic/vermin/space_bat.dm index 232febf0f97..24718c8481a 100644 --- a/code/modules/mob/living/basic/vermin/space_bat.dm +++ b/code/modules/mob/living/basic/vermin/space_bat.dm @@ -42,7 +42,7 @@ ///Controller for space bats, has nothing unique, just retaliation. /datum/ai_controller/basic_controller/space_bat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/brain/brain_cybernetic.dm b/code/modules/mob/living/brain/brain_cybernetic.dm new file mode 100644 index 00000000000..d87b6d90283 --- /dev/null +++ b/code/modules/mob/living/brain/brain_cybernetic.dm @@ -0,0 +1,59 @@ +/obj/item/organ/internal/brain/cybernetic + name = "cybernetic brain" + desc = "A mechanical brain found inside of androids. Not to be confused with a positronic brain." + icon_state = "brain-c" + organ_flags = ORGAN_ROBOTIC | ORGAN_VITAL + failing_desc = "seems to be broken, and will not work without repairs." + +/obj/item/organ/internal/brain/cybernetic/brain_damage_examine() + if(suicided) + return span_info("Its circuitry is smoking slightly. They must not have been able to handle the stress of it all.") + if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost())) + if(organ_flags & ORGAN_FAILING) + return span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to repair it with a multitool.") + else if(damage >= BRAIN_DAMAGE_DEATH*0.5) + return span_info("You can feel the small spark of life still left in this one, but it's got some dents. You may be able to restore it with a multitool.") + else + return span_info("You can feel the small spark of life still left in this one.") + else + return span_info("This one is completely devoid of life.") + +/obj/item/organ/internal/brain/cybernetic/check_for_repair(obj/item/item, mob/user) + if (item.tool_behaviour == TOOL_MULTITOOL) //attempt to repair the brain + if (brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing + to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) + return TRUE + + if (DOING_INTERACTION(user, src)) + to_chat(user, span_warning("you're already repairing [src]!")) + return TRUE + + user.visible_message(span_notice("[user] slowly starts to repair [src] with [item]."), span_notice("You slowly start to repair [src] with [item].")) + var/did_repair = FALSE + while(damage > 0) + if(item.use_tool(src, user, 3 SECONDS, volume = 50)) + did_repair = TRUE + set_organ_damage(max(0, damage - 20)) + else + break + + if (did_repair) + if (damage > 0) + user.visible_message(span_notice("[user] partially repairs [src] with [item]."), span_notice("You partially repair [src] with [item].")) + else + user.visible_message(span_notice("[user] fully repairs [src] with [item], causing its warning light to stop flashing."), span_notice("You fully repair [src] with [item], causing its warning light to stop flashing.")) + else + to_chat(user, span_warning("You failed to repair [src] with [item]!")) + + return TRUE + return FALSE + +/obj/item/organ/internal/brain/cybernetic/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + switch(severity) // Hard cap on brain damage from EMP + if (EMP_HEAVY) + apply_organ_damage(20, BRAIN_DAMAGE_SEVERE) + if (EMP_LIGHT) + apply_organ_damage(10, BRAIN_DAMAGE_MILD) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 9918a21b4f6..9d54d95516d 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -47,13 +47,6 @@ // Brain size logic transform = transform.Scale(brain_size) -/obj/item/organ/internal/brain/examine() - . = ..() - if(brain_size < 1) - . += span_notice("It is a bit on the smaller side...") - if(brain_size > 1) - . += span_notice("It is bigger than average...") - /obj/item/organ/internal/brain/Insert(mob/living/carbon/brain_owner, special = FALSE, drop_if_replaced = TRUE, no_id_transfer = FALSE) . = ..() if(!.) @@ -177,32 +170,17 @@ L.mind.transfer_to(brainmob) to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain.")) -/obj/item/organ/internal/brain/attackby(obj/item/O, mob/user, params) +/obj/item/organ/internal/brain/attackby(obj/item/item, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) - if(istype(O, /obj/item/borg/apparatus/organ_storage)) + if(istype(item, /obj/item/borg/apparatus/organ_storage)) return //Borg organ bags shouldn't be killing brains - if(damage && O.is_drainable() && O.reagents.has_reagent(/datum/reagent/medicine/mannitol)) //attempt to heal the brain - . = TRUE //don't do attack animation. - if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing - to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) - return - - user.visible_message(span_notice("[user] starts to slowly pour the contents of [O] onto [src]."), span_notice("You start to slowly pour the contents of [O] onto [src].")) - if(!do_after(user, 3 SECONDS, src)) - to_chat(user, span_warning("You failed to pour the contents of [O] onto [src]!")) - return - - user.visible_message(span_notice("[user] pours the contents of [O] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink."), span_notice("You pour the contents of [O] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink.")) - var/amount = O.reagents.get_reagent_amount(/datum/reagent/medicine/mannitol) - var/healto = max(0, damage - amount * 2) - O.reagents.remove_all(ROUND_UP(O.reagents.total_volume / amount * (damage - healto) * 0.5)) //only removes however much solution is needed while also taking into account how much of the solution is mannitol - set_organ_damage(healto) //heals 2 damage per unit of mannitol, and by using "set_organ_damage", we clear the failing variable if that was up - return + if (check_for_repair(item, user)) + return TRUE // Cutting out skill chips. - if(length(skillchips) && O.get_sharpness() == SHARP_EDGED) + if(length(skillchips) && item.get_sharpness() == SHARP_EDGED) to_chat(user,span_notice("You begin to excise skillchips from [src].")) if(do_after(user, 15 SECONDS, target = src)) for(var/chip in skillchips) @@ -225,31 +203,57 @@ return if(brainmob) //if we aren't trying to heal the brain, pass the attack onto the brainmob. - O.attack(brainmob, user) //Oh noooeeeee + item.attack(brainmob, user) //Oh noooeeeee - if(O.force != 0 && !(O.item_flags & NOBLUDGEON)) + if(item.force != 0 && !(item.item_flags & NOBLUDGEON)) user.do_attack_animation(src) playsound(loc, 'sound/effects/meatslap.ogg', 50) set_organ_damage(maxHealth) //fails the brain as the brain was attacked, they're pretty fragile. - visible_message(span_danger("[user] hits [src] with [O]!")) - to_chat(user, span_danger("You hit [src] with [O]!")) + visible_message(span_danger("[user] hits [src] with [item]!")) + to_chat(user, span_danger("You hit [src] with [item]!")) + +/obj/item/organ/internal/brain/proc/check_for_repair(obj/item/item, mob/user) + if(damage && item.is_drainable() && item.reagents.has_reagent(/datum/reagent/medicine/mannitol) && (organ_flags & ORGAN_ORGANIC)) //attempt to heal the brain + if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing + to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!")) + return TRUE + + user.visible_message(span_notice("[user] starts to slowly pour the contents of [item] onto [src]."), span_notice("You start to slowly pour the contents of [item] onto [src].")) + if(!do_after(user, 3 SECONDS, src)) + to_chat(user, span_warning("You failed to pour the contents of [item] onto [src]!")) + return TRUE + + user.visible_message(span_notice("[user] pours the contents of [item] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink."), span_notice("You pour the contents of [item] onto [src], causing it to reform its original shape and turn a slightly brighter shade of pink.")) + var/amount = item.reagents.get_reagent_amount(/datum/reagent/medicine/mannitol) + var/healto = max(0, damage - amount * 2) + item.reagents.remove_all(ROUND_UP(item.reagents.total_volume / amount * (damage - healto) * 0.5)) //only removes however much solution is needed while also taking into account how much of the solution is mannitol + set_organ_damage(healto) //heals 2 damage per unit of mannitol, and by using "set_organ_damage", we clear the failing variable if that was up + return TRUE + return FALSE /obj/item/organ/internal/brain/examine(mob/user) . = ..() if(length(skillchips)) . += span_info("It has a skillchip embedded in it.") + . += brain_damage_examine() + if(brain_size < 1) + . += span_notice("It is a bit on the smaller side...") + if(brain_size > 1) + . += span_notice("It is bigger than average...") + +/// Needed so subtypes can override examine text while still calling parent +/obj/item/organ/internal/brain/proc/brain_damage_examine() if(suicided) - . += span_info("It's started turning slightly grey. They must not have been able to handle the stress of it all.") - return + return span_info("It's started turning slightly grey. They must not have been able to handle the stress of it all.") if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost())) if(organ_flags & ORGAN_FAILING) - . += span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to restore it with some mannitol.") + return span_info("It seems to still have a bit of energy within it, but it's rather damaged... You may be able to restore it with some mannitol.") else if(damage >= BRAIN_DAMAGE_DEATH*0.5) - . += span_info("You can feel the small spark of life still left in this one, but it's got some bruises. You may be able to restore it with some mannitol.") + return span_info("You can feel the small spark of life still left in this one, but it's got some bruises. You may be able to restore it with some mannitol.") else - . += span_info("You can feel the small spark of life still left in this one.") + return span_info("You can feel the small spark of life still left in this one.") else - . += span_info("This one is completely devoid of life.") + return span_info("This one is completely devoid of life.") /obj/item/organ/internal/brain/attack(mob/living/carbon/C, mob/user) if(!istype(C)) @@ -424,6 +428,12 @@ /obj/item/organ/internal/brain/felinid //A bit smaller than average brain_size = 0.8 +/obj/item/organ/internal/brain/abductor + name = "grey brain" + desc = "A piece of juicy meat found in an ayy lmao's head." + icon_state = "brain-x" + brain_size = 1.3 + ////////////////////////////////////TRAUMAS//////////////////////////////////////// /obj/item/organ/internal/brain/proc/has_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index a2473ce574e..d2d59ce2f43 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -43,7 +43,16 @@ GLOBAL_VAR(posibrain_notify_cooldown) ///Notify ghosts that the posibrain is up for grabs /obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]! [ask_role ? "Personality requested: \[[ask_role]\]" : ""]", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, notify_volume = 75, source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_POSIBRAIN, notify_suiciders = FALSE) + notify_ghosts( + "[name] [msg] in [get_area(src)]! [ask_role ? "Personality requested: \[[ask_role]\]" : ""]", + source = src, + header = "Ghost in the Machine", + click_interact = TRUE, + ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, + ignore_key = POLL_IGNORE_POSIBRAIN, + notify_flags = (GHOST_NOTIFY_IGNORE_MAPLOAD), + notify_volume = 75, + ) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + ask_delay diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index ad8ef8ca877..92f3febef2c 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -75,10 +75,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( real_name = name /mob/living/carbon/alien/adult/proc/grab(mob/living/carbon/human/target) - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [src]'s grab!"), \ - span_userdanger("You block [src]'s grab!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_warning("Your grab at [target] was blocked!")) + if(target.check_block(src, 0, "[target]'s grab")) return FALSE target.grabbedby(src) return TRUE diff --git a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm index 3a1843dd93c..ff208baabd2 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm @@ -6,8 +6,7 @@ icon_state = "aliend" /mob/living/carbon/alien/adult/drone/Initialize(mapload) - var/datum/action/cooldown/alien/evolve_to_praetorian/evolution = new(src) - evolution.Grant(src) + GRANT_ACTION(/datum/action/cooldown/alien/evolve_to_praetorian) return ..() /mob/living/carbon/alien/adult/drone/create_internal_organs() diff --git a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm index 3a346bf8255..ed39fda2108 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm @@ -74,7 +74,7 @@ var/blocked = FALSE if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom - if(H.check_shields(src, 0, "the [name]", attack_type = LEAP_ATTACK)) + if(H.check_block(src, 0, "the [name]", attack_type = LEAP_ATTACK)) blocked = TRUE if(!blocked) L.visible_message(span_danger("[src] pounces on [L]!"), span_userdanger("[src] pounces on you!")) diff --git a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm index a26eb31231c..8fa142a38f0 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm @@ -9,11 +9,12 @@ /mob/living/carbon/alien/adult/royal/praetorian/Initialize(mapload) real_name = name - var/datum/action/cooldown/spell/aoe/repulse/xeno/tail_whip = new(src) - tail_whip.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/evolve_to_queen, + /datum/action/cooldown/spell/aoe/repulse/xeno, + ) - var/datum/action/cooldown/alien/evolve_to_queen/evolution = new(src) - evolution.Grant(src) + grant_actions_by_list(innate_actions) return ..() diff --git a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm index 7fffdf35522..bef621905f4 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm @@ -7,8 +7,7 @@ alien_speed = 0.2 /mob/living/carbon/alien/adult/sentinel/Initialize(mapload) - var/datum/action/cooldown/mob_cooldown/sneak/alien/sneaky_beaky = new(src) - sneaky_beaky.Grant(src) + GRANT_ACTION(/datum/action/cooldown/mob_cooldown/sneak/alien) return ..() /mob/living/carbon/alien/adult/sentinel/create_internal_organs() diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index dd8e61b6699..df03ce3fa9e 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -55,11 +55,11 @@ real_name = src.name - var/datum/action/cooldown/spell/aoe/repulse/xeno/tail_whip = new(src) - tail_whip.Grant(src) - - var/datum/action/cooldown/alien/promote/promotion = new(src) - promotion.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/promote, + /datum/action/cooldown/spell/aoe/repulse/xeno, + ) + grant_actions_by_list(innate_actions) return ..() diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 63ef8830435..4ea7e98b05f 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -67,25 +67,6 @@ In all, this is a lot like the monkey code. /N var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) apply_damage(rand(1, 3), BRUTE, affecting) - -/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - switch(user.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) - if(TOX) - adjustToxLoss(damage) - if(OXY) - adjustOxyLoss(damage) - if(CLONE) - adjustCloneLoss(damage) - if(STAMINA) - adjustStaminaLoss(damage) - /mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) if(..()) //successful slime attack var/damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 0b1396520b3..f4159813ed9 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -31,10 +31,12 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/Initialize(mapload) - var/datum/action/cooldown/alien/larva_evolve/evolution = new(src) - evolution.Grant(src) - var/datum/action/cooldown/alien/hide/hide = new(src) - hide.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/hide, + /datum/action/cooldown/alien/larva_evolve, + ) + grant_actions_by_list(innate_actions) + return ..() /mob/living/carbon/alien/larva/create_internal_organs() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index e7ec01f9edb..d80539a818d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -228,16 +228,7 @@ buckled.user_unbuckle_mob(src,src) /mob/living/carbon/resist_fire() - adjust_fire_stacks(-5) - Paralyze(60, ignore_canstun = TRUE) - spin(32,2) - visible_message(span_danger("[src] rolls on the floor, trying to put [p_them()]self out!"), \ - span_notice("You stop, drop, and roll!")) - sleep(3 SECONDS) - if(fire_stacks <= 0 && !QDELETED(src)) - visible_message(span_danger("[src] successfully extinguishes [p_them()]self!"), \ - span_notice("You extinguish yourself.")) - return + return !!apply_status_effect(/datum/status_effect/stop_drop_roll) /mob/living/carbon/resist_restraints() var/obj/item/I = null @@ -259,6 +250,8 @@ /mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 1 MINUTES, cuff_break = 0) + if((cuff_break != INSTANT_CUFFBREAK) && (SEND_SIGNAL(src, COMSIG_MOB_REMOVING_CUFFS, I) & COMSIG_MOB_BLOCK_CUFF_REMOVAL)) + return //The blocking object should sent a fluff-appropriate to_chat about cuff removal being blocked if(I.item_flags & BEING_REMOVED) to_chat(src, span_warning("You're already attempting to remove [I]!")) return diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 5ffe31a55f1..9deab5f53f5 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -92,46 +92,13 @@ return TRUE return ..() - -/mob/living/carbon/attacked_by(obj/item/I, mob/living/user) - var/obj/item/bodypart/affecting - if(user == src) - affecting = get_bodypart(check_zone(user.zone_selected)) //we're self-mutilating! yay! - else - var/zone_hit_chance = 80 - if(body_position == LYING_DOWN) // half as likely to hit a different zone if they're on the ground - zone_hit_chance += 10 - affecting = get_bodypart(get_random_valid_zone(user.zone_selected, zone_hit_chance)) - if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) - affecting = bodyparts[1] - SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) - send_item_attack_message(I, user, affecting.plaintext_zone, affecting) - if(I.force) - var/attack_direction = get_dir(user, src) - apply_damage(I.force, I.damtype, affecting, wound_bonus = I.wound_bonus, bare_wound_bonus = I.bare_wound_bonus, sharpness = I.get_sharpness(), attack_direction = attack_direction, attacking_item = I) - if(I.damtype == BRUTE && affecting.can_bleed()) - if(prob(33)) - I.add_mob_blood(src) - var/turf/location = get_turf(src) - add_splatter_floor(location) - if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(src) - if(affecting.body_zone == BODY_ZONE_HEAD) - if(wear_mask) - wear_mask.add_mob_blood(src) - update_worn_mask() - if(wear_neck) - wear_neck.add_mob_blood(src) - update_worn_neck() - if(head) - head.add_mob_blood(src) - update_worn_head() - - return TRUE //successful attack - -/mob/living/carbon/send_item_attack_message(obj/item/I, mob/living/user, hit_area, obj/item/bodypart/hit_bodypart) +/mob/living/carbon/send_item_attack_message(obj/item/I, mob/living/user, hit_area, def_zone) if(!I.force && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous)) return + var/obj/item/bodypart/hit_bodypart = get_bodypart(def_zone) + if(isnull(hit_bodypart)) // ?? + return ..() + var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks" var/message_verb_simple = length(I.attack_verb_simple) ? "[pick(I.attack_verb_simple)]" : "attack" //SKYRAT EDIT ADDITION BEGIN @@ -270,7 +237,18 @@ updatehealth() return 1 -/mob/living/carbon/proc/dismembering_strike(mob/living/attacker, dam_zone) +/** + * Really weird proc that attempts to dismebmer the passed zone if it is at max damage + * Unless the attacker is an NPC, in which case it disregards the zone and picks a random one + * + * Cannot dismember heads + * + * Returns a falsy value (null) on success, and a truthy value (the hit zone) on failure + */ +/mob/living/proc/dismembering_strike(mob/living/attacker, dam_zone) + return dam_zone + +/mob/living/carbon/dismembering_strike(mob/living/attacker, dam_zone) if(!attacker.limb_destroyer) return dam_zone var/obj/item/bodypart/affecting @@ -278,18 +256,17 @@ affecting = get_bodypart(get_random_valid_zone(dam_zone)) else var/list/things_to_ruin = shuffle(bodyparts.Copy()) - for(var/B in things_to_ruin) - var/obj/item/bodypart/bodypart = B + for(var/obj/item/bodypart/bodypart as anything in things_to_ruin) if(bodypart.body_zone == BODY_ZONE_HEAD || bodypart.body_zone == BODY_ZONE_CHEST) continue if(!affecting || ((affecting.get_damage() / affecting.max_damage) < (bodypart.get_damage() / bodypart.max_damage))) affecting = bodypart + if(affecting) dam_zone = affecting.body_zone - if(affecting.get_damage() >= affecting.max_damage) - affecting.dismember() + if(affecting.get_damage() >= affecting.max_damage && affecting.dismember()) return null - return affecting.body_zone + return dam_zone /** @@ -408,6 +385,7 @@ if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove)) target.add_movespeed_modifier(/datum/movespeed_modifier/shove) + target.emote("sway") if(target_held_item) append_message = "loosening [target.p_their()] grip on [target_held_item]" target.visible_message(span_danger("[target.name]'s grip on \the [target_held_item] loosens!"), //He's already out what are you doing diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 6ecc62b0498..e8a9f5bd467 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -28,6 +28,12 @@ return . +/mob/living/carbon/human/get_damage_mod(damage_type) + if (!dna?.species?.damage_modifier) + return ..() + var/species_mod = (100 - dna.species.damage_modifier) / 100 + return ..() * species_mod + /mob/living/carbon/human/apply_damage( damage = 0, damagetype = BRUTE, diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 10005fd1601..8d1599d0e80 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -13,6 +13,7 @@ /datum/emote/living/carbon/blink_r key = "blink_r" + name = "blink (Rapid)" message = "blinks rapidly." //SKYRAT EDIT REMOVAL BEGIN - EMOTES - (Moved to modular_skyrat/modules/emotes/code/emotes.dm as /datum/emote/living/clap) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index ad431f1c39c..06aac9432ea 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -261,9 +261,9 @@ GLOBAL_LIST_EMPTY(features_by_species) * Arguments: * * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names. * * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station. - * * lastname - Does this species' naming system adhere to the last name system? Set to false if it doesn't. + * * last_name - Do we use a given last name or pick a random new one? */ -/datum/species/proc/random_name(gender,unique,lastname) +/datum/species/proc/random_name(gender, unique, last_name) if(unique) return random_unique_name(gender) @@ -273,8 +273,8 @@ GLOBAL_LIST_EMPTY(features_by_species) else randname = pick(GLOB.first_names_female) - if(lastname) - randname += " [lastname]" + if(last_name) + randname += " [last_name]" else randname += " [pick(GLOB.last_names)]" @@ -879,9 +879,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(HAS_TRAIT(H, TRAIT_NOBREATH) && (H.health < H.crit_threshold) && !HAS_TRAIT(H, TRAIT_NOCRITDAMAGE)) H.adjustBruteLoss(0.5 * seconds_per_tick) -/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) - return - /datum/species/proc/can_equip(obj/item/I, slot, disable_warning, mob/living/carbon/human/H, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE) if(no_equip_flags & slot) if(!I.species_exception || !is_type_in_list(src, I.species_exception)) @@ -1141,11 +1138,6 @@ GLOBAL_LIST_EMPTY(features_by_species) user.do_cpr(target) /datum/species/proc/grab(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [user]'s grab!"), \ - span_userdanger("You block [user]'s grab!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your grab at [target] was blocked!")) - return FALSE if(attacker_style?.grab_act(user, target) == MARTIAL_ATTACK_SUCCESS) return TRUE target.grabbedby(user) @@ -1156,11 +1148,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(HAS_TRAIT(user, TRAIT_PACIFISM) && !attacker_style?.pacifist_style) to_chat(user, span_warning("You don't want to harm [target]!")) return FALSE - if(target.check_block()) - target.visible_message(span_warning("[target] blocks [user]'s attack!"), \ - span_userdanger("You block [user]'s attack!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your attack at [target] was blocked!")) - return FALSE if(attacker_style?.harm_act(user,target) == MARTIAL_ATTACK_SUCCESS) return TRUE else @@ -1180,16 +1167,29 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE user.do_attack_animation(target, atk_effect) + //has our target been shoved recently? If so, they're off-balance and we get an easy hit. + var/off_balance = FALSE + + //Someone in a grapple is much more vulnerable to being harmed by punches. + var/grappled = FALSE + + if(target.has_movespeed_modifier(/datum/movespeed_modifier/shove)) + off_balance = TRUE + + if(target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) + grappled = TRUE + var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) + var/limb_accuracy = attacking_bodypart.unarmed_effectiveness var/obj/item/bodypart/affecting = target.get_bodypart(target.get_random_valid_zone(user.zone_selected)) var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases if(attacking_bodypart.unarmed_damage_low) - if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage) + if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || off_balance) //kicks and attacks against off-balance targets never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min((attacking_bodypart.unarmed_damage_high/attacking_bodypart.unarmed_damage_low) + (user.getStaminaLoss() * 0.2) + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() //SKYRAT EDIT CHANGE - ORIGINAL: miss_chance = min((attacking_bodypart.unarmed_damage_high/attacking_bodypart.unarmed_damage_low) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) + miss_chance = clamp(UNARMED_MISS_CHANCE_BASE - limb_accuracy + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 0, UNARMED_MISS_CHANCE_MAX) //Limb miss chance + various damage. capped at 80 so there is at least a chance to land a hit. if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) @@ -1215,37 +1215,33 @@ GLOBAL_LIST_EMPTY(features_by_species) var/attack_direction = get_dir(user, target) var/attack_type = attacking_bodypart.attack_type - var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //SKYRAT EDIT - If unarmed damage sharpness needs to be taken into account. - if(atk_effect == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage + var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //SKYRAT EDIT ADDITION - If unarmed damage sharpness needs to be taken into account. + if(atk_effect == ATTACK_EFFECT_KICK || grappled) //kicks and punches when grappling bypass armor slightly. if(damage >= 9) target.force_say() - log_combat(user, target, "kicked") - target.apply_damage(damage * PUNCH_STAMINA_MULTIPLIER, STAMINA, affecting, armor_block) //SKYRAT EDIT ADDITION - target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) - else//other attacks deal full raw damage + 1.5x in stamina damage + log_combat(user, target, grappled ? "grapple punched" : "kicked") + target.apply_damage(damage, attack_type, affecting, armor_block - limb_accuracy, attack_direction = attack_direction) + target.apply_damage(damage * PUNCH_STAMINA_MULTIPLIER, STAMINA, affecting, armor_block - limb_accuracy) // SKYRAT EDIT CHANGE - ORIGINAL : target.apply_damage(damage * 1.5, STAMINA, affecting, armor_block - limb_accuracy) + else // Normal attacks do not gain the benefit of armor penetration. target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //SKYRAT EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) target.apply_damage(damage * PUNCH_STAMINA_MULTIPLIER, STAMINA, affecting, armor_block) //SKYRAT EDIT CHANGE: target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) if(damage >= 9) target.force_say() log_combat(user, target, "punched") - if((target.stat != DEAD) && damage >= attacking_bodypart.unarmed_stun_threshold) + //If we rolled a punch high enough to hit our stun threshold, or our target is off-balance and they have at least 40 damage+stamina loss, we knock them down + if((target.stat != DEAD) && prob(limb_accuracy) || (target.stat != DEAD) && off_balance && (target.getStaminaLoss() + user.getBruteLoss()) >= 40) target.visible_message(span_danger("[user] knocks [target] down!"), \ span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You knock [target] down!")) /* SKYRAT EDIT REMOVAL - Less combat lethality and hard stungs - var/knockdown_duration = 40 + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 40 base stun + 40 stun modifier = 80 stun duration, which is the old base duration + var/knockdown_duration = 4 SECONDS + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 4 second base stun + 4 second stun modifier = 8 second knockdown duration target.apply_effect(knockdown_duration, EFFECT_KNOCKDOWN, armor_block) */ // SKYRAT REMOVAL END target.StaminaKnockdown(20) //SKYRAT EDIT ADDITION log_combat(user, target, "got a stun punch with their previous punch") /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.check_block()) - target.visible_message(span_warning("[user]'s shove is blocked by [target]!"), \ - span_danger("You block [user]'s shove!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your shove at [target] was blocked!")) - return FALSE if(attacker_style?.disarm_act(user,target) == MARTIAL_ATTACK_SUCCESS) return TRUE if(user.body_position != STANDING_UP) @@ -1256,10 +1252,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE user.disarm(target) - -/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - return - /datum/species/proc/spec_attack_hand(mob/living/carbon/human/owner, mob/living/carbon/human/target, datum/martial_art/attacker_style, modifiers) if(!istype(owner)) return @@ -1270,7 +1262,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return if(owner.mind) attacker_style = owner.mind.martial_art - if((owner != target) && target.check_shields(owner, 0, owner.name, attack_type = UNARMED_ATTACK)) + if((owner != target) && target.check_block(owner, 0, owner.name, attack_type = UNARMED_ATTACK)) log_combat(owner, target, "attempted to touch") target.visible_message(span_warning("[owner] attempts to touch [target]!"), \ span_danger("[owner] attempts to touch you!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, owner) @@ -1287,115 +1279,6 @@ GLOBAL_LIST_EMPTY(features_by_species) else help(owner, target, attacker_style) -/datum/species/proc/spec_attacked_by(obj/item/weapon, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/human) - // Allows you to put in item-specific reactions based on species - if(user != human) - if(human.check_shields(weapon, weapon.force, "the [weapon.name]", MELEE_ATTACK, weapon.armour_penetration, weapon.damtype)) - return FALSE - if(human.check_block()) - human.visible_message(span_warning("[human] blocks [weapon]!"), \ - span_userdanger("You block [weapon]!")) - return FALSE - - affecting ||= human.bodyparts[1] //Something went wrong. Maybe the limb is missing? - var/hit_area = affecting.plaintext_zone - var/armor_block = min(human.run_armor_check( - def_zone = affecting, - attack_flag = MELEE, - absorb_text = span_notice("Your armor has protected your [hit_area]!"), - soften_text = span_warning("Your armor has softened a hit to your [hit_area]!"), - armour_penetration = weapon.armour_penetration, - weak_against_armour = weapon.weak_against_armour, - ), ARMOR_MAX_BLOCK) //cap damage reduction at 90% - - var/modified_wound_bonus = weapon.wound_bonus - // this way, you can't wound with a surgical tool on help intent if they have a surgery active and are lying down, so a misclick with a circular saw on the wrong limb doesn't bleed them dry (they still get hit tho) - if((weapon.item_flags & SURGICAL_TOOL) && !user.combat_mode && human.body_position == LYING_DOWN && (LAZYLEN(human.surgeries) > 0)) - modified_wound_bonus = CANT_WOUND - - human.send_item_attack_message(weapon, user, hit_area, affecting) - var/damage_dealt = human.apply_damage( - damage = weapon.force, - damagetype = weapon.damtype, - def_zone = affecting, - blocked = armor_block, - wound_bonus = modified_wound_bonus, - bare_wound_bonus = weapon.bare_wound_bonus, - sharpness = weapon.get_sharpness(), - attack_direction = get_dir(user, human), - attacking_item = weapon, - ) - - if(damage_dealt <= 0) - return FALSE //item force is zero - var/bloody = FALSE - if(weapon.damtype != BRUTE) - return TRUE - if(!(prob(25 + (weapon.force * 2)))) - return TRUE - - if(affecting.can_bleed()) - weapon.add_mob_blood(human) //Make the weapon bloody, not the person. - if(prob(weapon.force * 2)) //blood spatter! - bloody = TRUE - var/turf/location = human.loc - if(istype(location)) - human.add_splatter_floor(location) - if(get_dist(user, human) <= 1) //people with TK won't get smeared with blood - user.add_mob_blood(human) - - switch(hit_area) - if(BODY_ZONE_HEAD) - if(!weapon.get_sharpness() && armor_block < 50) - if(prob(weapon.force)) - human.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20) - if(human.stat == CONSCIOUS) - human.visible_message(span_danger("[human] is knocked senseless!"), \ - span_userdanger("You're knocked senseless!")) - human.set_confusion_if_lower(20 SECONDS) - human.adjust_eye_blur(20 SECONDS) - if(prob(10)) - human.gain_trauma(/datum/brain_trauma/mild/concussion) - else - human.adjustOrganLoss(ORGAN_SLOT_BRAIN, weapon.force * 0.2) - - if(human.mind && human.stat == CONSCIOUS && human != user && prob(weapon.force + ((human.maxHealth - human.health) * 0.5))) // rev deconversion through blunt trauma. // SKYRAT EDIT CHANGE - var/datum/antagonist/rev/rev = human.mind.has_antag_datum(/datum/antagonist/rev) - if(rev) - rev.remove_revolutionary(user) - - if(bloody) //Apply blood - if(human.wear_mask) - human.wear_mask.add_mob_blood(human) - human.update_worn_mask() - if(human.head) - human.head.add_mob_blood(human) - human.update_worn_head() - if(human.glasses && prob(33)) - human.glasses.add_mob_blood(human) - human.update_worn_glasses() - - if(BODY_ZONE_CHEST) - if(human.stat == CONSCIOUS && !weapon.get_sharpness() && armor_block < 50) - if(prob(weapon.force)) - human.visible_message(span_danger("[human] is knocked down!"), \ - span_userdanger("You're knocked down!")) - human.apply_effect(60, EFFECT_KNOCKDOWN, armor_block) - - if(bloody) - if(human.wear_suit) - human.wear_suit.add_mob_blood(human) - human.update_worn_oversuit() - if(human.w_uniform) - human.w_uniform.add_mob_blood(human) - human.update_worn_undersuit() - - /// Triggers force say events - if(weapon.force > 10 || (weapon.force >= 5 && prob(33))) - human.force_say(user) - - return TRUE - ////////////////////////// // ENVIRONMENT HANDLERS // ////////////////////////// diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3c0ffb2536b..333782f0bbe 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -21,18 +21,14 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) if(stat == DEAD) return stop_sound_channel(CHANNEL_HEARTBEAT) - var/obj/item/organ/internal/heart/H = get_organ_slot(ORGAN_SLOT_HEART) - if(H) - H.beat = BEAT_NONE + var/obj/item/organ/internal/heart/human_heart = get_organ_slot(ORGAN_SLOT_HEART) + human_heart?.beat = BEAT_NONE . = ..() if(client && !HAS_TRAIT(src, TRAIT_SUICIDED) && !(client in GLOB.dead_players_during_shift)) GLOB.dead_players_during_shift += client - if(!QDELETED(dna)) //The gibbed param is bit redundant here since dna won't exist at this point if they got deleted. - dna.species.spec_death(gibbed, src) - if(SSticker.HasRoundStarted()) SSblackbox.ReportDeath(src) log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()], CLONE: [src.getCloneLoss()])", LOG_ATTACK) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 90cee5fce9b..692dc52c798 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -119,6 +119,7 @@ message = "salutes." message_param = "salutes to %t." hands_use_check = TRUE + sound = 'sound/misc/salute.ogg' /datum/emote/living/carbon/human/shrug key = "shrug" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f075a9bb840..ca8bd78099d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,7 +10,7 @@ var/obj/item/bodypart/affecting = get_bodypart(check_zone(def_zone)) if(affecting) return check_armor(affecting, type) - //If a specific bodypart is targetted, check how that bodypart is protected and return the value. + //If a specific bodypart is targeted, check how that bodypart is protected and return the value. //If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values for(var/X in bodyparts) @@ -68,7 +68,7 @@ return BULLET_ACT_FORCE_PIERCE // complete projectile permutation - if(check_shields(bullet, bullet.damage, "the [bullet.name]", PROJECTILE_ATTACK, bullet.armour_penetration, bullet.damage_type)) + if(check_block(bullet, bullet.damage, "the [bullet.name]", PROJECTILE_ATTACK, bullet.armour_penetration, bullet.damage_type)) bullet.on_hit(src, 100, def_zone, piercing_hit) return BULLET_ACT_HIT @@ -87,98 +87,39 @@ return TRUE return FALSE -/mob/living/carbon/human/proc/check_shields(atom/AM, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) - var/block_chance_modifier = round(damage / -3) - - for(var/obj/item/I in held_items) - if(!isclothing(I)) - var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example - if(I.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(wear_suit) - var/final_block_chance = wear_suit.block_chance - (clamp((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier - if(wear_suit.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(w_uniform) - var/final_block_chance = w_uniform.block_chance - (clamp((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier - if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(wear_neck) - var/final_block_chance = wear_neck.block_chance - (clamp((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier - if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(head) - var/final_block_chance = head.block_chance - (clamp((armour_penetration-head.armour_penetration)/2,0,100)) + block_chance_modifier - if(head.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type, damage_type)) - return TRUE - if(SEND_SIGNAL(src, COMSIG_HUMAN_CHECK_SHIELDS, AM, damage, attack_text, attack_type, armour_penetration, damage_type) & SHIELD_BLOCK) +/mob/living/carbon/human/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) + . = ..() + if(.) return TRUE - return FALSE -/mob/living/carbon/human/proc/check_block() - if(mind) - if(mind.martial_art && prob(mind.martial_art.block_chance) && mind.martial_art.can_use(src) && throw_mode && !incapacitated(IGNORE_GRAB)) + var/block_chance_modifier = round(damage / -3) + for(var/obj/item/worn_thing in get_equipped_items(include_pockets = FALSE) + held_items) + // Things that are supposed to be worn, being held = cannot block + if(isclothing(worn_thing)) + if(worn_thing in held_items) + continue + // Things that are supposed to be held, being worn = cannot block + else + if(!(worn_thing in held_items)) + continue + + var/final_block_chance = worn_thing.block_chance - (clamp((armour_penetration - worn_thing.armour_penetration) / 2, 0, 100)) + block_chance_modifier + if(worn_thing.hit_reaction(src, hit_by, attack_text, final_block_chance, damage, attack_type, damage_type)) return TRUE + return FALSE -/mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(dna?.species) - var/spec_return = dna.species.spec_hitby(AM, src) - if(spec_return) - return spec_return - var/obj/item/I - var/damage_type = BRUTE - var/throwpower = 30 - if(isitem(AM)) - I = AM - if(I.thrownby == WEAKREF(src)) //No throwing stuff at yourself to trigger hit reactions - return ..() - throwpower = I.throwforce - damage_type = I.damtype - if(check_shields(AM, throwpower, "\the [AM.name]", THROWN_PROJECTILE_ATTACK, 0, damage_type)) - hitpush = FALSE - skipcatch = TRUE - blocked = TRUE - - return ..() - /mob/living/carbon/human/grippedby(mob/living/user, instant = FALSE) if(w_uniform) w_uniform.add_fingerprint(user) ..() - -/mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user) - if(!I || !user) - return FALSE - - var/obj/item/bodypart/affecting - if(user == src) - affecting = get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target - else - var/zone_hit_chance = 80 - if(body_position == LYING_DOWN) // half as likely to hit a different zone if they're on the ground - zone_hit_chance += 10 - affecting = get_bodypart(get_random_valid_zone(user.zone_selected, zone_hit_chance)) - var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target - - SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) - - SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]")) - SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area) - - // the attacked_by code varies among species - return dna.species.spec_attacked_by(I, user, affecting, src) - - /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) return var/hulk_verb = pick("smash","pummel") - if(check_shields(user, 15, "the [hulk_verb]ing", attack_type = UNARMED_ATTACK)) - return - if(check_block()) //everybody is kung fu fighting + if(check_block(user, 15, "the [hulk_verb]ing", attack_type = UNARMED_ATTACK)) return var/obj/item/bodypart/arm/active_arm = user.get_active_hand() playsound(loc, active_arm.unarmed_attack_sound, 25, TRUE, -1) @@ -238,7 +179,7 @@ var/damage = HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) ? monkey_mouth.unarmed_damage_high : rand(monkey_mouth.unarmed_damage_low, monkey_mouth.unarmed_damage_high) if(!damage) return FALSE - if(check_shields(user, damage, "the [user.name]")) + if(check_block(user, damage, "the [user.name]")) return FALSE apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE)) return TRUE @@ -246,11 +187,6 @@ //SKYRAT EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm /* /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) - if(check_shields(user, 0, "the [user.name]")) - visible_message(span_danger("[user] attempts to touch [src]!"), \ - span_danger("[user] attempts to touch you!"), span_hear("You hear a swoosh!"), null, user) - to_chat(user, span_warning("You attempt to touch [src]!")) - return FALSE . = ..() if(!.) return @@ -312,7 +248,7 @@ var/damage = rand(L.melee_damage_lower, L.melee_damage_upper) if(!damage) return - if(check_shields(L, damage, "the [L.name]")) + if(check_block(L, damage, "the [L.name]")) return FALSE if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) @@ -320,22 +256,6 @@ var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(!.) - return - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - if(check_shields(user, damage, "the [user.name]", MELEE_ATTACK, user.armour_penetration, user.melee_damage_type)) - return FALSE - var/dam_zone = dismembering_strike(user, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return TRUE - var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(dam_zone)) - var/armor = run_armor_check(affecting, MELEE, armour_penetration = user.armour_penetration) - var/attack_direction = get_dir(user, src) - apply_damage(damage, user.melee_damage_type, affecting, armor, wound_bonus = user.wound_bonus, bare_wound_bonus = user.bare_wound_bonus, sharpness = user.sharpness, attack_direction = attack_direction) - - /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) . = ..() if(!.) // slime attack failed @@ -348,7 +268,7 @@ damage += rand(5, 10) wound_mod = -90 // 35^1.4=145, 145-90=55 - if(check_shields(M, damage, "the [M.name]")) + if(check_block(M, damage, "the [M.name]")) return FALSE var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 62fc77bc6ce..b2a0929f4e4 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -234,7 +234,7 @@ var/t_his = p_their() var/t_is = p_are() //This checks to see if the body is revivable - if(key || !get_organ_by_type(/obj/item/organ/internal/brain) || ghost?.can_reenter_corpse || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE)) + if(get_organ_by_type(/obj/item/organ/internal/brain) && (client || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE) || (ghost?.can_reenter_corpse && ghost?.client))) return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life...") else return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...") diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 26ec247b463..077ebe669b7 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -332,6 +332,12 @@ There are several things that need to be remembered: if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE + //On the off-chance we have a neck item that has to move around or cover the muzzle, it ALSO gets worn_icon_muzzled compatiability + if((bodytype & BODYTYPE_SNOUTED) && (worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION) && worn_item.worn_icon_muzzled) + var/snout_icon_file = worn_item.worn_icon_muzzled + if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item))) + icon_file = snout_icon_file + mutant_override = TRUE // SKYRAT EDIT END var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 58120a90f77..d0f42219b02 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -16,6 +16,7 @@ mutantstomach = null mutantheart = null mutantlungs = null + mutantbrain = /obj/item/organ/internal/brain/abductor changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT ass_image = 'icons/ass/assgrey.png' diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 47617890bcc..55f13dbfabf 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -26,6 +26,7 @@ inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID meat = null + mutantbrain = /obj/item/organ/internal/brain/cybernetic mutanttongue = /obj/item/organ/internal/tongue/robot mutantstomach = null mutantappendix = null diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 2f5c977110a..1708220cbf0 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -215,6 +215,7 @@ // so if someone mindswapped into them, they'd still be shared. bodies = null C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL) + UnregisterSignal(C, COMSIG_LIVING_DEATH) ..() /datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species) @@ -230,20 +231,25 @@ else bodies |= C -/datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H) - if(slime_split) - if(!H.mind || !H.mind.active) - return + RegisterSignal(C, COMSIG_LIVING_DEATH, PROC_REF(on_death_move_body)) - var/list/available_bodies = (bodies - H) - for(var/mob/living/L in available_bodies) - if(!swap_body.can_swap(L)) - available_bodies -= L +/datum/species/jelly/slime/proc/on_death_move_body(mob/living/carbon/human/source, gibbed) + SIGNAL_HANDLER - if(!LAZYLEN(available_bodies)) - return + if(!slime_split) + return + if(!source.mind?.active) + return - swap_body.swap_to_dupe(H.mind, pick(available_bodies)) + var/list/available_bodies = bodies - source + for(var/mob/living/other_body as anything in available_bodies) + if(!swap_body.can_swap(other_body)) + available_bodies -= other_body + + if(!length(available_bodies)) + return + + swap_body.swap_to_dupe(source.mind, pick(available_bodies)) //If you're cloned you get your body pool back /datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species) diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 54382dcf021..14c4c4d1c15 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -174,26 +174,6 @@ if(!HAS_TRAIT(carbon_mob, TRAIT_CRITICAL_CONDITION) && SPT_PROB(2, seconds_per_tick)) playsound(carbon_mob, pick(spooks), 50, TRUE, 10) -//Congrats you somehow died so hard you stopped being a zombie -/datum/species/zombie/infectious/spec_death(gibbed, mob/living/carbon/C) - . = ..() - var/obj/item/organ/internal/zombie_infection/infection - infection = C.get_organ_slot(ORGAN_SLOT_ZOMBIE) - if(infection) - qdel(infection) - -/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - - // Deal with the source of this zombie corruption - // Infection organ needs to be handled separately from mutant_organs - // because it persists through species transitions - var/obj/item/organ/internal/zombie_infection/infection - infection = C.get_organ_slot(ORGAN_SLOT_ZOMBIE) - if(!infection) - infection = new() - infection.Insert(C) - // Your skin falls off /datum/species/human/krokodil_addict name = "\improper Krokodil Human" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 353b8de7bd7..a6b766289c0 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -34,11 +34,9 @@ if(stat == DEAD) stop_sound_channel(CHANNEL_HEARTBEAT) else - if(getStaminaLoss() > 0 && stam_regen_start_time <= world.time) adjustStaminaLoss(-INFINITY) - - handle_bodyparts(seconds_per_tick, times_fired) + handle_bodyparts(seconds_per_tick, times_fired) if(. && mind) //. == not dead for(var/key in mind.addiction_points) @@ -805,12 +803,19 @@ */ /mob/living/carbon/proc/undergoing_cardiac_arrest() var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART) - if(istype(heart) && heart.beating) + if(istype(heart) && heart.is_beating()) return FALSE else if(!needs_heart()) return FALSE return TRUE +/** + * Causes the mob to either start or stop having a heart attack. + * + * status - Pass TRUE to start a heart attack, or FALSE to stop one. + * + * Returns TRUE if heart status was changed (heart attack -> no heart attack, or visa versa) + */ /mob/living/carbon/proc/set_heartattack(status) if(!can_heartattack()) return FALSE @@ -819,5 +824,7 @@ if(!istype(heart)) return FALSE - heart.beating = !status - return TRUE + if(status) + return heart.Stop() + + return heart.Restart() diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 41eb7bb06f4..35b1a2c064f 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -262,6 +262,17 @@ return TRUE +/// Returns a multiplier to apply to a specific kind of damage +/mob/living/proc/get_damage_mod(damage_type) + switch(damage_type) + if (OXY) + return HAS_TRAIT(src, TRAIT_NOBREATH) ? 0 : 1 + if (TOX) + if (HAS_TRAIT(src, TRAIT_TOXINLOVER)) + return -1 + return HAS_TRAIT(src, TRAIT_TOXIMMUNE) ? 0 : 1 + return 1 + /mob/living/proc/getBruteLoss() return bruteloss diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index a434f894082..5b91f400f4c 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -167,6 +167,7 @@ /datum/emote/living/flap/aflap key = "aflap" key_third_person = "aflaps" + name = "flap (Angry)" message = "flaps their wings ANGRILY!" hands_use_check = TRUE wing_time = 10 @@ -194,6 +195,7 @@ /datum/emote/living/gasp_shock key = "gaspshock" key_third_person = "gaspsshock" + name = "gasp (Shock)" message = "gasps in shock!" message_mime = "gasps in silent shock!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE @@ -529,6 +531,7 @@ /datum/emote/living/twitch_s key = "twitch_s" + name = "twitch (Slight)" message = "twitches." /datum/emote/living/twitch_s/run_emote(mob/living/user, params, type_override, intentional) @@ -553,6 +556,7 @@ /datum/emote/living/wsmile key = "wsmile" key_third_person = "wsmiles" + name = "smile (Weak)" message = "smiles weakly." /// The base chance for your yawn to propagate to someone else if they're on the same tile as you diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ad59825271f..9241b190af5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -94,6 +94,9 @@ if(move_intent == MOVE_INTENT_WALK) return TRUE + if(SEND_SIGNAL(M, COMSIG_LIVING_PRE_MOB_BUMP, src) & COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP) + return TRUE + SEND_SIGNAL(src, COMSIG_LIVING_MOB_BUMP, M) //Even if we don't push/swap places, we "touched" them, so spread fire spreadFire(M) @@ -815,6 +818,9 @@ * */ /mob/living/proc/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) + if(QDELETED(src)) + // Bro just like, don't ok + return FALSE if(excess_healing) adjustOxyLoss(-excess_healing, updating_health = FALSE) adjustToxLoss(-excess_healing, updating_health = FALSE, forced = TRUE) //slime friendly @@ -1157,7 +1163,7 @@ /mob/living/resist_grab(moving_resist) . = TRUE - if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || staminaloss > STAMINA_THRESHOLD_HARD_RESIST) //SKYRAT EDIT CHANGE: if(pulledby.grab_state || resting || HAS_TRAIT(src, TRAIT_GRABWEAKNESS)) + if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || has_movespeed_modifier(/datum/movespeed_modifier/shove) && getStaminaLoss() > STAMINA_THRESHOLD_HARD_RESIST) //SKYRAT EDIT CHANGE - ORIGINAL : if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || has_movespeed_modifier(/datum/movespeed_modifier/shove) && getStaminaLoss() >= 30) var/altered_grab_state = pulledby.grab_state if(resting || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) && pulledby.grab_state < GRAB_KILL) //BUBBER EDIT CHANGE: if(body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) && pulledby.grab_state < GRAB_KILL) //If prone, resisting out of a grab is equivalent to 1 grab state higher. won't make the grab state exceed the normal max, however altered_grab_state++ @@ -1215,7 +1221,7 @@ buckled.user_unbuckle_mob(src,src) /mob/living/proc/resist_fire() - return + return FALSE /mob/living/proc/resist_restraints() return @@ -2564,7 +2570,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/compare_sentience_type(compare_type) return FALSE -/// Proc called when targetted by a lazarus injector +/// Proc called when TARGETED by a lazarus injector /mob/living/proc/lazarus_revive(mob/living/reviver, malfunctioning) revive(HEAL_ALL) befriend(reviver) @@ -2578,7 +2584,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) lazarus_policy = get_policy(ROLE_LAZARUS_BAD) || "You have been revived by a malfunctioning lazarus injector! You are now enslaved by whoever revived you." to_chat(src, span_boldnotice(lazarus_policy)) -/// Proc for giving a mob a new 'friend', generally used for AI control and targetting. Returns false if already friends. +/// Proc for giving a mob a new 'friend', generally used for AI control and targeting. Returns false if already friends. /mob/living/proc/befriend(mob/living/new_friend) SHOULD_CALL_PARENT(TRUE) var/friend_ref = REF(new_friend) @@ -2638,14 +2644,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) return var/del_mob = FALSE var/mob/old_mob - var/ai_control = FALSE - var/list/possible_players = list("None", "Poll Ghosts") + sort_list(GLOB.clients) + var/list/possible_players = list("Poll Ghosts") + sort_list(GLOB.clients) var/client/guardian_client = tgui_input_list(admin, "Pick the player to put in control.", "Guardian Controller", possible_players) - if(!guardian_client) + if(isnull(guardian_client)) return - else if(guardian_client == "None") - guardian_client = null - ai_control = (tgui_alert(admin, "Do you want to give the spirit AI control?", "Guardian Controller", list("Yes", "No")) == "Yes") else if(guardian_client == "Poll Ghosts") var/list/candidates = poll_ghost_candidates("Do you want to play as an admin created Guardian Spirit of [real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_HOLOPARASITE) if(LAZYLEN(candidates)) @@ -2658,7 +2660,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) old_mob = guardian_client.mob if(isobserver(old_mob) || tgui_alert(admin, "Do you want to delete [guardian_client]'s old mob?", "Guardian Controller", list("Yes"," No")) == "Yes") del_mob = TRUE - var/picked_type = tgui_input_list(admin, "Pick the guardian type.", "Guardian Controller", subtypesof(/mob/living/simple_animal/hostile/guardian)) + var/picked_type = tgui_input_list(admin, "Pick the guardian type.", "Guardian Controller", subtypesof(/mob/living/basic/guardian)) var/picked_theme = tgui_input_list(admin, "Pick the guardian theme.", "Guardian Controller", list(GUARDIAN_THEME_TECH, GUARDIAN_THEME_MAGIC, GUARDIAN_THEME_CARP, GUARDIAN_THEME_MINER, "Random")) if(picked_theme == "Random") picked_theme = null //holopara code handles not having a theme by giving a random one @@ -2666,20 +2668,16 @@ GLOBAL_LIST_EMPTY(fire_appearances) var/picked_color = input(admin, "Set the guardian's color, cancel to let player set it.", "Guardian Controller", "#ffffff") as color|null if(tgui_alert(admin, "Confirm creation.", "Guardian Controller", list("Yes", "No")) != "Yes") return - var/mob/living/simple_animal/hostile/guardian/summoned_guardian = new picked_type(src, picked_theme) + var/mob/living/basic/guardian/summoned_guardian = new picked_type(src, picked_theme) summoned_guardian.set_summoner(src, different_person = TRUE) if(picked_name) summoned_guardian.fully_replace_character_name(null, picked_name) if(picked_color) - summoned_guardian.set_guardian_color(picked_color) + summoned_guardian.set_guardian_colour(picked_color) summoned_guardian.key = guardian_client?.key guardian_client?.init_verbs() if(del_mob) qdel(old_mob) - if(ai_control) - summoned_guardian.can_have_ai = TRUE - summoned_guardian.toggle_ai(AI_ON) - summoned_guardian.manifest() message_admins(span_adminnotice("[key_name_admin(admin)] gave a guardian spirit controlled by [guardian_client || "AI"] to [src].")) log_admin("[key_name(admin)] gave a guardian spirit controlled by [guardian_client] to [src].") SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Guardian Spirit") diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 361bd5e2769..60991f9e7a4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -171,35 +171,49 @@ SEND_SOUND(src, sound('sound/misc/ui_toggleoffcombat.ogg', volume = 25)) //Slightly modified version of the above /mob/living/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(isitem(AM)) - var/obj/item/thrown_item = AM - var/zone = get_random_valid_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest - var/nosell_hit = SEND_SIGNAL(thrown_item, COMSIG_MOVABLE_IMPACT_ZONE, src, zone, blocked, throwingdatum) // TODO: find a better way to handle hitpush and skipcatch for humans - if(nosell_hit) + if(!isitem(AM)) + // Filled with made up numbers for non-items. + if(check_block(AM, 30, "\the [AM.name]", THROWN_PROJECTILE_ATTACK, 0, BRUTE)) + hitpush = FALSE skipcatch = TRUE - hitpush = FALSE - - if(blocked) - return TRUE - - var/mob/thrown_by = thrown_item.thrownby?.resolve() - if(thrown_by) - log_combat(thrown_by, src, "threw and hit", thrown_item) - if(nosell_hit) - return ..() - visible_message(span_danger("[src] is hit by [thrown_item]!"), \ - span_userdanger("You're hit by [thrown_item]!")) - if(!thrown_item.throwforce) - return - var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) - apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, sharpness = thrown_item.get_sharpness(), wound_bonus = (nosell_hit * CANT_WOUND)) - if(QDELETED(src)) //Damage can delete the mob. - return - if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor. - hitpush = FALSE + blocked = TRUE + else + playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself return ..() - playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + var/obj/item/thrown_item = AM + if(thrown_item.thrownby == WEAKREF(src)) //No throwing stuff at yourself to trigger hit reactions + return ..() + + if(check_block(AM, thrown_item.throwforce, "\the [thrown_item.name]", THROWN_PROJECTILE_ATTACK, 0, thrown_item.damtype)) + hitpush = FALSE + skipcatch = TRUE + blocked = TRUE + + var/zone = get_random_valid_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest + var/nosell_hit = SEND_SIGNAL(thrown_item, COMSIG_MOVABLE_IMPACT_ZONE, src, zone, blocked, throwingdatum) // TODO: find a better way to handle hitpush and skipcatch for humans + if(nosell_hit) + skipcatch = TRUE + hitpush = FALSE + + if(blocked) + return TRUE + + var/mob/thrown_by = thrown_item.thrownby?.resolve() + if(thrown_by) + log_combat(thrown_by, src, "threw and hit", thrown_item) + if(nosell_hit) + return ..() + visible_message(span_danger("[src] is hit by [thrown_item]!"), \ + span_userdanger("You're hit by [thrown_item]!")) + if(!thrown_item.throwforce) + return + var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) + apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, sharpness = thrown_item.get_sharpness(), wound_bonus = (nosell_hit * CANT_WOUND)) + if(QDELETED(src)) //Damage can delete the mob. + return + if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor. + hitpush = FALSE return ..() /mob/living/fire_act() @@ -284,10 +298,6 @@ /mob/living/attack_slime(mob/living/simple_animal/slime/M, list/modifiers) - if(!SSticker.HasRoundStarted()) - to_chat(M, "You cannot attack people before the game has started.") - return - if(M.buckled) if(M in buckled_mobs) M.Feedstop() @@ -297,6 +307,9 @@ to_chat(M, span_warning("You don't want to hurt anyone!")) return FALSE + if(check_block(src, M.melee_damage_upper, "[M]'s glomp", MELEE_ATTACK, M.armour_penetration, M.melee_damage_type)) + return FALSE + if (stat != DEAD) log_combat(M, src, "attacked") M.do_attack_animation(src) @@ -305,30 +318,68 @@ to_chat(M, span_danger("You glomp [src]!")) return TRUE + return FALSE + /mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() - user.face_atom(src) + if(.) + return FALSE // looks wrong, but if the attack chain was cancelled we don't propogate it up to children calls. Yeah it's cringe. + if(user.melee_damage_upper == 0) if(user != src) - visible_message(span_notice("\The [user] [user.friendly_verb_continuous] [src]!"), \ - span_notice("\The [user] [user.friendly_verb_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) + visible_message( + span_notice("[user] [user.friendly_verb_continuous] [src]!"), + span_notice("[user] [user.friendly_verb_continuous] you!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ignored_mobs = user, + ) to_chat(user, span_notice("You [user.friendly_verb_simple] [src]!")) return FALSE + if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt anyone!")) return FALSE + var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) + if(check_block(user, damage, "[user]'s [user.attack_verb_simple]", MELEE_ATTACK/*or UNARMED_ATTACK?*/, user.armour_penetration, user.melee_damage_type)) + return FALSE + if(user.attack_sound) - playsound(loc, user.attack_sound, 50, TRUE, TRUE) + playsound(src, user.attack_sound, 50, TRUE, TRUE) + user.do_attack_animation(src) - visible_message(span_danger("\The [user] [user.attack_verb_continuous] [src]!"), \ - span_userdanger("\The [user] [user.attack_verb_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) + visible_message( + span_danger("[user] [user.attack_verb_continuous] [src]!"), + span_userdanger("[user] [user.attack_verb_continuous] you!"), + null, + COMBAT_MESSAGE_RANGE, + user, + ) + + var/dam_zone = dismembering_strike(user, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return FALSE + + var/armor_block = run_armor_check(user.zone_selected, MELEE, armour_penetration = user.armour_penetration) + to_chat(user, span_danger("You [user.attack_verb_simple] [src]!")) log_combat(user, src, "attacked") - return TRUE + var/damage_done = apply_damage( + damage = damage, + damagetype = user.melee_damage_type, + def_zone = user.zone_selected, + blocked = armor_block, + wound_bonus = user.wound_bonus, + bare_wound_bonus = user.bare_wound_bonus, + sharpness = user.sharpness, + attack_direction = get_dir(user, src), + ) + return damage_done /mob/living/attack_hand(mob/living/carbon/human/user, list/modifiers) . = ..() + if(.) + return TRUE for(var/datum/surgery/operations as anything in surgeries) if(user.combat_mode) @@ -342,6 +393,8 @@ if (martial_result != MARTIAL_ATTACK_INVALID) return martial_result + return FALSE + /mob/living/attack_paw(mob/living/carbon/human/user, list/modifiers) var/martial_result = user.apply_martial_art(src, modifiers) if (martial_result != MARTIAL_ATTACK_INVALID) @@ -362,6 +415,10 @@ if(user.is_muzzled() || user.is_mouth_covered(ITEM_SLOT_MASK)) to_chat(user, span_warning("You can't bite with your mouth covered!")) return FALSE + + if(check_block(user, 1, "[user]'s bite", UNARMED_ATTACK, 0, BRUTE)) + return FALSE + user.do_attack_animation(src, ATTACK_EFFECT_BITE) if (HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || prob(75)) log_combat(user, src, "attacked") @@ -381,7 +438,10 @@ if(L.combat_mode) if(HAS_TRAIT(L, TRAIT_PACIFISM)) to_chat(L, span_warning("You don't want to hurt anyone!")) - return + return FALSE + + if(check_block(L, 1, "[L]'s bite", UNARMED_ATTACK, 0, BRUTE)) + return FALSE L.do_attack_animation(src) if(prob(90)) @@ -395,29 +455,34 @@ visible_message(span_danger("[L.name]'s bite misses [src]!"), \ span_danger("You avoid [L.name]'s bite!"), span_hear("You hear the sound of jaws snapping shut!"), COMBAT_MESSAGE_RANGE, L) to_chat(L, span_warning("Your bite misses [src]!")) - else - visible_message(span_notice("[L.name] rubs its head against [src]."), \ - span_notice("[L.name] rubs its head against you."), null, null, L) - to_chat(L, span_notice("You rub your head against [src].")) - return FALSE + return FALSE + + visible_message(span_notice("[L.name] rubs its head against [src]."), \ + span_notice("[L.name] rubs its head against you."), null, null, L) + to_chat(L, span_notice("You rub your head against [src].")) return FALSE /mob/living/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) SEND_SIGNAL(src, COMSIG_MOB_ATTACK_ALIEN, user, modifiers) if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(check_block(user, 0, "[user]'s tackle", MELEE_ATTACK, 0, BRUTE)) + return FALSE user.do_attack_animation(src, ATTACK_EFFECT_DISARM) return TRUE + if(user.combat_mode) if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt anyone!")) return FALSE + if(check_block(user, user.melee_damage_upper, "[user]'s slash", MELEE_ATTACK, 0, BRUTE)) + return FALSE user.do_attack_animation(src) return TRUE - else - visible_message(span_notice("[user] caresses [src] with its scythe-like arm."), \ - span_notice("[user] caresses you with its scythe-like arm."), null, null, user) - to_chat(user, span_notice("You caress [src] with your scythe-like arm.")) - return FALSE + + visible_message(span_notice("[user] caresses [src] with its scythe-like arm."), \ + span_notice("[user] caresses you with its scythe-like arm."), null, null, user) + to_chat(user, span_notice("You caress [src] with your scythe-like arm.")) + return FALSE /mob/living/attack_hulk(mob/living/carbon/human/user) ..() @@ -494,7 +559,7 @@ if(3) new /mob/living/basic/construct/artificer/hostile(get_turf(src)) if(4) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(get_turf(src)) + new /mob/living/basic/construct/proteon/hostile(get_turf(src)) spawn_dust() investigate_log("has been gibbed by Nar'Sie.", INVESTIGATE_DEATHS) gib() @@ -579,3 +644,9 @@ var/new_angle_s = SIMPLIFY_DEGREES(face_angle + GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180))) ricocheting_projectile.set_angle(new_angle_s) return TRUE + +/mob/living/proc/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) + if(SEND_SIGNAL(src, COMSIG_LIVING_CHECK_BLOCK, hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) & SUCCESSFUL_BLOCK) + return TRUE + + return FALSE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5b2f0fc020b..bbc4a75ede2 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -225,6 +225,3 @@ /// What our current gravity state is. Used to avoid duplicate animates and such var/gravity_state = null - - /// Whether this mob can be mutated into a cybercop via quantum server get_valid_domain_targets(). Specifically dodges megafauna - var/can_be_cybercop = TRUE diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 58c828d6093..ec607c19556 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -151,7 +151,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( say_dead(original_message) return - if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN)) + if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN) && !HAS_TRAIT(src, TRAIT_SIGN_LANG)) // softspoken trait only applies to spoken languages message_mods[WHISPER_MODE] = MODE_WHISPER if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) @@ -194,11 +194,10 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( last_say_args_ref = REF(args) #endif - if(!HAS_TRAIT(src, TRAIT_SIGN_LANG)) // if using sign language skip sending the say signal - // Make sure the arglist is passed exactly - don't pass a copy of it. Say signal handlers will modify some of the parameters. - var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_SAY, args) - if(sigreturn & COMPONENT_UPPERCASE_SPEECH) - message = uppertext(message) + // Make sure the arglist is passed exactly - don't pass a copy of it. Say signal handlers will modify some of the parameters. + var/sigreturn = SEND_SIGNAL(src, COMSIG_MOB_SAY, args) + if(sigreturn & COMPONENT_UPPERCASE_SPEECH) + message = uppertext(message) var/list/message_data = treat_message(message) // unfortunately we still need this message = message_data["message"] diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index ad9a965242e..853e6e9c8eb 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -7,15 +7,8 @@ return MOD.install(laws, user) //Proc includes a success mesage so we don't need another one return - if(W.force && W.damtype != STAMINA && stat != DEAD && !QDELETED(src)) //only sparks if real damage is dealt. - spark_system.start() - return ..() -/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) - if(!SSticker.HasRoundStarted()) - to_chat(user, "You cannot attack people before the game has started.") - return - ..() + return ..() /mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) return //immune to slimes diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c9b72ec8a92..b320f500701 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1015,6 +1015,9 @@ if(.) var/mob/living/silicon/ai/old_ai = . old_ai.connected_robots -= src + // if the borg has a malf AI zeroth law and has been unsynced from the malf AI, then remove the law + if(isnull(connected_ai) && IS_MALF_AI(old_ai) && !isnull(laws?.zeroth)) + clear_zeroth_law(FALSE, TRUE) lamp_doom = FALSE if(connected_ai) connected_ai.connected_robots |= src diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index b9d3304ef8d..074f9d0049a 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -95,8 +95,12 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if(shell) //AI shells always have the laws of the AI to_chat(user, span_warning("[src] is controlled remotely! You cannot upload new laws this way!")) return - if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers - emote("buzz-[user.name]") + if(connected_ai && lawupdate) + to_chat(user, span_warning("[src] is receiving laws remotely from a synced AI!")) + return + if(emagged) + to_chat(user, span_warning("The law interface glitches out!")) + emote("buzz") return if(!mind) //A player mind is required for law procs to run antag checks. to_chat(user, span_warning("[src] is entirely unresponsive!")) @@ -180,8 +184,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real modularInterface.inserted_disk = floppy return - if(W.force && W.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. - spark_system.start() return ..() /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 75cbd83f54f..4b870fdf474 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -27,20 +27,17 @@ /mob/living/silicon/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - if(prob(damage)) - for(var/mob/living/buckled in buckled_mobs) - buckled.Paralyze(20) - unbuckle_mob(buckled) - buckled.visible_message(span_danger("[buckled] is knocked off of [src] by [user]!"), \ - span_userdanger("You're knocked off of [src] by [user]!"), null, null, user) - to_chat(user, span_danger("You knock [buckled] off of [src]!")) - switch(user.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) + var/damage_received = . + if(prob(damage_received)) + for(var/mob/living/buckled in buckled_mobs) + buckled.Paralyze(2 SECONDS) + unbuckle_mob(buckled) + buckled.visible_message( + span_danger("[buckled] is knocked off of [src] by [user]!"), + span_userdanger("You're knocked off of [src] by [user]!"), + ignored_mobs = user, + ) + to_chat(user, span_danger("You knock [buckled] off of [src]!")) /mob/living/silicon/attack_paw(mob/living/user, list/modifiers) return attack_hand(user, modifiers) @@ -79,6 +76,15 @@ to_chat(user, span_notice("You pet [src].")) user.add_mood_event("pet_borg", /datum/mood_event/pet_borg) +/mob/living/silicon/check_block(atom/hitby, damage, attack_text, attack_type, armour_penetration, damage_type, attack_flag) + . = ..() + if(.) + return TRUE + if(damage_type == BRUTE && attack_type == UNARMED_ATTACK && attack_flag == MELEE && damage <= 10) + playsound(src, 'sound/effects/bang.ogg', 10, TRUE) + visible_message(span_danger("[attack_text] doesn't leave a dent on [src]!"), vision_distance = COMBAT_MESSAGE_RANGE) + return TRUE + return FALSE /mob/living/silicon/attack_drone(mob/living/basic/drone/user) if(user.combat_mode) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 103ea7aa147..01d144aea88 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -32,12 +32,14 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to hurt [src]!")) return + if(check_block(user, harm_intent_damage, "[user]'s punch", UNARMED_ATTACK, 0, BRUTE)) + return user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message(span_danger("[user] [response_harm_continuous] [src]!"),\ span_userdanger("[user] [response_harm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [response_harm_simple] [src]!")) playsound(loc, attacked_sound, 25, TRUE, -1) - attack_threshold_check(harm_intent_damage) + apply_damage(harm_intent_damage) log_combat(user, src, "attacked") updatehealth() return TRUE @@ -55,9 +57,7 @@ /mob/living/simple_animal/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) //successful monkey bite. if(stat != DEAD) - var/damage = rand(1, 3) - attack_threshold_check(damage) - return 1 + return apply_damage(rand(1, 3)) if (!user.combat_mode) if (health > 0) visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ @@ -80,30 +80,23 @@ span_userdanger("You're slashed at by [user]!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You slash at [src]!")) playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) - attack_threshold_check(damage) + apply_damage(damage) log_combat(user, src, "attacked") return 1 /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers) . = ..() if(. && stat != DEAD) //successful larva bite - var/damage = rand(5, 10) - . = attack_threshold_check(damage) - if(.) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - -/mob/living/simple_animal/attack_animal(mob/living/simple_animal/user, list/modifiers) - . = ..() - if(.) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - return attack_threshold_check(damage, user.melee_damage_type) + var/damage_done = apply_damage(rand(L.melee_damage_lower, L.melee_damage_upper), BRUTE) + if(damage_done > 0) + L.amount_grown = min(L.amount_grown + damage_done, L.max_grown) /mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/user, list/modifiers) if(..()) //successful slime attack var/damage = rand(15, 25) if(user.is_adult) damage = rand(20, 35) - return attack_threshold_check(damage) + return apply_damage(damage, user.melee_damage_type) /mob/living/simple_animal/attack_drone(mob/living/basic/drone/user) if(user.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon. @@ -115,21 +108,6 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE, actuallydamage = TRUE) - var/temp_damage = damage - if(!damage_coeff[damagetype]) - temp_damage = 0 - else - temp_damage *= damage_coeff[damagetype] - - if(temp_damage >= 0 && temp_damage <= force_threshold) - visible_message(span_warning("[src] looks unharmed!")) - return FALSE - else - if(actuallydamage) - apply_damage(damage, damagetype, null, getarmor(null, armorcheck)) - return TRUE - /mob/living/simple_animal/ex_act(severity, target, origin) . = ..() if(!. || QDELETED(src)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index c369058a2a3..9eca91ab1e6 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -496,11 +496,11 @@ return return ..() -/mob/living/simple_animal/bot/attacked_by(obj/item/I, mob/living/user) - . = ..() - if (!.) - return - do_sparks(5, TRUE, src) +/mob/living/simple_animal/bot/attack_effects(damage_done, hit_zone, armor_block, obj/item/attacking_item, mob/living/attacker) + if(damage_done > 0 && attacking_item.damtype != STAMINA && stat != DEAD) + do_sparks(5, TRUE, src) + . = TRUE + return ..() || . /mob/living/simple_animal/bot/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) . = ..() diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index 59d08fe7339..98d34fc2f71 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -119,7 +119,7 @@ if(!(bot_cover_flags & BOT_COVER_EMAGGED)) return - to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targetting safeties.")) // heheehe. funny + to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny audible_message(span_danger("[src] buzzes oddly!")) playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 17e918f0795..2884b0a0486 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -329,15 +329,15 @@ if(do_after(src, 50, target = target_turf) && mode == BOT_REPAIRING) if(autotile) //Build the floor and include a tile. if(replacetiles && tilestack) - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile tilestack.place_tile(target_turf, src) if(!tilestack) speak("Requesting refill of custom floor tiles to continue replacing.") else - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile - target_turf.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + target_turf.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) else //Build a hull plating without a floor tile. - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else var/turf/open/floor/F = target_turf @@ -370,10 +370,10 @@ F.burnt = FALSE F.update_appearance() else if(istype(is_this_maints, /area/station/maintenance)) //place catwalk if it's plating and we're in maints - F.PlaceOnTop(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) + F.place_on_top(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) else //place normal tile if it's plating anywhere else F = F.make_plating(TRUE) || F - F.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + F.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) if(!QDELETED(src)) go_idle() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 5b994b1fc0c..651384cb030 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -520,7 +520,7 @@ return ..() /mob/living/simple_animal/bot/secbot/attack_alien(mob/living/carbon/alien/user, list/modifiers) - ..() + . = ..() if(!isalien(target)) target = user mode = BOT_HUNT diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 9640dbb9de4..d92478907a1 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -18,6 +18,12 @@ if(AIStatus == AI_IDLE) toggle_ai(AI_ON) +/mob/living/simple_animal/get_damage_mod(damage_type) + var/modifier = ..() + if (damage_type in damage_coeff) + return modifier * damage_coeff[damage_type] + return modifier + /mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) if(!can_adjust_brute_loss(amount, forced, required_bodytype)) return 0 diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm deleted file mode 100644 index 517a6bd4b3c..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ /dev/null @@ -1,616 +0,0 @@ -GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians - -/mob/living/simple_animal/hostile/guardian - name = "Guardian Spirit" - real_name = "Guardian Spirit" - desc = "A mysterious being that stands by its charge, ever vigilant." - speak_emote = list("hisses") - gender = NEUTER - mob_biotypes = MOB_SPECIAL - sentience_type = SENTIENCE_HUMANOID - bubble_icon = "guardian" - response_help_continuous = "passes through" - response_help_simple = "pass through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - icon = 'icons/mob/nonhuman-player/guardian.dmi' - icon_state = "magicbase" - icon_living = "magicbase" - icon_dead = "magicbase" - speed = 0 - combat_mode = TRUE - stop_automated_movement = 1 - attack_sound = 'sound/weapons/punch1.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - maxHealth = INFINITY //The spirit itself is invincible - health = INFINITY - mob_biotypes = MOB_BEAST - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) //how much damage from each damage type we transfer to the owner - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - obj_damage = 40 - melee_damage_lower = 15 - melee_damage_upper = 15 - del_on_death = TRUE - loot = list(/obj/effect/temp_visual/guardian/phase/out) - AIStatus = AI_OFF - can_have_ai = FALSE - light_system = MOVABLE_LIGHT - light_range = 3 - light_on = FALSE - hud_type = /datum/hud/guardian - faction = list() - - /// The guardian's color, used for their sprite, chat, and some effects made by it. - var/guardian_color - /// List of overlays we use. - var/list/guardian_overlays[GUARDIAN_TOTAL_LAYERS] - - /// The summoner of the guardian, the one it's intended to guard! - var/mob/living/summoner - /// How far from the summoner the guardian can be. - var/range = 10 - - /// Which toggle button the HUD uses. - var/toggle_button_type = /atom/movable/screen/guardian/toggle_mode/inactive - /// Name used by the guardian creator. - var/creator_name = "Error" - /// Description used by the guardian creator. - var/creator_desc = "This shouldn't be here! Report it on GitHub!" - /// Icon used by the guardian creator. - var/creator_icon = "fuck" - - /// A string explaining to the guardian what they can do. - var/playstyle_string = span_boldholoparasite("You are a Guardian without any type. You shouldn't exist!") - /// The fluff string we actually use. - var/used_fluff_string - /// Fluff string from tarot cards. - var/magic_fluff_string = span_holoparasite("You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!") - /// Fluff string from holoparasite injectors. - var/tech_fluff_string = span_holoparasite("BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!") - /// Fluff string from holocarp fishsticks. - var/carp_fluff_string = span_holoparasite("CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP") - /// Fluff string from the dusty shard. - var/miner_fluff_string = span_holoparasite("You encounter... Mythril, it shouldn't exist... Submit a bug report!") - - /// Are we forced to not be able to manifest/recall? - var/locked = FALSE - /// Cooldown between manifests/recalls. - COOLDOWN_DECLARE(manifest_cooldown) - /// Cooldown between the summoner resetting the guardian's client. - COOLDOWN_DECLARE(resetting_cooldown) - -/mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme) - . = ..() - GLOB.parasites += src - update_theme(theme) - AddElement(/datum/element/simple_flying) - AddComponent(/datum/component/basic_inhands) - manifest_effects() - -/mob/living/simple_animal/hostile/guardian/Destroy() //if deleted by admins or something random, cut from the summoner - if(is_deployed()) - recall_effects() - if(!QDELETED(summoner)) - cut_summoner(different_person = TRUE) - return ..() - -/// Setter for our summoner mob. -/mob/living/simple_animal/hostile/guardian/proc/set_summoner(mob/living/to_who, different_person = FALSE) - if(QDELETED(to_who)) - qdel(src) //no gettin off scot-free pal......... - return - if(summoner) - cut_summoner(different_person) - summoner = to_who - update_health_hud() - med_hud_set_health() - med_hud_set_status() - add_verb(to_who, list( - /mob/living/proc/guardian_comm, - /mob/living/proc/guardian_recall, - /mob/living/proc/guardian_reset, - )) - if(different_person) - if(mind) - mind.enslave_mind_to_creator(to_who) - else //mindless guardian, manually give them factions - faction += summoner.faction - summoner.faction += "[REF(src)]" - remove_all_languages(LANGUAGE_MASTER) - copy_languages(to_who, LANGUAGE_MASTER) // make sure holoparasites speak same language as master - RegisterSignal(to_who, COMSIG_MOVABLE_MOVED, PROC_REF(check_distance)) - RegisterSignal(to_who, COMSIG_QDELETING, PROC_REF(on_summoner_deletion)) - RegisterSignal(to_who, COMSIG_LIVING_DEATH, PROC_REF(on_summoner_death)) - RegisterSignal(to_who, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_summoner_health_update)) - RegisterSignal(to_who, COMSIG_LIVING_ON_WABBAJACKED, PROC_REF(on_summoner_wabbajacked)) - RegisterSignal(to_who, COMSIG_LIVING_SHAPESHIFTED, PROC_REF(on_summoner_shapeshifted)) - RegisterSignal(to_who, COMSIG_LIVING_UNSHAPESHIFTED, PROC_REF(on_summoner_unshapeshifted)) - recall(forced = TRUE) - if(to_who.stat == DEAD) - on_summoner_death(to_who) - -/mob/living/simple_animal/hostile/guardian/proc/cut_summoner(different_person = FALSE) - if(is_deployed()) - recall_effects() - var/summoner_turf = get_turf(src) - if (!isnull(summoner_turf)) - forceMove(summoner_turf) - UnregisterSignal(summoner, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING, COMSIG_LIVING_DEATH, COMSIG_LIVING_HEALTH_UPDATE, COMSIG_LIVING_ON_WABBAJACKED, COMSIG_LIVING_SHAPESHIFTED, COMSIG_LIVING_UNSHAPESHIFTED)) - if(different_person) - summoner.faction -= "[REF(src)]" - faction -= summoner.faction - mind?.remove_all_antag_datums() - if(!length(summoner.get_all_linked_holoparasites() - src)) - remove_verb(summoner, list( - /mob/living/proc/guardian_comm, - /mob/living/proc/guardian_recall, - /mob/living/proc/guardian_reset, - )) - summoner = null - -/// Signal proc for [COMSIG_LIVING_ON_WABBAJACKED], when our summoner is wabbajacked we should be alerted. -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_wabbajacked(mob/living/source, mob/living/new_mob) - SIGNAL_HANDLER - - set_summoner(new_mob) - to_chat(src, span_holoparasite("Your summoner has changed form!")) - -/// Signal proc for [COMSIG_LIVING_SHAPESHIFTED], when our summoner is shapeshifted we should change to the new mob -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_shapeshifted(mob/living/source, mob/living/new_shape) - SIGNAL_HANDLER - - set_summoner(new_shape) - to_chat(src, span_holoparasite("Your summoner has shapeshifted into that of a [new_shape]!")) - -/// Signal proc for [COMSIG_LIVING_UNSHAPESHIFTED], when our summoner unshapeshifts go back to that mob -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_unshapeshifted(mob/living/source, mob/living/old_summoner) - SIGNAL_HANDLER - - set_summoner(old_summoner) - to_chat(src, span_holoparasite("Your summoner has shapeshifted back into their normal form!")) - -// Ha, no -/mob/living/simple_animal/hostile/guardian/wabbajack(what_to_randomize, change_flags = WABBAJACK) - visible_message(span_warning("[src] resists the polymorph!")) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_health_update(mob/living/source) - SIGNAL_HANDLER - - update_health_hud() - med_hud_set_health() - med_hud_set_status() - -/mob/living/simple_animal/hostile/guardian/med_hud_set_health() - var/image/holder = hud_list?[HEALTH_HUD] - if(isnull(holder)) - return - holder.icon_state = "hud[RoundHealth(summoner || src)]" - var/icon/size_check = icon(icon, icon_state, dir) - holder.pixel_y = size_check.Height() - world.icon_size - -/mob/living/simple_animal/hostile/guardian/med_hud_set_status() - var/image/holder = hud_list?[STATUS_HUD] - if(isnull(holder)) - return - var/icon/size_check = icon(icon, icon_state, dir) - holder.pixel_y = size_check.Height() - world.icon_size - var/mob/living/checking_mob = summoner || src - if(checking_mob.stat == DEAD || HAS_TRAIT(checking_mob, TRAIT_FAKEDEATH)) - holder.icon_state = "huddead" - else - holder.icon_state = "hudhealthy" - -/mob/living/simple_animal/hostile/guardian/Destroy() - GLOB.parasites -= src - return ..() - -/mob/living/simple_animal/hostile/guardian/proc/update_theme(theme) //update the guardian's theme - if(!theme) - theme = pick(GUARDIAN_THEME_MAGIC, GUARDIAN_THEME_TECH, GUARDIAN_THEME_CARP, GUARDIAN_THEME_MINER) - switch(theme)//should make it easier to create new stand designs in the future if anyone likes that - if(GUARDIAN_THEME_MAGIC) - name = "Guardian Spirit" - real_name = "Guardian Spirit" - bubble_icon = "guardian" - icon_state = "magicbase" - icon_living = "magicbase" - icon_dead = "magicbase" - used_fluff_string = magic_fluff_string - if(GUARDIAN_THEME_TECH) - name = "Holoparasite" - real_name = "Holoparasite" - bubble_icon = "holo" - icon_state = "techbase" - icon_living = "techbase" - icon_dead = "techbase" - used_fluff_string = tech_fluff_string - if(GUARDIAN_THEME_MINER) - name = "Power Miner" - real_name = "Power Miner" - bubble_icon = "guardian" - icon_state = "minerbase" - icon_living = "minerbase" - icon_dead = "minerbase" - used_fluff_string = miner_fluff_string - if(GUARDIAN_THEME_CARP) - name = "Holocarp" - real_name = "Holocarp" - bubble_icon = "holo" - icon_state = null //entirely handled by overlays - icon_living = null - icon_dead = null - speak_emote = string_list(list("gnashes")) - desc = "A mysterious fish that stands by its charge, ever vigilant." - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' - attack_vis_effect = ATTACK_EFFECT_BITE - used_fluff_string = carp_fluff_string - guardian_overlays[GUARDIAN_COLOR_LAYER] = mutable_appearance(icon, theme) - apply_overlay(GUARDIAN_COLOR_LAYER) - -/mob/living/simple_animal/hostile/guardian/Login() //if we have a mind, set its name to ours when it logs in - . = ..() - if(!. || !client) - return FALSE - if(!summoner) - to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) - else - to_chat(src, span_holoparasite("You are a [real_name], bound to serve [summoner.real_name].")) - to_chat(src, span_holoparasite("You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.")) - to_chat(src, span_holoparasite("While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.")) - to_chat(src, playstyle_string) - if(!guardian_color) - locked = TRUE - guardian_rename() - guardian_recolor() - locked = FALSE - -/mob/living/simple_animal/hostile/guardian/mind_initialize() - . = ..() - if(!summoner) - to_chat(src, span_boldholoparasite("For some reason, somehow, you have no summoner. Please report this bug immediately.")) - return - mind.enslave_mind_to_creator(summoner) //once our mind is created, we become enslaved to our summoner. cant be done in the first run of set_summoner, because by then we dont have a mind yet. - -/mob/living/simple_animal/hostile/guardian/proc/guardian_recolor() - if(!client) - return - var/chosen_guardian_color = input(src, "What would you like your color to be?","Choose Your Color","#ffffff") as color|null - if(!chosen_guardian_color) //redo proc until we get a color - to_chat(src, span_warning("Not a valid color, please try again.")) - guardian_recolor() - return - set_guardian_color(chosen_guardian_color) - -/mob/living/simple_animal/hostile/guardian/proc/set_guardian_color(colour) - guardian_color = colour - set_light_color(guardian_color) - var/mutable_appearance/guardian_color_overlay = guardian_overlays[GUARDIAN_COLOR_LAYER] - remove_overlay(GUARDIAN_COLOR_LAYER) - guardian_color_overlay.color = guardian_color - guardian_overlays[GUARDIAN_COLOR_LAYER] = guardian_color_overlay - apply_overlay(GUARDIAN_COLOR_LAYER) - -/mob/living/simple_animal/hostile/guardian/proc/guardian_rename() - if(!client) - return - var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN))) - if(!new_name) //redo proc until we get a good name - to_chat(src, span_warning("Not a valid name, please try again.")) - guardian_rename() - return - to_chat(src, span_notice("Your new name [span_name("[new_name]")] anchors itself in your mind.")) - fully_replace_character_name(null, new_name) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_death(mob/living/source) - SIGNAL_HANDLER - - cut_summoner() - if (!isnull(source.loc)) - forceMove(source.loc) - to_chat(src, span_danger("Your summoner has died!")) - visible_message(span_bolddanger("\The [src] dies along with its user!")) - source.visible_message(span_bolddanger("[source]'s body is completely consumed by the strain of sustaining [src]!")) - source.dust(drop_items = TRUE) - death(TRUE) - -/mob/living/simple_animal/hostile/guardian/proc/on_summoner_deletion(mob/living/source) - SIGNAL_HANDLER - - cut_summoner() - to_chat(src, span_danger("Your summoner is gone!")) - qdel(src) - -/mob/living/simple_animal/hostile/guardian/get_status_tab_items() - . += ..() - if(summoner) - var/healthpercent = health_percentage(summoner) - . += "Summoner Health: [round(healthpercent, 0.5)]% ([summoner.health]/[summoner.maxHealth])" - if(!COOLDOWN_FINISHED(src, manifest_cooldown)) - . += "Manifest/Recall Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, manifest_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range - . = ..() - check_distance() - -/mob/living/simple_animal/hostile/guardian/proc/check_distance() - SIGNAL_HANDLER - - if(!summoner) - return - if(get_dist(get_turf(summoner), get_turf(src)) <= range) - return - to_chat(src, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!")) - visible_message(span_danger("\The [src] jumps back to its user.")) - new /obj/effect/temp_visual/guardian/phase/out(loc) - if(istype(summoner.loc, /obj/effect) || isnull(summoner.loc)) - recall(forced = TRUE) - return - forceMove(summoner.loc) - new /obj/effect/temp_visual/guardian/phase(loc) - -/mob/living/simple_animal/hostile/guardian/can_suicide() - return FALSE - -/mob/living/simple_animal/hostile/guardian/proc/is_deployed() - return loc != summoner || !summoner - -/mob/living/simple_animal/hostile/guardian/AttackingTarget(atom/attacked_target) - if(!is_deployed()) - to_chat(src, span_bolddanger("You must be manifested to attack!")) - return FALSE - else - return ..() - -/mob/living/simple_animal/hostile/guardian/death(gibbed) - if(!QDELETED(summoner)) - to_chat(summoner, span_bolddanger("Your [name] died somehow!")) - summoner.dust() - return ..() - -/mob/living/simple_animal/hostile/guardian/update_health_hud() - var/severity = 0 - var/healthpercent = health_percentage(summoner || src) - switch(healthpercent) - if(100 to INFINITY) - severity = 0 - if(85 to 100) - severity = 1 - if(70 to 85) - severity = 2 - if(55 to 70) - severity = 3 - if(40 to 55) - severity = 4 - if(25 to 40) - severity = 5 - else - severity = 6 - if(severity > 0) - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) - else - clear_fullscreen("brute") - if(hud_used?.healths) - hud_used.healths.maptext = MAPTEXT("
[round(healthpercent, 0.5)]%
") - -/mob/living/simple_animal/hostile/guardian/adjustHealth(amount, updating_health = TRUE, forced = FALSE) //The spirit is invincible, but passes on damage to the summoner - . = amount - if(!summoner) - return ..() - if(!is_deployed()) - return FALSE - summoner.adjustBruteLoss(amount) - if(amount < 0 || QDELETED(summoner)) - return - to_chat(summoner, span_bolddanger("Your [name] is under attack! You take damage!")) - summoner.visible_message(span_bolddanger("Blood sprays from [summoner] as [src] takes damage!")) - if(summoner.stat == UNCONSCIOUS || summoner.stat == HARD_CRIT) - to_chat(summoner, span_bolddanger("Your head pounds, you can't take the strain of sustaining [src] in this condition!")) - summoner.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount * 0.5) - -/mob/living/simple_animal/hostile/guardian/ex_act(severity, target) - switch(severity) - if(EXPLODE_DEVASTATE) - investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS) - gib() - return TRUE - if(EXPLODE_HEAVY) - adjustBruteLoss(60) - if(EXPLODE_LIGHT) - adjustBruteLoss(30) - - return TRUE - -/mob/living/simple_animal/hostile/guardian/gib() - death(TRUE) - -/mob/living/simple_animal/hostile/guardian/dust(just_ash, drop_items, force) - death(TRUE) - -//HAND HANDLING - -/mob/living/simple_animal/hostile/guardian/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - if(!slot) - return FALSE - if(!istype(equipping)) - return FALSE - - . = TRUE - var/index = get_held_index_of_item(equipping) - if(index) - held_items[index] = null - update_held_items() - - if(equipping.pulledby) - equipping.pulledby.stop_pulling() - - equipping.screen_loc = null // will get moved if inventory is visible - equipping.forceMove(src) - SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) - equipping.on_equipped(src, slot) - -/mob/living/simple_animal/hostile/guardian/proc/apply_overlay(cache_index) - if((. = guardian_overlays[cache_index])) - add_overlay(.) - -/mob/living/simple_animal/hostile/guardian/proc/remove_overlay(cache_index) - var/overlay = guardian_overlays[cache_index] - if(overlay) - cut_overlay(overlay) - guardian_overlays[cache_index] = null - -/mob/living/simple_animal/hostile/guardian/regenerate_icons() - update_held_items() - -//MANIFEST, RECALL, TOGGLE MODE/LIGHT, SHOW TYPE - -/mob/living/simple_animal/hostile/guardian/proc/manifest(forced) - if(is_deployed() || isnull(summoner.loc) || istype(summoner.loc, /obj/effect) || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) - return FALSE - forceMove(summoner.loc) - new /obj/effect/temp_visual/guardian/phase(loc) - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - reset_perspective() - manifest_effects() - return TRUE - -/mob/living/simple_animal/hostile/guardian/proc/recall(forced) - if(!is_deployed() || !summoner || (!COOLDOWN_FINISHED(src, manifest_cooldown) && !forced) || locked) - return FALSE - new /obj/effect/temp_visual/guardian/phase/out(loc) - forceMove(summoner) - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - recall_effects() - return TRUE - -/mob/living/simple_animal/hostile/guardian/proc/manifest_effects() - return - -/mob/living/simple_animal/hostile/guardian/proc/recall_effects() - return - -/mob/living/simple_animal/hostile/guardian/proc/toggle_modes() - to_chat(src, span_bolddanger("You don't have another mode!")) - -/mob/living/simple_animal/hostile/guardian/proc/toggle_light() - if(!light_on) - to_chat(src, span_notice("You activate your light.")) - set_light_on(TRUE) - else - to_chat(src, span_notice("You deactivate your light.")) - set_light_on(FALSE) - - -/mob/living/simple_animal/hostile/guardian/verb/check_type() - set name = "Check Guardian Type" - set category = "Guardian" - set desc = "Check what type you are." - to_chat(src, playstyle_string) - -//COMMUNICATION - -/mob/living/simple_animal/hostile/guardian/proc/communicate() - if(!summoner) - return - var/sender_key = key - var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") - if(sender_key != key || !input) //guardian got reset, or did not enter anything - return - - var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding - var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color - - to_chat(summoner, "[my_message]") - var/list/guardians = summoner.get_all_linked_holoparasites() - for(var/guardian in guardians) - to_chat(guardian, "[my_message]") - for(var/dead_mob in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(dead_mob, src) - to_chat(dead_mob, "[link] [my_message]") - - src.log_talk(input, LOG_SAY, tag="guardian") - -/mob/living/proc/guardian_comm() - set name = "Communicate" - set category = "Guardian" - set desc = "Communicate telepathically with your guardian." - var/input = tgui_input_text(src, "Enter a message to tell your guardian", "Message") - if(!input) - return - - var/preliminary_message = span_boldholoparasite("[input]") //apply basic color/bolding - var/my_message = span_boldholoparasite("[src]: [preliminary_message]") //add source, color source with default grey... - - to_chat(src, "[my_message]") - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/guardian as anything in guardians) - to_chat(guardian, "[src]: [preliminary_message]" ) - for(var/dead_mob in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(dead_mob, src) - to_chat(dead_mob, "[link] [my_message]") - - src.log_talk(input, LOG_SAY, tag="guardian") - -//FORCE RECALL/RESET - -/mob/living/proc/guardian_recall() - set name = "Recall Guardian" - set category = "Guardian" - set desc = "Forcibly recall your guardian." - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/guardian in guardians) - guardian.recall() - -/mob/living/proc/guardian_reset() - set name = "Reset Guardian Player (5 Minute Cooldown)" - set category = "Guardian" - set desc = "Re-rolls which ghost will control your Guardian. Can be used once per 5 minutes." - - var/list/guardians = get_all_linked_holoparasites() - for(var/mob/living/simple_animal/hostile/guardian/resetting_guardian as anything in guardians) - if(!COOLDOWN_FINISHED(resetting_guardian, resetting_cooldown)) - guardians -= resetting_guardian //clear out guardians that are already reset - - var/mob/living/simple_animal/hostile/guardian/chosen_guardian = tgui_input_list(src, "Pick the guardian you wish to reset", "Guardian Reset", sort_names(guardians)) - if(isnull(chosen_guardian)) - to_chat(src, span_holoparasite("You decide not to reset [length(guardians) > 1 ? "any of your guardians":"your guardian"].")) - return - - to_chat(src, span_holoparasite("You attempt to reset [chosen_guardian.real_name]'s personality...")) - var/list/mob/dead/observer/ghost_candidates = poll_ghost_candidates("Do you want to play as [src.real_name]'s Guardian Spirit?", ROLE_PAI, FALSE, 100) - if(!LAZYLEN(ghost_candidates)) - to_chat(src, span_holoparasite("There were no ghosts willing to take control of [chosen_guardian.real_name]. Looks like you're stuck with it for now.")) - return - - var/mob/dead/observer/candidate = pick(ghost_candidates) - to_chat(chosen_guardian, span_holoparasite("Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")) - to_chat(src, span_boldholoparasite("Your [chosen_guardian.real_name] has been successfully reset.")) - message_admins("[key_name_admin(candidate)] has taken control of ([ADMIN_LOOKUPFLW(chosen_guardian)])") - chosen_guardian.ghostize(FALSE) - chosen_guardian.key = candidate.key - COOLDOWN_START(chosen_guardian, resetting_cooldown, 5 MINUTES) - chosen_guardian.guardian_rename() //give it a new color and name, to show it's a new person - chosen_guardian.guardian_recolor() - -////////parasite tracking/finding procs - -/// Returns a list of all holoparasites that has this mob as a summoner. -/mob/living/proc/get_all_linked_holoparasites() - RETURN_TYPE(/list) - var/list/all_parasites = list() - for(var/mob/living/simple_animal/hostile/guardian/stand as anything in GLOB.parasites) - if(stand.summoner != src) - continue - all_parasites += stand - return all_parasites - -/// Returns true if this holoparasite has the same summoner as the passed holoparasite. -/mob/living/simple_animal/hostile/guardian/proc/hasmatchingsummoner(mob/living/simple_animal/hostile/guardian/other_guardian) - return istype(other_guardian) && other_guardian.summoner == summoner diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm deleted file mode 100644 index 340e92a5b42..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ /dev/null @@ -1,107 +0,0 @@ -//Assassin -/mob/living/simple_animal/hostile/guardian/assassin - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_SLASH - sharpness = SHARP_POINTY - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - playstyle_string = span_holoparasite("As an assassin type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage.") - magic_fluff_string = span_holoparasite("..And draw the Space Ninja, a lethal, invisible assassin.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Assassin modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space.") - miner_fluff_string = span_holoparasite("You encounter... Glass, a sharp, fragile attacker.") - creator_name = "Assassin" - creator_desc = "Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth." - creator_icon = "assassin" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode/assassin - /// Is it in stealth mode? - var/toggle = FALSE - /// Time between going in stealth. - var/stealth_cooldown_time = 16 SECONDS - /// Damage added in stealth mode. - var/damage_bonus = 35 - /// Our wound bonus when in stealth mode. - var/stealth_wound_bonus = -20 //from -100, you can now wound! - /// Screen alert given when we are able to stealth. - var/atom/movable/screen/alert/canstealthalert - /// Screen alert given when we are in stealth. - var/atom/movable/screen/alert/instealthalert - /// Cooldown for the stealth toggle. - COOLDOWN_DECLARE(stealth_cooldown) - -/mob/living/simple_animal/hostile/guardian/assassin/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, stealth_cooldown)) - . += "Stealth Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget(atom/attacked_target) - . = ..() - if(.) - if(toggle && (isliving(target) || istype(target, /obj/structure/window) || istype(target, /obj/structure/grille))) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && toggle) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/recall_effects() - if(toggle) - toggle_modes(forced = TRUE) - -/mob/living/simple_animal/hostile/guardian/assassin/toggle_modes(forced = FALSE) - if(toggle) - melee_damage_lower -= damage_bonus - melee_damage_upper -= damage_bonus - armour_penetration = initial(armour_penetration) - wound_bonus = initial(wound_bonus) - obj_damage = initial(obj_damage) - environment_smash = initial(environment_smash) - alpha = initial(alpha) - if(!forced) - to_chat(src, span_bolddanger("You exit stealth.")) - else - visible_message(span_danger("\The [src] suddenly appears!")) - COOLDOWN_START(src, stealth_cooldown, stealth_cooldown_time) //we were forced out of stealth and go on cooldown - addtimer(CALLBACK(src, PROC_REF(updatestealthalert)), stealth_cooldown_time) - COOLDOWN_START(src, manifest_cooldown, 4 SECONDS) //can't recall for 4 seconds - updatestealthalert() - toggle = FALSE - else if(COOLDOWN_FINISHED(src, stealth_cooldown)) - if(!is_deployed()) - to_chat(src, span_bolddanger("You have to be manifested to enter stealth!")) - return - melee_damage_lower += damage_bonus - melee_damage_upper += damage_bonus - armour_penetration = 100 - wound_bonus = stealth_wound_bonus - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - new /obj/effect/temp_visual/guardian/phase/out(get_turf(src)) - alpha = 15 - if(!forced) - to_chat(src, span_bolddanger("You enter stealth, empowering your next attack.")) - updatestealthalert() - toggle = TRUE - else if(!forced) - to_chat(src, span_bolddanger("You cannot yet enter stealth, wait another [DisplayTimeText(COOLDOWN_TIMELEFT(src, stealth_cooldown))]!")) - -/mob/living/simple_animal/hostile/guardian/assassin/proc/updatestealthalert() - if(!COOLDOWN_FINISHED(src, stealth_cooldown)) - clear_alert("instealth") - instealthalert = null - clear_alert("canstealth") - canstealthalert = null - return - if(toggle && !instealthalert) - instealthalert = throw_alert("instealth", /atom/movable/screen/alert/instealth) - clear_alert("canstealth") - canstealthalert = null - else if(!toggle && !canstealthalert) - canstealthalert = throw_alert("canstealth", /atom/movable/screen/alert/canstealth) - clear_alert("instealth") - instealthalert = null - diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm deleted file mode 100644 index e1e0de66b00..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ /dev/null @@ -1,74 +0,0 @@ -//Charger -/mob/living/simple_animal/hostile/guardian/charger - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = TRUE //technically - ranged_message = "charges" - ranged_cooldown_time = 4 SECONDS - speed = -0.5 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a charger type you do medium damage, have light damage resistance, move very fast, can be ridden, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.") - magic_fluff_string = span_holoparasite("..And draw the Hunter, an alien master of rapid assault.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Charge modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs...") - miner_fluff_string = span_holoparasite("You encounter... Titanium, a lightweight, agile fighter.") - creator_name = "Charger" - creator_desc = "Moves very fast, does medium damage on attack, can be ridden and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding." - creator_icon = "charger" - /// Is it currently charging at something? - var/charging = FALSE - /// How much damage it does while charging. - var/charge_damage = 20 - -/mob/living/simple_animal/hostile/guardian/charger/Initialize(mapload, theme) - . = ..() - AddElement(/datum/element/ridable, /datum/component/riding/creature/guardian) - -/mob/living/simple_animal/hostile/guardian/charger/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, ranged_cooldown)) - . += "Charge Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, ranged_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/charger/OpenFire(atom/target) - if(charging) - return - visible_message(span_danger("[src] [ranged_message] at [target]!")) - COOLDOWN_START(src, ranged_cooldown, ranged_cooldown_time) - clear_alert(ALERT_CHARGE) - addtimer(CALLBACK(src, PROC_REF(throw_alert), ALERT_CHARGE, /atom/movable/screen/alert/cancharge), ranged_cooldown_time) - Shoot(target) - -/mob/living/simple_animal/hostile/guardian/charger/Shoot(atom/targeted_atom) - charging = TRUE - playsound(src, 'sound/items/modsuit/loader_launch.ogg', 75, TRUE) - throw_at(targeted_atom, range, speed = 1.5, thrower = src, spin = FALSE, diagonals_first = TRUE, callback = CALLBACK(src, PROC_REF(charging_end))) - -/mob/living/simple_animal/hostile/guardian/charger/proc/charging_end() - charging = FALSE - -/mob/living/simple_animal/hostile/guardian/charger/Move() - if(charging) - new /obj/effect/temp_visual/decoy/fading(loc, src) - return ..() - -/mob/living/simple_animal/hostile/guardian/charger/check_distance() - if(!charging) - ..() - -/mob/living/simple_animal/hostile/guardian/charger/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!charging) - return ..() - if(!isliving(hit_atom) || hit_atom == summoner || hasmatchingsummoner(hit_atom)) - return - var/mob/living/hit_mob = hit_atom - if(ishuman(hit_mob)) - var/mob/living/carbon/human/hit_human = hit_mob - if(hit_human.check_shields(src, charge_damage, name, attack_type = THROWN_PROJECTILE_ATTACK)) - return - hit_mob.drop_all_held_items() - hit_mob.visible_message(span_danger("[src] slams into [hit_mob]!"), span_userdanger("[src] slams into you!")) - hit_mob.apply_damage(charge_damage, BRUTE) - playsound(hit_mob, 'sound/effects/meteorimpact.ogg', 100, TRUE) - shake_camera(hit_mob, 4, 3) - shake_camera(src, 2, 3) - diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm deleted file mode 100644 index d2fbfc33c87..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ /dev/null @@ -1,90 +0,0 @@ -//Dextrous -/mob/living/simple_animal/hostile/guardian/dextrous - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a dextrous type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!") - magic_fluff_string = span_holoparasite("..And draw the Drone, a dextrous master of construction and repair.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Dextrous combat modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! It can hold stuff in its fins, sort of.") - miner_fluff_string = span_holoparasite("You encounter... Gold, a malleable constructor.") - creator_name = "Dextrous" - creator_desc = "Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item." - creator_icon = "dextrous" - dextrous = TRUE - hud_type = /datum/hud/dextrous/guardian - held_items = list(null, null) - var/obj/item/internal_storage //what we're storing within ourself - -/mob/living/simple_animal/hostile/guardian/dextrous/death(gibbed) - . = ..() - if(internal_storage) - dropItemToGround(internal_storage) - -/mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user) - . = ..() - if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - . += span_info("It is holding [internal_storage.get_examine_string(user)] in its internal storage.") - -/mob/living/simple_animal/hostile/guardian/dextrous/recall_effects() - drop_all_held_items() - -/mob/living/simple_animal/hostile/guardian/dextrous/check_distance() - if(!summoner || get_dist(get_turf(summoner), get_turf(src)) <= range) - return - drop_all_held_items() - ..() //lose items, then return - -//SLOT HANDLING BULLSHIT FOR INTERNAL STORAGE -/mob/living/simple_animal/hostile/guardian/dextrous/doUnEquip(obj/item/equipped_item, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - if(..()) - update_held_items() - if(equipped_item == internal_storage) - internal_storage = null - update_inv_internal_storage() - return TRUE - return FALSE - -/mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/equipped_item, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE) - switch(slot) - if(ITEM_SLOT_DEX_STORAGE) - if(internal_storage) - return FALSE - return TRUE - ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/get_item_by_slot(slot_id) - if(slot_id == ITEM_SLOT_DEX_STORAGE) - return internal_storage - return ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/get_slot_by_item(obj/item/looking_for) - if(internal_storage == looking_for) - return ITEM_SLOT_DEX_STORAGE - return ..() - -/mob/living/simple_animal/hostile/guardian/dextrous/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - if(!..()) - return - - switch(slot) - if(ITEM_SLOT_DEX_STORAGE) - internal_storage = equipping - update_inv_internal_storage() - else - to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) - -/mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot() - return ITEM_SLOT_DEX_STORAGE - -/mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot() - return ITEM_SLOT_DEX_STORAGE - -/mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage() - if(internal_storage && client && hud_used?.hud_shown) - internal_storage.screen_loc = ui_id - client.screen += internal_storage - -/mob/living/simple_animal/hostile/guardian/dextrous/regenerate_icons() - ..() - update_inv_internal_storage() diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm deleted file mode 100644 index 6fbc61ee458..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ /dev/null @@ -1,72 +0,0 @@ -#define UNREGISTER_BOMB_SIGNALS(A) \ - do { \ - UnregisterSignal(A, boom_signals); \ - UnregisterSignal(A, COMSIG_ATOM_EXAMINE); \ - } while (0) - -//Explosive -/mob/living/simple_animal/hostile/guardian/explosive - melee_damage_lower = 15 - melee_damage_upper = 15 - damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) - range = 13 - playstyle_string = span_holoparasite("As an explosive type, you have moderate close combat abilities and are capable of converting nearby items and objects into disguised bombs via right-click.") - magic_fluff_string = span_holoparasite("..And draw the Scientist, master of explosive death.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Explosive modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's an explosive carp! Boom goes the fishy.") - miner_fluff_string = span_holoparasite("You encounter... Gibtonite, an explosive fighter.") - creator_name = "Explosive" - creator_desc = "High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay." - creator_icon = "explosive" - /// Static list of signals that activate the boom. - var/static/list/boom_signals = list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_BUMPED, COMSIG_ATOM_ATTACK_HAND) - /// After this amount of time passses, boom deactivates. - var/decay_time = 1 MINUTES - /// Time between bombs. - var/bomb_cooldown_time = 20 SECONDS - /// The cooldown timer between bombs. - COOLDOWN_DECLARE(bomb_cooldown) - -/mob/living/simple_animal/hostile/guardian/explosive/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, bomb_cooldown)) - . += "Bomb Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, bomb_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/explosive/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isobj(attack_target)) - plant_bomb(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/explosive/proc/plant_bomb(obj/planting_on) - if(!COOLDOWN_FINISHED(src, bomb_cooldown)) - to_chat(src, span_bolddanger("Your powers are on cooldown! You must wait [DisplayTimeText(COOLDOWN_TIMELEFT(src, bomb_cooldown))] between bombs.")) - return - to_chat(src, span_bolddanger("Success! Bomb armed!")) - COOLDOWN_START(src, bomb_cooldown, bomb_cooldown_time) - RegisterSignal(planting_on, COMSIG_ATOM_EXAMINE, PROC_REF(display_examine)) - RegisterSignals(planting_on, boom_signals, PROC_REF(kaboom)) - addtimer(CALLBACK(src, PROC_REF(disable), planting_on), decay_time, TIMER_UNIQUE|TIMER_OVERRIDE) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/kaboom(atom/source, mob/living/explodee) - SIGNAL_HANDLER - if(!istype(explodee)) - return - if(explodee == src || explodee == summoner || hasmatchingsummoner(explodee)) - return - to_chat(explodee, span_bolddanger("[source] was boobytrapped!")) - to_chat(src, span_bolddanger("Success! Your trap caught [explodee]")) - playsound(source, 'sound/effects/explosion2.ogg', 200, TRUE) - new /obj/effect/temp_visual/explosion(get_turf(source)) - EX_ACT(explodee, EXPLODE_HEAVY) - UNREGISTER_BOMB_SIGNALS(source) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/disable(obj/rigged_obj) - to_chat(src, span_bolddanger("Failure! Your trap didn't catch anyone this time.")) - UNREGISTER_BOMB_SIGNALS(rigged_obj) - -/mob/living/simple_animal/hostile/guardian/explosive/proc/display_examine(datum/source, mob/user, text) - SIGNAL_HANDLER - text += span_holoparasite("It glows with a strange light!") - -#undef UNREGISTER_BOMB_SIGNALS diff --git a/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm b/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm deleted file mode 100644 index 7808f8a6b48..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/gaseous.dm +++ /dev/null @@ -1,103 +0,0 @@ -//Gaseous -/mob/living/simple_animal/hostile/guardian/gaseous - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 0) - range = 7 - playstyle_string = span_holoparasite("As a gaseous type, you have only light damage resistance, but you can expel gas in an area. In addition, your punches cause sparks, and you make your summoner inflammable.") - magic_fluff_string = span_holoparasite("..And draw the Atmospheric Technician, flooding the area with gas!") - tech_fluff_string = span_holoparasite("Boot sequence complete. Atmospheric modules activated. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish.") - miner_fluff_string = span_holoparasite("You encounter... Plasma, the bringer of fire.") - creator_name = "Gaseous" - creator_desc = "Creates sparks on touch and continuously expels a gas of its choice. Automatically extinguishes the user if they catch on fire." - creator_icon = "gaseous" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode/gases - /// Gas being expelled. - var/expelled_gas = null - /// Rate of temperature stabilization per second. - var/temp_stabilization_rate = 0.1 - /// Possible gases to expel, with how much moles they create. - var/static/list/possible_gases = list( - /datum/gas/oxygen = 50, - /datum/gas/nitrogen = 750, //overpressurizing is hard!. - /datum/gas/water_vapor = 1, //you need incredibly little water vapor for the effects to kick in - /datum/gas/nitrous_oxide = 15, - /datum/gas/carbon_dioxide = 50, - /datum/gas/plasma = 3, - /datum/gas/bz = 10, - ) - /// Gas colors, used for the particles. - var/static/list/gas_colors = list( - /datum/gas/oxygen = "#63BFDD", //color of frozen oxygen - /datum/gas/nitrogen = "#777777", //grey (grey) - /datum/gas/water_vapor = "#96ADCF", //water is slightly blue - /datum/gas/nitrous_oxide = "#FEFEFE", //white like the sprite - /datum/gas/carbon_dioxide = "#222222", //black like coal - /datum/gas/plasma = "#B233CC", //color of the plasma sprite - /datum/gas/bz = "#FAFF00", //color of the bz metabolites reagent - ) - -/mob/living/simple_animal/hostile/guardian/gaseous/Initialize(mapload, theme) - . = ..() - RegisterSignal(src, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) - -/mob/living/simple_animal/hostile/guardian/gaseous/AttackingTarget(atom/attacked_target) - . = ..() - if(!isliving(target)) - return - do_sparks(1, TRUE, target) - -/mob/living/simple_animal/hostile/guardian/gaseous/recall(forced) - expelled_gas = null - QDEL_NULL(particles) //need to delete before putting in another object - . = ..() - if(. && summoner) - UnregisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH) - -/mob/living/simple_animal/hostile/guardian/gaseous/manifest(forced) - . = ..() - if(. && summoner) - RegisterSignal(summoner, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) - -/mob/living/simple_animal/hostile/guardian/gaseous/Life(seconds_per_tick, times_fired) - . = ..() - if(summoner) - summoner.extinguish_mob() - summoner.set_fire_stacks(0, remove_wet_stacks = FALSE) - summoner.adjust_bodytemperature(get_temp_change_amount((summoner.get_body_temp_normal() - summoner.bodytemperature), temp_stabilization_rate * seconds_per_tick)) - if(!expelled_gas) - return - var/datum/gas_mixture/mix_to_spawn = new() - mix_to_spawn.add_gas(expelled_gas) - mix_to_spawn.gases[expelled_gas][MOLES] = possible_gases[expelled_gas] * seconds_per_tick - mix_to_spawn.temperature = T20C - var/turf/open/our_turf = get_turf(src) - our_turf.assume_air(mix_to_spawn) - -/mob/living/simple_animal/hostile/guardian/gaseous/toggle_modes() - var/list/gases = list("None") - for(var/datum/gas/gas as anything in possible_gases) - gases[initial(gas.name)] = gas - var/picked_gas = tgui_input_list(src, "Select a gas to expel.", "Gas Producer", gases) - if(picked_gas == "None") - expelled_gas = null - QDEL_NULL(particles) - to_chat(src, span_notice("You stopped expelling gas.")) - return - var/gas_type = gases[picked_gas] - if(!picked_gas || !gas_type) - return - to_chat(src, span_bolddanger("You are now expelling [picked_gas].")) - investigate_log("set their gas type to [picked_gas].", INVESTIGATE_ATMOS) - expelled_gas = gas_type - if(!particles) - particles = new /particles/smoke/steam() - particles.position = list(-1, 8, 0) - particles.fadein = 5 - particles.height = 200 - particles.color = gas_colors[gas_type] - -/mob/living/simple_animal/hostile/guardian/gaseous/proc/stop_pressure(datum/source) - SIGNAL_HANDLER - return COMSIG_ATOM_BLOCKS_PRESSURE diff --git a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm b/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm deleted file mode 100644 index fe6a0ec5856..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/gravitokinetic.dm +++ /dev/null @@ -1,91 +0,0 @@ -//gravitokinetic -/mob/living/simple_animal/hostile/guardian/gravitokinetic - melee_damage_lower = 15 - melee_damage_upper = 15 - damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75) - playstyle_string = span_holoparasite("As a gravitokinetic type, you can right-click to make the gravity on the ground stronger, and punching applies this effect to a target.") - magic_fluff_string = span_holoparasite("..And draw the Singularity, an anomalous force of terror.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Gravitokinetic modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a gravitokinetic carp! Now do you understand the gravity of the situation?") - miner_fluff_string = span_holoparasite("You encounter... Bananium, a master of gravity business.") - creator_name = "Gravitokinetic" - creator_desc = "Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but this will affect the user." - creator_icon = "gravitokinetic" - /// Targets we have applied our effects on. - var/list/gravity_targets = list() - /// Distance in which our ability works - var/gravity_power_range = 10 - /// Gravity added on punches. - var/punch_gravity = 5 - /// Gravity added to turfs. - var/turf_gravity = 3 - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/Initialize(mapload, theme) - . = ..() - AddElement(/datum/element/forced_gravity, 1) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/set_summoner(mob/to_who, different_person) - . = ..() - to_who.AddElement(/datum/element/forced_gravity, 1) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/cut_summoner(different_person) - summoner.RemoveElement(/datum/element/forced_gravity, 1) - return ..() - -///Removes gravity from affected mobs upon guardian death to prevent permanent effects -/mob/living/simple_animal/hostile/guardian/gravitokinetic/death() - . = ..() - for(var/gravity_target in gravity_targets) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/AttackingTarget(atom/attacked_target) - . = ..() - if(isliving(target) && !hasmatchingsummoner(attacked_target) && target != src && target != summoner && !gravity_targets[target]) - to_chat(src, span_bolddanger("Your punch has applied heavy gravity to [target]!")) - add_gravity(target, punch_gravity) - to_chat(target, span_userdanger("Everything feels really heavy!")) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && !gravity_targets[target]) - slam_turf(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/slam_turf(turf/open/slammed) - if(!isopenturf(slammed) || isgroundlessturf(slammed)) - to_chat(src, span_warning("You cannot add gravity to this!")) - return - visible_message(span_danger("[src] slams their fist into the [slammed]!"), span_notice("You modify the gravity of the [slammed].")) - do_attack_animation(slammed) - add_gravity(slammed, turf_gravity) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/recall_effects() - to_chat(src, span_bolddanger("You have released your gravitokinetic powers!")) - for(var/gravity_target in gravity_targets) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) - . = ..() - for(var/gravity_target in gravity_targets) - if(get_dist(src, gravity_target) > gravity_power_range) - remove_gravity(gravity_target) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/add_gravity(atom/target, new_gravity = 3) - if(gravity_targets[target]) - return - target.AddElement(/datum/element/forced_gravity, new_gravity) - gravity_targets[target] = new_gravity - RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(distance_check)) - playsound(src, 'sound/effects/gravhit.ogg', 100, TRUE) - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/remove_gravity(atom/target) - if(isnull(gravity_targets[target])) - return - UnregisterSignal(target, COMSIG_MOVABLE_MOVED) - target.RemoveElement(/datum/element/forced_gravity, gravity_targets[target]) - gravity_targets -= target - -/mob/living/simple_animal/hostile/guardian/gravitokinetic/proc/distance_check(atom/movable/moving_target, old_loc, dir, forced) - SIGNAL_HANDLER - if(get_dist(src, moving_target) > gravity_power_range) - remove_gravity(moving_target) diff --git a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm b/code/modules/mob/living/simple_animal/guardian/types/lightning.dm deleted file mode 100644 index 9739445f7c9..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/lightning.dm +++ /dev/null @@ -1,111 +0,0 @@ -/obj/effect/ebeam/chain - name = "lightning chain" - layer = LYING_MOB_LAYER - plane = GAME_PLANE_FOV_HIDDEN - -//Lightning -/mob/living/simple_animal/hostile/guardian/lightning - melee_damage_lower = 7 - melee_damage_upper = 7 - attack_verb_continuous = "shocks" - attack_verb_simple = "shock" - melee_damage_type = BURN - attack_sound = 'sound/machines/defib_zap.ogg' - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - range = 7 - playstyle_string = span_holoparasite("As a lightning type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.") - magic_fluff_string = span_holoparasite("..And draw the Tesla, a shocking, lethal source of power.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Lightning modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one! It's a lightning carp! Everyone else goes zap zap.") - miner_fluff_string = span_holoparasite("You encounter... Iron, a conductive master of lightning.") - creator_name = "Lightning" - creator_desc = "Attacks apply lightning chains to targets. Has a lightning chain to the user. Lightning chains shock everything near them, doing constant damage." - creator_icon = "lightning" - /// Beam datum of our lightning chain to the summoner. - var/datum/beam/summonerchain - /// List of all lightning chains attached to enemies. - var/list/enemychains = list() - /// Amount of shocks we've given through the chain to the summoner. - var/successfulshocks = 0 - /// Cooldown between shocks. - COOLDOWN_DECLARE(shock_cooldown) - -/mob/living/simple_animal/hostile/guardian/lightning/AttackingTarget(atom/attacked_target) - . = ..() - if(!. || !isliving(target) || target == summoner || hasmatchingsummoner(target)) - return - cleardeletedchains() - for(var/datum/beam/chain as anything in enemychains) - if(chain.target == target) - return //oh this guy already HAS a chain, let's not chain again - if(length(enemychains) > 2) - var/datum/beam/enemy_chain = pick(enemychains) - qdel(enemy_chain) - enemychains -= enemy_chain - enemychains += Beam(target, "lightning[rand(1,12)]", maxdistance=7, beam_type=/obj/effect/ebeam/chain) - -/mob/living/simple_animal/hostile/guardian/lightning/manifest_effects() - START_PROCESSING(SSfastprocess, src) - if(summoner) - summonerchain = Beam(summoner, "lightning[rand(1,12)]", beam_type=/obj/effect/ebeam/chain) - -/mob/living/simple_animal/hostile/guardian/lightning/recall_effects() - STOP_PROCESSING(SSfastprocess, src) - removechains() - -/mob/living/simple_animal/hostile/guardian/lightning/process(seconds_per_tick) - if(!COOLDOWN_FINISHED(src, shock_cooldown)) - return - if(successfulshocks > 5) - successfulshocks = 0 - if(shockallchains()) - successfulshocks++ - COOLDOWN_START(src, shock_cooldown, 0.3 SECONDS) - -/mob/living/simple_animal/hostile/guardian/lightning/proc/cleardeletedchains() - if(summonerchain && QDELETED(summonerchain)) - summonerchain = null - for(var/datum/chain as anything in enemychains) - if(QDELETED(chain)) - enemychains -= chain - -/mob/living/simple_animal/hostile/guardian/lightning/proc/shockallchains() - . = 0 - cleardeletedchains() - if(summonerchain) - . += chainshock(summonerchain) - for(var/chain in enemychains) - . += chainshock(chain) - -/mob/living/simple_animal/hostile/guardian/lightning/proc/removechains() - QDEL_NULL(summonerchain) - for(var/chain in enemychains) - qdel(chain) - enemychains = list() - -/mob/living/simple_animal/hostile/guardian/lightning/proc/chainshock(datum/beam/B) //fuck you, fuck this - . = 0 - var/list/turfs = list() - for(var/E in B.elements) - var/obj/effect/ebeam/chainpart = E - if(chainpart && chainpart.x && chainpart.y && chainpart.z) - var/turf/T = get_turf_pixel(chainpart) - turfs |= T - if(T != get_turf(B.origin) && T != get_turf(B.target)) - for(var/turf/TU in circle_range(T, 1)) - turfs |= TU - for(var/turf in turfs) - var/turf/T = turf - for(var/mob/living/L in T) - if(L.stat != DEAD && L != src && L != summoner) - if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them - continue - if(successfulshocks > 4) - L.electrocute_act(0) - L.visible_message( - span_danger("[L] was shocked by the lightning chain!"), \ - span_userdanger("You are shocked by the lightning chain!"), \ - span_hear("You hear a heavy electrical crack.") \ - ) - L.adjustFireLoss(1.2) //adds up very rapidly - . = 1 diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm deleted file mode 100644 index 4809c3dc1c6..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ /dev/null @@ -1,78 +0,0 @@ -//Protector -/mob/living/simple_animal/hostile/guardian/protector - melee_damage_lower = 15 - melee_damage_upper = 15 - range = 15 //worse for it due to how it leashes - damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) - playstyle_string = span_holoparasite("As a protector type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.") - magic_fluff_string = span_holoparasite("..And draw the Guardian, a stalwart protector that never leaves the side of its charge.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Protector modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy.") - miner_fluff_string = span_holoparasite("You encounter... Uranium, a very resistant guardian.") - creator_name = "Protector" - creator_desc = "Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower." - creator_icon = "protector" - toggle_button_type = /atom/movable/screen/guardian/toggle_mode - /// Damage removed in protecting mode. - var/damage_penalty = 13 - /// Is it in protecting mode? - var/toggle = FALSE - /// Overlay of our protection shield. - var/mutable_appearance/shield_overlay - -/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity) - if(severity >= EXPLODE_DEVASTATE) - adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner - else - . = ..() - if(QDELETED(src)) - return FALSE - if(toggle) - visible_message(span_danger("The explosion glances off [src]'s energy shielding!")) - - return TRUE - -/mob/living/simple_animal/hostile/guardian/protector/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && toggle) - var/image/flash_overlay = new('icons/effects/effects.dmi', src, "shield-flash", dir = pick(GLOB.cardinals)) - flash_overlay.color = guardian_color - flick_overlay_view(flash_overlay, 0.5 SECONDS) - -/mob/living/simple_animal/hostile/guardian/protector/toggle_modes() - if(COOLDOWN_FINISHED(src, manifest_cooldown)) - return - COOLDOWN_START(src, manifest_cooldown, 1 SECONDS) - if(toggle) - cut_overlay(shield_overlay) - melee_damage_lower += damage_penalty - melee_damage_upper += damage_penalty - speed = initial(speed) - damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4) - to_chat(src, span_bolddanger("You switch to combat mode.")) - toggle = FALSE - else - if(!shield_overlay) - shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") - shield_overlay.color = guardian_color - add_overlay(shield_overlay) - melee_damage_lower -= damage_penalty - melee_damage_upper -= damage_penalty - speed = 1 - damage_coeff = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05) //damage? what's damage? - to_chat(src, span_bolddanger("You switch to protection mode.")) - toggle = TRUE - -/mob/living/simple_animal/hostile/guardian/protector/check_distance() //snap to what? snap to the guardian! - if(!summoner || get_dist(summoner, src) <= range) - return - if(istype(summoner.loc, /obj/effect)) - to_chat(src, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!")) - visible_message(span_danger("\The [src] jumps back to its user.")) - recall(forced = TRUE) - return - to_chat(summoner, span_holoparasite("You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!")) - summoner.visible_message(span_danger("\The [summoner] jumps back to [summoner.p_their()] protector.")) - new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner)) - summoner.forceMove(get_turf(src)) - new /obj/effect/temp_visual/guardian/phase(get_turf(summoner)) diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm deleted file mode 100644 index 0cb7303e26a..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ /dev/null @@ -1,182 +0,0 @@ -//Ranged -/obj/projectile/guardian - name = "crystal spray" - icon_state = "guardian" - damage = 5 - damage_type = BRUTE - armour_penetration = 100 - -/mob/living/simple_animal/hostile/guardian/ranged - combat_mode = FALSE - friendly_verb_continuous = "quietly assesses" - friendly_verb_simple = "quietly assess" - melee_damage_lower = 10 - melee_damage_upper = 10 - damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9) - projectiletype = /obj/projectile/guardian - ranged_cooldown_time = 1 //fast! - projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' - ranged = 1 - range = 13 - playstyle_string = span_holoparasite("As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.") - magic_fluff_string = span_holoparasite("..And draw the Sentinel, an alien master of ranged combat.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Ranged combat modules active. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean.") - miner_fluff_string = span_holoparasite("You encounter... Diamond, a powerful projectile thrower.") - creator_name = "Ranged" - creator_desc = "Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; where it cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode." - creator_icon = "ranged" - see_invisible = SEE_INVISIBLE_LIVING - toggle_button_type = /atom/movable/screen/guardian/toggle_mode - /// List of all deployed snares. - var/list/snares = list() - /// Is it in scouting mode? - var/toggle = FALSE - /// Maximum snares deployed at once. - var/max_snares = 6 - /// Lower damage before scouting. - var/previous_lower_damage = 0 - /// Upper damage before scouting. - var/previous_upper_damage = 0 - -/mob/living/simple_animal/hostile/guardian/ranged/toggle_modes() - if(is_deployed() && summoner) - to_chat(src, span_bolddanger("You have to be recalled to toggle modes!")) - return - if(toggle) - ranged = initial(ranged) - melee_damage_lower = previous_lower_damage - melee_damage_upper = previous_upper_damage - previous_lower_damage = 0 - previous_upper_damage = 0 - obj_damage = initial(obj_damage) - environment_smash = initial(environment_smash) - alpha = 255 - range = initial(range) - to_chat(src, span_bolddanger("You switch to combat mode.")) - toggle = FALSE - else - ranged = 0 - previous_lower_damage = melee_damage_lower - melee_damage_lower = 0 - previous_upper_damage = melee_damage_upper - melee_damage_upper = 0 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - alpha = 45 - range = 255 - to_chat(src, span_bolddanger("You switch to scout mode.")) - toggle = TRUE - - -/mob/living/simple_animal/hostile/guardian/ranged/Shoot(atom/targeted_atom) - . = ..() - if(!istype(., /obj/projectile)) - return - var/obj/projectile/shot_projectile = . - shot_projectile.color = guardian_color - -/mob/living/simple_animal/hostile/guardian/ranged/toggle_light() - var/msg - switch(lighting_cutoff) - if (LIGHTING_CUTOFF_VISIBLE) - lighting_cutoff_red = 10 - lighting_cutoff_green = 10 - lighting_cutoff_blue = 15 - msg = "You activate your night vision." - if (LIGHTING_CUTOFF_MEDIUM) - lighting_cutoff_red = 25 - lighting_cutoff_green = 25 - lighting_cutoff_blue = 35 - msg = "You increase your night vision." - if (LIGHTING_CUTOFF_HIGH) - lighting_cutoff_red = 35 - lighting_cutoff_green = 35 - lighting_cutoff_blue = 50 - msg = "You maximize your night vision." - else - lighting_cutoff_red = 0 - lighting_cutoff_green = 0 - lighting_cutoff_blue = 0 - msg = "You deactivate your night vision." - sync_lighting_plane_cutoff() - to_chat(src, span_notice(msg)) - - -/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare() - set name = "Set Surveillance Snare" - set category = "Guardian" - set desc = "Set an invisible snare that will alert you when living creatures walk over it. Max of 5" - if(length(snares) < max_snares) - var/turf/snare_loc = get_turf(src) - var/obj/effect/snare/new_snare = new /obj/effect/snare(snare_loc, src) - new_snare.name = "[get_area(snare_loc)] snare ([rand(1, 1000)])" - snares += new_snare - to_chat(src, span_bolddanger("Surveillance snare deployed!")) - else - to_chat(src, span_bolddanger("You have too many snares deployed. Remove some first.")) - -/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare() - set name = "Remove Surveillance Snare" - set category = "Guardian" - set desc = "Disarm unwanted surveillance snares." - var/picked_snare = tgui_input_list(src, "Pick which snare to remove.", "Remove Snare", sort_names(snares)) - if(isnull(picked_snare)) - return - qdel(picked_snare) - to_chat(src, span_bolddanger("Snare disarmed.")) - -/obj/effect/snare - name = "snare" - desc = "You shouldn't be seeing this!" - invisibility = INVISIBILITY_ABSTRACT - var/datum/weakref/guardian_ref - -/obj/effect/snare/Initialize(mapload, spawning_guardian) - . = ..() - guardian_ref = WEAKREF(spawning_guardian) - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/snare/Destroy(force) - var/mob/living/simple_animal/hostile/guardian/ranged/spawning_guardian = guardian_ref?.resolve() - if(spawning_guardian) - spawning_guardian.snares -= src - return ..() - -/obj/effect/snare/proc/on_entered(datum/source, crossed_object) - SIGNAL_HANDLER - var/mob/living/simple_animal/hostile/guardian/ranged/spawning_guardian = guardian_ref?.resolve() - if(!spawning_guardian) - qdel(src) - return - if(!isliving(crossed_object) || crossed_object == spawning_guardian || spawning_guardian.hasmatchingsummoner(crossed_object)) - return - send_message(spawning_guardian.summoner || spawning_guardian, crossed_object) - -/obj/effect/snare/proc/send_message(mob/living/recipient, crossed_object) - to_chat(recipient, span_bolddanger("[crossed_object] has crossed [name].")) - var/list/guardians = recipient.get_all_linked_holoparasites() - for(var/guardian in guardians) - send_message(guardian, crossed_object) - -/obj/effect/snare/singularity_act() - return - -/obj/effect/snare/singularity_pull() - return - -/mob/living/simple_animal/hostile/guardian/ranged/manifest_effects() - if(toggle) - incorporeal_move = INCORPOREAL_MOVE_BASIC - -/mob/living/simple_animal/hostile/guardian/ranged/recall_effects() - // To stop scout mode from moving when recalled - incorporeal_move = FALSE - -/mob/living/simple_animal/hostile/guardian/ranged/AttackingTarget(atom/attacked_target) - if(toggle) - return - return ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/standard.dm b/code/modules/mob/living/simple_animal/guardian/types/standard.dm deleted file mode 100644 index 89f671d3ffa..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/standard.dm +++ /dev/null @@ -1,41 +0,0 @@ -//Standard -/mob/living/simple_animal/hostile/guardian/standard - damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) - melee_damage_lower = 20 - melee_damage_upper = 20 - wound_bonus = -5 //you can wound! - obj_damage = 80 - next_move_modifier = 0.8 //attacks 20% faster - environment_smash = ENVIRONMENT_SMASH_WALLS - playstyle_string = span_holoparasite("As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.") - magic_fluff_string = span_holoparasite("..And draw the Assistant, faceless and generic, but never to be underestimated.") - tech_fluff_string = span_holoparasite("Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught one! It's really boring and standard. Better punch some walls to ease the tension.") - miner_fluff_string = span_holoparasite("You encounter... Adamantine, a powerful attacker.") - creator_name = "Standard" - creator_desc = "Devastating close combat attacks and high damage resistance. Can smash through weak walls." - creator_icon = "standard" - /// The text we shout when attacking. - var/battlecry = "AT" - -/mob/living/simple_animal/hostile/guardian/standard/verb/Battlecry() - set name = "Set Battlecry" - set category = "Guardian" - set desc = "Choose what you shout as you punch people." - var/input = tgui_input_text(src, "What do you want your battlecry to be?", "Battle Cry", max_length = 6) - if(input) - battlecry = input - -/mob/living/simple_animal/hostile/guardian/standard/AttackingTarget(atom/attacked_target) - . = ..() - if(!isliving(target) || attacked_target == src) - return - var/msg = "" - for(var/i in 1 to 9) - msg += battlecry - say("[msg]!!", ignore_spam = TRUE) - for(var/j in 1 to 4) - addtimer(CALLBACK(src, PROC_REF(do_attack_sound), target.loc), j) - -/mob/living/simple_animal/hostile/guardian/standard/proc/do_attack_sound(atom/playing_from) - playsound(playing_from, attack_sound, 50, TRUE, TRUE) diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm deleted file mode 100644 index 9afdf231ce7..00000000000 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ /dev/null @@ -1,141 +0,0 @@ -//Support -/mob/living/simple_animal/hostile/guardian/support - speed = 0 - damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) - melee_damage_lower = 15 - melee_damage_upper = 15 - playstyle_string = span_holoparasite("As a support type, you may right-click to heal targets. In addition, alt-clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.") - magic_fluff_string = span_holoparasite("..And draw the Chief Medical Officer, a potent force of life... and death.") - carp_fluff_string = span_holoparasite("CARP CARP CARP! You caught a support carp. It's a kleptocarp!") - tech_fluff_string = span_holoparasite("Boot sequence complete. Support modules active. Holoparasite swarm online.") - miner_fluff_string = span_holoparasite("You encounter... Bluespace, the master of support.") - creator_name = "Support" - creator_desc = "Does medium damage, but can heal its targets and create beacons to teleport people and things to." - creator_icon = "support" - /// Is it in healing mode? - var/toggle = FALSE - /// How much we heal per hit. - var/healing_amount = 5 - /// Our teleportation beacon. - var/obj/structure/receiving_pad/beacon - /// Time it takes to teleport. - var/teleporting_time = 6 SECONDS - /// Time between creating beacons. - var/beacon_cooldown_time = 5 MINUTES - /// Cooldown between creating beacons. - COOLDOWN_DECLARE(beacon_cooldown) - -/mob/living/simple_animal/hostile/guardian/support/Initialize(mapload) - . = ..() - var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - medsensor.show_to(src) - -/mob/living/simple_animal/hostile/guardian/support/get_status_tab_items() - . = ..() - if(!COOLDOWN_FINISHED(src, beacon_cooldown)) - . += "Beacon Cooldown Remaining: [DisplayTimeText(COOLDOWN_TIMELEFT(src, beacon_cooldown))]" - -/mob/living/simple_animal/hostile/guardian/support/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - if(LAZYACCESS(modifiers, RIGHT_CLICK) && proximity_flag && isliving(attack_target)) - heal_target(attack_target) - return - return ..() - -/mob/living/simple_animal/hostile/guardian/support/proc/heal_target(mob/living/target) - do_attack_animation(target, ATTACK_EFFECT_PUNCH) - target.visible_message(span_notice("[src] heals [target]!"),\ - span_userdanger("[src] heals you!"), null, COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_notice("You heal [target]!")) - playsound(target, attack_sound, 50, TRUE, TRUE, frequency = -1) //play punch in REVERSE - var/need_mob_update - need_mob_update = target.adjustBruteLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustFireLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustOxyLoss(-healing_amount, updating_health = FALSE) - need_mob_update += target.adjustToxLoss(-healing_amount, updating_health = FALSE, forced = TRUE) - if(need_mob_update) - target.updatehealth() - var/obj/effect/temp_visual/heal/heal_effect = new /obj/effect/temp_visual/heal(get_turf(target)) - heal_effect.color = guardian_color - -/mob/living/simple_animal/hostile/guardian/support/verb/Beacon() - set name = "Place Bluespace Beacon" - set category = "Guardian" - set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work at extreme distances." - - if(!COOLDOWN_FINISHED(src, beacon_cooldown)) - to_chat(src, span_bolddanger("Your power is on cooldown. You must wait five minutes between placing beacons.")) - return - - var/turf/beacon_loc = get_turf(src.loc) - if(!isfloorturf(beacon_loc)) - return - - if(beacon) - beacon.disappear() - beacon = null - - beacon = new(beacon_loc, src) - - to_chat(src, span_bolddanger("Beacon placed! You may now warp targets and objects to it, including your user, via Alt+Click.")) - - COOLDOWN_START(src, beacon_cooldown, beacon_cooldown_time) - -/obj/structure/receiving_pad - name = "bluespace receiving pad" - icon = 'icons/turf/floors.dmi' - desc = "A receiving zone for bluespace teleportations." - icon_state = "light_on-8" - light_range = MINIMUM_USEFUL_LIGHT_RANGE - density = FALSE - anchored = TRUE - plane = FLOOR_PLANE - layer = ABOVE_OPEN_TURF_LAYER - -/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/spawning_guardian) - . = ..() - add_atom_colour(spawning_guardian?.guardian_color, FIXED_COLOUR_PRIORITY) - -/obj/structure/receiving_pad/proc/disappear() - visible_message(span_notice("[src] vanishes!")) - qdel(src) - -/mob/living/simple_animal/hostile/guardian/support/AltClickOn(atom/movable/target) - teleport_to_beacon(target) - -/mob/living/simple_animal/hostile/guardian/support/proc/teleport_to_beacon(atom/movable/teleport_target) - if(!istype(teleport_target)) - return - if(!beacon) - to_chat(src, span_bolddanger("You need a beacon placed to warp things!")) - return - if(!is_deployed()) - to_chat(src, span_bolddanger("You must be manifested to warp a target!")) - return - if(!Adjacent(teleport_target)) - to_chat(src, span_bolddanger("You must be adjacent to your target!")) - return - if(teleport_target.anchored) - to_chat(src, span_bolddanger("Your target is anchored!")) - return - var/turf/target_turf = get_turf(teleport_target) - if(beacon.z != target_turf.z) - to_chat(src, span_bolddanger("The beacon is too far away to warp to!")) - return - to_chat(src, span_bolddanger("You begin to warp [teleport_target].")) - teleport_target.visible_message(span_danger("[teleport_target] starts to glow faintly!"), \ - span_userdanger("You start to faintly glow, and you feel strangely weightless!")) - do_attack_animation(teleport_target) - playsound(teleport_target, attack_sound, 50, TRUE, TRUE, frequency = -1) //play punch in REVERSE - if(!do_after(src, teleporting_time, teleport_target)) //now start the channel - to_chat(src, span_bolddanger("You need to hold still!")) - return - new /obj/effect/temp_visual/guardian/phase/out(target_turf) - if(isliving(teleport_target)) - var/mob/living/living_target = teleport_target - living_target.flash_act() - teleport_target.visible_message( - span_danger("[teleport_target] disappears in a flash of light!"), \ - span_userdanger("Your vision is obscured by a flash of light!"), \ - ) - do_teleport(teleport_target, beacon, 0, channel = TELEPORT_CHANNEL_BLUESPACE) - new /obj/effect/temp_visual/guardian/phase(get_turf(teleport_target)) diff --git a/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm b/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm deleted file mode 100644 index 31150a4dc89..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/constructs/constructs.dm +++ /dev/null @@ -1,133 +0,0 @@ -/mob/living/simple_animal/hostile/construct - name = "Construct" - real_name = "Construct" - desc = "" - gender = NEUTER - mob_biotypes = MOB_MINERAL | MOB_SPECIAL - speak_emote = list("hisses") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - icon = 'icons/mob/nonhuman-player/cult.dmi' - speed = 0 - combat_mode = TRUE - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/weapons/punch1.ogg' - // Vivid red, cause cult theme - lighting_cutoff_red = 30 - lighting_cutoff_green = 5 - lighting_cutoff_blue = 20 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - faction = list(FACTION_CULT) - pressure_resistance = 100 - unique_name = TRUE - AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - death_message = "collapses in a shattered heap." - /// List of spells that this construct can cast - var/list/construct_spells = list() - /// Flavor text shown to players when they spawn as this construct - var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." - /// The construct's master - var/master = null - /// Whether this construct is currently seeking nar nar - var/seeking = FALSE - /// Whether this construct can repair other constructs or cult buildings. - var/can_repair = FALSE - /// Whether this construct can repair itself. Works independently of can_repair. - var/can_repair_self = FALSE - /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue - var/theme = THEME_CULT - -/mob/living/simple_animal/hostile/construct/Initialize(mapload) - . = ..() - AddElement(/datum/element/simple_flying) - add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK), INNATE_TRAIT) - for(var/spell in construct_spells) - var/datum/action/new_spell = new spell(src) - new_spell.Grant(src) - - var/spell_count = 1 - for(var/datum/action/spell as anything in actions) - if(!(spell.type in construct_spells)) - continue - - var/pos = 2 + spell_count * 31 - if(construct_spells.len >= 4) - pos -= 31 * (construct_spells.len - 4) - spell.default_button_position = "6:[pos],4:-2" // Set the default position to this random position - spell_count++ - update_action_buttons() - - if(icon_state) - add_overlay("glow_[icon_state]_[theme]") - -/mob/living/simple_animal/hostile/construct/Login() - . = ..() - if(!. || !client) - return FALSE - to_chat(src, playstyle_string) - -/mob/living/simple_animal/hostile/construct/examine(mob/user) - var/text_span - switch(theme) - if(THEME_CULT) - text_span = "cult" - if(THEME_WIZARD) - text_span = "purple" - if(THEME_HOLY) - text_span = "blue" - . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") - if(health < maxHealth) - if(health >= maxHealth/2) - . += span_warning("[p_They()] look[p_s()] slightly dented.") - else - . += span_warning("[p_They()] look[p_s()] severely dented!") - . += "" - -/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(!isconstruct(user)) - if(src != user) - return ..() - return - - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair || (doll == src && !doll.can_repair_self)) - return ..() - if(theme != doll.theme) - return ..() - - if(health >= maxHealth) - if(src != user) - to_chat(user, span_cult("You cannot repair [src]'s dents, as [p_they()] [p_have()] none!")) - else - to_chat(user, span_cult("You cannot repair your own dents, as you have none!")) - return - - adjustHealth(-5) - if(src == user) - user.visible_message(span_danger("[user] repairs some of [p_their()] own dents."), \ - span_cult("You repair some of your own dents, leaving you at [user.health]/[user.maxHealth] health.")) - return - - Beam(user, icon_state="sendbeam", time = 4) - user.visible_message(span_danger("[user] repairs some of \the [src]'s dents."), \ - span_cult("You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.")) - - -/mob/living/simple_animal/hostile/construct/narsie_act() - return - -/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - return FALSE - diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 4dd2c464a2f..9d215ed35fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -172,7 +172,7 @@ Goto(P.starting, move_to_delay, 3) return ..() -//////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// +//////////////HOSTILE MOB TARGETING AND AGGRESSION//////////// /mob/living/simple_animal/hostile/proc/ListTargets() //Step 1, find out what we can see var/atom/target_from = GET_TARGETS_FROM(src) @@ -196,7 +196,7 @@ possible_targets = ListTargets() for(var/atom/pos_targ as anything in possible_targets) - if(Found(pos_targ)) //Just in case people want to override targetting + if(Found(pos_targ)) //Just in case people want to override targeting all_potential_targets = list(pos_targ) break @@ -422,7 +422,7 @@ LoseAggro() SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // SKYRAT EDIT ADDITION -//////////////END HOSTILE MOB TARGETTING AND AGGRESSION//////////// +//////////////END HOSTILE MOB TARGETING AND AGGRESSION//////////// /mob/living/simple_animal/hostile/death(gibbed) LoseTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm deleted file mode 100644 index 8cccf16b850..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm +++ /dev/null @@ -1,17 +0,0 @@ -/mob/living/simple_animal/hostile/jungle - vision_range = 5 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - faction = list(FACTION_JUNGLE) - obj_damage = 30 - environment_smash = ENVIRONMENT_SMASH_WALLS - minbodytemp = 0 - maxbodytemp = 450 - response_harm_continuous = "strikes" - response_harm_simple = "strike" - status_flags = NONE - combat_mode = TRUE - // Let's do a blue, since they'll be on green turfs if this shit is ever finished - lighting_cutoff_red = 5 - lighting_cutoff_green = 20 - lighting_cutoff_blue = 25 - mob_size = MOB_SIZE_LARGE diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm deleted file mode 100644 index 3330b682a01..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm +++ /dev/null @@ -1,289 +0,0 @@ -#define PLAYER_HOP_DELAY 25 - -//Huge, carnivorous toads that spit an immobilizing toxin at its victims before leaping onto them. -//It has no melee attack, and its damage comes from the toxin in its bubbles and its crushing leap. -//Its eyes will turn red to signal an imminent attack! -/mob/living/simple_animal/hostile/jungle/leaper - name = "leaper" - desc = "Commonly referred to as 'leapers', the Geron Toad is a massive beast that spits out highly pressurized bubbles containing a unique toxin, knocking down its prey and then crushing it with its girth." - icon = 'icons/mob/simple/jungle/leaper.dmi' - icon_state = "leaper" - icon_living = "leaper" - icon_dead = "leaper_dead" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - maxHealth = 300 - health = 300 - ranged = TRUE - projectiletype = /obj/projectile/leaper - projectilesound = 'sound/weapons/pierce.ogg' - ranged_cooldown_time = 30 - pixel_x = -16 - base_pixel_x = -16 - layer = LARGE_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN - speed = 10 - stat_attack = HARD_CRIT - robust_searching = 1 - var/hopping = FALSE - var/hop_cooldown = 0 //Strictly for player controlled leapers - var/projectile_ready = FALSE //Stopping AI leapers from firing whenever they want, and only doing it after a hop has finished instead - - footstep_type = FOOTSTEP_MOB_HEAVY - -/obj/projectile/leaper - name = "leaper bubble" - icon_state = "leaper" - paralyze = 50 - damage = 0 - range = 7 - hitsound = 'sound/effects/snap.ogg' - nondirectional_sprite = TRUE - impact_effect_type = /obj/effect/temp_visual/leaper_projectile_impact - -/obj/projectile/leaper/on_hit(atom/target, blocked = 0, pierce_hit) - ..() - if (!isliving(target)) - return - var/mob/living/bubbled = target - if(iscarbon(target)) - bubbled.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) - return - if(isanimal(target)) - var/mob/living/simple_animal/bubbled_animal = bubbled - bubbled_animal.adjustHealth(25) - return - if (isbasicmob(target)) - bubbled.adjustBruteLoss(25) - -/obj/projectile/leaper/on_range() - var/turf/T = get_turf(src) - ..() - new /obj/structure/leaper_bubble(T) - -/obj/effect/temp_visual/leaper_projectile_impact - name = "leaper bubble" - icon = 'icons/obj/weapons/guns/projectiles.dmi' - icon_state = "leaper_bubble_pop" - layer = ABOVE_ALL_MOB_LAYER - plane = GAME_PLANE_UPPER_FOV_HIDDEN - duration = 3 - -/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload) - . = ..() - new /obj/effect/decal/cleanable/leaper_sludge(get_turf(src)) - -/obj/effect/decal/cleanable/leaper_sludge - name = "leaper sludge" - desc = "A small pool of sludge, containing trace amounts of leaper venom." - icon = 'icons/effects/tomatodecal.dmi' - icon_state = "tomato_floor1" - -/obj/effect/decal/cleanable/leaper_sludge/Initialize(mapload, list/datum/disease/diseases) - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/obj/structure/leaper_bubble - name = "leaper bubble" - desc = "A floating bubble containing leaper venom. The contents are under a surprising amount of pressure." - icon = 'icons/obj/weapons/guns/projectiles.dmi' - icon_state = "leaper" - max_integrity = 10 - density = FALSE - -/obj/structure/leaper_bubble/Initialize(mapload) - . = ..() - AddElement(/datum/element/movetype_handler) - ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPER_BUBBLE_TRAIT) - QDEL_IN(src, 100) - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/obj/structure/leaper_bubble/Destroy() - new /obj/effect/temp_visual/leaper_projectile_impact(get_turf(src)) - playsound(src,'sound/effects/snap.ogg',50, TRUE, -1) - return ..() - -/obj/structure/leaper_bubble/proc/on_entered(datum/source, atom/movable/bubbled) - SIGNAL_HANDLER - if(!isliving(bubbled) || istype(bubbled, /mob/living/simple_animal/hostile/jungle/leaper)) - return - var/mob/living/bubbled_mob = bubbled - - playsound(src,'sound/effects/snap.ogg',50, TRUE, -1) - bubbled_mob.Paralyze(50) - if(iscarbon(bubbled_mob)) - bubbled_mob.reagents.add_reagent(/datum/reagent/toxin/leaper_venom, 5) - else if(isanimal(bubbled_mob)) - var/mob/living/simple_animal/bubbled_animal = bubbled_mob - bubbled_animal.adjustHealth(25) - else if(isbasicmob(bubbled_mob)) - bubbled_mob.adjustBruteLoss(25) - qdel(src) - -/datum/reagent/toxin/leaper_venom - name = "Leaper venom" - description = "A toxin spat out by leapers that, while harmless in small doses, quickly creates a toxic reaction if too much is in the body." - color = "#801E28" // rgb: 128, 30, 40 - toxpwr = 0 - taste_description = "french cuisine" - taste_mult = 1.3 - -/datum/reagent/toxin/leaper_venom/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) - . = ..() - if(volume >= 10) - if(M.adjustToxLoss(5 * REM * seconds_per_tick, updating_health = FALSE)) - . = UPDATE_MOB_HEALTH - -/obj/effect/temp_visual/leaper_crush - name = "grim tidings" - desc = "Incoming leaper!" - icon = 'icons/effects/96x96.dmi' - icon_state = "lily_pad" - layer = BELOW_MOB_LAYER - plane = GAME_PLANE - SET_BASE_PIXEL(-32, -32) - duration = 30 - -/mob/living/simple_animal/hostile/jungle/leaper/Initialize(mapload) - . = ..() - AddComponent(/datum/component/seethrough_mob) - remove_verb(src, /mob/living/verb/pulled) - add_cell_sample() - -/mob/living/simple_animal/hostile/jungle/leaper/CtrlClickOn(atom/A) - face_atom(A) - GiveTarget(A) - if(!isturf(loc)) - return - if(next_move > world.time) - return - if(hopping) - return - if(isliving(A)) - var/mob/living/L = A - if(L.incapacitated()) - BellyFlop() - return - if(hop_cooldown <= world.time) - Hop(player_hop = TRUE) - -/mob/living/simple_animal/hostile/jungle/leaper/AttackingTarget(atom/attacked_target) - if(isliving(target)) - return - return ..() - -/mob/living/simple_animal/hostile/jungle/leaper/handle_automated_action() - if(hopping || projectile_ready) - return - . = ..() - if(target) - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - BellyFlop() - return - if(!hopping) - Hop() - -/mob/living/simple_animal/hostile/jungle/leaper/Life(seconds_per_tick = SSMOBS_DT, times_fired) - . = ..() - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(prob(33) && !ckey) - ranged_cooldown = 0 //Keeps em on their toes instead of a constant rotation - ..() - -/mob/living/simple_animal/hostile/jungle/leaper/OpenFire() - face_atom(target) - if(ranged_cooldown <= world.time) - if(ckey) - if(hopping) - return - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - return //No stunlocking. Hop on them after you stun them, you donk. - if(AIStatus == AI_ON && !projectile_ready && !ckey) - return - . = ..(target) - projectile_ready = FALSE - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/proc/Hop(player_hop = FALSE) - if(z != target.z) - return - hopping = TRUE - add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - pass_flags |= PASSMOB - var/turf/new_turf = locate((target.x + rand(-3,3)),(target.y + rand(-3,3)),target.z) - if(player_hop) - new_turf = get_turf(target) - hop_cooldown = world.time + PLAYER_HOP_DELAY - if(AIStatus == AI_ON && ranged_cooldown <= world.time) - projectile_ready = TRUE - update_icons() - throw_at(new_turf, max(3,get_dist(src,new_turf)), 1, src, FALSE, callback = CALLBACK(src, PROC_REF(FinishHop))) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/FinishHop() - remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - pass_flags &= ~PASSMOB - hopping = FALSE - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 100, TRUE) - if(target && AIStatus == AI_ON && projectile_ready && !ckey) - face_atom(target) - addtimer(CALLBACK(src, PROC_REF(OpenFire), target), 5) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/BellyFlop() - var/turf/new_turf = get_turf(target) - hopping = TRUE - ADD_TRAIT(src, TRAIT_NO_TRANSFORM, LEAPING_TRAIT) - new /obj/effect/temp_visual/leaper_crush(new_turf) - addtimer(CALLBACK(src, PROC_REF(BellyFlopHop), new_turf), 3 SECONDS) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/BellyFlopHop(turf/T) - ADD_TRAIT(src, TRAIT_UNDENSE, LEAPING_TRAIT) - throw_at(T, get_dist(src,T),1,src, FALSE, callback = CALLBACK(src, PROC_REF(Crush))) - -/mob/living/simple_animal/hostile/jungle/leaper/proc/Crush() - hopping = FALSE - remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), LEAPING_TRAIT) - playsound(src, 'sound/effects/meteorimpact.ogg', 200, TRUE) - for(var/mob/living/L in orange(1, src)) - L.adjustBruteLoss(35) - if(!QDELETED(L)) // Some mobs are deleted on death - var/throw_dir = get_dir(src, L) - if(L.loc == loc) - throw_dir = pick(GLOB.alldirs) - var/throwtarget = get_edge_target_turf(src, throw_dir) - L.throw_at(throwtarget, 3, 1) - visible_message(span_warning("[L] is thrown clear of [src]!")) - if(ckey)//Lessens ability to chain stun as a player - ranged_cooldown = ranged_cooldown_time + world.time - update_icons() - -/mob/living/simple_animal/hostile/jungle/leaper/Goto() - return - -/mob/living/simple_animal/hostile/jungle/leaper/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - return - -/mob/living/simple_animal/hostile/jungle/leaper/update_icons() - . = ..() - if(stat) - icon_state = "leaper_dead" - return - if(ranged_cooldown <= world.time) - if(AIStatus == AI_ON && projectile_ready || ckey) - icon_state = "leaper_alert" - return - icon_state = "leaper" - -/mob/living/simple_animal/hostile/jungle/leaper/add_cell_sample() - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_LEAPER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -#undef PLAYER_HOP_DELAY diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 5f9e2678fd8..4ed79e48834 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -59,9 +59,7 @@ AddComponent(/datum/component/gps, gps_name) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) add_traits(list(TRAIT_NO_TELEPORT, TRAIT_MARTIAL_ARTS_IMMUNE), MEGAFAUNA_TRAIT) - for(var/action_type in attack_action_types) - var/datum/action/innate/megafauna_attack/attack_action = new action_type() - attack_action.Grant(src) + grant_actions_by_list(attack_action_types) /mob/living/simple_animal/hostile/megafauna/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) //Safety check diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 113f7431ffc..2e562eb5659 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -67,21 +67,23 @@ Difficulty: Medium . = ..() miner_saw = new(src) ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - dash = new /datum/action/cooldown/mob_cooldown/dash() - kinetic_accelerator = new /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator() - dash_attack = new /datum/action/cooldown/mob_cooldown/dash_attack() - transform_weapon = new /datum/action/cooldown/mob_cooldown/transform_weapon() + + dash = new /datum/action/cooldown/mob_cooldown/dash + kinetic_accelerator = new /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator + dash_attack = new /datum/action/cooldown/mob_cooldown/dash_attack + transform_weapon = new /datum/action/cooldown/mob_cooldown/transform_weapon dash.Grant(src) kinetic_accelerator.Grant(src) dash_attack.Grant(src) transform_weapon.Grant(src) + AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Destroy() - QDEL_NULL(dash) - QDEL_NULL(kinetic_accelerator) - QDEL_NULL(dash_attack) - QDEL_NULL(transform_weapon) + dash = null + kinetic_accelerator = null + dash_attack = null + transform_weapon = null return ..() /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/OpenFire() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index a1336bd6a09..eaeaddc3e03 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -86,10 +86,10 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - triple_charge = new /datum/action/cooldown/mob_cooldown/charge/triple_charge() - hallucination_charge = new /datum/action/cooldown/mob_cooldown/charge/hallucination_charge() - hallucination_charge_surround = new /datum/action/cooldown/mob_cooldown/charge/hallucination_charge/hallucination_surround() - blood_warp = new /datum/action/cooldown/mob_cooldown/blood_warp() + triple_charge = new(src) + hallucination_charge = new(src) + hallucination_charge_surround = new(src) + blood_warp = new(src) triple_charge.Grant(src) hallucination_charge.Grant(src) hallucination_charge_surround.Grant(src) @@ -105,10 +105,10 @@ Difficulty: Hard sound_volume = 200) /mob/living/simple_animal/hostile/megafauna/bubblegum/Destroy() - QDEL_NULL(triple_charge) - QDEL_NULL(hallucination_charge) - QDEL_NULL(hallucination_charge_surround) - QDEL_NULL(blood_warp) + triple_charge = null + hallucination_charge = null + hallucination_charge_surround = null + blood_warp = null return ..() /mob/living/simple_animal/hostile/megafauna/bubblegum/update_cooldowns(list/cooldown_updates, ignore_staggered = FALSE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 10873e398e5..f726fcb9819 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -71,11 +71,11 @@ /mob/living/simple_animal/hostile/megafauna/colossus/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) //we don't want this guy to float, messes up his animations. - spiral_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/colossus() - random_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe/colossus() - shotgun_blast = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/colossus() - dir_shots = new /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/alternating/colossus() - colossus_final = new /datum/action/cooldown/mob_cooldown/projectile_attack/colossus_final() + spiral_shots = new(src) + random_shots = new(src) + shotgun_blast = new(src) + dir_shots = new(src) + colossus_final = new(src) spiral_shots.Grant(src) random_shots.Grant(src) shotgun_blast.Grant(src) @@ -87,10 +87,10 @@ /mob/living/simple_animal/hostile/megafauna/colossus/Destroy() RemoveElement(/datum/element/projectile_shield) - QDEL_NULL(spiral_shots) - QDEL_NULL(random_shots) - QDEL_NULL(shotgun_blast) - QDEL_NULL(dir_shots) + spiral_shots = null + random_shots = null + shotgun_blast = null + dir_shots = null return ..() /mob/living/simple_animal/hostile/megafauna/colossus/OpenFire() @@ -512,7 +512,13 @@ if(..() && !ready_to_deploy) SSpoints_of_interest.make_point_of_interest(src) ready_to_deploy = TRUE - notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_PLAY, header = "Anomalous crystal activated") + notify_ghosts( + "An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", + source = src, + header = "Anomalous crystal activated", + click_interact = TRUE, + ghost_sound = 'sound/effects/ghost2.ogg', + ) /obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index aac1964cbf2..dc49d71f796 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -62,12 +62,12 @@ Difficulty: Extremely Hard /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Initialize(mapload) . = ..() - frost_orbs = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/shrapnel() - hard_frost_orbs = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/shrapnel/strong() - snowball_machine_gun = new /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire() - hard_snowball_machine_gun = new /datum/action/cooldown/mob_cooldown/direct_and_aoe() - ice_shotgun = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/pattern() - hard_ice_shotgun = new /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/pattern/circular() + frost_orbs = new(src) + hard_frost_orbs = new(src) + snowball_machine_gun = new(src) + hard_snowball_machine_gun = new(src) + ice_shotgun = new(src) + hard_ice_shotgun = new(src) frost_orbs.Grant(src) hard_frost_orbs.Grant(src) snowball_machine_gun.Grant(src) @@ -83,12 +83,12 @@ Difficulty: Extremely Hard AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Destroy() - QDEL_NULL(frost_orbs) - QDEL_NULL(hard_frost_orbs) - QDEL_NULL(snowball_machine_gun) - QDEL_NULL(hard_snowball_machine_gun) - QDEL_NULL(ice_shotgun) - QDEL_NULL(hard_ice_shotgun) + frost_orbs = null + hard_frost_orbs = null + snowball_machine_gun = null + hard_snowball_machine_gun = null + ice_shotgun = null + hard_ice_shotgun = null return ..() /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/OpenFire() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 5008d4b1748..6132d1740de 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -80,10 +80,10 @@ /mob/living/simple_animal/hostile/megafauna/dragon/Initialize(mapload) . = ..() - fire_cone = new /datum/action/cooldown/mob_cooldown/fire_breath/cone() - meteors = new /datum/action/cooldown/mob_cooldown/meteors() - mass_fire = new /datum/action/cooldown/mob_cooldown/fire_breath/mass_fire() - lava_swoop = new /datum/action/cooldown/mob_cooldown/lava_swoop() + fire_cone = new(src) + meteors = new(src) + mass_fire = new(src) + lava_swoop = new(src) fire_cone.Grant(src) meteors.Grant(src) mass_fire.Grant(src) @@ -95,10 +95,10 @@ AddElement(/datum/element/change_force_on_death, move_force = MOVE_FORCE_DEFAULT) /mob/living/simple_animal/hostile/megafauna/dragon/Destroy() - QDEL_NULL(fire_cone) - QDEL_NULL(meteors) - QDEL_NULL(mass_fire) - QDEL_NULL(lava_swoop) + fire_cone = null + meteors = null + mass_fire = null + lava_swoop = null return ..() /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 881a6cf17d6..b1430b19324 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -29,9 +29,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) . = ..() AddComponent(/datum/component/seethrough_mob) - for(var/action_type in attack_action_types) - var/datum/action/innate/elite_attack/attack_action = new action_type() - attack_action.Grant(src) + grant_actions_by_list(attack_action_types) //Prevents elites from attacking members of their faction (can't hurt themselves either) and lets them mine rock with an attack despite not being able to smash walls. /mob/living/simple_animal/hostile/asteroid/elite/AttackingTarget(atom/attacked_target) @@ -214,7 +212,12 @@ While using this makes the system rely on OnFire, it still gives options for tim if(boosted) mychild.key = elitemind.key mychild.sentience_act() - notify_ghosts("\A [mychild] has been awakened in \the [get_area(src)]!", source = mychild, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Lavaland Elite awakened") + notify_ghosts( + "\A [mychild] has been awakened in \the [get_area(src)]!", + source = mychild, + header = "Lavaland Elite awakened", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) mychild.log_message("has been awakened by [key_name(activator)]!", LOG_GAME, color="#960000") icon_state = "tumor_popped" RegisterSignal(mychild, COMSIG_QDELETING, PROC_REF(onEliteLoss)) @@ -228,7 +231,12 @@ While using this makes the system rely on OnFire, it still gives options for tim if(boosted) mychild.maxHealth = mychild.maxHealth * 2 mychild.health = mychild.maxHealth - notify_ghosts("\A [mychild] has been challenged in \the [get_area(src)]!", source = mychild, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Lavaland Elite challenged") + notify_ghosts( + "\A [mychild] has been challenged in \the [get_area(src)]!", + source = mychild, + header = "Lavaland Elite challenged", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) mychild.log_message("has been challenged by [key_name(activator)]!", LOG_GAME, color="#960000") /obj/structure/elite_tumor/Initialize(mapload) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm deleted file mode 100644 index 7a3451e4ef8..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ /dev/null @@ -1,128 +0,0 @@ -//Gutlunches, passive mods that devour blood and gibs -/mob/living/simple_animal/hostile/asteroid/gutlunch - name = "gutlunch" - desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk." - icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' - icon_state = "gutlunch" - icon_living = "gutlunch" - icon_dead = "gutlunch" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak_emote = list("warbles", "quavers") - emote_hear = list("trills.") - emote_see = list("sniffs.", "burps.") - weather_immunities = list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE) - faction = list(FACTION_MINING, FACTION_ASHWALKER) - density = FALSE - speak_chance = 1 - turns_per_move = 8 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - move_to_delay = 15 - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "squishes" - response_harm_simple = "squish" - friendly_verb_continuous = "pinches" - friendly_verb_simple = "pinch" - combat_mode = FALSE - gold_core_spawnable = FRIENDLY_SPAWN - stat_attack = HARD_CRIT - gender = NEUTER - stop_automated_movement = FALSE - stop_automated_movement_when_pulled = TRUE - stat_exclusive = TRUE - robust_searching = TRUE - search_objects = 3 //Ancient simplemob AI shitcode. This makes them ignore all other mobs. - del_on_death = TRUE - loot = list(/obj/effect/decal/cleanable/blood/gibs) - death_message = "is pulped into bugmash." - - animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch - childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch = 100) - - wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/, /obj/item/organ) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize(mapload) - . = ..() - if(wanted_objects.len) - AddComponent(/datum/component/udder, /obj/item/udder/gutlunch, CALLBACK(src, PROC_REF(regenerate_icons)), CALLBACK(src, PROC_REF(regenerate_icons))) - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/CanAttack(atom/the_target) // Gutlunch-specific version of CanAttack to handle stupid stat_exclusive = true crap so we don't have to do it for literally every single simple_animal/hostile except the two that spawn in lavaland - if(!the_target || !isturf(the_target.loc)) // bail out on invalids - return FALSE - - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return FALSE - - if(isliving(the_target)) - var/mob/living/L = the_target - - if(faction_check_atom(L) && !attack_same) - return FALSE - if(L.stat > stat_attack || L.stat != stat_attack && stat_exclusive) - return FALSE - - return TRUE - - if(isobj(the_target) && is_type_in_typecache(the_target, wanted_objects)) - return TRUE - - return FALSE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/regenerate_icons(new_udder_volume, max_udder_volume) - cut_overlays() - var/static/gutlunch_full_overlay - if(isnull(gutlunch_full_overlay)) - gutlunch_full_overlay = iconstate2appearance(icon, "gl_full") - if(new_udder_volume == max_udder_volume) - add_overlay(gutlunch_full_overlay) - ..() - -//Male gutlunch. They're smaller and more colorful! -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck - name = "gubbuck" - gender = MALE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize(mapload) - . = ..() - add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY) - update_transform(0.85) - -//Lady gutlunch. They make the babby. -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen - name = "guthen" - gender = FEMALE - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch - name = "grublunch" - wanted_objects = list() //They don't eat. - gold_core_spawnable = NO_SPAWN - var/growth = 0 - -//Baby gutlunch -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Initialize(mapload) - . = ..() - add_atom_colour("#9E9E9E", FIXED_COLOUR_PRIORITY) //Somewhat hidden - update_transform(0.45) - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - growth++ - if(growth > 50) //originally used a timer for this but it was more of a problem than it was worth. - growUp() - -/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/proc/growUp() - var/mob/living/L - if(prob(45)) - L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck(loc) - else - L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen(loc) - mind?.transfer_to(L) - L.faction = faction - L.setDir(dir) - L.Stun(20, ignore_canstun = TRUE) - visible_message(span_notice("[src] grows up into [L].")) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index d4f86d3905d..714e3f1b600 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -41,6 +41,8 @@ ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/content_barfer) + grant_actions_by_list(get_innate_actions()) + /mob/living/simple_animal/hostile/ooze/attacked_by(obj/item/I, mob/living/user) if(!eat_atom(I, TRUE)) return ..() @@ -71,6 +73,10 @@ if(ooze_nutrition <= 0) adjustBruteLoss(0.25 * seconds_per_tick) +/// Returns an applicable list of actions to grant to the mob. Will return a list or null. +/mob/living/simple_animal/hostile/ooze/proc/get_innate_actions() + return null + ///Does ooze_nutrition + supplied amount and clamps it within 0 and 500 /mob/living/simple_animal/hostile/ooze/proc/adjust_ooze_nutrition(amount) ooze_nutrition = clamp(ooze_nutrition + amount, 0, 500) @@ -106,23 +112,20 @@ armour_penetration = 15 obj_damage = 20 death_message = "collapses into a pile of goo!" - ///The ability to give yourself a metabolic speed boost which raises heat - var/datum/action/cooldown/metabolicboost/boost ///The ability to consume mobs var/datum/action/consume/consume ///Initializes the mobs abilities and gives them to the mob /mob/living/simple_animal/hostile/ooze/gelatinous/Initialize(mapload) . = ..() - boost = new - boost.Grant(src) consume = new consume.Grant(src) -/mob/living/simple_animal/hostile/ooze/gelatinous/Destroy() - . = ..() - QDEL_NULL(boost) - QDEL_NULL(consume) +/mob/living/simple_animal/hostile/ooze/gelatinous/get_innate_actions() + var/static/list/innate_actions = list( + /datum/action/cooldown/metabolicboost, + ) + return innate_actions ///If this mob gets resisted by something, its trying to escape consumption. /mob/living/simple_animal/hostile/ooze/gelatinous/container_resist_act(mob/living/user) @@ -284,20 +287,19 @@ obj_damage = 15 death_message = "deflates and spills its vital juices!" edible_food_types = MEAT | VEGETABLES - ghost_controllable = TRUE //SKYRAT EDIT ADDITION - These guys can be helpful... maybe players will be helpful. -/mob/living/simple_animal/hostile/ooze/grapes/Initialize(mapload) - . = ..() - var/datum/action/cooldown/globules/glob_shooter = new(src) - glob_shooter.Grant(src) - var/datum/action/cooldown/gel_cocoon/gel_cocoon = new(src) - gel_cocoon.Grant(src) +/mob/living/simple_animal/hostile/ooze/grapes/get_innate_actions() + var/static/list/innate_actions = list( + /datum/action/cooldown/globules, + /datum/action/cooldown/gel_cocoon, + ) + return innate_actions /mob/living/simple_animal/hostile/ooze/grapes/add_cell_sample() AddElement(/datum/element/swabable, CELL_LINE_TABLE_GRAPE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) -///Ability that allows the owner to fire healing globules at mobs, targetting specific limbs. +///Ability that allows the owner to fire healing globules at mobs, targeting specific limbs. /datum/action/cooldown/globules name = "Fire Mending globule" desc = "Fires a mending globule at someone, healing a specific limb of theirs." diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index 7c6edeb88da..a0fe73b32bf 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -28,8 +28,7 @@ /mob/living/simple_animal/hostile/vatbeast/Initialize(mapload) . = ..() - var/datum/action/cooldown/tentacle_slap/slapper = new(src) - slapper.Grant(src) + GRANT_ACTION(/datum/action/cooldown/tentacle_slap) add_cell_sample() AddComponent(/datum/component/tameable, list(/obj/item/food/fries, /obj/item/food/cheesyfries, /obj/item/food/cornchips, /obj/item/food/carrotfries), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed))) diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm deleted file mode 100644 index d2957effd3c..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ /dev/null @@ -1,83 +0,0 @@ -/mob/living/simple_animal/hostile/wizard - name = "Space Wizard" - desc = "EI NATH?" - icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "wizard" - icon_living = "wizard" - icon_dead = "wizard_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 0 - turns_per_move = 3 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - combat_mode = TRUE - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(ROLE_WIZARD) - status_flags = CANPUSH - footstep_type = FOOTSTEP_MOB_SHOE - - retreat_distance = 3 //out of fireball range - minimum_distance = 3 - del_on_death = 1 - loot = list( - /obj/effect/mob_spawn/corpse/human/wizard, - /obj/item/staff, - ) - - var/next_cast = 0 - var/datum/action/cooldown/spell/pointed/projectile/fireball/fireball - var/datum/action/cooldown/spell/teleport/radius_turf/blink/blink - var/datum/action/cooldown/spell/aoe/magic_missile/magic_missile - -/mob/living/simple_animal/hostile/wizard/Initialize(mapload) - . = ..() - apply_dynamic_human_appearance(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/wizard, r_hand = /obj/item/staff) - var/obj/item/implant/exile/exiled = new /obj/item/implant/exile(src) - exiled.implant(src) - - fireball = new(src) - fireball.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - fireball.Grant(src) - - magic_missile = new(src) - magic_missile.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - magic_missile.Grant(src) - - blink = new(src) - blink.spell_requirements &= ~(SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_WIZARD_GARB|SPELL_REQUIRES_MIND) - blink.outer_tele_radius = 3 - blink.Grant(src) - -/mob/living/simple_animal/hostile/wizard/Destroy() - QDEL_NULL(fireball) - QDEL_NULL(magic_missile) - QDEL_NULL(blink) - return ..() - -/mob/living/simple_animal/hostile/wizard/handle_automated_action() - . = ..() - if(target && next_cast < world.time) - if((get_dir(src, target) in list(SOUTH, EAST, WEST, NORTH)) && fireball.can_cast_spell(feedback = FALSE)) - setDir(get_dir(src, target)) - fireball.Trigger(null, target) - next_cast = world.time + 1 SECONDS - return - - if(magic_missile.IsAvailable()) - magic_missile.Trigger(null, target) - next_cast = world.time + 1 SECONDS - return - - if(blink.IsAvailable()) // Spam Blink when you can - blink.Trigger(null, src) - next_cast = world.time + 1 SECONDS - return diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index f6c5e644b86..b02e8354da8 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -330,20 +330,16 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( /mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/human/user, list/modifiers) return attack_hand(user, modifiers) -/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/user, list/modifiers) - return attack_hand(user, modifiers) - //Simple animals /mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() //goodbye immortal parrots - if(client) return if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched - if(user.melee_damage_upper > 0 && !stat) + if(. > 0 && stat == CONSCIOUS) set_parrot_interest(user) parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless icon_state = icon_living diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm deleted file mode 100644 index dbb795e91c5..00000000000 --- a/code/modules/mob/living/simple_animal/shade.dm +++ /dev/null @@ -1,71 +0,0 @@ -/mob/living/simple_animal/shade - name = "Shade" - real_name = "Shade" - desc = "A bound spirit." - gender = PLURAL - icon = 'icons/mob/nonhuman-player/cult.dmi' - icon_state = "shade_cult" - icon_living = "shade_cult" - mob_biotypes = MOB_SPIRIT - maxHealth = 40 - health = 40 - speak_emote = list("hisses") - emote_hear = list("wails.","screeches.") - response_help_continuous = "puts their hand through" - response_help_simple = "put your hand through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - melee_damage_lower = 5 - melee_damage_upper = 12 - attack_verb_continuous = "metaphysically strikes" - attack_verb_simple = "metaphysically strike" - minbodytemp = 0 - maxbodytemp = INFINITY - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - speed = -1 //they don't have to lug a body made of runed metal around - stop_automated_movement = 1 - faction = list(FACTION_CULT) - status_flags = CANPUSH - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - -/mob/living/simple_animal/shade/Initialize(mapload) - . = ..() - AddElement(/datum/element/simple_flying) - add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) - -/mob/living/simple_animal/shade/death() - if(death_message == initial(death_message)) - death_message = "lets out a contented sigh as [p_their()] form unwinds." - ..() - -/mob/living/simple_animal/shade/can_suicide() - if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone - return FALSE - return ..() - -/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/user, list/modifiers) - if(isconstruct(user)) - var/mob/living/simple_animal/hostile/construct/doll = user - if(!doll.can_repair) - return - if(health < maxHealth) - adjustHealth(-25) - Beam(user,icon_state="sendbeam", time = 4) - user.visible_message(span_danger("[user] heals \the [src]."), \ - span_cult("You heal [src], leaving [src] at [health]/[maxHealth] health.")) - else - to_chat(user, span_cult("You cannot heal [src], as [p_theyre()] unharmed!")) - else if(src != user) - return ..() - -/mob/living/simple_animal/shade/attackby(obj/item/item, mob/user, params) //Marker -Agouri - if(istype(item, /obj/item/soulstone)) - var/obj/item/soulstone/stone = item - stone.capture_shade(src, user) - else - . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a68693e004b..231214d6ac4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -51,8 +51,6 @@ ///Harm-intent verb in present simple tense. var/response_harm_simple = "hit" var/harm_intent_damage = 3 - ///Minimum force required to deal any damage. - var/force_threshold = 0 ///Maximum amount of stamina damage the mob can be inflicted with total var/max_staminaloss = 200 ///How much stamina the mob recovers per second @@ -133,9 +131,6 @@ ///Played when someone punches the creature. var/attacked_sound = SFX_PUNCH - ///If the creature has, and can use, hands. - var/dextrous = FALSE - ///The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever), AI_Z_OFF (Temporarily off due to nonpresence of players). var/AIStatus = AI_ON ///once we have become sentient, we can never go back. @@ -176,10 +171,6 @@ if(!loc) stack_trace("Simple animal being instantiated in nullspace") update_simplemob_varspeed() - if(dextrous) - AddElement(/datum/element/dextrous, hud_type = hud_type) - AddComponent(/datum/component/personal_crafting) - add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) ADD_TRAIT(src, TRAIT_NOFIRE_SPREAD, ROUNDSTART_TRAIT) if(length(weather_immunities)) add_traits(weather_immunities, ROUNDSTART_TRAIT) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 9e858d4f02d..a485b8342ca 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -164,8 +164,7 @@ amount_grown = 0 for(var/datum/action/innate/slime/evolve/E in actions) E.Remove(src) - var/datum/action/innate/slime/reproduce/reproduce_action = new - reproduce_action.Grant(src) + GRANT_ACTION(/datum/action/innate/slime/reproduce) regenerate_icons() update_name() else @@ -184,54 +183,62 @@ /mob/living/simple_animal/slime/verb/Reproduce() set category = "Slime" - set desc = "This will make you split into four Slimes." + set desc = "This will make you split into four slimes." - if(stat) - to_chat(src, "I must be conscious to do this...") + if(stat != CONSCIOUS) + balloon_alert(src, "need to be conscious to split!") return - if(is_adult) - if(amount_grown >= SLIME_EVOLUTION_THRESHOLD) - if(stat) - to_chat(src, "I must be conscious to do this...") - return + if(!isopenturf(loc)) + balloon_alert(src, "can't reproduce here!") - var/list/babies = list() - var/new_nutrition = round(nutrition * 0.9) - var/new_powerlevel = round(powerlevel / 4) - var/turf/drop_loc = drop_location() + if(!is_adult) + balloon_alert(src, "not old enough to reproduce!") + return - for(var/i in 1 to 4) - var/child_colour - if(mutation_chance >= 100) - child_colour = SLIME_TYPE_RAINBOW - else if(prob(mutation_chance)) - child_colour = slime_mutation[rand(1,4)] - else - child_colour = colour - var/mob/living/simple_animal/slime/M - M = new(drop_loc, child_colour) - if(ckey) - M.set_nutrition(new_nutrition) //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! - M.powerlevel = new_powerlevel - if(i != 1) - step_away(M,src) - M.set_friends(Friends) - babies += M - M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) - SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) + if(amount_grown < SLIME_EVOLUTION_THRESHOLD) + to_chat(src, "I need to grow myself more before I can reproduce...") + return - var/mob/living/simple_animal/slime/new_slime = pick(babies) - new_slime.set_combat_mode(TRUE) - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - qdel(src) + var/list/babies = list() + var/new_nutrition = round(nutrition * 0.9) + var/new_powerlevel = round(powerlevel / 4) + var/turf/drop_loc = drop_location() + + for(var/i in 1 to 4) + var/child_colour + + if(mutation_chance >= 100) + child_colour = SLIME_TYPE_RAINBOW + else if(prob(mutation_chance)) + child_colour = slime_mutation[rand(1,4)] else - to_chat(src, "I am not ready to reproduce yet...") + child_colour = colour + + var/mob/living/simple_animal/slime/baby + baby = new(drop_loc, child_colour) + + if(ckey) + baby.set_nutrition(new_nutrition) //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! + + baby.powerlevel = new_powerlevel + if(i != 1) + step_away(baby, src) + + baby.set_friends(Friends) + babies += baby + baby.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) + SSblackbox.record_feedback("tally", "slime_babies_born", 1, baby.colour) + + var/mob/living/simple_animal/slime/new_slime = pick(babies) // slime that the OG slime will move into. + new_slime.set_combat_mode(TRUE) + + if(isnull(src.mind)) + new_slime.key = src.key else - to_chat(src, "I am not old enough to reproduce yet...") + src.mind.transfer_to(new_slime) + + qdel(src) /datum/action/innate/slime/reproduce name = "Reproduce" @@ -239,8 +246,8 @@ needs_growth = GROWTH_NEEDED /datum/action/innate/slime/reproduce/Activate() - var/mob/living/simple_animal/slime/S = owner - S.Reproduce() + var/mob/living/simple_animal/slime/slime_owner = owner + slime_owner.Reproduce() #undef SIZE_DOESNT_MATTER #undef BABIES_ONLY diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index cdae01abd8c..3e5d714746b 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -342,7 +342,6 @@ if(.) attacked += 10 - /mob/living/simple_animal/slime/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) //successful monkey bite. attacked += 10 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 799e7a7fa86..260deda49a4 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -28,7 +28,7 @@ if(client) stack_trace("Mob with client has been deleted.") else if(ckey) - stack_trace("Mob without client but with associated ckey has been deleted.") + stack_trace("Mob without client but with associated ckey, [ckey], has been deleted.") remove_from_mob_list() remove_from_dead_mob_list() @@ -46,7 +46,7 @@ qdel(hud_used) QDEL_LIST(client_colours) - ghostize() //False, since we're deleting it currently + ghostize(can_reenter_corpse = FALSE) //False, since we're deleting it currently if(mind?.current == src) //Let's just be safe yeah? This will occasionally be cleared, but not always. Can't do it with ghostize without changing behavior mind.set_current(null) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 6808728a833..2c2f8519e25 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -20,7 +20,7 @@ // we never want to hide a turf because it's not lit // We can rely on the lighting plane to handle that for us see_in_dark = 1e6 - // A list of factions that this mob is currently in, for hostile mob targetting, amongst other things + // A list of factions that this mob is currently in, for hostile mob targeting, amongst other things faction = list(FACTION_NEUTRAL) /// The current client inhabiting this mob. Managed by login/logout /// This exists so we can do cleanup in logout for occasions where a client was transfere rather then destroyed diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 5f52e79aaab..19ca3e7736b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -245,43 +245,47 @@ * The kitchen sink of notification procs * * Arguments: - * * message - * * ghost_sound sound to play - * * enter_link Href link to enter the ghost role being notified for - * * source The source of the notification - * * alert_overlay The alert overlay to show in the alert message - * * action What action to take upon the ghost interacting with the notification, defaults to NOTIFY_JUMP - * * flashwindow Flash the byond client window - * * ignore_key Ignore keys if they're in the GLOB.poll_ignore list - * * header The header of the notifiaction - * * notify_suiciders If it should notify suiciders (who do not qualify for many ghost roles) - * * notify_volume How loud the sound should be to spook the user + * * message: The message displayed in chat. + * * source: The source of the notification. This is required for an icon + * * header: The title text to display on the icon tooltip. + * * alert_overlay: Optional. Create a custom overlay if you want, otherwise it will use the source + * * click_interact: If true, adds a link + clicking the icon will attack_ghost the source + * * custom_link: Optional. If you want to add a custom link to the chat notification + * * ghost_sound: sound to play + * * ignore_key: Ignore keys if they're in the GLOB.poll_ignore list + * * notify_volume: How loud the sound should be to spook the user */ /proc/notify_ghosts( message, - ghost_sound, - enter_link, atom/source, + header = "Something Interesting!", mutable_appearance/alert_overlay, - action = NOTIFY_JUMP, - flashwindow = TRUE, - ignore_mapload = TRUE, + click_interact = FALSE, + custom_link = "", + ghost_sound, ignore_key, - header = "", - notify_suiciders = TRUE, - notify_volume = 100 + notify_flags = NOTIFY_CATEGORY_DEFAULT, + notify_volume = 100, ) - if(ignore_mapload && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load + if(notify_flags & GHOST_NOTIFY_IGNORE_MAPLOAD && SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load return + if(source) + if(isnull(alert_overlay)) + alert_overlay = get_small_overlay(source) + + alert_overlay.appearance_flags |= TILE_BOUND + alert_overlay.layer = FLOAT_LAYER + alert_overlay.plane = FLOAT_PLANE + for(var/mob/dead/observer/ghost in GLOB.player_list) - if(!notify_suiciders && HAS_TRAIT(ghost, TRAIT_SUICIDED)) + if(!(notify_flags & GHOST_NOTIFY_NOTIFY_SUICIDERS) && HAS_TRAIT(ghost, TRAIT_SUICIDED)) continue if(ignore_key && (ghost.ckey in GLOB.poll_ignore[ignore_key])) continue - if(flashwindow) + if(notify_flags & GHOST_NOTIFY_FLASH_WINDOW) window_flash(ghost.client) if(ghost_sound) @@ -291,20 +295,20 @@ to_chat(ghost, span_ghostalert(message)) continue - var/custom_link = enter_link ? " [enter_link]" : "" - var/link = " ([capitalize(action)])" + var/interact_link = click_interact ? " (Play)" : "" + var/view_link = " (View)" - to_chat(ghost, span_ghostalert("[message][custom_link][link]")) + to_chat(ghost, span_ghostalert("[message][custom_link][interact_link][view_link]")) var/atom/movable/screen/alert/notify_action/toast = ghost.throw_alert( category = "[REF(source)]_notify_action", type = /atom/movable/screen/alert/notify_action, - new_master = source, ) - toast.action = action - toast.desc = "Click to [action]." + toast.add_overlay(alert_overlay) + toast.click_interact = click_interact + toast.desc = "Click to [click_interact ? "play" : "view"]." toast.name = header - toast.target = source + toast.target_ref = WEAKREF(source) /// Heals a robotic limb on a mob /proc/item_heal_robotic(mob/living/carbon/human/human, mob/user, brute_heal, burn_heal) @@ -560,3 +564,21 @@ raw_lines += recent_speech[key] return raw_lines + +/// Takes in an associated list (key `/datum/action` typepaths, value is the AI blackboard key) and handles granting the action and adding it to the mob's AI controller blackboard. +/// This is only useful in instances where you don't want to store the reference to the action on a variable on the mob. +/// You can set the value to null if you don't want to add it to the blackboard (like in player controlled instances). Is also safe with null AI controllers. +/// Assumes that the action will be initialized and held in the mob itself, which is typically standard. +/mob/proc/grant_actions_by_list(list/input) + if(length(input) <= 0) + return + + for(var/action in input) + var/datum/action/ability = new action(src) + ability.Grant(src) + + var/blackboard_key = input[action] + if(isnull(blackboard_key)) + continue + + ai_controller?.set_blackboard_key(blackboard_key, ability) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 1caf5e9f1ea..790f9312ea1 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -376,7 +376,7 @@ if(!MP) return FALSE //Sanity, this should never happen. - if(ispath(MP, /mob/living/simple_animal/hostile/construct) || ispath(MP, /mob/living/basic/construct)) + if(ispath(MP, /mob/living/basic/construct)) return FALSE //Verbs do not appear for players. //Good mobs! @@ -390,7 +390,7 @@ return TRUE if(ispath(MP, /mob/living/basic/mushroom)) return TRUE - if(ispath(MP, /mob/living/simple_animal/shade)) + if(ispath(MP, /mob/living/basic/shade)) return TRUE if(ispath(MP, /mob/living/basic/killer_tomato)) return TRUE diff --git a/code/modules/mob_spawn/corpses/mob_corpses.dm b/code/modules/mob_spawn/corpses/mob_corpses.dm index 476c3f70a84..f83dc13f1ed 100644 --- a/code/modules/mob_spawn/corpses/mob_corpses.dm +++ b/code/modules/mob_spawn/corpses/mob_corpses.dm @@ -221,6 +221,21 @@ facial_haircolor = COLOR_WHITE skin_tone = "caucasian1" +/obj/effect/mob_spawn/corpse/human/wizard/red + outfit = /datum/outfit/wizardcorpse/red + +/obj/effect/mob_spawn/corpse/human/wizard/yellow + outfit = /datum/outfit/wizardcorpse/yellow + +/obj/effect/mob_spawn/corpse/human/wizard/black + outfit = /datum/outfit/wizardcorpse/black + +/obj/effect/mob_spawn/corpse/human/wizard/marisa + outfit = /datum/outfit/wizardcorpse/marisa + +/obj/effect/mob_spawn/corpse/human/wizard/tape + outfit = /datum/outfit/wizardcorpse/tape + /datum/outfit/wizardcorpse name = "Space Wizard Corpse" uniform = /obj/item/clothing/under/color/lightpurple @@ -228,6 +243,27 @@ shoes = /obj/item/clothing/shoes/sandal/magic head = /obj/item/clothing/head/wizard +/datum/outfit/wizardcorpse/red + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + +/datum/outfit/wizardcorpse/yellow + suit = /obj/item/clothing/suit/wizrobe/yellow + head = /obj/item/clothing/head/wizard/yellow + +/datum/outfit/wizardcorpse/black + suit = /obj/item/clothing/suit/wizrobe/black + head = /obj/item/clothing/head/wizard/black + +/datum/outfit/wizardcorpse/marisa + suit = /obj/item/clothing/suit/wizrobe/marisa + head = /obj/item/clothing/head/wizard/marisa + shoes = /obj/item/clothing/shoes/sneakers/marisa + +/datum/outfit/wizardcorpse/tape + suit = /obj/item/clothing/suit/wizrobe/tape + head = /obj/item/clothing/head/wizard/tape + /obj/effect/mob_spawn/corpse/human/wizard/dark name = "Dark Wizard Corpse" outfit = /datum/outfit/wizardcorpse/dark diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm index 9c2f344bf4b..b3475e9207f 100644 --- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/golem_roles.dm @@ -23,7 +23,14 @@ . = ..() var/area/init_area = get_area(src) if(!mapload && init_area) - notify_ghosts("\A golem shell has been completed in \the [init_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) + notify_ghosts( + "\A golem shell has been completed in \the [init_area.name].", + source = src, + header = "Golem Shell", + click_interact = TRUE, + ignore_key = POLL_IGNORE_GOLEM, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /obj/effect/mob_spawn/ghost_role/human/golem/name_mob(mob/living/spawned_mob, forced_name) if(forced_name || !iscarbon(spawned_mob)) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 19cf4565247..f03101584f7 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -266,7 +266,14 @@ eggshell.egg = src src.forceMove(eggshell) if(spawner_area) - notify_ghosts("An ash walker egg is ready to hatch in \the [spawner_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER) + notify_ghosts( + "An ash walker egg is ready to hatch in \the [spawner_area.name].", + source = src, + header = "Ash Walker Egg", + click_interact = TRUE, + ignore_key = POLL_IGNORE_ASHWALKER, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) /datum/outfit/ashwalker name = "Ash Walker" diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index e6197df2d71..f50d31d75cd 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -107,7 +107,17 @@ amount_grown += rand(5, 15) * seconds_per_tick if(amount_grown >= 100 && !ready) ready = TRUE - notify_ghosts("[src] is ready to hatch!", null, enter_link = "(Click to play)", source = src, action = NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPIDER, flashwindow = flash_window) + var/notify_flags_to_pass = NOTIFY_CATEGORY_NOFLASH + if(flash_window) + notify_flags_to_pass &= GHOST_NOTIFY_FLASH_WINDOW + notify_ghosts( + "[src] is ready to hatch!", + source = src, + header = "Spider Infestation", + click_interact = TRUE, + ignore_key = POLL_IGNORE_SPIDER, + notify_flags = notify_flags_to_pass, + ) STOP_PROCESSING(SSobj, src) /obj/effect/mob_spawn/ghost_role/spider/Topic(href, href_list) diff --git a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm index 254cfcfbdab..af5203cc396 100644 --- a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm +++ b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm @@ -33,7 +33,13 @@ /// Called when the attached flower bud has borne fruit (ie. is ready) /obj/effect/mob_spawn/ghost_role/venus_human_trap/proc/bear_fruit() ready = TRUE - notify_ghosts("[src] has borne fruit!", source = src, action = NOTIFY_PLAY, ignore_key = POLL_IGNORE_VENUSHUMANTRAP) + notify_ghosts( + "[src] has borne fruit!", + source = src, + header = "Venus Human Trap", + click_interact = TRUE, + ignore_key = POLL_IGNORE_VENUSHUMANTRAP, + ) /obj/effect/mob_spawn/ghost_role/venus_human_trap/allow_spawn(mob/user, silent = FALSE) . = ..() diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 1cd70ef9f80..33aba248d9a 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -120,13 +120,13 @@ /obj/item/mod/module/energy_shield/on_suit_activation() mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) - RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(shield_reaction)) + RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(shield_reaction)) /obj/item/mod/module/energy_shield/on_suit_deactivation(deleting = FALSE) var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded) charges = shield.current_charges qdel(shield) - UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) /obj/item/mod/module/energy_shield/proc/shield_reaction(mob/living/carbon/human/owner, atom/movable/hitby, @@ -140,7 +140,7 @@ if(SEND_SIGNAL(mod, COMSIG_ITEM_HIT_REACT, owner, hitby, attack_text, 0, damage, attack_type, damage_type) & COMPONENT_HIT_REACTION_BLOCK) drain_power(use_power_cost) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK return NONE /obj/item/mod/module/energy_shield/wizard diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 42722607199..5ed1e44b709 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -463,7 +463,7 @@ if(reagents.has_reagent(reagent_required, reagent_required_amount)) balloon_alert(mod.wearer, "already charged!") return FALSE - if(!attacking_item.reagents.trans_id_to(src, reagent_required, reagent_required_amount)) + if(!attacking_item.reagents.trans_to(src, reagent_required_amount, target_id = reagent_required)) return FALSE balloon_alert(mod.wearer, "charge [reagents.has_reagent(reagent_required, reagent_required_amount) ? "fully" : "partially"] reloaded") return TRUE diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 3ac431034b5..a5128996b62 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -67,10 +67,10 @@ overlay_state_use = "module_pepper_used" /obj/item/mod/module/pepper_shoulders/on_suit_activation() - RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(on_check_shields)) + RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_check_block)) /obj/item/mod/module/pepper_shoulders/on_suit_deactivation(deleting = FALSE) - UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) /obj/item/mod/module/pepper_shoulders/on_use() . = ..() @@ -84,7 +84,7 @@ smoke.start(log = TRUE) QDEL_NULL(capsaicin_holder) // Reagents have a ref to their holder which has a ref to them. No leaks please. -/obj/item/mod/module/pepper_shoulders/proc/on_check_shields() +/obj/item/mod/module/pepper_shoulders/proc/on_check_block() SIGNAL_HANDLER if(!COOLDOWN_FINISHED(src, cooldown_timer)) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 89e6eca3293..895da54bf37 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -324,11 +324,14 @@ return FALSE . = ..() + if(!forced) + add_log("manual overriding of permissions and modification of device firmware detected. Reboot and reinstall required.") obj_flags |= EMAGGED device_theme = PDA_THEME_SYNDICATE - balloon_alert(user, "syndieOS loaded") - if (emag_card) - to_chat(user, span_notice("You swipe \the [src] with [emag_card]. A console window momentarily fills the screen, with white text rapidly scrolling past.")) + if(user) + balloon_alert(user, "syndieOS loaded") + if (emag_card) + to_chat(user, span_notice("You swipe \the [src] with [emag_card]. A console window momentarily fills the screen, with white text rapidly scrolling past.")) return TRUE /obj/item/modular_computer/examine(mob/user) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 1b87a014f18..c98284fbf66 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -96,6 +96,7 @@ ) data["proposed_login"] = list( + IDInserted = computer_id_slot ? TRUE : FALSE, IDName = computer_id_slot?.registered_name, IDJob = computer_id_slot?.assignment, ) diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm index 1eebf9f2387..4239a33dfd7 100644 --- a/code/modules/modular_computers/computers/item/laptop_presets.dm +++ b/code/modules/modular_computers/computers/item/laptop_presets.dm @@ -3,3 +3,9 @@ starting_programs = list( /datum/computer_file/program/chatclient, ) + +//Used for Mafia testing purposes. +/obj/item/modular_computer/laptop/preset/mafia + starting_programs = list( + /datum/computer_file/program/mafia, + ) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index e2f1b354eda..4ccdfe8ec21 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -47,6 +47,7 @@ name = "head of security PDA" greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#EA3232#0000CC" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/crew_manifest, /datum/computer_file/program/status, @@ -122,6 +123,7 @@ /obj/item/modular_computer/pda/security name = "security PDA" greyscale_colors = "#EA3232#0000cc" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, @@ -131,6 +133,7 @@ /obj/item/modular_computer/pda/detective name = "detective PDA" greyscale_colors = "#805A2F#990202" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, @@ -141,6 +144,7 @@ name = "warden PDA" greyscale_config = /datum/greyscale_config/tablet/stripe_double greyscale_colors = "#EA3232#0000CC#363636" + inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md index 7e0cd7dbca1..925f2f5668b 100644 --- a/code/modules/modular_computers/documentation.md +++ b/code/modules/modular_computers/documentation.md @@ -31,13 +31,12 @@ This is how the base program is setup. the rest is mostly tgui stuff. I'll use t /// programs. requires_ntnet = 1 - /// This is access required to run the program itself. ONLY SET THIS FOR - /// SUPER SECURE SHIT. This also acts as transfer_access as well. - required_access = access_network + /// This is access required to run the program itself. + run_access = access_network /// This is the access needed to download from ntnet or host on the ptp /// program. This is what you want to use most of the time. - transfer_access = access_change_ids + download_access = access_change_ids /// If it's available to download on ntnet. pretty self explanatory. available_on_ntnet = 1 diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 8cb741d376e..d050bd804b3 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -9,10 +9,11 @@ ///How much power running this program costs. var/power_cell_use = PROGRAM_BASIC_CELL_USE - /// List of required accesses to *run* the program. Any match will do. - var/list/required_access = list() - /// List of required access to download or file host the program. Any match will do. - var/list/transfer_access = list() + ///List of required accesses to *run* the program. Any match will do. + ///This also acts as download_access if that is not set, making this more draconic and restrictive. + var/list/run_access = list() + ///List of required access to download or file host the program. Any match will do. + var/list/download_access = list() /// User-friendly name of this program. var/filedesc = "Unknown Program" /// Short description of this program's function. @@ -52,7 +53,7 @@ /datum/computer_file/program/clone() var/datum/computer_file/program/temp = ..() - temp.required_access = required_access + temp.run_access = run_access temp.filedesc = filedesc temp.program_icon_state = program_icon_state temp.requires_ntnet = requires_ntnet @@ -83,9 +84,9 @@ ///Attempts to generate an Ntnet log, returns the log on success, FALSE otherwise. /datum/computer_file/program/proc/generate_network_log(text) - if(computer) - return computer.add_log(text) - return FALSE + if(!computer || computer.obj_flags & EMAGGED) + return FALSE + return computer.add_log(text) /** *Runs when the device is used to attack an atom in non-combat mode using right click (secondary). @@ -115,33 +116,32 @@ return TRUE /** - *Check if the user can run program. Only humans and silicons can operate computer. Automatically called in on_start() - *ID must be inserted into a card slot to be read. If the program is not currently installed (as is the case when - *NT Software Hub is checking available software), a list can be given to be used instead. - *Arguments: - *user is a ref of the mob using the device. - *loud is a bool deciding if this proc should use to_chats - *access_to_check is an access level that will be checked against the ID - *transfer, if TRUE and access_to_check is null, will tell this proc to use the program's transfer_access in place of access_to_check - *access can contain a list of access numbers to check against. If access is not empty, it will be used istead of checking any inserted ID. -*/ -/datum/computer_file/program/proc/can_run(mob/user, loud = FALSE, access_to_check, transfer = FALSE, list/access) + * Checks if the user can run program. Only humans and silicons can operate computer. Automatically called in on_start() + * ID must be inserted into a card slot to be read. If the program is not currently installed (as is the case when + * NT Software Hub is checking available software), a list can be given to be used instead. + * Args: + * user is a ref of the mob using the device. + * loud is a bool deciding if this proc should use to_chats + * access_to_check is an access level that will be checked against the ID + * downloading: Boolean on whether it's downloading the app or not. If it is, it will check download_access instead of run_access. + * access can contain a list of access numbers to check against. If access is not empty, it will be used istead of checking any inserted ID. + */ +/datum/computer_file/program/proc/can_run(mob/user, loud = FALSE, access_to_check, downloading = FALSE, list/access) if(issilicon(user) && !ispAI(user)) return TRUE if(isAdminGhostAI(user)) return TRUE - if(computer && (computer.obj_flags & EMAGGED) && (available_on_syndinet || !transfer)) //emagged can run anything on syndinet, and can bypass execution locks, but not download. + if(computer && (computer.obj_flags & EMAGGED) && (available_on_syndinet || !downloading)) //emagged can run anything on syndinet, and can bypass execution locks, but not download. return TRUE - // Defaults to required_access if(!access_to_check) - if(transfer && length(transfer_access)) - access_to_check = transfer_access + if(downloading && length(download_access)) + access_to_check = download_access else - access_to_check = required_access - if(!length(access_to_check)) // No required_access, allow it. + access_to_check = run_access + if(!length(access_to_check)) // No access requirements, allow it. return TRUE if(!length(access)) diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 4f24b2c61d8..ee3f983cbd5 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -7,7 +7,7 @@ size = 12 requires_ntnet = FALSE usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP - transfer_access = list(ACCESS_RD) + download_access = list(ACCESS_RD) available_on_ntnet = TRUE tgui_id = "NtosAiRestorer" program_icon = "laptop-code" diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 856cc9b6b02..be15e90faea 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -42,7 +42,7 @@ /datum/computer_file/program/ntnet_dos/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("PRG_target_relay") - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) if(relays.uid == params["targid"]) target = relays break @@ -76,7 +76,7 @@ else data["target"] = FALSE data["relays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) data["relays"] += list(list("id" = relays.uid)) data["focus"] = target ? target.uid : null diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 2a2e494c1ec..fae48fbff2f 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -6,7 +6,7 @@ program_icon_state = "generic" extended_desc = "This program allows for remote monitoring of station cyborgs." requires_ntnet = TRUE - transfer_access = list(ACCESS_ROBOTICS) + download_access = list(ACCESS_ROBOTICS) size = 5 tgui_id = "NtosCyborgRemoteMonitor" program_icon = "project-diagram" @@ -155,7 +155,7 @@ requires_ntnet = FALSE available_on_ntnet = FALSE available_on_syndinet = TRUE - transfer_access = list() + download_access = list() /datum/computer_file/program/borg_monitor/syndicate/evaluate_borg(mob/living/silicon/robot/R) if(!is_valid_z_level(get_turf(computer), get_turf(R))) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 529cf813d1b..05ac394b7bd 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -4,7 +4,7 @@ category = PROGRAM_CATEGORY_CREW program_icon_state = "id" extended_desc = "Program for programming employee ID cards to access parts of the station." - transfer_access = list(ACCESS_COMMAND) + download_access = list(ACCESS_COMMAND) requires_ntnet = 0 size = 8 tgui_id = "NtosCard" diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index cdd05d6b4c6..85f9a4c5ffe 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -4,7 +4,7 @@ category = PROGRAM_CATEGORY_CREW program_icon_state = "id" extended_desc = "Program for viewing and printing the current crew manifest" - transfer_access = list(ACCESS_SECURITY, ACCESS_COMMAND) + download_access = list(ACCESS_SECURITY, ACCESS_COMMAND) requires_ntnet = TRUE size = 4 tgui_id = "NtosCrewManifest" diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 9c6e33bcde9..3b001e9f39d 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -8,7 +8,7 @@ program_icon_state = "research" tgui_id = "NtosScipaper" program_icon = "paper-plane" - transfer_access = list(ACCESS_ORDNANCE) + download_access = list(ACCESS_ORDNANCE) var/datum/techweb/linked_techweb /// Unpublished, temporary paper datum. @@ -65,9 +65,9 @@ singular_partner["path"] = partner.type singular_partner["boostedNodes"] = list() singular_partner["acceptedExperiments"] = list() - for (var/node_id in partner.boosted_nodes) + for (var/node_id in partner.boostable_nodes) var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) - singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = partner.boosted_nodes[node_id], "id"=node_id)) + singular_partner["boostedNodes"] += list(list("name" = node.display_name, "discount" = partner.boostable_nodes[node_id], "id" = node_id)) for (var/datum/experiment/ordnance/ordnance_experiment as anything in partner.accepted_experiments) singular_partner["acceptedExperiments"] += initial(ordnance_experiment.name) parsed_partners += list(singular_partner) @@ -154,7 +154,7 @@ data["purchaseableBoosts"][partner.type] = list() for(var/node_id in linked_techweb.get_available_nodes()) // Not from our partner - if(!(node_id in partner.boosted_nodes)) + if(!(node_id in partner.boostable_nodes)) continue if(!partner.allowed_to_boost(linked_techweb, node_id)) continue diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 973dbf3c764..c04fddcd396 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -7,7 +7,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) category = PROGRAM_CATEGORY_CREW program_icon_state = "id" extended_desc = "Program for viewing and changing job slot availability." - transfer_access = list(ACCESS_COMMAND) + download_access = list(ACCESS_COMMAND) requires_ntnet = TRUE size = 4 tgui_id = "NtosJobManager" diff --git a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm index 7bd5b81a240..bbcdd39d32c 100644 --- a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm +++ b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm @@ -16,11 +16,11 @@ /datum/computer_file/program/mafia/Destroy(force) var/datum/mafia_controller/game = GLOB.mafia_game if(!game) - return + return ..() UnregisterSignal(game, COMSIG_MAFIA_GAME_END) - var/datum/mafia_role/pda_role = game.player_role_lookup[computer] + var/datum/mafia_role/pda_role = game.get_role_player(computer) if(!pda_role) - return + return ..() game.send_message(span_notice("[pda_role.body] has deleted the game from their PDA, and therefore has left the game.")) pda_role.kill(game) return ..() @@ -60,7 +60,7 @@ SIGNAL_HANDLER RegisterSignal(game, COMSIG_MAFIA_GAME_END, PROC_REF(on_game_end)) ui_header = "mafia.gif" - if(game.player_role_lookup[computer]) + if(game.get_role_player(computer)) alert_pending = TRUE computer.alert_call(src, "Mafia game started!") diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index 47e4f65d48f..27aafee3a41 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/newscaster filename = "newscasterapp" filedesc = "Newscaster" - transfer_access = list(ACCESS_LIBRARY) + download_access = list(ACCESS_LIBRARY) category = PROGRAM_CATEGORY_CREW program_icon_state = "bountyboard" extended_desc = "This program allows any user to access the Newscaster network from anywhere." diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index 01afaa08c19..c0232fe3888 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -7,7 +7,7 @@ size = 2 tgui_id = "NtosNotepad" program_icon = "book" - usage_flags = PROGRAM_TABLET + usage_flags = PROGRAM_ALL var/written_note = "Congratulations on your station upgrading to the new NtOS and Thinktronic based collaboration effort, \ bringing you the best in electronics and software since 2467!\n\ diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index c9723d905b5..a5aaee6dca4 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -143,7 +143,7 @@ "installed" = !!computer.find_file_by_name(programs.filename), "compatible" = check_compatibility(programs), "size" = programs.size, - "access" = programs.can_run(user, transfer = TRUE, access = access), + "access" = programs.can_run(user, downloading = TRUE, access = access), "verifiedsource" = programs.available_on_ntnet, )) diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm index 68c94e87e8d..cdfa24be1b1 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -15,7 +15,7 @@ category = PROGRAM_CATEGORY_CREW program_icon_state = "dummy" extended_desc = "This program connects to a Spinward Sector community art site for viewing and printing art." - transfer_access = list(ACCESS_LIBRARY) + download_access = list(ACCESS_LIBRARY) usage_flags = PROGRAM_CONSOLE requires_ntnet = TRUE size = 9 diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index e82821d75e4..9a8026ccd6c 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -7,7 +7,7 @@ program_icon_state = "power_monitor" extended_desc = "This program connects to sensors around the station to provide information about electrical systems" ui_header = "power_norm.gif" - transfer_access = list(ACCESS_ENGINEERING) + download_access = list(ACCESS_ENGINEERING) usage_flags = PROGRAM_CONSOLE requires_ntnet = FALSE size = 8 diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index c230614339d..704be0dc255 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -220,7 +220,7 @@ filedesc = "Lifeline" extended_desc = "This program allows for tracking of crew members via their suit sensors." requires_ntnet = TRUE - transfer_access = list(ACCESS_MEDICAL) + download_access = list(ACCESS_MEDICAL) available_on_ntnet = TRUE program_icon = "heartbeat" @@ -260,7 +260,7 @@ filedesc = "Custodial Locator" extended_desc = "This program allows for tracking of custodial equipment." requires_ntnet = TRUE - transfer_access = list(ACCESS_JANITOR) + download_access = list(ACCESS_JANITOR) available_on_ntnet = TRUE program_icon = "broom" size = 2 diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 9b5617364c0..12c682f5626 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -18,7 +18,7 @@ filename = "medrecords" program_icon = "book-medical" extended_desc = "Allows the user to view several basic medical records from the crew." - transfer_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND) + download_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND) available_on_ntnet = TRUE mode = "medical" @@ -26,7 +26,7 @@ filedesc = "Security Records" filename = "secrecords" extended_desc = "Allows the user to view several basic security records from the crew." - transfer_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) + download_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) available_on_ntnet = TRUE mode = "security" diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 6e3e69cdccf..bb31d74f9ab 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -8,7 +8,7 @@ program_icon_state = "generic" extended_desc = "This program allows access to standard security camera networks." requires_ntnet = TRUE - transfer_access = list(ACCESS_SECURITY) + download_access = list(ACCESS_SECURITY) usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP size = 5 tgui_id = "NtosSecurEye" @@ -39,7 +39,7 @@ filename = "syndeye" filedesc = "SyndEye" extended_desc = "This program allows for illegal access to security camera networks." - transfer_access = list() + download_access = list() available_on_ntnet = FALSE available_on_syndinet = TRUE requires_ntnet = FALSE diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 0ba8a721407..e310d402e9e 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -6,7 +6,7 @@ program_icon_state = "smmon_0" extended_desc = "Crystal Integrity Monitoring System, connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines." requires_ntnet = TRUE - transfer_access = list(ACCESS_CONSTRUCTION) + download_access = list(ACCESS_CONSTRUCTION) size = 5 tgui_id = "NtosSupermatter" program_icon = "radiation" diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 77d0a0900e4..ad503422b47 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -8,8 +8,8 @@ size = 10 tgui_id = "NtosTechweb" program_icon = "atom" - required_access = list(ACCESS_COMMAND, ACCESS_RESEARCH) - transfer_access = list(ACCESS_RESEARCH) + run_access = list(ACCESS_COMMAND, ACCESS_RESEARCH) + download_access = list(ACCESS_RESEARCH) /// Reference to global science techweb var/datum/techweb/stored_research /// Access needed to lock/unlock the console diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index 712d1e92cda..ed83f2ca334 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -6,7 +6,7 @@ extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes" size = 12 requires_ntnet = TRUE - required_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM. + run_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM. available_on_ntnet = TRUE tgui_id = "NtosNetMonitor" program_icon = "network-wired" @@ -20,7 +20,7 @@ SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled return TRUE if("toggle_relay") - var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in GLOB.ntnet_relays + var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay) if(!istype(target_relay)) return target_relay.set_relay_enabled(!target_relay.relay_enabled) @@ -39,7 +39,7 @@ var/list/data = list() data["ntnetrelays"] = list() - for(var/obj/machinery/ntnet_relay/relays as anything in GLOB.ntnet_relays) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) var/list/relay_data = list() relay_data["is_operational"] = !!relays.is_operational relay_data["name"] = relays.name diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 65245880ef4..4768f66a544 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -53,3 +53,6 @@ /datum/movespeed_modifier/status_effect/midas_blight/gold multiplicative_slowdown = 2 + +/datum/movespeed_modifier/status_effect/guardian_shield + multiplicative_slowdown = 1 diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index a652b745c9e..da3bfe4e0ce 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -26,7 +26,6 @@ if(!pai.encrypt_mod) to_chat(user, span_alert("Encryption Key ports not configured.")) return - user.set_machine(src) pai.radio.attackby(used, user, params) to_chat(user, span_notice("You insert [used] into the [src].")) return @@ -35,7 +34,6 @@ /obj/item/pai_card/attack_self(mob/user) if(!in_range(src, user)) return - user.set_machine(src) ui_interact(user) /obj/item/pai_card/Destroy() @@ -234,7 +232,16 @@ playsound(src, 'sound/machines/ping.ogg', 20, TRUE) balloon_alert(user, "pAI assistance requested") var/mutable_appearance/alert_overlay = mutable_appearance('icons/obj/aicards.dmi', "pai") - notify_ghosts("[user] is requesting a pAI companion! Use the pAI button to submit yourself as one.", source = user, alert_overlay = alert_overlay, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "pAI Request!", ignore_key = POLL_IGNORE_PAI) + + notify_ghosts( + "[user] is requesting a pAI companion! Use the pAI button to submit yourself as one.", + source = user, + header = "pAI Request!", + alert_overlay = alert_overlay, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ignore_key = POLL_IGNORE_PAI, + ) + addtimer(VARSET_CALLBACK(src, request_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_CLIENT_TIME | TIMER_DELETE_ME) return TRUE diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index a03c79f44d0..20363ad99fb 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -174,7 +174,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department var/obj/item/reagent_containers/spray/clean_spray = item if(!clean_spray.reagents.has_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this)) return FALSE - clean_spray.reagents.remove_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this, 1) + clean_spray.reagents.remove_reagent(/datum/reagent/space_cleaner, clean_spray.amount_per_transfer_from_this) playsound(loc, 'sound/effects/spray3.ogg', 50, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE) user.visible_message(span_notice("[user] cleans \the [src]."), span_notice("You clean \the [src].")) jammed = FALSE @@ -537,8 +537,10 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department target_fax.receive(fax_item, sender) else if(force) //no fax machines but we really gotte send? SEND A FAX MACHINE - var/obj/machinery/fax/new_fax_machine = new () - send_supply_pod_to_area(new_fax_machine, area_type, force_pod_type) + var/obj/machinery/fax/new_fax_machine = new() + if(!send_supply_pod_to_area(new_fax_machine, area_type, force_pod_type)) + stack_trace("Attempted to forcibly send a fax to [area_type], however the area does not exist or has no valid dropoff spot for a fax machine") + return FALSE addtimer(CALLBACK(new_fax_machine, TYPE_PROC_REF(/obj/machinery/fax, receive), fax_item, sender), 10 SECONDS) else diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 05606ac3a2e..69af56d3419 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -400,3 +400,44 @@ . = ..() icon_state = "[initial(icon_state)][HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) ? "_out" : null]" inhand_icon_state = initial(inhand_icon_state) //since transforming component switches the icon. + +//The Security holopen +/obj/item/pen/red/security + name = "security pen" + desc = "This is a red ink pen exclusively provided to members of the Security Department. Its opposite end features a built-in holographic projector designed for issuing arrest prompts to individuals." + icon_state = "pen_sec" + COOLDOWN_DECLARE(holosign_cooldown) + +/obj/item/pen/red/security/examine(mob/user) + . = ..() + . += span_notice("To initiate the surrender prompt, simply click on an individual within your proximity.") + +//Code from the medical penlight +/obj/item/pen/red/security/afterattack(atom/target, mob/living/user, proximity) + . = ..() + if(!COOLDOWN_FINISHED(src, holosign_cooldown)) + balloon_alert(user, "not ready!") + return + + var/target_turf = get_turf(target) + var/mob/living/living_target = locate(/mob/living) in target_turf + + if(!living_target || (living_target == user)) + return + + living_target.apply_status_effect(/datum/status_effect/surrender_timed) + to_chat(living_target, span_userdanger("[user] requests your immediate surrender! You are given 30 seconds to comply!")) + new /obj/effect/temp_visual/security_holosign(target_turf, user) //produce a holographic glow + COOLDOWN_START(src, holosign_cooldown, 30 SECONDS) + +/obj/effect/temp_visual/security_holosign + name = "security holosign" + desc = "A small holographic glow that indicates you're under arrest." + icon_state = "sec_holo" + duration = 60 + +/obj/effect/temp_visual/security_holosign/Initialize(mapload, creator) + . = ..() + playsound(loc, 'sound/machines/chime.ogg', 50, FALSE) //make some noise! + if(creator) + visible_message(span_danger("[creator] created a security hologram!")) diff --git a/code/modules/plumbing/plumbers/bottler.dm b/code/modules/plumbing/plumbers/bottler.dm index bba9238fa26..8e0158b61da 100644 --- a/code/modules/plumbing/plumbers/bottler.dm +++ b/code/modules/plumbing/plumbers/bottler.dm @@ -79,7 +79,7 @@ return PROCESS_KILL ///see if machine has enough to fill, is anchored down and has any inputspot objects to pick from - if(reagents.total_volume + 0.01 >= wanted_amount && anchored && length(inputspot.contents)) + if(reagents.total_volume >= wanted_amount && anchored && length(inputspot.contents)) use_power(active_power_usage * seconds_per_tick) var/obj/AM = pick(inputspot.contents)///pick a reagent_container that could be used //allowed containers @@ -91,13 +91,13 @@ var/obj/item/B = AM ///see if it would overflow else inject if((B.reagents.total_volume + wanted_amount) <= B.reagents.maximum_volume) - reagents.trans_to(B, wanted_amount, transferred_by = src) + reagents.trans_to(B, wanted_amount) B.forceMove(goodspot) return ///glass was full so we move it away AM.forceMove(badspot) else if(istype(AM, /obj/item/slime_extract)) ///slime extracts need inject AM.forceMove(goodspot) - reagents.trans_to(AM, wanted_amount, transferred_by = src, methods = INJECT) + reagents.trans_to(AM, wanted_amount, methods = INJECT) else if(istype(AM, /obj/item/slimecross/industrial)) ///no need to move slimecross industrial things - reagents.trans_to(AM, wanted_amount, transferred_by = src, methods = INJECT) + reagents.trans_to(AM, wanted_amount, methods = INJECT) diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm index 4e4a282bd1d..633f70830f0 100644 --- a/code/modules/plumbing/plumbers/filter.dm +++ b/code/modules/plumbing/plumbers/filter.dm @@ -38,11 +38,12 @@ switch(action) if("add") var/which = params["which"] - var/selected_reagent = tgui_input_list(usr, "Select [which] reagent", "Reagent", GLOB.chemical_name_list) + + var/selected_reagent = tgui_input_list(usr, "Select [which] reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) return TRUE - var/chem_id = get_chem_id(selected_reagent) + var/datum/reagent/chem_id = GLOB.name2reagent[selected_reagent] if(!chem_id) return TRUE diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 5061723acc7..6c309b525b9 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -84,7 +84,7 @@ return //shift & check to account for floating point inaccuracies - if(reagents.total_volume + 0.01 >= current_volume) + if(reagents.total_volume >= current_volume) var/obj/item/reagent_containers/container = locate(packaging_type) container = new container(src) var/suffix diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index c1e56378408..965b428acbd 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -3,9 +3,6 @@ /// coefficient to convert temperature to joules. same lvl as acclimator #define HEATER_COEFFICIENT 0.05 -/// maximum number of attempts the reaction chamber will make to balance the ph(More means better results but higher tick usage) -#define MAX_PH_ADJUSTMENTS 5 - /obj/machinery/plumbing/reaction_chamber name = "mixing chamber" desc = "Keeps chemicals separated until given conditions are met." @@ -46,7 +43,7 @@ /obj/machinery/plumbing/reaction_chamber/proc/on_reagent_change(datum/reagents/holder, ...) SIGNAL_HANDLER - if(!holder.total_volume && emptying) //we were emptying, but now we aren't + if(holder.total_volume <= CHEMICAL_VOLUME_ROUNDING && emptying) //we were emptying, but now we aren't emptying = FALSE holder.flags |= NO_REACT return NONE @@ -107,32 +104,34 @@ switch(action) if("add") - var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.chemical_name_list) + var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.name2reagent) if(!selected_reagent) - return TRUE + return FALSE - var/input_reagent = get_chem_id(selected_reagent) + var/datum/reagent/input_reagent = GLOB.name2reagent[selected_reagent] if(!input_reagent) - return TRUE + return FALSE if(!required_reagents.Find(input_reagent)) var/input_amount = text2num(params["amount"]) - if(input_amount) + if(!isnull(input_amount)) required_reagents[input_reagent] = input_amount - - return TRUE + return TRUE + return FALSE if("remove") var/reagent = get_chem_id(params["chem"]) if(reagent) required_reagents.Remove(reagent) - return TRUE + return TRUE + return FALSE if("temperature") var/target = text2num(params["target"]) - if(target != null) + if(!isnull(target)) target_temperature = clamp(target, 0, 1000) - return TRUE + return TRUE + return FALSE var/result = handle_ui_act(action, params, ui, state) if(isnull(result)) @@ -173,8 +172,7 @@ return ..() /obj/machinery/plumbing/reaction_chamber/chem/handle_reagents(seconds_per_tick) - var/ph_balance_attempts = 0 - while(ph_balance_attempts < MAX_PH_ADJUSTMENTS && (reagents.ph < acidic_limit || reagents.ph > alkaline_limit)) + if(reagents.ph < acidic_limit || reagents.ph > alkaline_limit) //no power if(machine_stat & NOPOWER) return @@ -194,14 +192,13 @@ return //transfer buffer and handle reactions - var/ph_change = (reagents.ph > alkaline_limit ? (reagents.ph - alkaline_limit) : (acidic_limit - reagents.ph)) - var/buffer_amount = ((ph_change * reagents.total_volume) / (BUFFER_IONIZING_STRENGTH * num_of_reagents)) - if(!buffer.trans_to(reagents, buffer_amount * seconds_per_tick)) + var/ph_change = max((reagents.ph > alkaline_limit ? (reagents.ph - alkaline_limit) : (acidic_limit - reagents.ph)), 0.25) + var/buffer_amount = ((ph_change * reagents.total_volume) / (BUFFER_IONIZING_STRENGTH * num_of_reagents)) * seconds_per_tick + if(!buffer.trans_to(reagents, buffer_amount)) return //some power for accurate ph balancing & keep track of attempts made - use_power(active_power_usage * 0.03 * buffer_amount * seconds_per_tick) - ph_balance_attempts += 1 + use_power(active_power_usage * 0.03 * buffer_amount) /obj/machinery/plumbing/reaction_chamber/chem/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -227,4 +224,3 @@ return FALSE #undef HEATER_COEFFICIENT -#undef MAX_PH_ADJUSTMENTS diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index 3dddd648e61..0e9cb0c1b11 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -2,7 +2,6 @@ /obj/machinery/plumbing/synthesizer name = "chemical synthesizer" desc = "Produces a single chemical at a given volume. Must be plumbed. Most effective when working in unison with other chemical synthesizers, heaters and filters." - icon_state = "synthesizer" icon = 'icons/obj/pipes_n_cables/hydrochem/plumbers.dmi' active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2 @@ -52,10 +51,13 @@ /obj/machinery/plumbing/synthesizer/process(seconds_per_tick) if(machine_stat & NOPOWER || !reagent_id || !amount) return - if(reagents.total_volume >= amount*seconds_per_tick*0.5) //otherwise we get leftovers, and we need this to be precise + + //otherwise we get leftovers, and we need this to be precise + if(reagents.total_volume >= amount) return - reagents.add_reagent(reagent_id, amount*seconds_per_tick*0.5) - use_power(active_power_usage * amount * seconds_per_tick * 0.5) + reagents.add_reagent(reagent_id, amount) + + use_power(active_power_usage) /obj/machinery/plumbing/synthesizer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -63,8 +65,13 @@ ui = new(user, src, "ChemSynthesizer", name) ui.open() +/obj/machinery/plumbing/synthesizer/ui_static_data(mob/user) + . = ..() + .["possible_amounts"] = possible_amounts + /obj/machinery/plumbing/synthesizer/ui_data(mob/user) - var/list/data = list() + . = list() + .["amount"] = amount var/is_hallucinating = FALSE if(isliving(user)) @@ -72,36 +79,35 @@ is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) var/list/chemicals = list() - for(var/A in dispensable_reagents) - var/datum/reagent/R = GLOB.chemical_reagents_list[A] - if(R) - var/chemname = R.name + for(var/reagentID in dispensable_reagents) + var/datum/reagent/reagent = GLOB.chemical_reagents_list[reagentID] + if(reagent) + var/chemname = reagent.name if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(R.name)))) - data["chemicals"] = chemicals - data["amount"] = amount - data["possible_amounts"] = possible_amounts + chemicals += list(list("title" = chemname, "id" = reagent.name)) + .["chemicals"] = chemicals - data["current_reagent"] = ckey(initial(reagent_id.name)) - return data + .["current_reagent"] = initial(reagent_id.name) /obj/machinery/plumbing/synthesizer/ui_act(action, params) . = ..() if(.) return - . = TRUE + switch(action) if("amount") var/new_amount = text2num(params["target"]) if(new_amount in possible_amounts) amount = new_amount . = TRUE + if("select") var/new_reagent = GLOB.name2reagent[params["reagent"]] if(new_reagent in dispensable_reagents) reagent_id = new_reagent . = TRUE + update_appearance() reagents.clear_reagents() diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index ed4b2159cab..3d6ec46e496 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -101,7 +101,7 @@ qdel(on_turf) if(!mapload) //sync up nightshift lighting for player made lights - var/area/our_area = get_room_area(src) + var/area/our_area = get_room_area() var/obj/machinery/power/apc/temp_apc = our_area.apc nightshift_enabled = temp_apc?.nightshift_lights @@ -131,7 +131,7 @@ update(trigger = FALSE) /obj/machinery/light/Destroy() - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if(local_area) on = FALSE QDEL_NULL(cell) @@ -154,7 +154,7 @@ /obj/machinery/light/update_icon_state() switch(status) // set icon_states if(LIGHT_OK) - var/area/local_area = get_area(src) + var/area/local_area = get_room_area() if(low_power_mode || major_emergency || (local_area?.fire)) icon_state = "[base_state]_emergency" else @@ -174,7 +174,7 @@ . += emissive_appearance(overlay_icon, "[base_state]", src, alpha = src.alpha) - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if(low_power_mode || major_emergency || (local_area?.fire)) . += mutable_appearance(overlay_icon, "[base_state]_emergency") @@ -196,7 +196,7 @@ . = ..() if(!.) return - var/area/our_area = get_room_area(src) + var/area/our_area = get_room_area() RegisterSignal(our_area, COMSIG_AREA_FIRE_CHANGED, PROC_REF(handle_fire)) /obj/machinery/light/on_enter_area(datum/source, area/area_to_register) @@ -227,7 +227,7 @@ color_set = color if(reagents) START_PROCESSING(SSmachines, src) - var/area/local_area =get_room_area(src) + var/area/local_area = get_room_area() if (local_area?.fire) color_set = fire_colour brightness_set = fire_brightness @@ -286,7 +286,7 @@ static_power_used = 0 else if(on) //Light is on, just recalculate usage var/static_power_used_new = 0 - var/area/local_area = get_room_area(src) + var/area/local_area = get_room_area() if (nightshift_enabled && !local_area?.fire) static_power_used_new = nightshift_brightness * nightshift_light_power * power_consumption_rate else @@ -475,13 +475,13 @@ // returns if the light has power /but/ is manually turned off // if a light is turned off, it won't activate emergency power /obj/machinery/light/proc/turned_off() - var/area/local_area = get_room_area(src) - return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //SKYRAT EDIT CHANGE + var/area/local_area = get_room_area() + return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //SKYRAT EDIT CHANGE - ORIGINAL : return !local_area.lightswitch && local_area.power_light || flickering // returns whether this light has power // true if area has power and lightswitch is on /obj/machinery/light/proc/has_power() - var/area/local_area =get_room_area(src) + var/area/local_area = get_room_area() //SKYRAT EDIT ADDITION BEGIN if(isnull(local_area)) return FALSE @@ -687,7 +687,7 @@ // called when area power state changes /obj/machinery/light/power_change() SHOULD_CALL_PARENT(FALSE) - var/area/local_area =get_room_area(src) + var/area/local_area = get_room_area() set_on(local_area.lightswitch && local_area.power_light) // called when heated diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index ac6eb376ac3..75dfc4b5c5b 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -123,7 +123,7 @@ if(isliving(mover)) shock(mover) return - if(ismachinery(mover) || isstructure(mover) || ismecha(mover)) + if(ismachinery(mover) || isstructure(mover) || isvehicle(mover)) bump_field(mover) return diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 3e36ff3c393..ee59ceb4a48 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -58,7 +58,14 @@ var/area/area = get_area(src) if(area) var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult/effects.dmi', "ghostalertsie") - notify_ghosts("Nar'Sie has risen in [area]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action = NOTIFY_PLAY) + notify_ghosts( + "Nar'Sie has risen in [area]. Reach out to the Geometer to be given a new shell for your soul.", + source = src, + header = "Nar'Sie has risen!", + click_interact = TRUE, + alert_overlay = alert_overlay, + ) + narsie_spawn_animation() GLOB.cult_narsie = src @@ -218,21 +225,25 @@ ///First crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_end_begin_check() if(QDELETED(GLOB.cult_narsie)) // uno - priority_announce("Status report? We detected an anomaly, but it disappeared almost immediately.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Status report? We detected an anomaly, but it disappeared almost immediately.","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_FAILURE_NARSIE_KILLED), 2 SECONDS) return - priority_announce("An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.","Central Command Higher Dimensional Affairs", 'sound/misc/airraid.ogg') + priority_announce( + text = "An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.", + title = "[command_name()] Higher Dimensional Affairs", + sound = 'sound/misc/airraid.ogg', + ) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_end_second_check)), 50 SECONDS) ///Second crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_end_second_check() if(QDELETED(GLOB.cult_narsie)) // dos - priority_announce("Simulations aborted, sensors report that the acasual event is normalizing. Good work, crew.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Simulations aborted, sensors report that the acasual event is normalizing. Good work, crew.","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_FAILURE_NARSIE_KILLED), 2 SECONDS) return - priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","Central Command Higher Dimensional Affairs") + priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","[command_name()] Higher Dimensional Affairs") addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_start_destroy_station)), 5 SECONDS) ///security level and shuttle lockdowns for [/proc/begin_the_end()] @@ -245,7 +256,7 @@ ///Third crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_apocalypse() if(QDELETED(GLOB.cult_narsie)) // tres - priority_announce("Normalization detected! Abort the solution package!","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Normalization detected! Abort the solution package!","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') SSshuttle.clearHostileEnvironment(GLOB.cult_narsie) GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_last_second_win)), 2 SECONDS) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 44d318d3467..b21b26dcea0 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -79,14 +79,11 @@ notify_ghosts( ghost_notification_message, source = src, - action = NOTIFY_ORBIT, - flashwindow = FALSE, - ghost_sound = 'sound/machines/warning-buzzer.ogg', header = ghost_notification_message, - notify_volume = 75 + ghost_sound = 'sound/machines/warning-buzzer.ogg', + notify_volume = 75, ) - /obj/singularity/Destroy() STOP_PROCESSING(SSsinguloprocess, src) return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 3f02447ddbc..580d2a66f96 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -535,7 +535,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) final_countdown = TRUE SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, final_countdown) // SKYRAT EDIT ADDITION - DELAM_SCRAM - notify_ghosts("[src] has begun the delamination process!", source = src, header = "Meltdown Incoming") + notify_ghosts( + "[src] has begun the delamination process!", + source = src, + header = "Meltdown Incoming", + ) var/datum/sm_delam/last_delamination_strategy = delamination_strategy var/list/count_down_messages = delamination_strategy.count_down_messages() diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm index 8edcc6710bf..eabb07d1137 100644 --- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list( /datum/sm_delam/proc/can_select(obj/machinery/power/supermatter_crystal/sm) return FALSE -#define ROUNDCOUNT_ENGINE_JUST_EXPLODED 0 +#define ROUNDCOUNT_ENGINE_JUST_EXPLODED -1 /// Called when the count down has been finished, do the nasty work. /// [/obj/machinery/power/supermatter_crystal/proc/count_down] diff --git a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm index 21b91725d36..cbe3f3dab03 100644 --- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm +++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm @@ -131,8 +131,13 @@ // say goodbye to that shuttle of yours if(SSshuttle.emergency.mode != SHUTTLE_ESCAPE) - priority_announce("Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", - "Emergency Shuttle Uplink Alert", ANNOUNCER_SHUTTLE) // SKYRAT EDIT CHANGE - Announcer Sounds + priority_announce( + text = "Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", + title = "Shuttle Failure", + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) else // except if you are on it already, then you are safe c: minor_announce("ERROR: Corruption detected in navigation protocols. Connection with Transponder #XCC-P5831-ES13 lost. \ diff --git a/code/modules/power/turbine/turbine_parts.dm b/code/modules/power/turbine/turbine_parts.dm index d53d92190e1..4215fccf39f 100644 --- a/code/modules/power/turbine/turbine_parts.dm +++ b/code/modules/power/turbine/turbine_parts.dm @@ -64,7 +64,7 @@ if(!istype(attacking_item, second_tier_material)) return var/obj/item/stack/sheet/second_tier = attacking_item - if(second_tier.use(second_tier_material_amount) && do_after(user, 1 SECONDS, src)) + if(do_after(user, 1 SECONDS, src) && second_tier.use(second_tier_material_amount)) current_tier = 2 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier @@ -74,7 +74,7 @@ if(!istype(attacking_item, third_tier_material)) return var/obj/item/stack/sheet/third_tier = attacking_item - if(third_tier.use(third_tier_material_amount) && do_after(user, 2 SECONDS, src)) + if(do_after(user, 2 SECONDS, src) && third_tier.use(third_tier_material_amount)) current_tier = 3 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier @@ -84,7 +84,7 @@ if(!istype(attacking_item, fourth_tier_material)) return var/obj/item/stack/sheet/fourth_tier = attacking_item - if(fourth_tier.use(fourth_tier_material_amount) && do_after(user, 3 SECONDS, src)) + if(do_after(user, 3 SECONDS, src) && fourth_tier.use(fourth_tier_material_amount)) current_tier = 4 part_efficiency += part_efficiency_increase_amount max_rpm *= max_rpm_tier_multiplier diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 4a79ad4c305..8408e1d97b7 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -1,10 +1,12 @@ +///This type is responsible for any map generation behavior that is done in areas, override this to allow for +///area-specific map generation. This generation is ran by areas in initialize. /datum/map_generator - //Map information - var/list/map = list() + ///Map information, such as the start and end turfs of the map generation. + var/list/turf/map = list() - //mapGeneratorModule information - var/list/modules = list() + ///The map generator modules that we will generate and sync to. + var/list/datum/map_generator_module/modules = list() var/buildmode_name = "Undocumented" @@ -14,6 +16,18 @@ buildmode_name = copytext_char("[type]", 20) // / d a t u m / m a p g e n e r a t o r / = 20 characters. initialiseModules() +/datum/map_generator/Destroy(force, ...) + . = ..() + QDEL_LIST(modules) + +///This proc will be ran by areas on Initialize, and provides the areas turfs as argument to allow for generation. +/datum/map_generator/proc/generate_terrain(list/turfs, area/generate_in) + return + +/// Populate terrain with flora, fauna, features and basically everything that isn't a turf. +/datum/map_generator/proc/populate_terrain(list/turfs, area/generate_in) + return + //Defines the region the map represents, sets map //Returns the map /datum/map_generator/proc/defineRegion(turf/Start, turf/End, replace = 0) @@ -22,7 +36,7 @@ if(replace) undefineRegion() - map |= block(Start,End) + map |= block(Start, End) return map @@ -56,7 +70,7 @@ theRadius = max(radius/max((2*abs(sphereMagic-i)),1),1) - map |= circle_range(locate(centerX,centerY,i),theRadius) + map |= circle_range(locate(centerX, centerY, i),theRadius) return map @@ -87,7 +101,7 @@ syncModules() if(!modules || !modules.len) return - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) INVOKE_ASYNC(mod, TYPE_PROC_REF(/datum/map_generator_module, generate)) @@ -98,7 +112,7 @@ syncModules() if(!modules || !modules.len) return - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) INVOKE_ASYNC(mod, TYPE_PROC_REF(/datum/map_generator_module, place), T) @@ -113,7 +127,7 @@ //Sync mapGeneratorModule(s) to mapGenerator /datum/map_generator/proc/syncModules() - for(var/datum/map_generator_module/mod in modules) + for(var/datum/map_generator_module/mod as anything in modules) mod.sync(src) @@ -127,12 +141,12 @@ set category = "Debug" var/datum/map_generator/nature/N = new() - var/startInput = input(usr,"Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null + var/startInput = input(usr, "Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null if (isnull(startInput)) return - var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null + var/endInput = input(usr, "End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null if (isnull(endInput)) return @@ -158,9 +172,18 @@ to_chat(src, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]") return - var/list/clusters = list("None"=CLUSTER_CHECK_NONE,"All"=CLUSTER_CHECK_ALL,"Sames"=CLUSTER_CHECK_SAMES,"Differents"=CLUSTER_CHECK_DIFFERENTS, \ - "Same turfs"=CLUSTER_CHECK_SAME_TURFS, "Same atoms"=CLUSTER_CHECK_SAME_ATOMS, "Different turfs"=CLUSTER_CHECK_DIFFERENT_TURFS, \ - "Different atoms"=CLUSTER_CHECK_DIFFERENT_ATOMS, "All turfs"=CLUSTER_CHECK_ALL_TURFS,"All atoms"=CLUSTER_CHECK_ALL_ATOMS) + var/static/list/clusters = list( + "None" = CLUSTER_CHECK_NONE, + "All" = CLUSTER_CHECK_ALL, + "Sames" = CLUSTER_CHECK_SAMES, + "Differents" = CLUSTER_CHECK_DIFFERENTS, + "Same turfs" = CLUSTER_CHECK_SAME_TURFS, + "Same atoms" = CLUSTER_CHECK_SAME_ATOMS, + "Different turfs" = CLUSTER_CHECK_DIFFERENT_TURFS, + "Different atoms" = CLUSTER_CHECK_DIFFERENT_ATOMS, + "All turfs" = CLUSTER_CHECK_ALL_TURFS, + "All atoms" = CLUSTER_CHECK_ALL_ATOMS, + ) var/moduleClusters = input("Cluster Flags (Cancel to leave unchanged from defaults)","Map Gen Settings") as null|anything in clusters //null for default @@ -175,7 +198,7 @@ theCluster = CLUSTER_CHECK_NONE if(theCluster) - for(var/datum/map_generator_module/M in N.modules) + for(var/datum/map_generator_module/M as anything in N.modules) M.clusterCheckFlags = theCluster diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm index d5742fdb85a..aa3f0f0e93c 100644 --- a/code/modules/procedural_mapping/mapGeneratorModule.dm +++ b/code/modules/procedural_mapping/mapGeneratorModule.dm @@ -8,6 +8,9 @@ var/clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS var/allowAtomsOnSpace = FALSE +/datum/map_generator_module/Destroy(force, ...) + mother = null + return ..() //Syncs the module up with its mother /datum/map_generator_module/proc/sync(datum/map_generator/mum) diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 3e545dc1060..c200ded4f9e 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -49,3 +49,27 @@ name = "40mm rubber shell" desc = "A cased rubber slug. The big brother of the beanbag slug, this thing will knock someone out in one. Doesn't do so great against anyone in armor." projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm + +/obj/item/ammo_casing/rebar + name = "sharpened iron rod" + desc = "A Sharpened Iron rod. It's Pointy!" + caliber = CALIBER_REBAR + icon_state = "rod_sharp" + base_icon_state = "rod_sharp" + projectile_type = /obj/projectile/bullet/rebar + +/obj/item/ammo_casing/rebar/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless) + +/obj/item/ammo_casing/rebar/update_icon_state() + . = ..() + icon_state = "[base_icon_state]" + +/obj/item/ammo_casing/rebar/syndie + name = "Jagged iron rod" + desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you." + caliber = CALIBER_REBAR_SYNDIE + icon_state = "rod_jagged" + base_icon_state = "rod_jagged" + projectile_type = /obj/projectile/bullet/rebarsyndie diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 83133186c9d..5fdc182ccff 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -28,3 +28,24 @@ max_ammo = 1 caliber = CALIBER_HARPOON ammo_type = /obj/item/ammo_casing/harpoon + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + name = "single round magazine" + max_ammo = 1 + caliber = CALIBER_REBAR + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + name = "two round magazine" + max_ammo = 2 + caliber = CALIBER_REBAR_FORCED + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + max_ammo = 3 + caliber = CALIBER_REBAR_SYNDIE + ammo_type = /obj/item/ammo_casing/rebar/syndie + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie/normal + caliber = CALIBER_REBAR_SYNDIE_NORMAL + ammo_type = /obj/item/ammo_casing/rebar diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index efff8c2fc61..52ab71e4cea 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -723,7 +723,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( /obj/item/suppressor name = "suppressor" - desc = "A small-arms suppressor for maximum espionage." //SKYRAT EDIT - ORIGINAL: desc = "A syndicate small-arms suppressor for maximum espionage." + desc = "A syndicate small-arms suppressor for maximum espionage." icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "suppressor" w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 2b943a5f6db..9a80b605d0e 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -60,9 +60,9 @@ set category = "Object" set desc = "Click to spin your revolver's chamber." - var/mob/M = usr + var/mob/user = usr - if(M.stat || !in_range(M,src)) + if(user.stat || !in_range(user, src)) return if (recent_spin > world.time) @@ -71,7 +71,8 @@ if(do_spin()) playsound(usr, SFX_REVOLVER_SPIN, 30, FALSE) - usr.visible_message(span_notice("[usr] spins [src]'s chamber."), span_notice("You spin [src]'s chamber.")) + visible_message(span_notice("[user] spins [src]'s chamber."), span_notice("You spin [src]'s chamber.")) + balloon_alert(user, "chamber spun") else verbs -= /obj/item/gun/ballistic/revolver/verb/spin @@ -212,10 +213,13 @@ /obj/item/gun/ballistic/revolver/russian/fire_gun(atom/target, mob/living/user, flag, params) . = ..(null, user, flag, params) + var/tk_controlled = FALSE if(flag) if(!(target in user.contents) && ismob(target)) if(user.combat_mode) // Flogging action return + else if (HAS_TRAIT_FROM_ONLY(src, TRAIT_TELEKINESIS_CONTROLLED, REF(user))) // if we're far away, you can still fire it at yourself if you have TK. + tk_controlled = TRUE if(isliving(user)) if(!can_trigger_gun(user)) @@ -223,8 +227,9 @@ if(target != user) playsound(src, dry_fire_sound, 30, TRUE) user.visible_message( - span_danger("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot."), \ - span_danger("\The [src]'s anti-combat mechanism prevents you from firing it at anyone but yourself!")) + span_danger("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot."), + span_danger("\The [src]'s anti-combat mechanism prevents you from firing it at anyone but yourself!"), + ) return if(ishuman(user)) @@ -246,7 +251,8 @@ antagonist = src, \ rounds_loaded = loaded_rounds, \ aimed_at = affecting.name, \ - result = (chambered ? "lost" : "won")) + result = (chambered ? "lost" : "won"), \ + ) if(chambered) if(HAS_TRAIT(user, TRAIT_CURSED)) // I cannot live, I cannot die, trapped in myself, body my holding cell. @@ -257,6 +263,9 @@ playsound(user, fire_sound, fire_sound_volume, vary_fire_sound) if(is_target_face) shoot_self(user, affecting) + else if(tk_controlled) // the consequence of you doing the telekinesis stuff + to_chat(user, span_userdanger("As your mind concentrates on the revolver, you realize that it's pointing towards your head a little too late!")) + shoot_self(user, BODY_ZONE_HEAD) else user.visible_message(span_danger("[user.name] cowardly fires [src] at [user.p_their()] [affecting.name]!"), span_userdanger("You cowardly fire [src] at your [affecting.name]!"), span_hear("You hear a gunshot!")) chambered = null diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 67c70352ff3..a7a1206db1f 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -25,6 +25,7 @@ return drop_bolt(user) + /obj/item/gun/ballistic/rifle/can_shoot() if (bolt_locked) return FALSE @@ -169,6 +170,91 @@ if(.) name = "\improper Obrez Moderna" // wear it loud and proud +/obj/item/gun/ballistic/rifle/rebarxbow + name = "Heated Rebar Crossbow" + desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \ + Only holds one rod in the magazine - you can craft the crossbow with a crowbar to try and force a second rod in, but risks a misfire, or worse..." + icon = 'icons/obj/weapons/guns/ballistic.dmi' + icon_state = "rebarxbow" + inhand_icon_state = "rebarxbow" + worn_icon_state = "rebarxbow" + rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + must_hold_to_load = TRUE + mag_display = FALSE + empty_indicator = TRUE + bolt_type = BOLT_TYPE_LOCKING + semi_auto = FALSE + internal_magazine = TRUE + can_modify_ammo = FALSE + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + bolt_wording = "bowstring" + magazine_wording = "rod" + cartridge_wording = "rod" + misfire_probability = 25 + weapon_weight = WEAPON_HEAVY + initial_caliber = CALIBER_REBAR + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + fire_sound = 'sound/items/syringeproj.ogg' + can_be_sawn_off = FALSE + tac_reloads = FALSE + var/draw_time = 3 SECONDS + SET_BASE_PIXEL(0, 0) + +/obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null) + if (bolt_locked) + drop_bolt(user) + return + balloon_alert(user, "bowstring loosened") + playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + handle_chamber(empty_chamber = FALSE, from_firing = FALSE, chamber_next_round = FALSE) + bolt_locked = TRUE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null) + if(!do_after(user, draw_time, target = src)) + return + playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) + balloon_alert(user, "bowstring drawn") + chamber_round() + bolt_locked = FALSE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/can_shoot() + if (bolt_locked) + return FALSE + return ..() + +/obj/item/gun/ballistic/rifle/rebarxbow/examine(mob/user) + . = ..() + . += "The crossbow is [bolt_locked ? "not ready" : "ready"] to fire." + +/obj/item/gun/ballistic/rifle/rebarxbow/forced + name = "Stressed Rebar Crossbow" + desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a bit more ammo in this crossbow. Hopefully, it was worth it." + // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing. + can_misfire = TRUE + misfire_probability = 25 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie + name = "Syndicate Rebar Crossbow" + desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ + Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones." + icon_state = "rebarxbowsyndie" + inhand_icon_state = "rebarxbowsyndie" + worn_icon_state = "rebarxbowsyndie" + w_class = WEIGHT_CLASS_NORMAL + can_modify_ammo = TRUE + initial_caliber = CALIBER_REBAR_SYNDIE + alternative_caliber = CALIBER_REBAR_SYNDIE_NORMAL + alternative_ammo_misfires = FALSE + draw_time = 1 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth + /obj/item/gun/ballistic/rifle/boltaction/pipegun name = "pipegun" desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired." diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 4db8e626bda..72b4ce4a141 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -26,7 +26,11 @@ message_admins("A pulse rifle prize has been created at [ADMIN_VERBOSEJMP(T)]") log_game("A pulse rifle prize has been created at [AREACOORD(T)]") - notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") + notify_ghosts( + "Someone won a pulse rifle as a prize!", + source = src, + header = "Pulse rifle prize", + ) /obj/item/gun/energy/pulse/loyalpin pin = /obj/item/firing_pin/implant/mindshield diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index 69d3430cf9e..d515c252baf 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -45,7 +45,9 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(!victim.reagents) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(!victim.reagents.has_reagent(/datum/reagent/gold, check_subtypes = TRUE)) + + var/gold_amount = victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE) + if(!gold_amount) balloon_alert(user, "no gold in bloodstream") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN var/gold_beam = user.Beam(victim, icon_state="drain_gold") @@ -53,8 +55,8 @@ qdel(gold_beam) balloon_alert(user, "link broken") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - handle_gold_charges(user, victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE)) - victim.reagents.remove_all_type(/datum/reagent/gold, victim.reagents.get_reagent_amount(/datum/reagent/gold, include_subtypes = TRUE)) + handle_gold_charges(user, gold_amount) + victim.reagents.remove_reagent(/datum/reagent/gold, gold_amount, include_subtypes = TRUE) victim.remove_status_effect(/datum/status_effect/midas_blight) qdel(gold_beam) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 45763feff04..5437a7096da 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -30,19 +30,19 @@ if(proximity_flag) if(isgun(target)) . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/gun/targetted_gun = target - var/obj/item/firing_pin/old_pin = targetted_gun.pin + var/obj/item/gun/targeted_gun = target + var/obj/item/firing_pin/old_pin = targeted_gun.pin if(old_pin?.pin_removable && (force_replace || old_pin.pin_hot_swappable)) if(Adjacent(user)) user.put_in_hands(old_pin) else - old_pin.forceMove(targetted_gun.drop_location()) + old_pin.forceMove(targeted_gun.drop_location()) old_pin.gun_remove(user) - if(!targetted_gun.pin) + if(!targeted_gun.pin) if(!user.temporarilyRemoveItemFromInventory(src)) return . - if(gun_insert(user, targetted_gun)) + if(gun_insert(user, targeted_gun)) if(old_pin) balloon_alert(user, "swapped firing pin") else diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 4cb7bd543b4..de7e59facc3 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -47,3 +47,32 @@ embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) wound_falloff_tile = -5 shrapnel_type = /obj/item/ammo_casing/harpoon + +// Rebar (Rebar Crossbow) +/obj/projectile/bullet/rebar + name = "rebar" + icon_state = "rebar" + damage = 30 + speed = 0.4 + dismemberment = 1 //because a 1 in 100 chance to just blow someones arm off is enough to be cool but also not enough to be reliable + armour_penetration = 10 + wound_bonus = -20 + bare_wound_bonus = 20 + embedding = list(embed_chance=60, fall_chance=2, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=10) + embed_falloff_tile = -5 + wound_falloff_tile = -2 + shrapnel_type = /obj/item/stack/rods + +/obj/projectile/bullet/rebarsyndie + name = "rebar" + icon_state = "rebar" + damage = 35 + speed = 0.4 + dismemberment = 2 //It's a budget sniper rifle. + armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor. + wound_bonus = 10 + bare_wound_bonus = 10 + embedding = list(embed_chance=80, fall_chance=1, jostle_chance=3, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=14) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/stack/rods + diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm index 5b29cb64caf..2e94083f8cb 100644 --- a/code/modules/reagents/chem_splash.dm +++ b/code/modules/reagents/chem_splash.dm @@ -50,7 +50,7 @@ holder.multiply_reagents(threatscale) for(var/datum/reagents/reactant as anything in reactants) - reactant.trans_to(holder, reactant.total_volume, threatscale, preserve_data = TRUE, no_react = TRUE) + reactant.trans_to(holder, reactant.total_volume, threatscale, no_react = TRUE) holder.chem_temp += extra_heat // Average temperature of reagents + extra heat. holder.handle_reactions() // React them now. diff --git a/code/modules/reagents/chemistry/equilibrium.dm b/code/modules/reagents/chemistry/equilibrium.dm index f46c636c50f..bcca8eb67da 100644 --- a/code/modules/reagents/chemistry/equilibrium.dm +++ b/code/modules/reagents/chemistry/equilibrium.dm @@ -324,15 +324,15 @@ //keep limited if(delta_chem_factor > step_target_vol) delta_chem_factor = step_target_vol - else if (delta_chem_factor < CHEMICAL_QUANTISATION_LEVEL) - delta_chem_factor = CHEMICAL_QUANTISATION_LEVEL + else if (delta_chem_factor < CHEMICAL_VOLUME_ROUNDING) + delta_chem_factor = CHEMICAL_VOLUME_ROUNDING //Normalise to multiproducts delta_chem_factor /= product_ratio - //delta_chem_factor = round(delta_chem_factor, CHEMICAL_QUANTISATION_LEVEL) // Might not be needed - left here incase testmerge shows that it does. Remove before full commit. + delta_chem_factor = round(delta_chem_factor, CHEMICAL_VOLUME_ROUNDING) // Might not be needed - left here incase testmerge shows that it does. Remove before full commit. //Calculate how much product to make and how much reactant to remove factors.. for(var/reagent in reaction.required_reagents) - holder.remove_reagent(reagent, (delta_chem_factor * reaction.required_reagents[reagent]), safety = TRUE) + holder.remove_reagent(reagent, (delta_chem_factor * reaction.required_reagents[reagent])) //Apply pH changes var/pH_adjust if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT) @@ -414,4 +414,4 @@ ///Panic stop a reaction - cleanup should be handled by the next timestep /datum/equilibrium/proc/force_clear_reactive_agents() for(var/reagent in reaction.required_reagents) - holder.remove_reagent(reagent, (multiplier * reaction.required_reagents[reagent]), safety = 1) + holder.remove_reagent(reagent, (multiplier * reaction.required_reagents[reagent])) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 0d0b62a6686..8236a17fb58 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -93,11 +93,6 @@ if(SEND_SIGNAL(src, COMSIG_REAGENTS_PRE_ADD_REAGENT, reagent_type, amount, reagtemp, data, no_react) & COMPONENT_CANCEL_REAGENT_ADD) return FALSE - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - var/datum/reagent/glob_reagent = GLOB.chemical_reagents_list[reagent_type] if(!glob_reagent) stack_trace("[my_atom] attempted to add a reagent called '[reagent_type]' which doesn't exist. ([usr])") @@ -110,8 +105,8 @@ //Split up the reagent if it's in a mob var/has_split = FALSE if(!ignore_splitting && (flags & REAGENT_HOLDER_ALIVE)) //Stomachs are a pain - they will constantly call on_mob_add unless we split on addition to stomachs, but we also want to make sure we don't double split - var/adjusted_vol = FLOOR(process_mob_reagent_purity(glob_reagent, amount, added_purity), CHEMICAL_QUANTISATION_LEVEL) - if(adjusted_vol <= 0) //If we're inverse or FALSE cancel addition + var/adjusted_vol = process_mob_reagent_purity(glob_reagent, amount, added_purity) + if(!adjusted_vol) //If we're inverse or FALSE cancel addition return amount /* We return true here because of #63301 The only cases where this will be false or 0 if its an inverse chem, an impure chem of 0 purity (highly unlikely if even possible), or if glob_reagent is null (which shouldn't happen at all as there's a check for that a few lines up), @@ -123,9 +118,10 @@ update_total() var/cached_total = total_volume if(cached_total + amount > maximum_volume) - amount = FLOOR(maximum_volume - cached_total, CHEMICAL_QUANTISATION_LEVEL) //Doesnt fit in. Make it disappear. shouldn't happen. Will happen. - if(amount <= 0) - return FALSE + amount = maximum_volume - cached_total //Doesnt fit in. Make it disappear. shouldn't happen. Will happen. + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE var/cached_temp = chem_temp var/list/cached_reagents = reagent_list @@ -143,8 +139,8 @@ added_ph = iter_reagent.ph iter_reagent.purity = ((iter_reagent.creation_purity * iter_reagent.volume) + (added_purity * amount)) /(iter_reagent.volume + amount) //This should add the purity to the product iter_reagent.creation_purity = iter_reagent.purity - iter_reagent.ph = ((iter_reagent.ph*(iter_reagent.volume))+(added_ph*amount))/(iter_reagent.volume+amount) - iter_reagent.volume = FLOOR(iter_reagent.volume + amount, CHEMICAL_QUANTISATION_LEVEL) + iter_reagent.ph = ((iter_reagent.ph * (iter_reagent.volume)) + (added_ph * amount)) / (iter_reagent.volume + amount) + iter_reagent.volume += amount update_total() iter_reagent.on_merge(data, amount) @@ -209,8 +205,9 @@ * * [reagent_type][datum/reagent] - the type of reagent * * amount - the volume to remove * * safety - if FALSE will initiate reactions upon removing. used for trans_id_to + * * include_subtypes - if TRUE will remove the specified amount from all subtypes of reagent_type as well */ -/datum/reagents/proc/remove_reagent(datum/reagent/reagent_type, amount, safety = TRUE) +/datum/reagents/proc/remove_reagent(datum/reagent/reagent_type, amount, safety = TRUE, include_subtypes = FALSE) if(!ispath(reagent_type)) stack_trace("invalid reagent passed to remove reagent [reagent_type]") return FALSE @@ -219,25 +216,41 @@ stack_trace("non finite amount passed to remove reagent [amount] [reagent_type]") return FALSE - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return FALSE + var/total_removed_amount = 0 + var/remove_amount = 0 var/list/cached_reagents = reagent_list for(var/datum/reagent/cached_reagent as anything in cached_reagents) - if(cached_reagent.type == reagent_type) - cached_reagent.volume = FLOOR(max(cached_reagent.volume - amount, 0), CHEMICAL_QUANTISATION_LEVEL) - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, QDELING(cached_reagent) ? reagent_type : cached_reagent, amount) + //check for specific type or subtypes + if(!include_subtypes) + if(cached_reagent.type != reagent_type) + continue + else if(!istype(cached_reagent, reagent_type)) + continue - return TRUE - return FALSE + remove_amount = min(cached_reagent.volume, amount) + cached_reagent.volume -= remove_amount + + update_total() + if(!safety)//So it does not handle reactions when it need not to + handle_reactions() + SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, QDELING(cached_reagent) ? reagent_type : cached_reagent, amount) + + total_removed_amount += remove_amount + + //if we reached here means we have found our specific reagent type so break + if(!include_subtypes) + break + + return total_removed_amount /** - * Removes a reagent at random by the specified amount + * Removes a reagent at random and by a random quantity till the specified amount has been removed. + * Used to create a shower/spray effect for e.g. when you spill a bottle or turn a shower on + * and you want an chaotic effect of whatever coming out * Arguments * * * amount- the volume to remove @@ -247,7 +260,7 @@ stack_trace("non finite amount passed to remove any reagent [amount]") return FALSE - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return FALSE @@ -274,7 +287,6 @@ current_list_element++ total_removed += remove_amt - update_total() handle_reactions() return total_removed //this should be amount unless the loop is prematurely broken, in which case it'll be lower. It shouldn't ever go OVER amount. @@ -295,64 +307,19 @@ stack_trace("non finite amount passed to remove all reagents [amount]") return FALSE - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) + amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return FALSE var/list/cached_reagents = reagent_list var/part = amount / total_volume - var/remove_amount - var/removed_amount = 0 + var/total_removed_amount = 0 for(var/datum/reagent/reagent as anything in cached_reagents) - remove_amount = FLOOR(reagent.volume * part, CHEMICAL_QUANTISATION_LEVEL) - remove_reagent(reagent.type, remove_amount) - removed_amount += remove_amount + total_removed_amount += remove_reagent(reagent.type, reagent.volume * part) handle_reactions() - return removed_amount - -/** - * Removes all reagent of X type - * Arguments - * - * * [reagent_type][datum/reagent] - the reagent typepath we are trying to remove - * * amount - the volume of reagent to remove - * * strict - If TRUE will also remove childs of this reagent type - */ -/datum/reagents/proc/remove_all_type(datum/reagent/reagent_type, amount, strict = 0, safety = 1) - if(!ispath(reagent_type)) - stack_trace("invalid reagent path passed to remove all type [reagent_type]") - return FALSE - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to remove all type reagent [amount] [reagent_type]") - return FALSE - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return FALSE - - var/list/cached_reagents = reagent_list - var/has_removed_reagent = 0 - - for(var/datum/reagent/reagent as anything in cached_reagents) - var/matches = 0 - // Switch between how we check the reagent type - if(strict) - if(reagent.type == reagent_type) - matches = 1 - else - if(istype(reagent, reagent_type)) - matches = 1 - // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. - if(matches) - // Have our other proc handle removement - has_removed_reagent = remove_reagent(reagent.type, amount, safety) - - return has_removed_reagent + return round(total_removed_amount, CHEMICAL_VOLUME_ROUNDING) /** * Removes an specific reagent from this holder @@ -492,6 +459,7 @@ * * obj/target - Target to attempt transfer to * * amount - amount of reagent volume to transfer * * multiplier - multiplies each reagent amount by this number well byond their available volume before transfering. used to create reagents from thin air if you ever need to + * * datum/reagent/target_id - transfer only this reagent in this holder leaving others untouched * * preserve_data - if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. * * no_react - passed through to [/datum/reagents/proc/add_reagent] * * mob/transferred_by - used for logging @@ -504,6 +472,7 @@ obj/target, amount = 1, multiplier = 1, + datum/reagent/target_id, preserve_data = TRUE, no_react = FALSE, mob/transferred_by, @@ -513,12 +482,16 @@ ignore_stomach = FALSE ) if(QDELETED(target) || !total_volume) - return + return FALSE if(!IS_FINITE(amount)) stack_trace("non finite amount passed to trans_to [amount] amount of reagents") return FALSE + if(!isnull(target_id) && !ispath(target_id)) + stack_trace("invalid target reagent id [target_id] passed to trans_to") + return FALSE + var/list/cached_reagents = reagent_list var/atom/target_atom @@ -531,7 +504,7 @@ var/mob/living/carbon/eater = target var/obj/item/organ/internal/stomach/belly = eater.get_organ_slot(ORGAN_SLOT_STOMACH) if(!belly) - var/expel_amount = FLOOR(amount, CHEMICAL_QUANTISATION_LEVEL) + var/expel_amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) if(expel_amount > 0 ) eater.expel_ingested(my_atom, expel_amount) return @@ -546,7 +519,7 @@ var/cached_amount = amount // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) + amount = round(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return FALSE @@ -559,7 +532,7 @@ var/list/r_to_send = list() // Validated list of reagents to be exposed var/list/reagents_to_remove = list() - var/part = amount / total_volume + var/part = isnull(target_id) ? (amount / total_volume) : 1 var/transfer_amount var/transfered_amount var/total_transfered_amount = 0 @@ -568,11 +541,20 @@ for(var/datum/reagent/reagent as anything in cached_reagents) if(remove_blacklisted && !(reagent.chemical_flags & REAGENT_CAN_BE_SYNTHESIZED)) continue + + if(!isnull(target_id)) + if(reagent.type == target_id) + force_stop_reagent_reacting(reagent) + transfer_amount = min(amount, reagent.volume) + else + continue + else + transfer_amount = reagent.volume * part + if(preserve_data) trans_data = copy_data(reagent) if(reagent.intercept_reagents_transfer(target_holder, cached_amount)) continue - transfer_amount = reagent.volume * part transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount * multiplier, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. if(!transfered_amount) continue @@ -581,6 +563,9 @@ reagents_to_remove += list(list("R" = reagent, "T" = transfer_amount)) total_transfered_amount += transfered_amount + if(!isnull(target_id)) + break + //expose target to reagent changes target_holder.expose_multiple(r_to_send, isorgan(target_atom) ? target : target_atom, methods, part, show_message) @@ -602,65 +587,8 @@ if(!no_react) target_holder.handle_reactions() src.handle_reactions() - return FLOOR(total_transfered_amount, CHEMICAL_QUANTISATION_LEVEL) -/** - * Transfer a specific reagent id to the target object - * Arguments - * - * * [target][obj] - the target to transfer reagents to - * * [reagent_type][datum/reagent] - the type of reagent to transfer to the target - * * amount - volume to transfer - * * preserve_data- if TRUE reagent user data will remain preserved - */ -/datum/reagents/proc/trans_id_to( - obj/target, - datum/reagent/reagent_type, - amount = 1, - preserve_data = 1 -) - if (QDELETED(target) || !total_volume) - return - - if(!IS_FINITE(amount)) - stack_trace("non finite amount passed to trans_id_to [amount] [reagent_type]") - return FALSE - - var/cached_amount = amount - - var/available_volume = get_reagent_amount(reagent_type) - var/datum/reagents/holder - if(istype(target, /datum/reagents)) - holder = target - else if(target.reagents && available_volume) - holder = target.reagents - else - return - - // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, available_volume, holder.maximum_volume - holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) - if(amount <= 0) - return - - var/list/cached_reagents = reagent_list - - var/trans_data = null - for (var/looping_through_reagents in cached_reagents) - var/datum/reagent/current_reagent = looping_through_reagents - if(current_reagent.type == reagent_type) - if(preserve_data) - trans_data = current_reagent.data - if(current_reagent.intercept_reagents_transfer(holder, cached_amount))//Use input amount instead. - break - force_stop_reagent_reacting(current_reagent) - holder.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, current_reagent.ph, no_react = TRUE, ignore_splitting = current_reagent.chemical_flags & REAGENT_DONOTSPLIT) - remove_reagent(current_reagent.type, amount, 1) - break - - update_total() - holder.update_total() - holder.handle_reactions() - return amount + return round(total_transfered_amount, CHEMICAL_VOLUME_ROUNDING) /** * Copies the reagents to the target object @@ -694,7 +622,7 @@ target_holder = target.reagents // Prevents small amount problems, as well as zero and below zero amounts. - amount = FLOOR(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) + amount = round(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return @@ -708,7 +636,7 @@ for(var/datum/reagent/reagent as anything in cached_reagents) transfer_amount = reagent.volume * part * multiplier if(preserve_data) - trans_data = reagent.data + trans_data = copy_data(reagent) transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) if(!transfered_amount) continue @@ -721,7 +649,7 @@ target_holder.update_total() target_holder.handle_reactions() - return FLOOR(total_transfered_amount, CHEMICAL_QUANTISATION_LEVEL) + return round(total_transfered_amount, CHEMICAL_VOLUME_ROUNDING) /** * Multiplies the reagents inside this holder by a specific amount @@ -743,30 +671,6 @@ handle_reactions() -/// Get the name of the reagent there is the most of in this holder -/datum/reagents/proc/get_master_reagent_name() - var/list/cached_reagents = reagent_list - var/name - var/max_volume = 0 - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.volume > max_volume) - max_volume = reagent.volume - name = reagent.name - - return name - -/// Get the id of the reagent there is the most of in this holder -/datum/reagents/proc/get_master_reagent_id() - var/list/cached_reagents = reagent_list - var/max_type - var/max_volume = 0 - for(var/datum/reagent/reagent as anything in cached_reagents) - if(reagent.volume > max_volume) - max_volume = reagent.volume - max_type = reagent.type - - return max_type - /// Get a reference to the reagent there is the most of in this holder /datum/reagents/proc/get_master_reagent() var/list/cached_reagents = reagent_list @@ -809,7 +713,7 @@ var/datum/reagent/toxin/toxin = reagent var/amount = toxin.volume if(belly) - amount = FLOOR(amount + belly.reagents.get_reagent_amount(toxin.type), CHEMICAL_QUANTISATION_LEVEL) + amount += belly.reagents.get_reagent_amount(toxin.type) if(amount <= liver_tolerance) owner.reagents.remove_reagent(toxin.type, toxin.metabolization_rate * owner.metabolism_efficiency * seconds_per_tick) @@ -1174,9 +1078,6 @@ /datum/reagents/proc/finish_reacting() STOP_PROCESSING(SSreagents, src) is_reacting = FALSE - //Cap off values - for(var/datum/reagent/reagent as anything in reagent_list) - reagent.volume = FLOOR(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)//To prevent runaways. LAZYNULL(previous_reagent_list) //reset it to 0 - because any change will be different now. update_total() if(!QDELING(src)) @@ -1276,9 +1177,9 @@ var/datum/cached_my_atom = my_atom var/multiplier = INFINITY for(var/reagent in cached_required_reagents) - multiplier = FLOOR(min(multiplier, get_reagent_amount(reagent) / cached_required_reagents[reagent]), CHEMICAL_QUANTISATION_LEVEL) + multiplier = round(min(multiplier, get_reagent_amount(reagent) / cached_required_reagents[reagent])) - if(multiplier == 0)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handlier catches a misflagged reaction + if(!multiplier)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handlier catches a misflagged reaction return FALSE var/sum_purity = 0 for(var/_reagent in cached_required_reagents)//this is not an object @@ -1286,7 +1187,7 @@ if (!reagent) continue sum_purity += reagent.purity - remove_reagent(_reagent, (multiplier * cached_required_reagents[_reagent]), safety = 1) + remove_reagent(_reagent, (multiplier * cached_required_reagents[_reagent])) sum_purity /= cached_required_reagents.len for(var/product in selected_reaction.results) @@ -1329,6 +1230,7 @@ var/chem_index = 1 var/num_reagents = length(cached_reagents) var/total_ph = 0 + var/reagent_volume = 0 . = 0 //responsible for removing reagents and computing total ph & volume @@ -1336,9 +1238,10 @@ while(chem_index <= num_reagents) var/datum/reagent/reagent = cached_reagents[chem_index] chem_index += 1 + reagent_volume = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL) //round to this many decimal places //remove very small amounts of reagents - if((reagent.volume <= 0.05 && !is_reacting) || reagent.volume <= CHEMICAL_QUANTISATION_LEVEL) + if((reagent_volume <= 0.05 && !is_reacting) || reagent_volume <= CHEMICAL_QUANTISATION_LEVEL) //end metabolization if(isliving(my_atom)) if(reagent.metabolizing) @@ -1357,11 +1260,14 @@ continue //compute volume & ph like we would normally - . += reagent.volume - total_ph += (reagent.ph * reagent.volume) + . += reagent_volume + total_ph += (reagent.ph * reagent_volume) - //assign the final values - total_volume = . + //reasign rounded value + reagent.volume = reagent_volume + + //assign the final values, rounding up can sometimes cause overflow so bring it down + total_volume = min(round(., CHEMICAL_VOLUME_ROUNDING), maximum_volume) if(!.) ph = CHEMICAL_NORMAL_PH else @@ -1414,7 +1320,7 @@ /// Is this holder full or not /datum/reagents/proc/holder_full() - return total_volume + 0.01 >= maximum_volume + return total_volume >= maximum_volume /** * Get the amount of this reagent or the sum of all its subtypes if specified @@ -1433,7 +1339,7 @@ if((!include_subtypes && cached_reagent.type == reagent) || (include_subtypes && ispath(cached_reagent.type, reagent))) total_amount += cached_reagent.volume - return FLOOR(total_amount, CHEMICAL_QUANTISATION_LEVEL) + return round(total_amount, CHEMICAL_VOLUME_ROUNDING) /** * Gets the sum of volumes of all reagent type paths present in the list @@ -1445,8 +1351,9 @@ var/total_amount = 0 for(var/datum/reagent/cached_reagent as anything in cached_reagents) if(cached_reagent.type in reagents) - total_amount += FLOOR(cached_reagent.volume, CHEMICAL_QUANTISATION_LEVEL) - return total_amount + total_amount += cached_reagent.volume + + return round(total_amount, CHEMICAL_VOLUME_ROUNDING) /** * Get the purity of this reagent @@ -1462,6 +1369,7 @@ for(var/datum/reagent/cached_reagent as anything in cached_reagents) if(cached_reagent.type == reagent) return round(cached_reagent.purity, 0.01) + return 0 /** @@ -1663,7 +1571,7 @@ for(var/reagent_type in external_list) var/list/qualities = external_list[reagent_type] - data += "[reagent_type] ([FLOOR(qualities[REAGENT_TRANSFER_AMOUNT], CHEMICAL_QUANTISATION_LEVEL)]u, [qualities[REAGENT_PURITY]] purity)" + data += "[reagent_type] ([round(qualities[REAGENT_TRANSFER_AMOUNT], CHEMICAL_QUANTISATION_LEVEL)]u, [qualities[REAGENT_PURITY]] purity)" return english_list(data) @@ -1675,7 +1583,7 @@ var/list/data = list() for(var/datum/reagent/reagent as anything in reagent_list) - data += "[reagent.type] ([FLOOR(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)]u, [reagent.purity] purity)" + data += "[reagent.type] ([round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL)]u, [reagent.purity] purity)" return english_list(data) @@ -1849,7 +1757,7 @@ to_chat(user, "Could not find reagent!") ui_reagent_id = null else - data["reagent_mode_reagent"] = list("name" = reagent.name, "id" = reagent.type, "desc" = reagent.description, "reagentCol" = reagent.color, "pH" = reagent.ph, "pHCol" = convert_ph_to_readable_color(reagent.ph), "metaRate" = (reagent.metabolization_rate/2), "OD" = reagent.overdose_threshold) + data["reagent_mode_reagent"] = list("name" = reagent.name, "id" = reagent.type, "desc" = reagent.description, "reagentCol" = reagent.color, "pH" = reagent.ph, "pHCol" = convert_ph_to_readable_color(reagent.ph), "metaRate" = reagent.metabolization_rate, "OD" = reagent.overdose_threshold) data["reagent_mode_reagent"]["addictions"] = list() data["reagent_mode_reagent"]["addictions"] = parse_addictions(reagent) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index a3ed883551f..a4d31849cda 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -1,16 +1,3 @@ -/proc/translate_legacy_chem_id(id) - switch (id) - if ("sacid") - return "sulfuricacid" - if ("facid") - return "fluorosulfuricacid" - if ("co2") - return "carbondioxide" - if ("mine_salve") - return "minerssalve" - else - return ckey(id) - /obj/machinery/chem_dispenser name = "chem dispenser" desc = "Creates and dispenses chemicals." @@ -23,21 +10,57 @@ circuit = /obj/item/circuitboard/machine/chem_dispenser processing_flags = NONE + /// The cell used to dispense reagents var/obj/item/stock_parts/cell/cell + /// Efficiency used when converting cell power to reagents var/powerefficiency = 0.1 + /// The current amount this machine is dispensing var/amount = 30 + /// The rate at which this machine recharges the power cell var/recharge_amount = 10 + /// Keep track of the intervals made during recharges var/recharge_counter = 0 + /// The temperature reagents are dispensed into the beaker var/dispensed_temperature = DEFAULT_REAGENT_TEMPERATURE - ///If the UI has the pH meter shown + /// If the UI has the pH meter shown var/show_ph = TRUE + /// The overlay used to display the beaker on the machine var/mutable_appearance/beaker_overlay + /// Icon to display when the machine is powered var/working_state = "dispenser_working" + /// Icon to display when the machine is not powered var/nopower_state = "dispenser_nopower" + /// Should we display the open panel overlay when the panel is opened with a screwdriver var/has_panel_overlay = TRUE + /// The actual beaker inserted into this machine var/obj/item/reagent_containers/beaker = null - //dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers) - var/list/dispensable_reagents = list( + /// Dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers) + var/list/dispensable_reagents = list() + /// These become available once the manipulator has been upgraded to tier 2 (nano) // SKYRAT EDIT CHANGE - ORIGINAL: /// These become available once the manipulator has been upgraded to tier 4 (femto) + var/list/upgrade_reagents = list() + // SKYRAT EDIT ADDITION BEGIN + /// These become available once the manipulator has been upgraded to tier 3 (pico) + var/list/upgrade2_reagents = list() + /// These become available once the manipulator has been upgraded to tier 4 (femto) + var/list/upgrade3_reagents = list() + // SKYRAT EDIT ADDITION END + /// These become available once the machine has been emaged + var/list/emagged_reagents = list() + /// Starting purity of the created reagents + var/base_reagent_purity = 1 + /// Records the reagents dispensed by the user if this list is not null + var/list/recording_recipe + /// Saves all the recipes recorded by the machine + var/list/saved_recipes = list() + // SKYRAT EDIT ADDITION BEGIN + /// Used for custom transfer amounts + var/list/transferAmounts = list() + /// The custom transfer amount + var/customTransferAmount + // SKYRAT EDIT ADDITION END + + /// The default list of dispensable_reagents + var/static/list/default_dispensable_reagents = list( /datum/reagent/aluminium, /datum/reagent/bromine, /datum/reagent/carbon, @@ -64,10 +87,11 @@ /datum/reagent/water, /datum/reagent/fuel, ) - //these become available once the manipulator has been upgraded to tier 4 (femto) - //SKYRAT EDIT REMOVAL BEGIN - Skyrat-SS13/Skyrat-tg#1931 + + //SKYRAT EDIT CHANGE BEGIN - ORIGINAL /* - var/list/upgrade_reagents = list( + /// The default list of reagents upgrade_reagents + var/static/list/default_upgrade_reagents = list( /datum/reagent/acetone, /datum/reagent/ammonia, /datum/reagent/ash, @@ -75,7 +99,8 @@ /datum/reagent/fuel/oil, /datum/reagent/saltpetre ) - var/list/emagged_reagents = list( + /// The default list of reagents emagged_reagents + var/static/list/default_emagged_reagents = list( /datum/reagent/toxin/carpotoxin, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/morphine, @@ -83,26 +108,24 @@ /datum/reagent/toxin ) */ - //SKYRAT EDIT REMOVAL END - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#1931 - var/list/upgrade_reagents = list( + var/static/list/default_upgrade_reagents = list( /datum/reagent/fuel/oil, /datum/reagent/ammonia, /datum/reagent/ash ) - var/list/upgrade_reagents2 = list( + var/static/list/default_upgrade2_reagents = list( /datum/reagent/acetone, /datum/reagent/phenol, /datum/reagent/diethylamine ) - var/list/upgrade_reagents3 = list( + var/static/list/default_upgrade3_reagents = list( /datum/reagent/medicine/mine_salve, /datum/reagent/toxin ) - var/list/emagged_reagents = list( + var/static/list/default_emagged_reagents = list( /datum/reagent/drug/space_drugs, /datum/reagent/toxin/plasma, /datum/reagent/consumable/frostoil, @@ -110,38 +133,42 @@ /datum/reagent/toxin/histamine, /datum/reagent/medicine/morphine ) - //SKYRAT EDIT ADDITION END - /// Starting purity of the created reagents - var/base_reagent_purity = 1 - - var/list/recording_recipe - - var/list/saved_recipes = list() - //SKYRAT EDIT BEGIN - CHEMISTRY QOL - var/list/transferAmounts = list() - var/customTransferAmount - //SKYRAT EDIT END + //SKYRAT EDIT CHANGE END /obj/machinery/chem_dispenser/Initialize(mapload) . = ..() - dispensable_reagents = sort_list(dispensable_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(emagged_reagents) - emagged_reagents = sort_list(emagged_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(dispensable_reagents != null && !dispensable_reagents.len) + dispensable_reagents = default_dispensable_reagents + if(dispensable_reagents) + dispensable_reagents = sort_list(dispensable_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + + if(upgrade_reagents != null && !upgrade_reagents.len) + upgrade_reagents = default_upgrade_reagents if(upgrade_reagents) upgrade_reagents = sort_list(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#1931 - if(upgrade_reagents2) - upgrade_reagents2 = sort_list(upgrade_reagents2, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(upgrade_reagents3) - upgrade_reagents3 = sort_list(upgrade_reagents3, GLOBAL_PROC_REF(cmp_reagents_asc)) + //SKYRAT EDIT ADDITION BEGIN + if(upgrade2_reagents != null && !upgrade2_reagents.len) + upgrade2_reagents = default_upgrade2_reagents + if(upgrade2_reagents) + upgrade2_reagents = sort_list(upgrade2_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade3_reagents != null && !upgrade3_reagents.len) + upgrade3_reagents = default_upgrade3_reagents + if(upgrade3_reagents) + upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) //SKYRAT EDIT ADDITION END + + if(emagged_reagents != null && !emagged_reagents.len) + emagged_reagents = default_emagged_reagents + if(emagged_reagents) + emagged_reagents = sort_list(emagged_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(is_operational) begin_processing() update_appearance() /obj/machinery/chem_dispenser/Destroy() + cell = null QDEL_NULL(beaker) - QDEL_NULL(cell) return ..() /obj/machinery/chem_dispenser/examine(mob/user) @@ -151,17 +178,15 @@ if(in_range(user, src) || isobserver(user)) . += "The status display reads:\n\ Recharging [recharge_amount] power units per interval.\n\ - Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%." + Power efficiency increased by [round((powerefficiency * 1000) -100, 1)]%.
" . += span_notice("Use RMB to eject a stored beaker.") - /obj/machinery/chem_dispenser/on_set_is_operational(old_value) if(old_value) //Turned off end_processing() else //Turned on begin_processing() - /obj/machinery/chem_dispenser/process(seconds_per_tick) if (recharge_counter >= 8) var/usedpower = cell.give(recharge_amount) @@ -194,7 +219,6 @@ beaker_overlay = display_beaker() . += beaker_overlay - /obj/machinery/chem_dispenser/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) balloon_alert(user, "already emagged!") @@ -205,12 +229,10 @@ return TRUE /obj/machinery/chem_dispenser/ex_act(severity, target) - if(severity <= EXPLODE_LIGHT) - return FALSE - return ..() + return severity <= EXPLODE_LIGHT ? FALSE : ..() /obj/machinery/chem_dispenser/contents_explosion(severity, target) - ..() + . = ..() if(!beaker) return @@ -232,45 +254,25 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ChemDispenser", name) - - var/is_hallucinating = FALSE - if(isliving(user)) - var/mob/living/living_user = user - is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - - if(is_hallucinating) - ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals - ui.open() + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + ui.set_autoupdate(!is_hallucinating) //to not ruin the immersion by constantly changing the fake chemicals + +/obj/machinery/chem_dispenser/ui_static_data(mob/user) + . = ..() + .["showpH"] = show_ph + /obj/machinery/chem_dispenser/ui_data(mob/user) - var/data = list() - data["amount"] = amount - data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI. - data["maxEnergy"] = cell.maxcharge * powerefficiency - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["showpH"] = show_ph + . = list() + .["amount"] = amount + .["energy"] = cell.charge ? cell.charge * powerefficiency : 0 //To prevent NaN in the UI. + .["maxEnergy"] = cell.maxcharge * powerefficiency - var/beakerContents[0] - var/beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = round(R.volume, 0.01), "pH" = R.ph, "purity" = R.purity))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if (beaker) - data["beakerCurrentVolume"] = round(beakerCurrentVolume, 0.01) - data["beakerMaxVolume"] = beaker.volume - data["beakerTransferAmounts"] = beaker.possible_transfer_amounts - data["beakerCurrentpH"] = round(beaker.reagents.ph, 0.01) - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - data["beakerTransferAmounts"] = null - data["beakerCurrentpH"] = null - - var/chemicals[0] + var/list/chemicals = list() var/is_hallucinating = FALSE if(isliving(user)) var/mob/living/living_user = user @@ -282,23 +284,37 @@ var/chemname = temp.name if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "pH" = temp.ph, "pHCol" = convert_ph_to_readable_color(temp.ph)))) - data["chemicals"] = chemicals - data["recipes"] = saved_recipes + chemicals += list(list("title" = chemname, "id" = temp.name, "pH" = temp.ph, "pHCol" = convert_ph_to_readable_color(temp.ph))) + .["chemicals"] = chemicals + .["recipes"] = saved_recipes - data["recordingRecipe"] = recording_recipe - data["recipeReagents"] = list() + .["recordingRecipe"] = recording_recipe + .["recipeReagents"] = list() if(beaker?.reagents.ui_reaction_id) var/datum/chemical_reaction/reaction = get_chemical_reaction(beaker.reagents.ui_reaction_id) for(var/_reagent in reaction.required_reagents) var/datum/reagent/reagent = find_reagent_object_from_type(_reagent) - data["recipeReagents"] += ckey(reagent.name) - return data + .["recipeReagents"] += reagent.name -/obj/machinery/chem_dispenser/ui_act(action, params) + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["transferAmounts"] = beaker.possible_transfer_amounts + beaker_data["pH"] = round(beaker.reagents.ph, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/machinery/chem_dispenser/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + switch(action) if("amount") if(!is_operational || QDELETED(beaker)) @@ -307,7 +323,8 @@ if(target in beaker.possible_transfer_amounts) amount = target work_animation() - . = TRUE + return TRUE + if("dispense") if(!is_operational || QDELETED(cell)) return @@ -318,7 +335,7 @@ var/datum/reagents/holder = beaker.reagents var/to_dispense = max(0, min(amount, holder.maximum_volume - holder.total_volume)) - if(!cell?.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) @@ -326,7 +343,8 @@ work_animation() else recording_recipe[reagent_name] += amount - . = TRUE + return TRUE + if("remove") if(!is_operational || recording_recipe) return @@ -334,10 +352,12 @@ if(beaker && (amount in beaker.possible_transfer_amounts)) beaker.reagents.remove_all(amount) work_animation() - . = TRUE + return TRUE + if("eject") - replace_beaker(usr) - . = TRUE + replace_beaker(ui.user) + return TRUE + if("dispense_recipe") if(!is_operational || QDELETED(cell)) return @@ -346,7 +366,7 @@ if(!LAZYLEN(chemicals_to_dispense)) return for(var/key in chemicals_to_dispense) - var/reagent = GLOB.name2reagent[translate_legacy_chem_id(key)] + var/reagent = GLOB.name2reagent[key] var/dispense_amount = chemicals_to_dispense[key] if(!dispensable_reagents.Find(reagent)) return @@ -358,50 +378,49 @@ var/to_dispense = max(0, min(dispense_amount, holder.maximum_volume - holder.total_volume)) if(!to_dispense) continue - if(!cell?.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense / powerefficiency)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) work_animation() else recording_recipe[key] += dispense_amount - . = TRUE + return TRUE + if("clear_recipes") - if(!is_operational) - return - var/yesno = tgui_alert(usr, "Clear all recipes?",, list("Yes","No")) - if(yesno == "Yes") + if(is_operational && tgui_alert(ui.user, "Clear all recipes?", "Clear?", list("Yes", "No")) == "Yes") saved_recipes = list() - . = TRUE + return TRUE + if("record_recipe") - if(!is_operational) - return - recording_recipe = list() - . = TRUE + if(is_operational) + recording_recipe = list() + return TRUE + if("save_recording") if(!is_operational) return - var/name = tgui_input_text(usr, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) + var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) + if(!ui.user.can_perform_action(src, ALLOW_SILICON_REACH)) return - if(saved_recipes[name] && tgui_alert(usr, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") + if(saved_recipes[name] && tgui_alert(ui.user, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") return if(name && recording_recipe) for(var/reagent in recording_recipe) - var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent)] + var/reagent_id = GLOB.name2reagent[reagent] if(!dispensable_reagents.Find(reagent_id)) visible_message(span_warning("[src] buzzes."), span_hear("You hear a faint buzz.")) - to_chat(usr, span_warning("[src] cannot find [reagent]!")) + to_chat(ui.user, span_warning("[src] cannot find [reagent]!")) playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) return saved_recipes[name] = recording_recipe recording_recipe = null - . = TRUE + return TRUE + if("cancel_recording") - if(!is_operational) - return - recording_recipe = null - . = TRUE + if(is_operational) + recording_recipe = null + return TRUE //SKYRAT EDIT ADDITION BEGIN - CHEMISTRY QOL if("custom_amount") if(!beaker) @@ -411,22 +430,39 @@ transferAmounts -= customTransferAmount customTransferAmount = clamp(input(usr, "Please enter your desired transfer amount.", "Transfer amount", 0) as num|null, 0, beaker.volume) transferAmounts += customTransferAmount + return TRUE //SKYRAT EDIT ADDITION END + if("reaction_lookup") if(beaker) - beaker.reagents.ui_interact(usr) + beaker.reagents.ui_interact(ui.user) + + var/result = handle_ui_act(action, params, ui, state) + if(isnull(result)) + result = FALSE + return result + +/// Same as ui_act() but to be used by subtypes exclusively +/obj/machinery/chem_dispenser/proc/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + return null /obj/machinery/chem_dispenser/wrench_act(mob/living/user, obj/item/tool) . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/chem_dispenser/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + update_appearance() + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/chem_dispenser/crowbar_act(mob/living/user, obj/item/tool) + . = ..() + if(default_deconstruction_crowbar(tool)) + return TOOL_ACT_TOOLTYPE_SUCCESS /obj/machinery/chem_dispenser/attackby(obj/item/I, mob/living/user, params) - if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_appearance() - return - if(default_deconstruction_crowbar(I)) - return if(is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container()) var/obj/item/reagent_containers/B = I //SKYRAT EDIT BEGIN - CHEMISTRY QOL @@ -496,14 +532,14 @@ dispensable_reagents -= upgrade_reagents if (servo.tier > 2) - dispensable_reagents |= upgrade_reagents2 + dispensable_reagents |= upgrade2_reagents else - dispensable_reagents -= upgrade_reagents2 + dispensable_reagents -= upgrade2_reagents if (servo.tier > 3) - dispensable_reagents |= upgrade_reagents3 + dispensable_reagents |= upgrade3_reagents else - dispensable_reagents -= upgrade_reagents3 + dispensable_reagents -= upgrade3_reagents //SKYRAT EDIT END parts_rating += servo.tier powerefficiency = round(newpowereff, 0.01) @@ -559,7 +595,8 @@ nopower_state = null pass_flags = PASSTABLE show_ph = FALSE - dispensable_reagents = list( + /// The default list of reagents dispensable by the soda dispenser + var/static/list/drinks_dispensable_reagents = list( /datum/reagent/consumable/coffee, /datum/reagent/consumable/space_cola, /datum/reagent/consumable/cream, @@ -586,24 +623,26 @@ /datum/reagent/consumable/tonic, /datum/reagent/water, ) - //SKYRAT EDIT ADDITION BEGIN - Skyrat-SS13/Skyrat-tg#2429 - upgrade_reagents = list( + //SKYRAT EDIT ADDITION BEGIN + var/static/list/drink_upgrade_reagents = list( /datum/reagent/consumable/applejuice, /datum/reagent/consumable/pumpkinjuice, /datum/reagent/consumable/vanilla ) - upgrade_reagents2 = list( + var/static/list/drink_upgrade2_reagents = list( /datum/reagent/consumable/banana, /datum/reagent/consumable/berryjuice, /datum/reagent/consumable/blumpkinjuice ) - upgrade_reagents3 = list( + var/static/list/drink_upgrade3_reagents = list( /datum/reagent/consumable/watermelonjuice, /datum/reagent/consumable/peachjuice, /datum/reagent/consumable/sol_dry ) //SKYRAT EDIT ADDITION END - emagged_reagents = list( + upgrade_reagents = null + /// The default list of emagged reagents dispensable by the soda dispenser + var/static/list/drink_emagged_reagents = list( /datum/reagent/consumable/ethanol/thirteenloko, /datum/reagent/consumable/ethanol/whiskey_cola, /datum/reagent/toxin/mindbreaker, @@ -612,6 +651,24 @@ base_reagent_purity = 0.5 /obj/machinery/chem_dispenser/drinks/Initialize(mapload) + if(dispensable_reagents != null && !dispensable_reagents.len) + dispensable_reagents = drinks_dispensable_reagents + if(emagged_reagents != null && !emagged_reagents.len) + emagged_reagents = drink_emagged_reagents + //SKYRAT EDIT ADDITION BEGIN + if(upgrade_reagents != null && !upgrade_reagents.len) + upgrade_reagents = drink_upgrade_reagents + if(upgrade_reagents) + upgrade_reagents = sort_list(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade2_reagents != null && !upgrade2_reagents.len) + upgrade2_reagents = drink_upgrade2_reagents + if(upgrade2_reagents) + upgrade2_reagents = sort_list(upgrade2_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + if(upgrade3_reagents != null && !upgrade3_reagents.len) + upgrade3_reagents = drink_upgrade3_reagents + if(upgrade3_reagents) + upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) + //SKYRAT EDIT ADDITION END . = ..() AddComponent(/datum/component/simple_rotation) @@ -656,7 +713,8 @@ base_icon_state = "booze_dispenser" dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer - dispensable_reagents = list( + /// The default list of reagents dispensable by the beer dispenser + var/static/list/beer_dispensable_reagents = list( /datum/reagent/consumable/ethanol/absinthe, /datum/reagent/consumable/ethanol/ale, /datum/reagent/consumable/ethanol/applejack, @@ -685,9 +743,10 @@ /datum/reagent/consumable/ethanol/yuyake, ) upgrade_reagents = null - upgrade_reagents2 = null //SKYRAT EDIT - upgrade_reagents3 = null //SKYRAT EDIT - emagged_reagents = list( + upgrade2_reagents = null //SKYRAT EDIT + upgrade3_reagents = null //SKYRAT EDIT + /// The default list of emagged reagents dispensable by the beer dispenser + var/static/list/beer_emagged_reagents = list( /datum/reagent/consumable/ethanol, /datum/reagent/iron, /datum/reagent/consumable/mintextract, @@ -695,6 +754,11 @@ /datum/reagent/consumable/ethanol/fernet ) +/obj/machinery/chem_dispenser/drinks/beer/Initialize(mapload) + dispensable_reagents = beer_dispensable_reagents + emagged_reagents = beer_emagged_reagents + . = ..() + /obj/machinery/chem_dispenser/drinks/beer/fullupgrade //fully ugpraded stock parts, emagged desc = "Contains a large reservoir of the good stuff. This model has had its safeties shorted out." obj_flags = CAN_BE_HIT | EMAGGED @@ -708,19 +772,25 @@ /obj/machinery/chem_dispenser/mutagen name = "mutagen dispenser" desc = "Creates and dispenses mutagen." - dispensable_reagents = list(/datum/reagent/toxin/mutagen) + /// The default list of reagents dispensable by mutagen chem dispenser + var/static/list/mutagen_dispensable_reagents = list(/datum/reagent/toxin/mutagen) upgrade_reagents = null - emagged_reagents = list(/datum/reagent/toxin/plasma) + /// The default list of emagged reagents dispensable by mutagen chem dispenser + var/static/list/mutagen_emagged_reagents = list(/datum/reagent/toxin/plasma) +/obj/machinery/chem_dispenser/mutagen/Initialize(mapload) + dispensable_reagents = mutagen_dispensable_reagents + emagged_reagents = mutagen_emagged_reagents + . = ..() /obj/machinery/chem_dispenser/mutagensaltpeter name = "botanical chemical dispenser" desc = "Creates and dispenses chemicals useful for botany." flags_1 = NODECONSTRUCT_1 - circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter - dispensable_reagents = list( + /// The default list of dispensable reagents available in the mutagensaltpeter chem dispenser + var/static/list/mutagensaltpeter_dispensable_reagents = list( /datum/reagent/toxin/mutagen, /datum/reagent/saltpetre, /datum/reagent/plantnutriment/eznutriment, @@ -736,6 +806,10 @@ /datum/reagent/diethylamine) upgrade_reagents = null +/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize(mapload) + dispensable_reagents = mutagensaltpeter_dispensable_reagents + . = ..() + /obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged desc = "Creates and dispenses chemicals. This model has had its safeties shorted out." obj_flags = CAN_BE_HIT | EMAGGED @@ -757,7 +831,9 @@ working_state = null nopower_state = null use_power = NO_POWER_USE - dispensable_reagents = list( + + /// The default list of dispensable reagents available in the abductor chem dispenser + var/static/list/abductor_dispensable_reagents = list( /datum/reagent/aluminium, /datum/reagent/bromine, /datum/reagent/carbon, @@ -799,3 +875,7 @@ /datum/reagent/consumable/liquidelectricity/enriched, /datum/reagent/medicine/c2/synthflesh ) + +/obj/machinery/chem_dispenser/abductor/Initialize(mapload) + dispensable_reagents = abductor_dispensable_reagents + . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 3716715a2d6..2461f8eb90b 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -447,10 +447,10 @@ To continue set your target temperature to 390K."} if(acid_reagent_heater) cur_vol = acid_reagent_heater.volume volume = 100 - cur_vol - beaker.reagents.trans_id_to(src, acid_reagent.type, volume)//negative because we're going backwards + beaker.reagents.trans_to(src, volume, target_id = acid_reagent.type)//negative because we're going backwards return //We must be positive here - reagents.trans_id_to(beaker, /datum/reagent/reaction_agent/acidic_buffer, dispense_volume) + reagents.trans_to(beaker, dispense_volume, target_id = /datum/reagent/reaction_agent/acidic_buffer) return if(buffer_type == "basic") @@ -464,9 +464,9 @@ To continue set your target temperature to 390K."} if(basic_reagent_heater) cur_vol = basic_reagent_heater.volume volume = 100 - cur_vol - beaker.reagents.trans_id_to(src, basic_reagent.type, volume)//negative because we're going backwards + beaker.reagents.trans_to(src, volume, target_id = basic_reagent.type)//negative because we're going backwards return - reagents.trans_id_to(beaker, /datum/reagent/reaction_agent/basic_buffer, dispense_volume) + reagents.trans_to(beaker, dispense_volume, target_id = /datum/reagent/reaction_agent/basic_buffer) return diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 39146c12d0e..65698c7e389 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -340,10 +340,11 @@ // Generate item name var/item_name_default = initial(container_style.name) + var/datum/reagent/master_reagent = reagents.get_master_reagent() if(selected_container == default_container) // Tubes and bottles gain reagent name - item_name_default = "[reagents.get_master_reagent_name()] [item_name_default]" + item_name_default = "[master_reagent.name] [item_name_default]" if(!(initial(container_style.reagent_flags) & OPENCONTAINER)) // Closed containers get both reagent name and units in the name - item_name_default = "[reagents.get_master_reagent_name()] [item_name_default] ([volume_in_each]u)" + item_name_default = "[master_reagent.name] [item_name_default] ([volume_in_each]u)" var/item_name = tgui_input_text(usr, "Container name", "Name", @@ -395,7 +396,7 @@ if (target == TARGET_BUFFER) if(!check_reactions(reagent, beaker.reagents)) return FALSE - beaker.reagents.trans_id_to(src, reagent.type, amount) + beaker.reagents.trans_to(src, amount, target_id = reagent.type) update_appearance(UPDATE_ICON) return TRUE @@ -406,7 +407,7 @@ if (target == TARGET_BEAKER && transfer_mode == TRANSFER_MODE_MOVE) if(!check_reactions(reagent, reagents)) return FALSE - reagents.trans_id_to(beaker, reagent.type, amount) + reagents.trans_to(beaker, amount, target_id = reagent.type) update_appearance(UPDATE_ICON) return TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_separator.dm b/code/modules/reagents/chemistry/machinery/chem_separator.dm index 2e5571fd431..13be8d6554f 100644 --- a/code/modules/reagents/chemistry/machinery/chem_separator.dm +++ b/code/modules/reagents/chemistry/machinery/chem_separator.dm @@ -231,7 +231,7 @@ soundloop.start() var/vapor_amount = distillation_rate * seconds_per_tick // Vapor to condenser - reagents.trans_id_to(condenser, separating_reagent.type, vapor_amount) + reagents.trans_to(condenser, vapor_amount, target_id = separating_reagent.type) // Cool the vapor down condenser.set_temperature(air.temperature) // Condense into container diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 6de441c6fc7..89c720da0d4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -20,41 +20,42 @@ ui = new(user, src, "ChemDebugSynthesizer", name) ui.open() -/obj/machinery/chem_dispenser/chem_synthesizer/ui_act(action, params) - . = ..() - if(.) - return +/obj/machinery/chem_dispenser/chem_synthesizer/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) - if("ejectBeaker") - if(beaker) - try_put_in_hand(beaker, usr) - beaker = null - . = TRUE if("input") - var/input_reagent = (input("Enter the name of any reagent", "Input") as text|null) - input_reagent = get_reagent_type_from_product_string(input_reagent) //from string to type + if(QDELETED(beaker)) + return FALSE + + var/selected_reagent = tgui_input_list(ui.user, "Select reagent", "Reagent", GLOB.name2reagent) + if(!selected_reagent) + return FALSE + + var/datum/reagent/input_reagent = GLOB.name2reagent[selected_reagent] if(!input_reagent) - say("REAGENT NOT FOUND") - return - else - if(!beaker) - return - else if(!beaker.reagents && !QDELETED(beaker)) - beaker.create_reagents(beaker.volume) - beaker.reagents.add_reagent(input_reagent, amount, added_purity = (purity/100)) + return FALSE + + beaker.reagents.add_reagent(input_reagent, amount, added_purity = (purity / 100)) + return TRUE + if("makecup") if(beaker) return beaker = new /obj/item/reagent_containers/cup/beaker/bluespace(src) visible_message(span_notice("[src] dispenses a bluespace beaker.")) + return TRUE + if("amount") var/input = text2num(params["amount"]) if(input) amount = input + return FALSE + if("purity") var/input = text2num(params["amount"]) if(input) purity = input + return FALSE + update_appearance() /obj/machinery/chem_dispenser/chem_synthesizer/Destroy() @@ -64,11 +65,3 @@ /obj/machinery/chem_dispenser/chem_synthesizer/ui_data(mob/user) . = ..() .["purity"] = purity - return . - -/obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input) - . = FALSE - if(GLOB.chemical_reagents_list[input]) //prefer IDs! - return input - else - return get_chem_id(input) diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm new file mode 100644 index 00000000000..bdc008ce336 --- /dev/null +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -0,0 +1,252 @@ +/obj/item/storage/portable_chem_mixer + name = "Portable Chemical Mixer" + desc = "A portable device that dispenses and mixes chemicals. All necessary reagents need to be supplied with beakers. A label indicates that the 'CTRL'-button on the device may be used to open it for refills. This device can be worn as a belt. The letters 'S&T' are imprinted on the side." + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "portablechemicalmixer_open" + worn_icon_state = "portable_chem_mixer" + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BELT + custom_price = PAYCHECK_CREW * 10 + custom_premium_price = PAYCHECK_CREW * 14 + + ///Creating an empty slot for a beaker that can be added to dispense into + var/obj/item/reagent_containers/beaker = null + ///The amount of reagent that is to be dispensed currently + var/amount = 30 + ///List in which all currently dispensable reagents go + var/list/dispensable_reagents = list() + +/obj/item/storage/portable_chem_mixer/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 200 + atom_storage.max_slots = 50 + atom_storage.set_holdable(list( + /obj/item/reagent_containers/cup/beaker, + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, + /obj/item/reagent_containers/cup/glass/waterbottle, + /obj/item/reagent_containers/condiment, + )) + register_context() + +/obj/item/storage/portable_chem_mixer/Destroy() + QDEL_NULL(beaker) + return ..() + +/obj/item/storage/portable_chem_mixer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + context[SCREENTIP_CONTEXT_CTRL_LMB] = "[atom_storage.locked ? "Un" : ""]Lock storage" + if(atom_storage.locked && !QDELETED(beaker)) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Eject beaker" + + if(!isnull(held_item)) + if (!atom_storage.locked || \ + (held_item.item_flags & ABSTRACT) || \ + !is_reagent_container(held_item) || \ + !held_item.is_open_container() \ + ) + return CONTEXTUAL_SCREENTIP_SET + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/storage/portable_chem_mixer/examine(mob/user) + . = ..() + if(!atom_storage.locked) + . += span_notice("Use [EXAMINE_HINT("ctrl click")] to lock in order to use its interface.") + else + . += span_notice("Its storage is locked, use [EXAMINE_HINT("ctrl click")] to unlock it.") + if(QDELETED(beaker)) + . += span_notice("A beaker can be inserted to dispense reagents after it is locked.") + else + . += span_notice("A beaker of [beaker.reagents.maximum_volume] units capacity is inserted.") + . += span_notice("It can be ejected with [EXAMINE_HINT("alt click")].") + +/obj/item/storage/portable_chem_mixer/ex_act(severity, target) + return severity > EXPLODE_LIGHT ? ..() : FALSE + +/obj/item/storage/portable_chem_mixer/attackby(obj/item/weapon, mob/user, params) + if (!atom_storage.locked || \ + (weapon.item_flags & ABSTRACT) || \ + !is_reagent_container(weapon) || \ + !weapon.is_open_container() \ + ) + return ..() + + replace_beaker(user, weapon) + update_appearance() + return TRUE + +/obj/item/storage/portable_chem_mixer/update_icon_state() + if(!atom_storage.locked) + icon_state = "portablechemicalmixer_open" + return ..() + if(beaker) + icon_state = "portablechemicalmixer_full" + return ..() + icon_state = "portablechemicalmixer_empty" + return ..() + +/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) + if(!atom_storage.locked) + balloon_alert(user, "lock first to use alt eject!") + return ..() + if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + return + + replace_beaker(user) + update_appearance() + +/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) + if(atom_storage.locked == STORAGE_FULLY_LOCKED) + atom_storage.locked = STORAGE_NOT_LOCKED + replace_beaker(user) + SStgui.close_all_uis() + else + atom_storage.locked = STORAGE_FULLY_LOCKED + atom_storage.hide_contents(usr) + + update_appearance() + +/obj/item/storage/portable_chem_mixer/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + beaker = null + else + update_contents() + +/// Reload dispensable reagents from new contents +/obj/item/storage/portable_chem_mixer/proc/update_contents() + dispensable_reagents.Cut() + for (var/obj/item/reagent_containers/container in contents) + var/datum/reagent/key = container.reagents.get_master_reagent() + if(isnull(key)) //no reagent inside container + continue + + var/key_type = key.type + if (!(key_type in dispensable_reagents)) + dispensable_reagents[key_type] = list() + dispensable_reagents[key_type]["reagents"] = list() + dispensable_reagents[key_type]["reagents"] += container.reagents + +/obj/item/storage/portable_chem_mixer/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(!atom_storage.locked) + update_contents() + +/** + * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently + * + * Checks if a valid user and a valid new beaker exist and attempts to replace the current beaker in the portable chemical mixer with the one in hand. Simply places the new beaker in if no beaker is currently loaded + * Arguments: + * * mob/living/user - The user who is trying to exchange beakers + * * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device + */ +/obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) + if(beaker) + user.put_in_hands(beaker) + if(new_beaker) + if(!user.transferItemToLoc(new_beaker, src)) + return + beaker = new_beaker + +/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) + . = ..() + if(ismob(loc)) + var/mob/M = loc + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object + M.putItemFromInventoryInHandIfPossible(src, H.held_index) + +/obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) + if(loc != user) + balloon_alert(user, "hold it in your hand!") + return + if(!atom_storage.locked) + balloon_alert(user, "lock it first!") + return + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PortableChemMixer", name) + ui.open() + + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + ui.set_autoupdate(!is_hallucinating) // to not ruin the immersion by constantly changing the fake chemicals + +/obj/item/storage/portable_chem_mixer/ui_data(mob/user) + . = list() + .["amount"] = amount + + var/list/chemicals = list() + var/is_hallucinating = FALSE + if(isliving(user)) + var/mob/living/living_user = user + is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) + + for(var/re in dispensable_reagents) + var/value = dispensable_reagents[re] + var/datum/reagent/temp = GLOB.chemical_reagents_list[re] + if(temp) + var/chemname = temp.name + var/total_volume = 0 + var/total_ph = 0 + for (var/datum/reagents/rs in value["reagents"]) + total_volume += rs.total_volume + total_ph = rs.ph + if(is_hallucinating && prob(5)) + chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" + chemicals += list(list("title" = chemname, "id" = temp.name, "volume" = total_volume, "pH" = total_ph)) + .["chemicals"] = chemicals + + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["transferAmounts"] = beaker.possible_transfer_amounts + beaker_data["pH"] = round(beaker.reagents.ph, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker?.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/item/storage/portable_chem_mixer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("amount") + amount = text2num(params["target"]) + return TRUE + + if("dispense") + var/datum/reagent/reagent = GLOB.name2reagent[params["reagent"]] + if(isnull(reagent)) + return + + if(!QDELETED(beaker)) + var/datum/reagents/container = beaker.reagents + var/actual = min(amount, container.maximum_volume - container.total_volume) + for (var/datum/reagents/source in dispensable_reagents[reagent]["reagents"]) + actual -= source.trans_to(beaker, min(source.total_volume, actual), transferred_by = ui.user) + if (actual <= 0) + break + return TRUE + + if("remove") + beaker.reagents.remove_all(text2num(params["amount"])) + return TRUE + + if("eject") + replace_beaker(ui.user) + update_appearance() + return TRUE diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index b944fdbee80..2f90e9f0896 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -45,7 +45,11 @@ . = UPDATE_MOB_HEALTH if(good_kind_of_healing && !reaping && SPT_PROB(0.00005, seconds_per_tick)) //janken with the grim reaper! - notify_ghosts("[affected_mob] has entered a game of rock-paper-scissors with death!", source = affected_mob, action = NOTIFY_ORBIT, header = "Who Will Win?") + notify_ghosts( + "[affected_mob] has entered a game of rock-paper-scissors with death!", + source = affected_mob, + header = "Who Will Win?", + ) reaping = TRUE if(affected_mob.apply_status_effect(/datum/status_effect/necropolis_curse, CURSE_BLINDING)) helbent = TRUE @@ -496,13 +500,15 @@ show_message = 0 if(!(methods & (PATCH|TOUCH|VAPOR))) return - var/harmies = min(carbies.getBruteLoss(), carbies.adjustBruteLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype)*-1) - var/burnies = min(carbies.getFireLoss(), carbies.adjustFireLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype)*-1) + var/current_bruteloss = carbies.getBruteLoss() // because this will be changed after calling adjustBruteLoss() + var/current_fireloss = carbies.getFireLoss() // because this will be changed after calling adjustFireLoss() + var/harmies = clamp(carbies.adjustBruteLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype), 0, current_bruteloss) + var/burnies = clamp(carbies.adjustFireLoss(-1.25 * reac_volume, updating_health = FALSE, required_bodytype = affected_bodytype), 0, current_fireloss) for(var/i in carbies.all_wounds) var/datum/wound/iter_wound = i iter_wound.on_synthflesh(reac_volume) var/need_mob_update = harmies + burnies - need_mob_update += carbies.adjustToxLoss((harmies+burnies)*(0.5 + (0.25*(1-creation_purity))), updating_health = FALSE, required_biotype = affected_biotype) //0.5 - 0.75 + need_mob_update = carbies.adjustToxLoss((harmies + burnies)*(0.5 + (0.25*(1-creation_purity))), updating_health = FALSE, required_biotype = affected_biotype) || need_mob_update //0.5 - 0.75 if(need_mob_update) carbies.updatehealth() diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 506bea0c659..a29fad6d68e 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -147,6 +147,7 @@ name = "Green Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is dyed a festive green." color = COLOR_CRAYON_GREEN + overdose_threshold = 55 //More than a glass taste_description = "green piss water" ph = 6 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -159,6 +160,20 @@ /datum/reagent/consumable/ethanol/beer/green/on_mob_end_metabolize(mob/living/drinker) drinker.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, color) +/datum/reagent/consumable/ethanol/beer/green/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + metabolization_rate = 1 * REAGENTS_METABOLISM + + if(!ishuman(affected_mob)) + return + + var/mob/living/carbon/human/affected_human = affected_mob + if(HAS_TRAIT(affected_human, TRAIT_USES_SKINTONES)) + affected_human.skin_tone = "green" + else if(HAS_TRAIT(affected_human, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(affected_human, TRAIT_FIXED_MUTANT_COLORS)) //Code stolen from spraytan overdose + affected_human.dna.features["mcolor"] = "#a8e61d" + affected_human.update_body(is_creating = TRUE) + /datum/reagent/consumable/ethanol/kahlua name = "Kahlua" description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 28039f8b5b6..9a459e41e5b 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -225,7 +225,7 @@ if(affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 0, updating_health = FALSE)) . = UPDATE_MOB_HEALTH if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) - holder.remove_reagent(/datum/reagent/consumable/capsaicin, 1 * seconds_per_tick) + holder.remove_reagent(/datum/reagent/consumable/capsaicin, seconds_per_tick) return ..() || . /datum/reagent/consumable/soymilk diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 95dcf499528..6f8dac870ce 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -84,7 +84,7 @@ if(SPT_PROB(0.5, seconds_per_tick)) var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.") to_chat(affected_mob, span_notice("[smoke_message]")) - affected_mob.add_mood_event("smoked", /datum/mood_event/smoked, name) + affected_mob.add_mood_event("smoked", /datum/mood_event/smoked) affected_mob.remove_status_effect(/datum/status_effect/jitter) affected_mob.AdjustStun(-50 * REM * seconds_per_tick) affected_mob.AdjustKnockdown(-50 * REM * seconds_per_tick) @@ -117,7 +117,7 @@ var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("smacked out", /datum/mood_event/narcotic_heavy, name) + affected_mob.add_mood_event("smacked out", /datum/mood_event/narcotic_heavy) if(current_cycle == 36 && creation_purity <= 0.6) if(!istype(affected_mob.dna.species, /datum/species/human/krokodil_addict)) to_chat(affected_mob, span_userdanger("Your skin falls off easily!")) @@ -175,7 +175,7 @@ var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium, name) + affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) affected_mob.AdjustStun(-40 * REM * seconds_per_tick) affected_mob.AdjustKnockdown(-40 * REM * seconds_per_tick) affected_mob.AdjustUnconscious(-40 * REM * seconds_per_tick) @@ -237,7 +237,7 @@ var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) - affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy, name) + affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy) var/need_mob_update need_mob_update = affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) @@ -518,7 +518,7 @@ /datum/reagent/drug/mushroomhallucinogen/on_mob_metabolize(mob/living/psychonaut) . = ..() - psychonaut.add_mood_event("tripping", /datum/mood_event/high, name) + psychonaut.add_mood_event("tripping", /datum/mood_event/high) if(!psychonaut.hud_used) return @@ -579,7 +579,7 @@ /datum/reagent/drug/blastoff/on_mob_metabolize(mob/living/dancer) . = ..() - dancer.add_mood_event("vibing", /datum/mood_event/high, name) + dancer.add_mood_event("vibing", /datum/mood_event/high) RegisterSignal(dancer, COMSIG_MOB_EMOTED("flip"), PROC_REF(on_flip)) RegisterSignal(dancer, COMSIG_MOB_EMOTED("spin"), PROC_REF(on_spin)) @@ -819,7 +819,7 @@ /datum/reagent/drug/kronkaine/on_mob_life(mob/living/carbon/kronkaine_fiend, seconds_per_tick, times_fired) . = ..() || TRUE - kronkaine_fiend.add_mood_event("tweaking", /datum/mood_event/stimulant_medium, name) + kronkaine_fiend.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) if(kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)) . = UPDATE_MOB_HEALTH kronkaine_fiend.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 68eefcdf0cd..b5b1f2f89f5 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1148,7 +1148,7 @@ . = ..() for(var/effect in status_effects_to_clear) affected_mob.remove_status_effect(effect) - affected_mob.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick * normalise_creation_purity(), FALSE, TRUE) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick * normalise_creation_purity(), include_subtypes = TRUE) if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) . = UPDATE_MOB_HEALTH affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick * normalise_creation_purity()) @@ -1285,7 +1285,7 @@ /datum/reagent/medicine/syndicate_nanites/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) //wtb flavortext messages that hint that you're vomitting up robots . = ..() if(SPT_PROB(13, seconds_per_tick)) - affected_mob.reagents.remove_reagent(type, metabolization_rate*15) // ~5 units at a rate of 0.4 but i wanted a nice number in code + affected_mob.reagents.remove_reagent(type, metabolization_rate * 15) // ~5 units at a rate of 0.4 but i wanted a nice number in code affected_mob.vomit(vomit_flags = VOMIT_CATEGORY_DEFAULT, vomit_type = /obj/effect/decal/cleanable/vomit/nanites, lost_nutrition = 20) // nanite safety protocols make your body expel them to prevent harmies /datum/reagent/medicine/earthsblood //Created by ambrosia gaia plants diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index c65a84191e6..4a0d8a9af19 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -556,7 +556,7 @@ need_mob_update += affected_mob.adjustFireLoss(0.5*seconds_per_tick, updating_health = FALSE) //Hence the other damages... ain't I a bastard? affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2.5*seconds_per_tick, 150) if(holder) - holder.remove_reagent(type, 0.5*seconds_per_tick) + holder.remove_reagent(type, 0.5 * seconds_per_tick) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -1881,7 +1881,7 @@ /datum/reagent/carpet/expose_turf(turf/exposed_turf, reac_volume) if(isopenturf(exposed_turf) && exposed_turf.turf_flags & IS_SOLID && !istype(exposed_turf, /turf/open/floor/carpet)) - exposed_turf.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR) + exposed_turf.place_on_top(carpet_type, flags = CHANGETURF_INHERIT_AIR) ..() /datum/reagent/carpet/black diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 390c3d7bfd4..f281bb3c852 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -782,7 +782,7 @@ if(SPT_PROB(1.5, seconds_per_tick)) holder.add_reagent(/datum/reagent/toxin/histamine,rand(1,3)) - holder.remove_reagent(/datum/reagent/toxin/itching_powder,1.2) + holder.remove_reagent(/datum/reagent/toxin/itching_powder, 1.2) return else return ..() || . @@ -963,7 +963,7 @@ affected_mob.vomit(vomit_flags = constructed_flags, distance = rand(0,4)) for(var/datum/reagent/toxin/R in affected_mob.reagents.reagent_list) if(R != src) - affected_mob.reagents.remove_reagent(R.type,1) + affected_mob.reagents.remove_reagent(R.type, 1) /datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index a1f10c9afe6..5f57de94b4d 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -168,7 +168,7 @@ var/cached_purity = reagent.purity if((reaction_flags & REACTION_CLEAR_INVERSE) && reagent.inverse_chem) if(reagent.inverse_chem_val > reagent.purity) - holder.remove_reagent(reagent.type, cached_volume, FALSE) + holder.remove_reagent(reagent.type, cached_volume, safety = FALSE) holder.add_reagent(reagent.inverse_chem, cached_volume, FALSE, added_purity = reagent.get_inverse_purity(cached_purity)) return diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 05bc622faa7..f524d92ff8e 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -17,7 +17,7 @@ if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL))) return - holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2) + holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume * 2) ..() /datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion @@ -35,7 +35,7 @@ /datum/chemical_reaction/reagent_explosion/rdx/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/rdx, created_volume*2) + holder.remove_reagent(/datum/reagent/rdx, created_volume * 2) ..() /datum/chemical_reaction/reagent_explosion/rdx_explosion @@ -242,7 +242,7 @@ /datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/sorium, created_volume*4) + holder.remove_reagent(/datum/reagent/sorium, created_volume * 4) var/turf/T = get_turf(holder.my_atom) var/range = clamp(sqrt(created_volume*4), 1, 6) goonchem_vortex(T, 1, range) @@ -265,7 +265,7 @@ /datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3) + holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume * 3) var/turf/T = get_turf(holder.my_atom) var/range = clamp(sqrt(created_volume*3), 1, 6) goonchem_vortex(T, 0, range) @@ -301,7 +301,7 @@ C.Paralyze(60) else C.Stun(100) - holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/flash_powder, created_volume * 3) /datum/chemical_reaction/flash_powder_flash required_reagents = list(/datum/reagent/flash_powder = 1) @@ -331,7 +331,7 @@ /datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/smoke_powder, created_volume * 3) var/location = get_turf(holder.my_atom) var/datum/effect_system/fluid_spread/smoke/chem/S = new S.attach(location) @@ -368,7 +368,7 @@ /datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) if(holder.has_reagent(/datum/reagent/stabilizing_agent)) return - holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3) + holder.remove_reagent(/datum/reagent/sonic_powder, created_volume * 3) var/location = get_turf(holder.my_atom) playsound(location, 'sound/effects/bang.ogg', 25, TRUE) for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location)) @@ -574,7 +574,7 @@ modifier = 1 /datum/chemical_reaction/reagent_explosion/nitrous_oxide/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - holder.remove_reagent(/datum/reagent/sorium, created_volume*2) + holder.remove_reagent(/datum/reagent/sorium, created_volume * 2) var/turf/turfie = get_turf(holder.my_atom) //generally half as strong as sorium. var/range = clamp(sqrt(created_volume*2), 1, 6) diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 3a956d7968e..ca941be8ca1 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -466,9 +466,12 @@ /// Handles reagents getting added to the condiment pack. /obj/item/reagent_containers/condiment/pack/proc/on_reagent_add(datum/reagents/reagents) SIGNAL_HANDLER - var/main_reagent = reagents.get_master_reagent_id() - if(main_reagent in possible_states) - var/list/temp_list = possible_states[main_reagent] + + var/datum/reagent/main_reagent = reagents.get_master_reagent() + + var/main_reagent_type = main_reagent?.type + if(main_reagent_type in possible_states) + var/list/temp_list = possible_states[main_reagent_type] icon_state = temp_list[1] desc = temp_list[3] else diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 5caec9de681..4e05310f056 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -125,7 +125,7 @@ return var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution to [target].")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target].")) else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) @@ -137,7 +137,7 @@ return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the contents of [target].")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) target.update_appearance() @@ -158,7 +158,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the contents of [target].")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) target.update_appearance() return SECONDARY_ATTACK_CONTINUE_CHAIN @@ -536,6 +536,11 @@ to_chat(user, span_warning("You can't grind this!")) /obj/item/reagent_containers/cup/mortar/proc/grind_item(obj/item/item, mob/living/carbon/human/user) + if(item.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to grind [item], but it fades away!")) + qdel(item) + return + if(!item.grind(reagents, user)) if(isstack(item)) to_chat(usr, span_notice("[src] attempts to grind as many pieces of [item] as possible.")) @@ -547,6 +552,11 @@ QDEL_NULL(item) /obj/item/reagent_containers/cup/mortar/proc/juice_item(obj/item/item, mob/living/carbon/human/user) + if(item.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to juice [item], but it fades away!")) + qdel(item) + return + if(!item.juice(reagents, user)) to_chat(user, span_notice("You fail to juice [item].")) return diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index c32c83effa9..d795a5e0dcf 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -101,6 +101,10 @@ name = "Nuka Cola" list_reagents = list(/datum/reagent/consumable/nuka_cola = 50) +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/pina_colada + name = "Pina Colada" + list_reagents = list(/datum/reagent/consumable/ethanol/pina_colada = 50) + /obj/item/reagent_containers/cup/glass/drinkingglass/filled/half_full name = "half full glass of water" desc = "It's a glass of water. It seems half full. Or is it half empty? You're pretty sure it's full of shit." diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index e204c6803fb..1eed3c36b76 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -803,10 +803,10 @@ if(istype(contained_reagent, accelerant_type)) firestarter = 1 break + ..() if(firestarter && active) target.fire_act() new /obj/effect/hotspot(get_turf(target)) - ..() /obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, params) if(I.get_temperature() && !active) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index ac8d0af0d1c..beb6f3e6314 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -46,7 +46,7 @@ target.visible_message(span_danger("[user] tries to squirt something into [target]'s eyes, but fails!"), \ span_userdanger("[user] tries to squirt something into your eyes, but fails!")) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() return else if(isalien(target)) //hiss-hiss has no eyes! @@ -66,7 +66,7 @@ log_combat(user, M, "squirted", R) trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You transfer [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() target.update_appearance() @@ -82,7 +82,7 @@ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - to_chat(user, span_notice("You fill [src] with [round(trans, 0.01)] unit\s of the solution.")) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution.")) update_appearance() target.update_appearance() diff --git a/code/modules/recycling/disposal/eject.dm b/code/modules/recycling/disposal/eject.dm index febd4f5d604..523f034703c 100644 --- a/code/modules/recycling/disposal/eject.dm +++ b/code/modules/recycling/disposal/eject.dm @@ -2,11 +2,33 @@ * General proc used to expel a holder's contents through src (for bins holder is also the src). */ /obj/proc/pipe_eject(obj/holder, direction, throw_em = TRUE, turf/target, throw_range = 5, throw_speed = 1) - var/turf/src_T = get_turf(src) - for(var/A in holder) - var/atom/movable/AM = A - AM.forceMove(src_T) - SEND_SIGNAL(AM, COMSIG_MOVABLE_PIPE_EJECTING, direction) - if(throw_em && !QDELETED(AM)) - var/turf/T = target || get_offset_target_turf(loc, rand(5)-rand(5), rand(5)-rand(5)) - AM.throw_at(T, throw_range, throw_speed) + var/turf/origin_turf = get_turf(src) + var/turf/target_turf + if(isnull(target)) // done up here as a safety + target_turf = get_offset_target_turf(loc, rand(5) - rand(5), rand(5) - rand(5)) + else + target_turf = target + + if(QDELETED(origin_turf)) + stack_trace("pipe_eject() attempted to operate on a qdeleted turf! In order to avoid sending things to nullspace, we are going to send everything directly to the target turf instead.") + origin_turf = target_turf + + var/list/contents_to_eject = holder.contents + var/list/contents_to_throw = list() + + for(var/atom/movable/thing in contents_to_eject) + thing.forceMove(origin_turf) + SEND_SIGNAL(thing, COMSIG_MOVABLE_PIPE_EJECTING, direction) + if(QDELETED(thing)) + continue + + contents_to_throw += thing + + if(!throw_em) + return + + for(var/atom/movable/throwable as anything in contents_to_throw) + if(isnull(target)) // we want the thrown things to be spread out a bit if we weren't given a target + target_turf = get_offset_target_turf(loc, rand(5) - rand(5), rand(5) - rand(5)) + + throwable.throw_at(target_turf, throw_range, throw_speed) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index cf9ae8f6b4e..2d964d0f8fb 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -42,7 +42,7 @@ if(M.client) M.reset_perspective(src) hasmob = TRUE - RegisterSignal(M, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep), M) + RegisterSignal(M, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep)) //Checks 1 contents level deep. This means that players can be sent through disposals mail... //...but it should require a second person to open the package. (i.e. person inside a wrapped locker) @@ -179,12 +179,12 @@ /// Merge two holder objects, used when a holder meets a stuck holder /obj/structure/disposalholder/proc/merge(obj/structure/disposalholder/other) - for(var/A in other) - var/atom/movable/AM = A - AM.forceMove(src) // move everything in other holder to this one - if(ismob(AM)) - var/mob/M = AM - M.reset_perspective(src) // if a client mob, update eye to follow this holder + for(var/atom/movable/movable as anything in other) + movable.forceMove(src) // move everything in other holder to this one + if(ismob(movable)) + var/mob/mob = movable + mob.reset_perspective(src) // if a client mob, update eye to follow this holder + RegisterSignal(mob, COMSIG_LIVING_RESIST, PROC_REF(struggle_prep)) hasmob = TRUE if(destinationTag == 0 && other.destinationTag != 0) destinationTag = other.destinationTag diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 4327567fb17..4fa9f1e0aab 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -47,6 +47,11 @@ /obj/structure/disposaloutlet/Destroy() if(trunk) + // preemptively expel the contents from the trunk + // in case the outlet is deleted before expel_holder could be called. + var/obj/structure/disposalholder/holder = locate() in trunk + if(holder) + trunk.expel(holder) trunk.linked = null trunk = null QDEL_NULL(stored) @@ -60,15 +65,15 @@ if((start_eject + 30) < world.time) start_eject = world.time playsound(src, 'sound/machines/warning-buzzer.ogg', 50, FALSE, FALSE) - addtimer(CALLBACK(src, PROC_REF(expel_holder), H, TRUE), 20) + addtimer(CALLBACK(src, PROC_REF(expel_holder), H, TRUE), 2 SECONDS) else - addtimer(CALLBACK(src, PROC_REF(expel_holder), H), 20) + addtimer(CALLBACK(src, PROC_REF(expel_holder), H), 2 SECONDS) /obj/structure/disposaloutlet/proc/expel_holder(obj/structure/disposalholder/H, playsound=FALSE) if(playsound) playsound(src, 'sound/machines/hiss.ogg', 50, FALSE, FALSE) - if(!H) + if(QDELETED(H)) return pipe_eject(H, dir, TRUE, target, eject_range, eject_speed) diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 3135fddeace..8b96c210511 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -168,7 +168,7 @@ eth_stomach.adjust_charge(60) did_we_charge = TRUE - //if we're not targetting a robot part we stop early + //if we're not targeting a robot part we stop early var/obj/item/bodypart/bodypart = blessed.get_bodypart(chap.zone_selected) if(IS_ORGANIC_LIMB(bodypart)) if(!did_we_charge) diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index c495bdc9e47..098cac6a389 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -229,6 +229,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -246,6 +247,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -263,6 +265,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -280,6 +283,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -297,6 +301,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -314,6 +319,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -331,6 +337,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -348,6 +355,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -365,6 +373,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -382,6 +391,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -399,6 +409,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -416,6 +427,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -433,6 +445,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -450,6 +463,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -467,6 +481,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -486,6 +501,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -506,6 +522,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -526,6 +543,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -566,6 +584,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -586,6 +605,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -606,6 +626,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -626,6 +647,7 @@ RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -660,6 +682,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -679,6 +702,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -697,6 +721,7 @@ construction_time = 100 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -713,6 +738,7 @@ construction_time = 20 category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 6de5033ea02..baa22abf09e 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -777,15 +777,27 @@ build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*5) construction_time = 100 - category = list( - RND_CATEGORY_MECHFAB_EQUIPMENT, - RND_CATEGORY_MECHFAB_RIPLEY - ) category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, ) +/datum/design/paddyupgrade + name = "Ripley MK-I to Paddy Conversion Kit" + id = "paddyupgrade" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT *5, + ) + construction_time = 100 + category = list( + RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_CHASSIS, + ) + /datum/design/mech_hydraulic_clamp name = "Hydraulic Clamp" id = "mech_hydraulic_clamp" @@ -793,15 +805,23 @@ build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) construction_time = 100 - category = list( - RND_CATEGORY_MECHFAB_EQUIPMENT, - RND_CATEGORY_MECHFAB_RIPLEY - ) category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, ) +/datum/design/mech_hydraulic_claw + name = "Hydraulic Claw" + id = "mech_hydraulic_claw" + build_type = MECHFAB + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) + construction_time = 100 + category = list( + RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, + RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, + ) + /datum/design/mech_drill name = "Mining Drill" id = "mech_drill" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 285878e7f26..150c69bc21f 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -359,6 +359,28 @@ ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL +/datum/design/penlight + name = "Penlight" + id = "penlight" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.5) + build_path = /obj/item/flashlight/pen + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/penlight_paramedic + name = "Paramedic Penlight" + id = "penlight_paramedic" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*1) + build_path = /obj/item/flashlight/pen/paramedic + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index fcbf39ec794..ae8f7e43a40 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -411,7 +411,7 @@ category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SERVICE /datum/design/oxygen_tank name = "Oxygen Tank" @@ -819,6 +819,17 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY +/datum/design/sec_pen + name = "Security Pen" + id = "sec_pen" + build_type = PROTOLATHE | AUTOLATHE + materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT) + build_path = /obj/item/pen/red/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + /datum/design/plumbing_rcd name = "Plumbing Constructor" id = "plumbing_rcd" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 2d1e786208c..03a6d9934f5 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -1,225 +1,189 @@ -/* -Destructive Analyzer +///How much power it costs to deconstruct an item. +#define DESTRUCTIVE_ANALYZER_POWER_USAGE (BASE_MACHINE_IDLE_CONSUMPTION * 2.5) +///The 'ID' for deconstructing items for Research points instead of nodes. +#define DESTRUCTIVE_ANALYZER_DESTROY_POINTS "research_points" -It is used to destroy hand-held objects and advance technological research. Controls are in the linked R&D console. - -Note: Must be placed within 3 tiles of the R&D Console -*/ +/** + * ## Destructive Analyzer + * It is used to destroy hand-held objects and advance technological research. + */ /obj/machinery/rnd/destructive_analyzer name = "destructive analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" base_icon_state = "d_analyzer" circuit = /obj/item/circuitboard/machine/destructive_analyzer - var/decon_mod = 0 -/obj/machinery/rnd/destructive_analyzer/RefreshParts() +/obj/machinery/rnd/destructive_analyzer/Initialize(mapload) . = ..() - var/T = 0 - for(var/datum/stock_part/stock_part in component_parts) - T += stock_part.tier - decon_mod = T + register_context() -/obj/machinery/rnd/destructive_analyzer/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list +/obj/machinery/rnd/destructive_analyzer/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(loaded_item) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove Item" + else if(!isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Insert Item" + return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/rnd/destructive_analyzer/Insert_Item(obj/item/O, mob/living/user) - if(!user.combat_mode) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - to_chat(user, span_warning("\The [O] is stuck to your hand, you cannot put it in the [src.name]!")) - return - busy = TRUE - loaded_item = O - to_chat(user, span_notice("You add the [O.name] to the [src.name]!")) - flick("d_analyzer_la", src) - addtimer(CALLBACK(src, PROC_REF(finish_loading)), 10) - updateUsrDialog() +/obj/machinery/rnd/destructive_analyzer/attackby(obj/item/weapon, mob/living/user, params) + if(user.combat_mode) + return ..() + if(!is_insertion_ready(user)) + return ..() + if(!user.transferItemToLoc(weapon, src)) + to_chat(user, span_warning("\The [weapon] is stuck to your hand, you cannot put it in the [name]!")) + return TRUE + busy = TRUE + loaded_item = weapon + to_chat(user, span_notice("You add the [weapon.name] to the [name]!")) + flick("[base_icon_state]_la", src) + addtimer(CALLBACK(src, PROC_REF(finish_loading)), 1 SECONDS) + return TRUE -/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() - update_appearance() - reset_busy() +/obj/machinery/rnd/destructive_analyzer/AltClick(mob/user) + . = ..() + unload_item() /obj/machinery/rnd/destructive_analyzer/update_icon_state() icon_state = "[base_icon_state][loaded_item ? "_l" : null]" return ..() -/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE) - if(QDELETED(thing) || QDELETED(src)) - return FALSE - if(!innermode) - flick("d_analyzer_process", src) - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 24) - use_power(250) - if(thing == loaded_item) - loaded_item = null - var/list/food = thing.GetDeconstructableContents() - for(var/obj/item/innerthing in food) - destroy_item(innerthing, TRUE) - for(var/mob/living/victim in thing) - if(victim.stat != DEAD) - victim.investigate_log("has been killed by a destructive analyzer.", INVESTIGATE_DEATHS) - victim.death() +/obj/machinery/rnd/destructive_analyzer/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DestructiveAnalyzer") + ui.open() - qdel(thing) - loaded_item = null - if (!innermode) - update_appearance() - return TRUE +/obj/machinery/rnd/destructive_analyzer/ui_data(mob/user) + var/list/data = list() + data["server_connected"] = !!stored_research + data["node_data"] = list() + if(loaded_item) + data["item_icon"] = icon2base64(getFlatIcon(image(icon = loaded_item.icon, icon_state = loaded_item.icon_state), no_anim = TRUE)) + data["indestructible"] = !(loaded_item.resistance_flags & INDESTRUCTIBLE) + data["loaded_item"] = loaded_item + data["already_deconstructed"] = !!stored_research.deconstructed_items[loaded_item.type] + var/list/points = techweb_item_point_check(loaded_item) + data["recoverable_points"] = techweb_point_display_generic(points) -/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) - if(!istype(loaded_item)) - return FALSE - - if (id && id != RESEARCH_MATERIAL_DESTROY_ID) - var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) - if(!istype(TN)) - return FALSE - var/dpath = loaded_item.type - var/list/worths = TN.boost_item_paths[dpath] - var/list/differences = list() - var/list/already_boosted = stored_research.boosted_nodes[TN.id] - for(var/i in worths) - var/used = already_boosted? already_boosted[i] : 0 - var/value = min(worths[i], TN.research_costs[i]) - used - if(value > 0) - differences[i] = value - if(length(worths) && !length(differences)) - return FALSE - var/choice = tgui_alert(user, "Are you sure you want to destroy [loaded_item] to [!length(worths) ? "reveal [TN.display_name]" : "boost [TN.display_name] by [json_encode(differences)] point\s"]?", "Destructive Analyzer", list("Proceed", "Cancel")) - if(choice != "Proceed") - return FALSE - if(QDELETED(loaded_item) || QDELETED(src)) - return FALSE - SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) - if(destroy_item(loaded_item)) - stored_research.boost_with_item(SSresearch.techweb_node_by_id(TN.id), dpath) - - else - var/list/point_value = techweb_item_point_check(loaded_item) - if(stored_research.deconstructed_items[loaded_item.type]) - point_value = list() - var/user_mode_string = "" - if(length(point_value)) - user_mode_string = " for [json_encode(point_value)] points" - var/choice = tgui_alert(usr, "Are you sure you want to destroy [loaded_item][user_mode_string]?",, list("Proceed", "Cancel")) - if(choice == "Cancel") - return FALSE - if(QDELETED(loaded_item) || QDELETED(src)) - return FALSE - destroy_item(loaded_item) - return TRUE - -/obj/machinery/rnd/destructive_analyzer/proc/unload_item() - if(!loaded_item) - return FALSE - loaded_item.forceMove(get_turf(src)) - loaded_item = null - update_appearance() - return TRUE - -/obj/machinery/rnd/destructive_analyzer/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "destructive_analyzer", name, 900, 600) - popup.set_content(ui_deconstruct()) - popup.open() - -/obj/machinery/rnd/destructive_analyzer/proc/ui_deconstruct() //Legacy code - var/list/l = list() - if(!loaded_item) - l += "
No item loaded. Standing-by...
" - else - l += "
[RDSCREEN_NOBREAK]" - l += "
[icon2html(loaded_item, usr)][loaded_item.name] Eject
[RDSCREEN_NOBREAK]" - l += "Select a node to boost by deconstructing this item. This item can boost:" - - var/anything = FALSE - var/list/boostable_nodes = techweb_item_boost_check(loaded_item) + var/list/boostable_nodes = techweb_item_unlock_check(loaded_item) for(var/id in boostable_nodes) - anything = TRUE - var/list/worth = boostable_nodes[id] - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id) + var/datum/techweb_node/unlockable_node = SSresearch.techweb_node_by_id(id) + var/list/node_data = list() + node_data["node_name"] = unlockable_node.display_name + node_data["node_id"] = unlockable_node.id + node_data["node_hidden"] = !!stored_research.hidden_nodes[unlockable_node.id] + data["node_data"] += list(node_data) + else + data["loaded_item"] = null + return data - l += "
[RDSCREEN_NOBREAK]" - if (stored_research.researched_nodes[N.id]) // already researched - l += "[N.display_name]" - l += "This node has already been researched." - else if(!length(worth)) // reveal only - if (stored_research.hidden_nodes[N.id]) - l += "[N.display_name]" - l += "This node will be revealed." - else - l += "[N.display_name]" - l += "This node has already been revealed." - else // boost by the difference - var/list/differences = list() - var/list/already_boosted = stored_research.boosted_nodes[N.id] - for(var/i in worth) - var/already_boosted_amount = already_boosted? stored_research.boosted_nodes[N.id][i] : 0 - var/amt = min(worth[i], N.research_costs[i]) - already_boosted_amount - if(amt > 0) - differences[i] = amt - if (length(differences)) - l += "[N.display_name]" - l += "This node will be boosted with the following:
[techweb_point_display_generic(differences)]" - else - l += "[N.display_name]" - l += "This node has already been boosted." - l += "
[RDSCREEN_NOBREAK]" +/obj/machinery/rnd/destructive_analyzer/ui_static_data(mob/user) + var/list/data = list() + data["research_point_id"] = DESTRUCTIVE_ANALYZER_DESTROY_POINTS + return data - var/list/point_values = techweb_item_point_check(loaded_item) - if(point_values) - anything = TRUE - l += "
[RDSCREEN_NOBREAK]" - if (stored_research.deconstructed_items[loaded_item.type]) - l += "Point Deconstruction" - l += "This item's points have already been claimed." - else - l += "Point Deconstruction" - l += "This item is worth:
[techweb_point_display_generic(point_values)]!" - l += "
[RDSCREEN_NOBREAK]" - - if(!(loaded_item.resistance_flags & INDESTRUCTIBLE)) - l += "
Destroy Item" - l += "
[RDSCREEN_NOBREAK]" - anything = TRUE - - if (!anything) - l += "Nothing!" - - l += "
" - - for(var/i in 1 to length(l)) - if(!findtextEx(l[i], RDSCREEN_NOBREAK)) - l[i] += "
" - . = l.Join("") - return replacetextEx(., RDSCREEN_NOBREAK, "") - -/obj/machinery/rnd/destructive_analyzer/Topic(raw, ls) +/obj/machinery/rnd/destructive_analyzer/ui_act(action, params, datum/tgui/ui) . = ..() if(.) return - add_fingerprint(usr) - usr.set_machine(src) - - if(ls["eject_item"]) //Eject the item inside the destructive analyzer. - if(busy) - to_chat(usr, span_danger("The destructive analyzer is busy at the moment.")) - return - if(loaded_item) - unload_item() - if(ls["deconstruct"]) - if(!user_try_decon_id(ls["deconstruct"], usr)) - say("Destructive analysis failed!") - - updateUsrDialog() + var/mob/user = usr + switch(action) + if("eject_item") + if(busy) + balloon_alert(user, "already busy!") + return TRUE + if(loaded_item) + unload_item() + return TRUE + if("deconstruct") + if(!user_try_decon_id(params["deconstruct_id"])) + say("Destructive analysis failed!") + return TRUE +//This allows people to put syndicate screwdrivers in the machine. Secondary act still passes. /obj/machinery/rnd/destructive_analyzer/screwdriver_act(mob/living/user, obj/item/tool) return FALSE + +///Drops the loaded item where it can and nulls it. +/obj/machinery/rnd/destructive_analyzer/proc/unload_item() + if(!loaded_item) + return FALSE + playsound(loc, 'sound/machines/terminal_insert_disc.ogg', 30, FALSE) + loaded_item.forceMove(drop_location()) + loaded_item = null + update_appearance(UPDATE_ICON) + return TRUE + +///Called in a timer callback after loading something into it, this handles resetting the 'busy' state back to its initial state +///So the machine can be used. +/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() + update_appearance(UPDATE_ICON) + reset_busy() + +/** + * Destroys an item by going through all its contents (including itself) and calling destroy_item_individual + * Args: + * gain_research_points - Whether deconstructing each individual item should check for research points to boost. + */ +/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(gain_research_points = FALSE) + if(QDELETED(loaded_item) || QDELETED(src)) + return FALSE + flick("[base_icon_state]_process", src) + busy = TRUE + addtimer(CALLBACK(src, PROC_REF(reset_busy)), 2.4 SECONDS) + use_power(DESTRUCTIVE_ANALYZER_POWER_USAGE) + var/list/all_contents = loaded_item.get_all_contents() + for(var/innerthing in all_contents) + destroy_item_individual(innerthing, gain_research_points) + + loaded_item = null + update_appearance(UPDATE_ICON) + return TRUE + +/** + * Destroys the individual provided item + * Args: + * thing - The thing being destroyed. Generally an object, but it can be a mob too, such as intellicards and pAIs. + * gain_research_points - Whether deconstructing this should give research points to the stored techweb, if applicable. + */ +/obj/machinery/rnd/destructive_analyzer/proc/destroy_item_individual(obj/item/thing, gain_research_points = FALSE) + if(isliving(thing)) + var/mob/living/mob_thing = thing + if(mob_thing.stat != DEAD) + mob_thing.investigate_log("has been killed by a destructive analyzer.", INVESTIGATE_DEATHS) + mob_thing.death() + var/list/point_value = techweb_item_point_check(thing) + if(point_value && !stored_research.deconstructed_items[thing.type]) + stored_research.deconstructed_items[thing.type] = TRUE + stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = point_value)) + qdel(thing) + +/** + * Attempts to destroy the loaded item using a provided research id. + * Args: + * id - The techweb ID node that we're meant to unlock if applicable. + */ +/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id) + if(!istype(loaded_item)) + return FALSE + if(isnull(id)) + return FALSE + + if(id == DESTRUCTIVE_ANALYZER_DESTROY_POINTS) + if(!destroy_item(gain_research_points = TRUE)) + return FALSE + return TRUE + + var/datum/techweb_node/node_to_discover = SSresearch.techweb_node_by_id(id) + if(!istype(node_to_discover)) + return FALSE + SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[node_to_discover.id]", "[loaded_item.type]")) + if(!destroy_item()) + return FALSE + stored_research.unhide_node(SSresearch.techweb_node_by_id(node_to_discover.id)) + return TRUE + +#undef DESTRUCTIVE_ANALYZER_DESTROY_POINTS +#undef DESTRUCTIVE_ANALYZER_POWER_USAGE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 6a090693ffd..3acfe8f5294 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -26,6 +26,7 @@ density = TRUE use_power = IDLE_POWER_USE circuit = /obj/item/circuitboard/machine/experimentor + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE var/recentlyExperimented = 0 /// Weakref to the first ian we can find at init var/datum/weakref/tracked_ian_ref @@ -41,12 +42,6 @@ var/static/list/valid_items //valid items for special reactions like transforming var/list/critical_items_typecache //items that can cause critical reactions -/obj/machinery/rnd/experimentor/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - /obj/machinery/rnd/experimentor/proc/valid_items() RETURN_TYPE(/list) @@ -130,20 +125,22 @@ return FALSE return TRUE -/obj/machinery/rnd/experimentor/Insert_Item(obj/item/O, mob/living/user) - if(!user.combat_mode) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - return - loaded_item = O - to_chat(user, span_notice("You add [O] to the machine.")) - flick("h_lathe_load", src) +/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, params) + if(user.combat_mode) + return ..() + if(!is_insertion_ready(user)) + return ..() + if(!user.transferItemToLoc(weapon, src)) + to_chat(user, span_warning("\The [weapon] is stuck to your hand, you cannot put it in the [name]!")) + return TRUE + loaded_item = weapon + to_chat(user, span_notice("You add [weapon] to the machine.")) + flick("h_lathe_load", src) + return TRUE /obj/machinery/rnd/experimentor/default_deconstruction_crowbar(obj/item/O) ejectItem() - . = ..(O) + return ..(O) /obj/machinery/rnd/experimentor/ui_interact(mob/user) var/list/dat = list("
") @@ -160,22 +157,19 @@ if(istype(loaded_item,/obj/item/relic)) dat += "Discover" dat += "Eject" - var/list/listin = techweb_item_boost_check(src) + var/list/listin = techweb_item_unlock_check(src) if(listin) var/list/output = list("Research Boost Data:") var/list/res = list("Already researched:") - var/list/boosted = list("Already boosted:") for(var/node_id in listin) var/datum/techweb_node/N = SSresearch.techweb_node_by_id(node_id) var/str = "[N.display_name]: [listin[N]] points." var/datum/techweb/science_web = locate(/datum/techweb/science) in SSresearch.techwebs if(science_web.researched_nodes[N.id]) res += str - else if(science_web.boosted_nodes[N.id]) - boosted += str if(science_web.visible_nodes[N.id]) //JOY OF DISCOVERY! output += str - output += boosted + res + output += res dat += output else dat += "Nothing loaded." @@ -217,9 +211,9 @@ experiment(dotype,process) use_power(750) if(dotype != FAIL) - var/list/nodes = techweb_item_boost_check(process) + var/list/nodes = techweb_item_unlock_check(process) var/picked = pick_weight(nodes) //This should work. - stored_research.boost_with_item(SSresearch.techweb_node_by_id(picked), process.type) + stored_research.unhide_node(SSresearch.techweb_node_by_id(picked)) updateUsrDialog() /obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 0a1a649e285..c53e3808b47 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -107,10 +107,7 @@ ) /obj/machinery/rnd/production/ui_interact(mob/user, datum/tgui/ui) - user.set_machine(src) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) ui = new(user, src, "Fabricator") ui.open() diff --git a/code/modules/research/ordnance/_scipaper.dm b/code/modules/research/ordnance/_scipaper.dm index 38f35e75a77..f1d94af7631 100644 --- a/code/modules/research/ordnance/_scipaper.dm +++ b/code/modules/research/ordnance/_scipaper.dm @@ -287,21 +287,20 @@ /// List of ordnance experiments that our partner is willing to accept. If this list is not filled it means the partner will accept everything. var/list/accepted_experiments = list() /// Associative list of which technology the partner might be able to boost and by how much. - var/list/boosted_nodes = list() - + var/list/boostable_nodes = list() /datum/scientific_partner/proc/purchase_boost(datum/techweb/purchasing_techweb, datum/techweb_node/node) if(!allowed_to_boost(purchasing_techweb, node.id)) return FALSE - purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC=boosted_nodes[node.id])) - purchasing_techweb.scientific_cooperation[type] -= boosted_nodes[node.id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER + purchasing_techweb.boost_techweb_node(node, list(TECHWEB_POINT_TYPE_GENERIC = boostable_nodes[node.id])) + purchasing_techweb.scientific_cooperation[type] -= boostable_nodes[node.id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER return TRUE /datum/scientific_partner/proc/allowed_to_boost(datum/techweb/purchasing_techweb, node_id) - if(purchasing_techweb.scientific_cooperation[type] < (boosted_nodes[node_id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive + if(purchasing_techweb.scientific_cooperation[type] < (boostable_nodes[node_id] * SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER)) // Too expensive return FALSE if(!(node_id in purchasing_techweb.get_available_nodes())) // Not currently available return FALSE - if((TECHWEB_POINT_TYPE_GENERIC in purchasing_techweb.boosted_nodes[node_id]) && (purchasing_techweb.boosted_nodes[node_id][TECHWEB_POINT_TYPE_GENERIC] >= boosted_nodes[node_id])) // Already bought or we have a bigger discount + if((TECHWEB_POINT_TYPE_GENERIC in purchasing_techweb.boosted_nodes[node_id]) && (purchasing_techweb.boosted_nodes[node_id][TECHWEB_POINT_TYPE_GENERIC] >= boostable_nodes[node_id])) // Already bought or we have a bigger discount return FALSE return TRUE diff --git a/code/modules/research/ordnance/scipaper_partner.dm b/code/modules/research/ordnance/scipaper_partner.dm index fe302c73bb0..712ec4b4127 100644 --- a/code/modules/research/ordnance/scipaper_partner.dm +++ b/code/modules/research/ordnance/scipaper_partner.dm @@ -3,7 +3,7 @@ flufftext = "A local group of miners are looking for ways to improve their mining output. They are interested in smaller scale explosives." accepted_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.75, SCIPAPER_FUNDING_INDEX = 0.75) - boosted_nodes = list( + boostable_nodes = list( "bluespace_basic" = 2000, "NVGtech" = 1500, "practical_bluespace" = 2500, @@ -16,7 +16,7 @@ name = "Ghost Writing" flufftext = "A nearby research station ran by a very wealthy captain seems to be struggling with their scientific output. They might reward us handsomely if we ghostwrite for them." multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.25, SCIPAPER_FUNDING_INDEX = 2) - boosted_nodes = list( + boostable_nodes = list( "comp_recordkeeping" = 500, "computer_data_disks" = 500, ) @@ -29,7 +29,7 @@ /datum/experiment/ordnance/explosive/pressurebomb, /datum/experiment/ordnance/explosive/hydrogenbomb, ) - boosted_nodes = list( + boostable_nodes = list( "adv_weaponry" = 5000, "weaponry" = 2500, "sec_basic" = 1250, @@ -47,7 +47,7 @@ /datum/experiment/ordnance/gaseous/nitrous_oxide, /datum/experiment/ordnance/gaseous/bz, ) - boosted_nodes = list( + boostable_nodes = list( "cyber_organs" = 750, "cyber_organs_upgraded" = 1000, "genetics" = 500, @@ -63,7 +63,7 @@ /datum/experiment/ordnance/gaseous/noblium, /datum/experiment/ordnance/explosive/nobliumbomb, ) - boosted_nodes = list( + boostable_nodes = list( "engineering" = 5000, "adv_engi" = 5000, "emp_super" = 3000, diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 3047c3e1a9a..4ab9d73dca7 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -11,9 +11,10 @@ var/hacked = FALSE var/console_link = TRUE //allow console link. var/disabled = FALSE - var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) /// Ref to global science techweb. var/datum/techweb/stored_research + ///The item loaded inside the machine, used by experimentors and destructive analyzers only. + var/obj/item/loaded_item /obj/machinery/rnd/proc/reset_busy() busy = FALSE @@ -59,14 +60,6 @@ else return FALSE -/obj/machinery/rnd/attackby(obj/item/O, mob/user, params) - if(is_refillable() && O.is_drainable()) - return FALSE //inserting reagents into the machine - if(Insert_Item(O, user)) - return TRUE - - return ..() - /obj/machinery/rnd/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) @@ -103,36 +96,32 @@ wires.interact(user) return TRUE -//proc used to handle inserting items or reagents into rnd machines -/obj/machinery/rnd/proc/Insert_Item(obj/item/I, mob/user) - return - //whether the machine can have an item inserted in its current state. /obj/machinery/rnd/proc/is_insertion_ready(mob/user) if(panel_open) - to_chat(user, span_warning("You can't load [src] while it's opened!")) + balloon_alert(user, "panel open!") return FALSE if(disabled) - to_chat(user, span_warning("The insertion belts of [src] won't engage!")) + balloon_alert(user, "belts disabled!") return FALSE if(busy) - to_chat(user, span_warning("[src] is busy right now.")) + balloon_alert(user, "still busy!") return FALSE if(machine_stat & BROKEN) - to_chat(user, span_warning("[src] is broken.")) + balloon_alert(user, "machine broken!") return FALSE if(machine_stat & NOPOWER) - to_chat(user, span_warning("[src] has no power.")) + balloon_alert(user, "no power!") return FALSE if(loaded_item) - to_chat(user, span_warning("[src] is already loaded.")) + balloon_alert(user, "item already loaded!") return FALSE return TRUE //we eject the loaded item when deconstructing the machine /obj/machinery/rnd/on_deconstruction() if(loaded_item) - loaded_item.forceMove(loc) + loaded_item.forceMove(drop_location()) ..() /obj/machinery/rnd/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm index 2b0a294c606..469c467bc13 100644 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -10,14 +10,15 @@ WARNING("Invalid boost information for node \[[id]\]: [message]") SSresearch.invalid_node_boost[id] = message -///Returns an associative list of techweb node datums with values of the boost it gives. var/list/returned = list() -/proc/techweb_item_boost_check(obj/item/I) - if(SSresearch.techweb_boost_items[I.type]) - return SSresearch.techweb_boost_items[I.type] //It should already be formatted in node datum = list(point type = value) +///Returns an associative list of techweb node datums with values of the nodes it unlocks. +/proc/techweb_item_unlock_check(obj/item/I) + if(SSresearch.techweb_unlock_items[I.type]) + return SSresearch.techweb_unlock_items[I.type] //It should already be formatted in node datum = list(point type = value) /proc/techweb_item_point_check(obj/item/I) if(SSresearch.techweb_point_items[I.type]) return SSresearch.techweb_point_items[I.type] + return FALSE /proc/techweb_point_display_generic(pointlist) var/list/ret = list() diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index bd1e5cc4a80..8aeb63a9f8a 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -26,7 +26,7 @@ var/list/boosted_nodes = list() /// Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. var/list/hidden_nodes = list() - /// Items already deconstructed for a generic point boost, path = list(point_type = points) + /// List of items already deconstructed for research points, preventing infinite research point generation. var/list/deconstructed_items = list() /// Available research points, type = number var/list/research_points = list() @@ -400,17 +400,15 @@ LAZYINITLIST(boosted_nodes[node.id]) for(var/point_type in pointlist) boosted_nodes[node.id][point_type] = max(boosted_nodes[node.id][point_type], pointlist[point_type]) - if(node.autounlock_by_boost) - hidden_nodes -= node.id + unhide_node(node) update_node_status(node) return TRUE -/// Boosts a techweb node by using items. -/datum/techweb/proc/boost_with_item(datum/techweb_node/node, itempath) - if(!istype(node) || !ispath(itempath)) +///Removes a node from the hidden_nodes list, making it viewable and researchable (if no experiments are required). +/datum/techweb/proc/unhide_node(datum/techweb_node/node) + if(!istype(node)) return FALSE - var/list/boost_amount = node.boost_item_paths[itempath] - boost_techweb_node(node, boost_amount) + hidden_nodes -= node.id return TRUE /datum/techweb/proc/update_tiers(datum/techweb_node/base) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index f5e1481e62c..c36eb886271 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -24,8 +24,8 @@ var/list/design_ids = list() /// CALCULATED FROM OTHER NODE'S PREREQUISITIES. Associated list id = TRUE var/list/unlock_ids = list() - /// Associative list, path = list(point type = point_value) - var/list/boost_item_paths = list() + /// List of items you need to deconstruct to unlock this node. + var/list/required_items_to_unlock = list() /// Boosting this will autounlock this node var/autounlock_by_boost = TRUE /// The points cost to research the node, type = amount diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 4f1e7dd0e2a..f6a5345aaa4 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -98,6 +98,7 @@ "sec_dart", "sec_Islug", "sec_rshot", + "sec_pen", "servingtray", "shaker", "shot_glass", @@ -299,6 +300,7 @@ "plumbing_rcd_service", "plumbing_rcd_sci", "portable_chem_mixer", + "penlight", "retractor", "scalpel", "stethoscope", @@ -417,6 +419,7 @@ "medigel", "medipen_refiller", "pandemic", + "penlight_paramedic", "soda_dispenser", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -1875,6 +1878,18 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) +/datum/techweb_node/paddy + id = "mech_paddy" + display_name = "EXOSUIT: APLU \"Paddy\"" + description = "Paddy exosuit designs" + prereq_ids = list("adv_mecha", "adv_mecha_armor") + design_ids = list( + "paddyupgrade", + "mech_hydraulic_claw" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000) + /datum/techweb_node/gygax id = "mech_gygax" display_name = "EXOSUIT: Gygax" @@ -2146,7 +2161,7 @@ display_name = "Alien Technology" description = "Things used by the greys." prereq_ids = list("biotech","engineering") - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/stack/sheet/mineral/abductor, /obj/item/abductor, /obj/item/cautery/alien, @@ -2189,7 +2204,7 @@ "alien_scalpel", ) - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/abductor, /obj/item/cautery/alien, /obj/item/circuitboard/machine/abductor, @@ -2228,7 +2243,7 @@ "alien_wrench", ) - boost_item_paths = list( + required_items_to_unlock = list( /obj/item/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/crowbar/abductor, @@ -2281,12 +2296,12 @@ /datum/techweb_node/syndicate_basic/proc/register_uplink_items() SIGNAL_HANDLER UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE) - boost_item_paths = list() + required_items_to_unlock = list() for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type) var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path] if(!item.item || !item.illegal_tech) continue - boost_item_paths |= item.item //allows deconning to unlock. + required_items_to_unlock |= item.item //allows deconning to unlock. ////////////////////////B.E.P.I.S. Locked Techs//////////////////////// diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 0ababd34422..7c27399b03e 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -14,10 +14,10 @@ Burning extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/burning/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/magic/fireball.ogg', 50, TRUE) diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 8941057453b..586a33d2dff 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -15,10 +15,10 @@ Charged extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/charged/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/effects/light_flicker.ogg', 50, TRUE) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index c3586437c32..65c7199a7f0 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -14,10 +14,10 @@ Chilling extracts: create_reagents(10, INJECTABLE | DRAWABLE) /obj/item/slimecross/chilling/attack_self(mob/user) - if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10)) + if(!reagents.has_reagent(/datum/reagent/toxin/plasma, 10)) to_chat(user, span_warning("This extract needs to be full of plasma to activate!")) return - reagents.remove_reagent(/datum/reagent/toxin/plasma,10) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 10) to_chat(user, span_notice("You squeeze the extract, and it absorbs the plasma!")) playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE) diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index 5222ab3608c..da878b77b5a 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -32,11 +32,11 @@ Industrial extracts: var/IsWorking = FALSE if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 2) && plasmarequired > 1) //Can absorb as much as 2 IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,2) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 2) plasmaabsorbed += 2 else if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 1)) //Can absorb as little as 1 IsWorking = TRUE - reagents.remove_reagent(/datum/reagent/toxin/plasma,1) + reagents.remove_reagent(/datum/reagent/toxin/plasma, 1) plasmaabsorbed += 1 if(plasmaabsorbed >= plasmarequired) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index 0152b343c45..5e9045e751f 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -684,30 +684,6 @@ virus_suspectibility = 0 resulting_atoms = list(/mob/living/basic/butterfly = 3) -/datum/micro_organism/cell_line/leaper - desc = "atypical amphibian cells" - required_reagents = list( - /datum/reagent/consumable/nutriment/protein, - /datum/reagent/ants, - /datum/reagent/consumable/eggyolk, - /datum/reagent/medicine/c2/synthflesh) - - supplementary_reagents = list( - /datum/reagent/growthserum = 4, - /datum/reagent/drug/blastoff = 3, - /datum/reagent/drug/space_drugs = 2, - /datum/reagent/consumable/ethanol/eggnog = 2, - /datum/reagent/consumable/vanilla = 2, - /datum/reagent/consumable/banana = 1, - /datum/reagent/consumable/nutriment/vitamin = 1) - - suppressive_reagents = list( - /datum/reagent/toxin/cyanide = -5, - /datum/reagent/consumable/mold = -2, - /datum/reagent/toxin/spore = -1) - - resulting_atoms = list(/mob/living/simple_animal/hostile/jungle/leaper = 1) - /datum/micro_organism/cell_line/mega_arachnid desc = "pseudoarachnoid cells" required_reagents = list( diff --git a/code/modules/shuttle/battlecruiser_starfury.dm b/code/modules/shuttle/battlecruiser_starfury.dm index ab1f6802d43..d8dc3c312f7 100644 --- a/code/modules/shuttle/battlecruiser_starfury.dm +++ b/code/modules/shuttle/battlecruiser_starfury.dm @@ -171,15 +171,11 @@ notify_ghosts( "The battlecruiser has an object of interest: [our_candidate]!", source = our_candidate, - action = NOTIFY_ORBIT, - header = "Something's Interesting!" - ) + ) else notify_ghosts( "The battlecruiser has an object of interest: [spawner]!", source = spawner, - action = NOTIFY_ORBIT, - header="Something's Interesting!" - ) + ) priority_announce("Unidentified armed ship detected near the station.") diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 4065591582e..cf53fef368c 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -13,7 +13,7 @@ icon_keyboard = "tech_key" light_color = LIGHT_COLOR_CYAN req_access = list() - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON /// ID of the attached shuttle var/shuttleId /// Possible destinations of the attached shuttle diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 8bb7a3cd174..d1b30ddfad5 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -337,7 +337,7 @@ . = ..() -/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) //SKYRAT EDIT CHANGE - AUTOTRANSFER +/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) // SKYRAT EDIT CHANGE - AUTOTRANSFER - adds silent arg if(!isnum(set_coefficient)) set_coefficient = SSsecurity_level.current_security_level.shuttle_call_time_mod alert_coeff = set_coefficient @@ -358,8 +358,17 @@ else SSshuttle.emergency_last_call_loc = null - if(!silent) // SKYRAT EDIT ADDITION - priority_announce("The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergency_last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ][SSshuttle.admin_emergency_no_recall ? "\n\nWarning: Shuttle recall subroutines disabled; Recall not possible." : ""]", null, ANNOUNCER_SHUTTLECALLED, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + // SKYRAT EDIT ADDITION START + if(silent) + return + // SKYRAT EDIT ADDITION END + priority_announce( + text = "The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [(timeLeft(60 SECONDS))] minutes.[reason][SSshuttle.emergency_last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ][SSshuttle.admin_emergency_no_recall ? "\n\nWarning: Shuttle recall subroutines disabled; Recall not possible." : ""]", + title = "Emergency Shuttle Dispatched", + sound = ANNOUNCER_SHUTTLECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) /obj/docking_port/mobile/emergency/cancel(area/signalOrigin) if(mode != SHUTTLE_CALL) @@ -374,7 +383,13 @@ SSshuttle.emergency_last_call_loc = signalOrigin else SSshuttle.emergency_last_call_loc = null - priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergency_last_call_loc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, ANNOUNCER_SHUTTLERECALLED, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle has been recalled.[SSshuttle.emergency_last_call_loc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", + title = "Emergency Shuttle Recalled", + sound = ANNOUNCER_SHUTTLERECALLED, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) SSticker.emergency_reason = null @@ -463,7 +478,13 @@ mode = SHUTTLE_DOCKED setTimer(SSshuttle.emergency_dock_time) send2adminchat("Server", "The Emergency Shuttle has docked with the station.") - priority_announce("[SSshuttle.emergency] has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, ANNOUNCER_SHUTTLEDOCK, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "[SSshuttle.emergency] has docked with the station. You have [DisplayTimeText(SSshuttle.emergency_dock_time)] to board the emergency shuttle.", + title = "Emergency Shuttle Arrival", + sound = ANNOUNCER_SHUTTLEDOCK, + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) ShuttleDBStuff() addtimer(CALLBACK(src, PROC_REF(announce_shuttle_events)), 20 SECONDS) @@ -516,7 +537,12 @@ mode = SHUTTLE_ESCAPE launch_status = ENDGAME_LAUNCHED setTimer(SSshuttle.emergency_escape_time * engine_coeff) - priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle has left the station. Estimate [timeLeft(60 SECONDS)] minutes until the shuttle docks at [command_name()].", + title = "Emergency Shuttle Departure", + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, poll_hearts)) bolt_all_doors() //SKYRAT EDIT ADDITION SSmapping.mapvote() //If no map vote has been run yet, start one. @@ -584,7 +610,12 @@ mode = SHUTTLE_ESCAPE launch_status = ENDGAME_LAUNCHED setTimer(SSshuttle.emergency_escape_time) - priority_announce("The Emergency Shuttle is preparing for direct jump. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, ANNOUNCEMENT_TYPE_PRIORITY, color_override = "orange") + priority_announce( + text = "The emergency shuttle is preparing for direct jump. Estimate [timeLeft(60 SECONDS)] minutes until the shuttle docks at [command_name()].", + title = "Emergency Shuttle Transit Failure", + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "orange", + ) ///Generate a list of events to run during the departure /obj/docking_port/mobile/emergency/proc/setup_shuttle_events() diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 8e1cb80adda..548c3a52b57 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -1,38 +1,38 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /mob/living, - /obj/structure/blob, - /obj/effect/rune, - /obj/item/disk/nuclear, - /obj/machinery/nuclearbomb, - /obj/item/beacon, - /obj/narsie, - /obj/tear_in_reality, - /obj/machinery/teleport/station, - /obj/machinery/teleport/hub, - /obj/machinery/quantumpad, - /obj/effect/mob_spawn, - /obj/effect/hierophant, - /obj/structure/receiving_pad, - /obj/item/warp_cube, - /obj/machinery/rnd/production, //print tracking beacons, send shuttle - /obj/machinery/autolathe, //same - /obj/projectile/beam/wormhole, - /obj/effect/portal, - /obj/item/shared_storage, - /obj/structure/extraction_point, - /obj/machinery/syndicatebomb, - /obj/item/hilbertshotel, - /obj/item/swapper, /obj/docking_port, - /obj/machinery/launchpad, - /obj/machinery/exodrone_launcher, - /obj/machinery/disposal, - /obj/structure/disposalpipe, - /obj/item/mail, - /obj/machinery/camera, + /obj/effect/hierophant, + /obj/effect/mob_spawn, + /obj/effect/portal, + /obj/effect/rune, + /obj/item/beacon, + /obj/item/disk/nuclear, /obj/item/gps, + /obj/item/hilbertshotel, + /obj/item/mail, + /obj/item/shared_storage, + /obj/item/swapper, + /obj/item/warp_cube, + /obj/machinery/autolathe, // In case you manage to get it to print a beacon while in transit + /obj/machinery/camera, + /obj/machinery/disposal, + /obj/machinery/exodrone_launcher, + /obj/machinery/fax, + /obj/machinery/launchpad, + /obj/machinery/nuclearbomb, + /obj/machinery/quantumpad, + /obj/machinery/rnd/production, + /obj/machinery/syndicatebomb, + /obj/machinery/teleport/hub, + /obj/machinery/teleport/station, + /obj/narsie, + /obj/projectile/beam/wormhole, + /obj/structure/blob, /obj/structure/checkoutmachine, - /obj/machinery/fax + /obj/structure/disposalpipe, + /obj/structure/extraction_point, + /obj/structure/guardian_beacon, + /obj/tear_in_reality, ))) /// How many goody orders we can fit in a lockbox before we upgrade to a crate @@ -160,7 +160,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/price var/pack_cost var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties - var/list/rejected_orders = list() //list of all orders that exceeded the available budget and are uncancelable + var/list/clean_up_orders = list() // orders to remove since we are done with them var/list/forced_briefcases = list() // SKYRAT EDIT ADDITION for(var/datum/supply_order/spawning_order in SSshuttle.shopping_list) @@ -168,7 +168,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( break price = spawning_order.get_final_cost() - //department orders EARN money for cargo, not the other way around + // department orders EARN money for cargo, not the other way around var/datum/bank_account/paying_for_this if(!spawning_order.department_destination && spawning_order.charge_on_purchase) if(spawning_order.paying_account) //Someone paid out of pocket @@ -187,7 +187,8 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( if(spawning_order.paying_account) paying_for_this.bank_card_talk("Cargo order #[spawning_order.id] rejected due to lack of funds. Credits required: [price]") if(!spawning_order.can_be_cancelled) //only if it absolutly cannot be canceled by the player do we cancel it for them - rejected_orders += spawning_order + SSshuttle.shopping_list -= spawning_order + clean_up_orders += spawning_order continue pack_cost = spawning_order.pack.get_cost() @@ -203,9 +204,6 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo.adjust_money(price - pack_cost) //Cargo gets the handling fee value += pack_cost - SSshuttle.shopping_list -= spawning_order - SSshuttle.order_history += spawning_order - QDEL_NULL(spawning_order.applied_coupon) if(!spawning_order.pack.goody && !(spawning_order?.paying_account in forced_briefcases)) // SKYRAT EDIT CHANGE - ORIGINAL : if(!spawning_order.pack.goody) var/obj/structure/closet/crate = spawning_order.generate(pick_n_take(empty_turfs)) @@ -220,10 +218,9 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( message_admins("\A [spawning_order.pack.name] ordered by [ADMIN_LOOKUPFLW(spawning_order.orderer_ckey)], paid by [from_whom] has shipped.") purchases++ - //clear out all rejected uncancellable orders - for(var/datum/supply_order/rejected_order in rejected_orders) - SSshuttle.shopping_list -= rejected_order - qdel(rejected_order) + // done dealing with order. Time to remove & delete it + SSshuttle.shopping_list -= spawning_order + clean_up_orders += spawning_order // we handle packing all the goodies last, since the type of crate we use depends on how many goodies they ordered. If it's more than GOODY_FREE_SHIPPING_MAX // then we send it in a crate (including the CRATE_TAX cost), otherwise send it in a free shipping case @@ -266,7 +263,10 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( order.generateCombo(miscboxes[miscbox], miscbox, misc_contents[miscbox], misc_costs[miscbox]) qdel(order) - SSeconomy.import_total += value + //clean up all dealt with orders + for(var/datum/supply_order/completed_order in clean_up_orders) + qdel(completed_order) + var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO) @@ -301,7 +301,6 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( msg += export_text + "\n" cargo_budget.adjust_money(report.total_value[exported_datum]) - SSeconomy.export_total += (cargo_budget.account_balance - presale_points) SSshuttle.centcom_message = msg investigate_log("contents sold for [cargo_budget.account_balance - presale_points] credits. Contents: [report.exported_atoms ? report.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) diff --git a/code/modules/spells/spell_types/conjure/_conjure.dm b/code/modules/spells/spell_types/conjure/_conjure.dm index 3afe7c52557..10b14bd47d5 100644 --- a/code/modules/spells/spell_types/conjure/_conjure.dm +++ b/code/modules/spells/spell_types/conjure/_conjure.dm @@ -44,7 +44,7 @@ if (spawn_place.overfloor_placed) spawn_place.ChangeTurf(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) else - spawn_place.PlaceOnTop(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) + spawn_place.place_on_top(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) return var/turf/open/open_turf = spawn_place open_turf.replace_floor(summoned_object_type, flags = CHANGETURF_INHERIT_AIR) @@ -61,3 +61,28 @@ /// Called on atoms summoned after they are created, allows extra variable editing and such of created objects /datum/action/cooldown/spell/conjure/proc/post_summon(atom/summoned_object, atom/cast_on) return + +///limits the amount of summons +/datum/action/cooldown/spell/conjure/limit_summons + ///max number of after images + var/max_summons + ///How many clones do we have summoned + var/number_of_summons = 0 + +/datum/action/cooldown/spell/conjure/limit_summons/can_cast_spell(feedback = TRUE) + . = ..() + if(!.) + return FALSE + if(number_of_summons >= max_summons) + return FALSE + return TRUE + +/datum/action/cooldown/spell/conjure/limit_summons/post_summon(atom/summoned_object, atom/cast_on) + RegisterSignals(summoned_object, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(delete_copy)) + number_of_summons++ + +/datum/action/cooldown/spell/conjure/limit_summons/proc/delete_copy(datum/source) + SIGNAL_HANDLER + + UnregisterSignal(source, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH)) + number_of_summons-- diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index 72441362b65..fa401c3b432 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -69,7 +69,7 @@ return FALSE if(isguardian(cast_on)) - var/mob/living/simple_animal/hostile/guardian/stand = cast_on + var/mob/living/basic/guardian/stand = cast_on if(stand.summoner && stand.summoner == owner) to_chat(owner, span_warning("Swapping minds with your own guardian would just put you back into your own head!")) return FALSE @@ -96,7 +96,7 @@ var/mob/living/to_swap = cast_on if(isguardian(cast_on)) - var/mob/living/simple_animal/hostile/guardian/stand = cast_on + var/mob/living/basic/guardian/stand = cast_on if(stand.summoner) to_swap = stand.summoner diff --git a/code/modules/spells/spell_types/self/personality_commune.dm b/code/modules/spells/spell_types/self/personality_commune.dm deleted file mode 100644 index cd10c2b7736..00000000000 --- a/code/modules/spells/spell_types/self/personality_commune.dm +++ /dev/null @@ -1,56 +0,0 @@ -// This can probably be changed to use mind linker at some point -/datum/action/cooldown/spell/personality_commune - name = "Personality Commune" - desc = "Sends thoughts to your alternate consciousness." - button_icon_state = "telepathy" - cooldown_time = 0 SECONDS - spell_requirements = NONE - - /// Fluff text shown when a message is sent to the pair - var/fluff_text = span_boldnotice("You hear an echoing voice in the back of your head...") - /// The message to send to the corresponding person on cast - var/to_send - -/datum/action/cooldown/spell/personality_commune/New(Target) - . = ..() - if(!istype(target, /datum/brain_trauma/severe/split_personality)) - stack_trace("[type] was created on a target that isn't a /datum/brain_trauma/severe/split_personality, this doesn't work.") - qdel(src) - -/datum/action/cooldown/spell/personality_commune/is_valid_target(atom/cast_on) - return isliving(cast_on) - -/datum/action/cooldown/spell/personality_commune/before_cast(atom/cast_on) - . = ..() - if(. & SPELL_CANCEL_CAST) - return - - var/datum/brain_trauma/severe/split_personality/trauma = target - if(!istype(trauma)) // hypothetically impossible but you never know - return . | SPELL_CANCEL_CAST - - to_send = tgui_input_text(cast_on, "What would you like to tell your other self?", "Commune") - if(QDELETED(src) || QDELETED(trauma) || QDELETED(cast_on) || QDELETED(trauma.owner) || !can_cast_spell()) - return . | SPELL_CANCEL_CAST - if(!to_send) - reset_cooldown() - return . | SPELL_CANCEL_CAST - -// Pillaged and adapted from telepathy code -/datum/action/cooldown/spell/personality_commune/cast(mob/living/cast_on) - . = ..() - var/datum/brain_trauma/severe/split_personality/trauma = target - - var/user_message = span_boldnotice("You concentrate and send thoughts to your other self:") - var/user_message_body = span_notice("[to_send]") - - to_chat(cast_on, "[user_message] [user_message_body]") - - trauma.owner.balloon_alert(trauma.owner, "you hear a voice") - to_chat(trauma.owner, "[fluff_text] [user_message_body]") - - log_directed_talk(cast_on, trauma.owner, to_send, LOG_SAY, "[name]") - for(var/dead_mob in GLOB.dead_mob_list) - if(!isobserver(dead_mob)) - continue - to_chat(dead_mob, "[FOLLOW_LINK(dead_mob, cast_on)] [span_boldnotice("[cast_on] [name]:")] [span_notice("\"[to_send]\" to")] [span_name("[trauma]")]") diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index 5aecd863bce..59c9ffdde3b 100644 --- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm @@ -128,7 +128,7 @@ new gib_type(get_turf(possible_vent)) playsound(possible_vent, 'sound/effects/reee.ogg', 75, TRUE) - priority_announce("We detected a pipe blockage around [get_area(get_turf(cast_on))], please dispatch someone to investigate.", "Central Command") + priority_announce("We detected a pipe blockage around [get_area(get_turf(cast_on))], please dispatch someone to investigate.", "[command_name()]") // Gib our caster, and make sure to leave nothing behind // (If we leave something behind, it'll drop on the turf of the pipe, which is kinda wrong.) cast_on.investigate_log("has been gibbed by shapeshifting while ventcrawling.", INVESTIGATE_DEATHS) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index ec29b326ae9..5795effc2b6 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -243,7 +243,12 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) point.Beam(target, icon_state = "bsa_beam", time = 5 SECONDS, maxdistance = world.maxx) //ZZZAP new /obj/effect/temp_visual/bsa_splash(point, dir) - notify_ghosts("The Bluespace Artillery has been fired!", source = bullseye, header = "KABOOM!") + notify_ghosts( + "The Bluespace Artillery has been fired!", + source = bullseye, + header = "KABOOM!", + ) + if(!blocker) message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") user.log_message("has launched an artillery strike targeting [AREACOORD(bullseye)].", LOG_GAME) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index a8f35aaa968..e6f0d99ce95 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -175,8 +175,8 @@ var/unarmed_damage_low = 1 ///Highest possible punch damage this bodypart can ive. var/unarmed_damage_high = 1 - ///Damage at which attacks from this bodypart will stun - var/unarmed_stun_threshold = 2 + ///Determines the accuracy bonus, armor penetration and knockdown probability. + var/unarmed_effectiveness = 10 /// How many pixels this bodypart will offset the top half of the mob, used for abnormally sized torsos and legs var/top_offset = 0 diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 30fb63a8034..f6d890c646a 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -23,7 +23,7 @@ unarmed_miss_sound = 'sound/weapons/bite.ogg' unarmed_damage_low = 1 // Yeah, biteing is pretty weak, blame the monkey super-nerf unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 bodypart_trait_source = HEAD_TRAIT var/mob/living/brain/brainmob //The current occupant. diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index f80364fcb5d..c93fdf10b47 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -215,3 +215,5 @@ . = "#fff4e6" if("orange") . = "#ffc905" + if("green") + . = "#a8e61d" diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 050a34efd38..247441c3c69 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -109,9 +109,8 @@ body_damage_coeff = 0.75 can_be_disabled = TRUE unarmed_attack_verb = "punch" /// The classic punch, wonderfully classic and completely random - unarmed_damage_low = 1 + unarmed_damage_low = 5 unarmed_damage_high = 10 - unarmed_stun_threshold = 10 body_zone = BODY_ZONE_L_ARM /// Datum describing how to offset things worn on the hands of this arm, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_glove_offset @@ -216,7 +215,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 1 /// monkey punches must be really weak, considering they bite people instead and their bites are weak as hell. unarmed_damage_high = 2 - unarmed_stun_threshold = 3 + unarmed_effectiveness = 0 appendage_noun = "paw" /obj/item/bodypart/arm/left/alien @@ -321,7 +320,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 1 unarmed_damage_high = 2 - unarmed_stun_threshold = 3 + unarmed_effectiveness = 0 appendage_noun = "paw" /obj/item/bodypart/arm/right/alien @@ -350,9 +349,9 @@ unarmed_attack_effect = ATTACK_EFFECT_KICK body_zone = BODY_ZONE_L_LEG unarmed_attack_verb = "kick" // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. - unarmed_damage_low = 2 + unarmed_damage_low = 7 unarmed_damage_high = 15 - unarmed_stun_threshold = 10 + unarmed_effectiveness = 15 /// Datum describing how to offset things worn on the foot of this leg, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_foot_offset @@ -440,7 +439,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 2 unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 /obj/item/bodypart/leg/left/alien icon = 'icons/mob/human/species/alien/bodyparts.dmi' @@ -534,7 +533,7 @@ dmg_overlay_type = SPECIES_MONKEY unarmed_damage_low = 2 unarmed_damage_high = 3 - unarmed_stun_threshold = 4 + unarmed_effectiveness = 0 /obj/item/bodypart/leg/right/alien icon = 'icons/mob/human/species/alien/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 6112d7c607e..5ce136cdf63 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -1,51 +1,47 @@ ///SNAIL /obj/item/bodypart/head/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL is_dimorphic = FALSE burn_modifier = 2 head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/chest/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL is_dimorphic = FALSE burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) wing_types = NONE /obj/item/bodypart/arm/left/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL unarmed_attack_verb = "slap" unarmed_attack_effect = ATTACK_EFFECT_DISARM - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_high = 0.5 //snails are soft and squishy burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/arm/right/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL unarmed_attack_verb = "slap" unarmed_attack_effect = ATTACK_EFFECT_DISARM - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_high = 0.5 burn_modifier = 2 + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/left/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_high = 0.5 burn_modifier = 2 - // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT - Moved the movespeed to the shell. + // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT REMOVAL - Moved the movespeed to the shell. + biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/right/snail - biological_state = (BIO_BLOODED|BIO_FLESH) //SKYRAT EDIT - Roundstart Snails - Now invertebrates! limb_id = SPECIES_SNAIL - unarmed_damage_low = 1 //SKYRAT EDIT - Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. - unarmed_damage_high = 5 //snails are soft and squishy //SKYRAT EDIT - Roundstart Snails - A Bit More Damage. - ORIGINAL: unarmed_damage_high = 0.5 //snails are soft and squishy + unarmed_damage_high = 0.5 burn_modifier = 2 - // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT - Moved the movespeed to the shell. + // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT REMOVAL - Moved the movespeed to the shell. + biological_state = (BIO_FLESH|BIO_BLOODED) ///ABDUCTOR /obj/item/bodypart/head/abductor @@ -96,25 +92,25 @@ wing_types = NONE /obj/item/bodypart/arm/left/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/arm/right/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/leg/left/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage /obj/item/bodypart/leg/right/jelly - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null burn_modifier = 0.5 // = 1/2x generic burn damage @@ -133,11 +129,11 @@ wing_types = NONE /obj/item/bodypart/arm/left/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/arm/right/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/leg/left/slime @@ -145,7 +141,7 @@ limb_id = SPECIES_SLIMEPERSON /obj/item/bodypart/leg/right/slime - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_SLIMEPERSON ///LUMINESCENT @@ -162,19 +158,19 @@ wing_types = NONE /obj/item/bodypart/arm/left/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/arm/right/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/leg/left/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT /obj/item/bodypart/leg/right/luminescent - biological_state = (BIO_FLESH|BIO_BLOODED|BIO_JOINTED) + biological_state = (BIO_FLESH|BIO_BLOODED) limb_id = SPECIES_LUMINESCENT ///ZOMBIE @@ -382,21 +378,21 @@ limb_id = SPECIES_MUSHROOM unarmed_damage_low = 6 unarmed_damage_high = 14 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 15 burn_modifier = 1.25 /obj/item/bodypart/arm/right/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 6 unarmed_damage_high = 14 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 15 burn_modifier = 1.25 /obj/item/bodypart/leg/left/mushroom limb_id = SPECIES_MUSHROOM unarmed_damage_low = 9 unarmed_damage_high = 21 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 20 burn_modifier = 1.25 speed_modifier = 0.75 //big big fungus @@ -404,7 +400,7 @@ limb_id = SPECIES_MUSHROOM unarmed_damage_low = 9 unarmed_damage_high = 21 - unarmed_stun_threshold = 14 + unarmed_effectiveness = 20 burn_modifier = 1.25 speed_modifier = 0.75 //big fungus big fungus @@ -499,7 +495,7 @@ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING) unarmed_damage_low = 5 unarmed_damage_high = 14 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 20 /obj/item/bodypart/arm/left/golem/Initialize(mapload) held_hand_offset = new( @@ -533,7 +529,7 @@ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING) unarmed_damage_low = 5 unarmed_damage_high = 14 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 20 /obj/item/bodypart/arm/right/golem/Initialize(mapload) held_hand_offset = new( @@ -566,7 +562,7 @@ dmg_overlay_type = null unarmed_damage_low = 7 unarmed_damage_high = 21 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 25 /obj/item/bodypart/leg/right/golem icon = 'icons/mob/human/species/golems.dmi' @@ -579,7 +575,7 @@ dmg_overlay_type = null unarmed_damage_low = 7 unarmed_damage_high = 21 - unarmed_stun_threshold = 11 + unarmed_effectiveness = 25 ///flesh diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 5b78cb30796..a3feba76fec 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -181,7 +181,11 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) SEND_SIGNAL(src, COMSIG_ORGAN_REMOVED, organ_owner) SEND_SIGNAL(organ_owner, COMSIG_CARBON_LOSE_ORGAN, src, special) - if(!IS_ROBOTIC_ORGAN(src) && !(item_flags & NO_BLOOD_ON_ITEM) && !QDELING(src)) + // We don't need to readd things to the organ if it's getting deleted + if(QDELING(src)) + return + + if(!IS_ROBOTIC_ORGAN(src) && !(item_flags & NO_BLOOD_ON_ITEM)) AddElement(/datum/element/decal/blood) var/list/diseases = organ_owner.get_static_viruses() diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 0987df92bd9..921acf808ed 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -74,15 +74,21 @@ return if(implant_time) - user.visible_message( "[user] prepares to use [src] on [target].", "You begin to prepare to use [src] on [target].") - if(!do_after(user, (8 SECONDS * surgery_speed), target)) + user.visible_message( + span_notice("[user] prepares to use [src] on [target]."), + span_notice("You begin to prepare to use [src] on [target]."), + ) + if(!do_after(user, (implant_time * surgery_speed), target)) return if(target != user) log_combat(user, target, "autosurgeon implanted [stored_organ] into", "[src]", "in [AREACOORD(target)]") user.visible_message(span_notice("[user] presses a button on [src] as it plunges into [target]'s body."), span_notice("You press a button on [src] as it plunges into [target]'s body.")) else - user.visible_message(span_notice("[user] pressses a button on [src] as it plunges into [user.p_their()] body."), "You press a button on [src] as it plunges into your body.") + user.visible_message( + span_notice("[user] pressses a button on [src] as it plunges into [user.p_their()] body."), + span_notice("You press a button on [src] as it plunges into your body."), + ) stored_organ.Insert(target)//insert stored organ into the user stored_organ = null diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm index 04f707dff8d..1d2378a58f9 100644 --- a/code/modules/surgery/organs/external/spines.dm +++ b/code/modules/surgery/organs/external/spines.dm @@ -20,6 +20,7 @@ . = ..() if(.) paired_tail = locate(/obj/item/organ/external/tail/lizard) in receiver.organs //We want specifically a lizard tail, so we don't use the slot. + paired_tail?.paired_spines = src /obj/item/organ/external/spines/Remove(mob/living/carbon/organ_owner, special, moving) . = ..() @@ -38,7 +39,7 @@ return GLOB.sprite_accessories["spines"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.spines_list /datum/bodypart_overlay/mutant/spines/get_base_icon_state() - return (wagging ? "wagging" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging + return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index a5f8543f1e7..e21f277ecf6 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -33,7 +33,7 @@ /obj/item/organ/external/tail/Remove(mob/living/carbon/organ_owner, special, moving) if(wag_flags & WAG_WAGGING) - wag(FALSE) + wag(organ_owner, start = FALSE) return ..() @@ -46,30 +46,42 @@ organ_owner.add_mood_event("tail_lost", /datum/mood_event/tail_lost) organ_owner.add_mood_event("tail_balance_lost", /datum/mood_event/tail_balance_lost) - -/obj/item/organ/external/tail/proc/wag(mob/user, start = TRUE, stop_after = 0) +/obj/item/organ/external/tail/proc/wag(mob/living/carbon/organ_owner, start = TRUE, stop_after = 0) if(!(wag_flags & WAG_ABLE)) return if(start) - start_wag() - if(stop_after) - addtimer(CALLBACK(src, PROC_REF(wag), FALSE), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) + if(start_wag(organ_owner) && stop_after) + addtimer(CALLBACK(src, PROC_REF(wag), organ_owner, FALSE), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) else - stop_wag() - owner.update_body() // SKYRAT EDIT - Golden update this in your upcoming tail refactor please :) - Original: owner.update_body_parts() + stop_wag(organ_owner) ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later -/obj/item/organ/external/tail/proc/start_wag() +/obj/item/organ/external/tail/proc/start_wag(mob/living/carbon/organ_owner) + if(wag_flags & WAG_WAGGING) // we are already wagging + return FALSE + if(organ_owner.stat == DEAD || organ_owner != owner) // no wagging when owner is dead or tail has been disembodied + return FALSE + var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay wag_flags |= WAG_WAGGING accessory.wagging = TRUE + organ_owner.update_body_parts() + RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(stop_wag)) + return TRUE ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later -/obj/item/organ/external/tail/proc/stop_wag() +/obj/item/organ/external/tail/proc/stop_wag(mob/living/carbon/organ_owner) + SIGNAL_HANDLER + var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay wag_flags &= ~WAG_WAGGING accessory.wagging = FALSE + if(isnull(organ_owner)) + return + + organ_owner.update_body_parts() + UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) ///Tail parent type (which is MONKEEEEEEEEEEE by default), with wagging functionality /datum/bodypart_overlay/mutant/tail @@ -136,18 +148,16 @@ paired_spines = null /obj/item/organ/external/tail/lizard/start_wag() - . = ..() - if(paired_spines) var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay accessory.wagging = TRUE + return ..() /obj/item/organ/external/tail/lizard/stop_wag() - . = ..() - if(paired_spines) var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay accessory.wagging = FALSE + return ..() ///Lizard tail bodypart overlay datum /datum/bodypart_overlay/mutant/tail/lizard diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index bb02c8b9ef9..ee87d674dc4 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -46,7 +46,11 @@ if(owner) ADD_TRAIT(owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) owner.med_hud_set_status() - notify_ghosts("[owner] has developed spontaneous appendicitis!", source = owner, action = NOTIFY_ORBIT, header = "Whoa, Sick!") + notify_ghosts( + "[owner] has developed spontaneous appendicitis!", + source = owner, + header = "Whoa, Sick!", + ) /obj/item/organ/internal/appendix/proc/inflamation(seconds_per_tick) var/mob/living/carbon/organ_owner = owner diff --git a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm index 03b076b1b2a..ede8dfa1e6b 100644 --- a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm +++ b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm @@ -2,7 +2,7 @@ /obj/item/organ/internal/appendix/golem name = "internal forge" desc = "This expanded digestive chamber allows golems to smelt minerals, provided that they are immersed in lava." - icon_state = "ethereal_heart" + icon_state = "ethereal_heart-off" color = COLOR_GOLEM_GRAY organ_flags = ORGAN_MINERAL /// Action which performs smelting diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 486284b8b6d..9e4c544d338 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -430,7 +430,7 @@ if(ishuman(target)) var/mob/living/carbon/human/human_target = target - if(human_target.check_shields(source, punch_damage, "[source]'s' [picked_hit_type]")) + if(human_target.check_block(source, punch_damage, "[source]'s' [picked_hit_type]")) source.do_attack_animation(target) playsound(living_target.loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) log_combat(source, target, "attempted to [picked_hit_type]", "muscle implant") diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm index 352d4237cc0..869d4cc1c9e 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm @@ -12,8 +12,24 @@ name = "HUD implant" desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." slot = ORGAN_SLOT_HUD + actions_types = list(/datum/action/item_action/toggle_hud) var/HUD_type = 0 var/HUD_trait = null + /// Whether the HUD implant is on or off + var/toggled_on = TRUE + + +/obj/item/organ/internal/cyberimp/eyes/hud/proc/toggle_hud(mob/living/carbon/eye_owner) + if(toggled_on) + if(HUD_type) + var/datum/atom_hud/hud = GLOB.huds[HUD_type] + hud.hide_from(eye_owner) + toggled_on = FALSE + else + if(HUD_type) + var/datum/atom_hud/hud = GLOB.huds[HUD_type] + hud.show_to(eye_owner) + toggled_on = TRUE /obj/item/organ/internal/cyberimp/eyes/hud/Insert(mob/living/carbon/eye_owner, special = FALSE, drop_if_replaced = TRUE) . = ..() @@ -24,6 +40,7 @@ hud.show_to(eye_owner) if(HUD_trait) ADD_TRAIT(eye_owner, HUD_trait, ORGAN_TRAIT) + toggled_on = TRUE /obj/item/organ/internal/cyberimp/eyes/hud/Remove(mob/living/carbon/eye_owner, special = FALSE) . = ..() @@ -32,6 +49,7 @@ hud.hide_from(eye_owner) if(HUD_trait) REMOVE_TRAIT(eye_owner, HUD_trait, ORGAN_TRAIT) + toggled_on = FALSE /obj/item/organ/internal/cyberimp/eyes/hud/medical name = "Medical HUD implant" diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 1195c15c56b..3262288b6cd 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -427,13 +427,13 @@ /// base icon state for eye overlays var/base_eye_state = "eyes_glow_gs" /// Whether or not to match the eye color to the light or use a custom selection - var/eye_color_mode = MATCH_LIGHT_COLOR + var/eye_color_mode = USE_CUSTOM_COLOR /// The selected color for the light beam itself - var/current_color_string = "#ffffff" + var/light_color_string = "#ffffff" /// The custom selected eye color for the left eye. Defaults to the mob's natural eye color - var/current_left_color_string + var/left_eye_color_string /// The custom selected eye color for the right eye. Defaults to the mob's natural eye color - var/current_right_color_string + var/right_eye_color_string /obj/item/organ/internal/eyes/robotic/glow/Initialize(mapload) . = ..() @@ -453,9 +453,9 @@ /// Set the initial color of the eyes on insert to be the mob's previous eye color. /obj/item/organ/internal/eyes/robotic/glow/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE) . = ..() - current_color_string = old_eye_color_left - current_left_color_string = old_eye_color_left - current_right_color_string = old_eye_color_right + left_eye_color_string = old_eye_color_left + right_eye_color_string = old_eye_color_right + update_mob_eye_color(eye_recipient) /obj/item/organ/internal/eyes/robotic/glow/on_insert(mob/living/carbon/eye_recipient) . = ..() @@ -464,7 +464,8 @@ /obj/item/organ/internal/eyes/robotic/glow/on_remove(mob/living/carbon/eye_owner) deactivate(eye_owner, close_ui = TRUE) - eye.forceMove(src) + if(!QDELETED(eye)) + eye.forceMove(src) return ..() /obj/item/organ/internal/eyes/robotic/glow/ui_state(mob/user) @@ -493,10 +494,10 @@ data["eyeColor"] = list( mode = eye_color_mode, hasOwner = owner ? TRUE : FALSE, - left = current_left_color_string, - right = current_right_color_string, + left = left_eye_color_string, + right = right_eye_color_string, ) - data["lightColor"] = current_color_string + data["lightColor"] = light_color_string data["range"] = eye.light_range return data @@ -516,7 +517,7 @@ usr, "Choose eye color color:", "High Luminosity Eyes Menu", - current_color_string + light_color_string ) as color|null if(new_color) var/to_update = params["to_update"] @@ -547,9 +548,10 @@ * Turns on the attached flashlight object, updates the mob overlay to be added. */ /obj/item/organ/internal/eyes/robotic/glow/proc/activate() - eye.light_on = TRUE - if(eye.light_range) // at range 0 we are just going to make the eyes glow emissively, no light overlay + if(eye.light_range) eye.set_light_on(TRUE) + else + eye.light_on = TRUE // at range 0 we are just going to make the eyes glow emissively, no light overlay update_mob_eye_color() /** @@ -611,12 +613,12 @@ newcolor_string = newcolor switch(to_update) if(UPDATE_LIGHT) - current_color_string = newcolor_string + light_color_string = newcolor_string eye.set_light_color(newcolor_string) if(UPDATE_EYES_LEFT) - current_left_color_string = newcolor_string + left_eye_color_string = newcolor_string if(UPDATE_EYES_RIGHT) - current_right_color_string = newcolor_string + right_eye_color_string = newcolor_string update_mob_eye_color() @@ -648,11 +650,11 @@ /obj/item/organ/internal/eyes/robotic/glow/proc/update_mob_eye_color(mob/living/carbon/eye_owner = owner) switch(eye_color_mode) if(MATCH_LIGHT_COLOR) - eye_color_left = current_color_string - eye_color_right = current_color_string + eye_color_left = light_color_string + eye_color_right = light_color_string if(USE_CUSTOM_COLOR) - eye_color_left = current_left_color_string - eye_color_right = current_right_color_string + eye_color_left = left_eye_color_string + eye_color_right = right_eye_color_string if(QDELETED(eye_owner) || !ishuman(eye_owner)) //Other carbon mobs don't have eye color. return diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index fb97ca7eda0..8a5646d1814 100644 --- a/code/modules/surgery/organs/internal/heart/_heart.dm +++ b/code/modules/surgery/organs/internal/heart/_heart.dm @@ -10,54 +10,84 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = 2.5 * STANDARD_ORGAN_DECAY //designed to fail around 6 minutes after death - low_threshold_passed = "Prickles of pain appear then die out from within your chest..." - high_threshold_passed = "Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before." - now_fixed = "Your heart begins to beat again." - high_threshold_cleared = "The pain in your chest has died down, and your breathing becomes more relaxed." + low_threshold_passed = span_info("Prickles of pain appear then die out from within your chest...") + high_threshold_passed = span_warning("Something inside your chest hurts, and the pain isn't subsiding. You notice yourself breathing far faster than before.") + now_fixed = span_info("Your heart begins to beat again.") + high_threshold_cleared = span_info("The pain in your chest has died down, and your breathing becomes more relaxed.") - // Heart attack code is in code/modules/mob/living/carbon/human/life.dm - var/beating = TRUE attack_verb_continuous = list("beats", "thumps") attack_verb_simple = list("beat", "thump") - var/beat = BEAT_NONE//is this mob having a heatbeat sound played? if so, which? - var/failed = FALSE //to prevent constantly running failing code - var/operated = FALSE //whether the heart's been operated on to fix some of its damages + + // Heart attack code is in code/modules/mob/living/carbon/human/life.dm + + /// Whether the heart is currently beating. + /// Do not set this directly. Use Restart() and Stop() instead. + VAR_PRIVATE/beating = TRUE + + /// is this mob having a heatbeat sound played? if so, which? + var/beat = BEAT_NONE + /// whether the heart's been operated on to fix some of its damages + var/operated = FALSE /obj/item/organ/internal/heart/update_icon_state() + . = ..() icon_state = "[base_icon_state]-[beating ? "on" : "off"]" - return ..() /obj/item/organ/internal/heart/Remove(mob/living/carbon/heartless, special = 0) . = ..() if(!special) - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 120) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 12 SECONDS) + beat = BEAT_NONE + owner?.stop_sound_channel(CHANNEL_HEARTBEAT) /obj/item/organ/internal/heart/proc/stop_if_unowned() - if(!owner) + if(QDELETED(src)) + return + if(IS_ROBOTIC_ORGAN(src)) + return + if(isnull(owner)) Stop() /obj/item/organ/internal/heart/attack_self(mob/user) - ..() + . = ..() + if(.) + return + if(!beating) - user.visible_message("[user] squeezes [src] to \ - make it beat again!",span_notice("You squeeze [src] to make it beat again!")) + user.visible_message( + span_notice("[user] squeezes [src] to make it beat again!"), + span_notice("You squeeze [src] to make it beat again!"), + ) Restart() - addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 80) + addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 8 SECONDS) + return TRUE /obj/item/organ/internal/heart/proc/Stop() + if(!beating) + return FALSE + beating = FALSE update_appearance() + beat = BEAT_NONE + owner?.stop_sound_channel(CHANNEL_HEARTBEAT) return TRUE /obj/item/organ/internal/heart/proc/Restart() + if(beating) + return FALSE + beating = TRUE update_appearance() return TRUE /obj/item/organ/internal/heart/OnEatFrom(eater, feeder) . = ..() - beating = FALSE - update_appearance() + Stop() + +/// Checks if the heart is beating. +/// Can be overridden to add more conditions for more complex hearts. +/obj/item/organ/internal/heart/proc/is_beating() + return beating /obj/item/organ/internal/heart/on_life(seconds_per_tick, times_fired) ..() @@ -66,34 +96,32 @@ if(!owner.needs_heart()) return - if(owner.client && beating) - failed = FALSE - var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) - var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE) + // Handle "sudden" heart attack + if(!beating || (organ_flags & ORGAN_FAILING)) + if(owner.can_heartattack() && Stop()) + if(owner.stat == CONSCIOUS) + owner.visible_message(span_danger("[owner] clutches at [owner.p_their()] chest as if [owner.p_their()] heart is stopping!")) + to_chat(owner, span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!")) + return - if(owner.health <= owner.crit_threshold && beat != BEAT_SLOW) + // Beyond deals with sound effects, so nothing needs to be done if no client + if(isnull(owner.client)) + return + + if(owner.stat == SOFT_CRIT) + if(beat != BEAT_SLOW) beat = BEAT_SLOW - owner.playsound_local(get_turf(owner), slowbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) to_chat(owner, span_notice("You feel your heart slow down...")) - if(beat == BEAT_SLOW && owner.health > owner.crit_threshold) - owner.stop_sound_channel(CHANNEL_HEARTBEAT) - beat = BEAT_NONE + SEND_SOUND(owner, sound('sound/health/slowbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) - if(owner.has_status_effect(/datum/status_effect/jitter)) - if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW)) - owner.playsound_local(get_turf(owner), fastbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) - beat = BEAT_FAST + else if(owner.stat == HARD_CRIT) + if(beat != BEAT_FAST && owner.has_status_effect(/datum/status_effect/jitter)) + SEND_SOUND(owner, sound('sound/health/fastbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) + beat = BEAT_FAST - else if(beat == BEAT_FAST) - owner.stop_sound_channel(CHANNEL_HEARTBEAT) - beat = BEAT_NONE - - if(organ_flags & ORGAN_FAILING && owner.can_heartattack() && !(HAS_TRAIT(src, TRAIT_STABLEHEART))) //heart broke, stopped beating, death imminent... unless you have veins that pump blood without a heart - if(owner.stat == CONSCIOUS) - owner.visible_message(span_danger("[owner] clutches at [owner.p_their()] chest as if [owner.p_their()] heart is stopping!"), \ - span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!")) - owner.set_heartattack(TRUE) - failed = TRUE + else if(beat == BEAT_SLOW) + owner.stop_sound_channel(CHANNEL_HEARTBEAT) + beat = BEAT_NONE /obj/item/organ/internal/heart/get_availability(datum/species/owner_species, mob/living/owner_mob) return owner_species.mutantheart @@ -222,4 +250,3 @@ owner.heal_overall_damage(brute = 15, burn = 15, required_bodytype = BODYTYPE_ORGANIC) if(owner.reagents.get_reagent_amount(/datum/reagent/medicine/ephedrine) < 20) owner.reagents.add_reagent(/datum/reagent/medicine/ephedrine, 10) - diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm index 8ad9301fe74..78ee55b0b28 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -1,6 +1,7 @@ /obj/item/organ/internal/heart/ethereal name = "crystal core" - icon_state = "ethereal_heart" //Welp. At least it's more unique in functionaliy. + icon_state = "ethereal_heart-on" + base_icon_state = "ethereal_heart" visual = TRUE //This is used by the ethereal species for color desc = "A crystal-like organ that functions similarly to a heart for Ethereals. It can revive its owner." @@ -18,6 +19,7 @@ /obj/item/organ/internal/heart/ethereal/Initialize(mapload) . = ..() add_atom_colour(ethereal_color, FIXED_COLOUR_PRIORITY) + update_appearance() /obj/item/organ/internal/heart/ethereal/Insert(mob/living/carbon/heart_owner, special = FALSE, drop_if_replaced = TRUE) . = ..() @@ -36,7 +38,7 @@ /obj/item/organ/internal/heart/ethereal/update_overlays() . = ..() - var/mutable_appearance/shine = mutable_appearance(icon, icon_state = "[icon_state]_shine") + var/mutable_appearance/shine = mutable_appearance(icon, icon_state = "[base_icon_state]_overlay-[beating ? "on" : "off"]") shine.appearance_flags = RESET_COLOR //No color on this, just pure white . += shine @@ -193,13 +195,13 @@ add_atom_colour(ethereal_heart.ethereal_color, FIXED_COLOUR_PRIORITY) crystal_heal_timer = addtimer(CALLBACK(src, PROC_REF(heal_ethereal)), CRYSTALIZE_HEAL_TIME, TIMER_STOPPABLE) set_light(4, 10, ethereal_heart.ethereal_color) - update_icon() + update_appearance(UPDATE_OVERLAYS) flick("ethereal_crystal_forming", src) addtimer(CALLBACK(src, PROC_REF(start_crystalization)), 1 SECONDS) /obj/structure/ethereal_crystal/proc/start_crystalization() being_built = FALSE - update_icon() + update_appearance(UPDATE_OVERLAYS) /obj/structure/ethereal_crystal/atom_destruction(damage_flag) playsound(get_turf(ethereal_heart.owner), 'sound/effects/ethereal_revive_fail.ogg', 100) diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index e7d22a3ece6..81047ce0d8b 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -82,7 +82,7 @@ // transfer the reagents over to the body at the rate of the stomach metabolim // this way the body is where all reagents that are processed and react // the stomach manages how fast they are feed in a drip style - reagents.trans_id_to(body, bit.type, amount=amount) + reagents.trans_to(body, amount, target_id = bit.type) //Handle disgust if(body) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm index 79d3976f22d..5f721fa52b1 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm @@ -74,7 +74,7 @@ return TRUE /datum/status_effect/golem_statued/get_examine_text() - return span_warning("[owner.p_They()] are as still as a statue!") + return span_warning("[owner.p_They()] [owner.p_are()] as still as a statue!") /datum/status_effect/golem_statued/on_remove() owner.visible_message(span_notice("[owner] slowly stirs back into motion!"), span_notice("You have gathered enough strength to move your body once more.")) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 0dc9a6cfb26..00f95c376e6 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -94,8 +94,10 @@ /obj/item/organ/internal/tongue/proc/handle_speech(datum/source, list/speech_args) SIGNAL_HANDLER - if(speech_args[SPEECH_LANGUAGE] in languages_native) - return FALSE //no changes + if(speech_args[SPEECH_LANGUAGE] in languages_native) // Speaking a native language? + return FALSE // Don't modify speech + if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) // No modifiers for signers - I hate this but I simply cannot get these to combine into one statement + return FALSE // Don't modify speech modify_speech(source, speech_args) /obj/item/organ/internal/tongue/proc/modify_speech(datum/source, list/speech_args) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index c5f62883b5f..83b1b0705ef 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -597,33 +597,31 @@ ui.open() /obj/item/blood_filter/ui_data(mob/user) - var/list/data = list() - var/list/chem_names = list() + . = list() + + .["whitelist"] = list() for(var/key in whitelist) - chem_names += whitelist[key] - data["whitelist"] = chem_names - return data + .["whitelist"] += whitelist[key] /obj/item/blood_filter/ui_act(action, params) . = ..() if(.) return + . = TRUE switch(action) if("add") - var/selected_reagent = tgui_input_list(usr, "Select reagent to filter", "Whitelist reagent", GLOB.chemical_name_list) + var/selected_reagent = tgui_input_list(usr, "Select reagent to filter", "Whitelist reagent", GLOB.name2reagent) if(!selected_reagent) - return TRUE + return FALSE - var/chem_id = get_chem_id(selected_reagent) + var/datum/reagent/chem_id = GLOB.name2reagent[selected_reagent] if(!chem_id) - return TRUE + return FALSE if(!(chem_id in whitelist)) whitelist[chem_id] = selected_reagent - - if("remove") var/chem_name = params["reagent"] var/chem_id = get_chem_id(chem_name) diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md new file mode 100644 index 00000000000..95f28ae0e8c --- /dev/null +++ b/code/modules/tgchat/README.md @@ -0,0 +1,30 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + }, +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of recieved sequence numbers. Should the client recieve an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server recieves said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index e71e8658845..2b1e48cb6ae 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -35,23 +35,9 @@ if(text) message["text"] = text if(html) message["html"] = html if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) - var/message_html = message_to_html(message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) - return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - SEND_TEXT(client, message_html) + + // send it immediately + SSchat.send_immediate(target, message) /** * Sends the message to the recipient (target). diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 41a04733945..b9a9f27a28a 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -153,4 +153,9 @@ /world/TgsSecurityLevel() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) - api.SecurityLevel() + return api.SecurityLevel() + +/world/TgsVisibility() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.Visibility() diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 68b0330fe86..07ce3b68458 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -11,6 +11,15 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) src.event_handler = event_handler src.version = version +/datum/tgs_api/proc/TerminateWorld() + while(TRUE) + TGS_DEBUG_LOG("About to terminate world. Tick: [world.time], sleep_offline: [world.sleep_offline]") + world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 + del(world) + world.sleep_offline = FALSE // just in case, this is BYOND after all... + sleep(1) + TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") + /datum/tgs_api/latest parent_type = /datum/tgs_api/v5 @@ -57,3 +66,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/SecurityLevel() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Visibility() + return TGS_UNIMPLEMENTED diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index b9a75c4abb4..945e2e41176 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -73,7 +73,7 @@ if(cached_json["apiValidateOnly"]) TGS_INFO_LOG("Validating API and exiting...") Export(TGS4_COMM_VALIDATE, list(TGS4_PARAMETER_DATA = "[minimum_required_security_level]")) - del(world) + TerminateWorld() security_level = cached_json["securityLevel"] chat_channels_json_path = cached_json["chatChannelsJson"] @@ -188,7 +188,7 @@ requesting_new_port = TRUE if(!world.OpenPort(0)) //open any port TGS_ERROR_LOG("Unable to open random port to retrieve new port![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() //request a new port export_lock = FALSE @@ -196,16 +196,16 @@ if(!new_port_json) TGS_ERROR_LOG("No new port response from server![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() var/new_port = new_port_json[TGS4_PARAMETER_DATA] if(!isnum(new_port) || new_port <= 0) TGS_ERROR_LOG("Malformed new port json ([json_encode(new_port_json)])![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() if(new_port != world.port && !world.OpenPort(new_port)) TGS_ERROR_LOG("Unable to open port [new_port]![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() requesting_new_port = FALSE while(export_lock) diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 5d3d491a736..83420d130a7 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.1" +"5.7.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index f973338daa0..48969c0c7d5 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -48,6 +48,7 @@ #define DMAPI5_RUNTIME_INFORMATION_REVISION "revision" #define DMAPI5_RUNTIME_INFORMATION_TEST_MERGES "testMerges" #define DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL "securityLevel" +#define DMAPI5_RUNTIME_INFORMATION_VISIBILITY "visibility" #define DMAPI5_CHAT_UPDATE_CHANNELS "channels" @@ -79,6 +80,7 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -88,6 +90,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 34cc43f8762..7226f29bba6 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -4,6 +4,7 @@ var/instance_name var/security_level + var/visibility var/reboot_mode = TGS_REBOOT_MODE_NORMAL @@ -50,10 +51,11 @@ if(runtime_information[DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY]) TGS_INFO_LOG("DMAPI validation, exiting...") - del(world) + TerminateWorld() version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] + visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] var/list/revisionData = runtime_information[DMAPI5_RUNTIME_INFORMATION_REVISION] @@ -252,3 +254,7 @@ /datum/tgs_api/v5/SecurityLevel() RequireInitialBridgeResponse() return security_level + +/datum/tgs_api/v5/Visibility() + RequireInitialBridgeResponse() + return visibility diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d47121381..2ef0c70a97f 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -157,7 +157,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +165,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -267,4 +267,16 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index c679737dfc4..fd1ed7e4cf5 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -48,6 +48,7 @@ #undef DMAPI5_RUNTIME_INFORMATION_REVISION #undef DMAPI5_RUNTIME_INFORMATION_TEST_MERGES #undef DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL +#undef DMAPI5_RUNTIME_INFORMATION_VISIBILITY #undef DMAPI5_CHAT_UPDATE_CHANNELS @@ -77,6 +78,9 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -86,6 +90,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 0f831dfd926..82d8d794d9a 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -384,6 +384,8 @@ client << link(href_list["url"]) if("cacheReloaded") reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) /datum/tgui_window/vv_edit_var(var_name, var_value) return var_name != NAMEOF(src, id) && ..() diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index a58b96b06e3..18525e6b10a 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -29,6 +29,9 @@ if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) return input(user, message, title, default) as null|anything in items var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state) + if(input.invalid) + qdel(input) + return input.ui_interact(user) input.wait() if (input) @@ -62,6 +65,8 @@ var/closed /// The TGUI UI state that will be returned in ui_state(). Default: always_state var/datum/ui_state/state + /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null) + var/invalid = FALSE /datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state) src.title = title @@ -81,6 +86,9 @@ string_key = avoid_assoc_duplicate_keys(string_key, repeat_items) src.items += string_key src.items_map[string_key] = i + + if(length(src.items) == 0) + invalid = TRUE if (timeout) src.timeout = timeout start_time = world.time diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm index 2afb59f9b4a..08888ea1608 100644 --- a/code/modules/transport/tram/tram_floors.dm +++ b/code/modules/transport/tram/tram_floors.dm @@ -135,6 +135,9 @@ return return ..() +/turf/open/floor/tram/plate/energized/broken + broken = TRUE + // Resetting the tram contents to its original state needs the turf to be there /turf/open/indestructible/tram name = "tram guideway" diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 914f902baf2..d9d163b8702 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -168,6 +168,7 @@ #include "load_map_security.dm" #include "lungs.dm" #include "machine_disassembly.dm" +#include "mafia.dm" #include "map_landmarks.dm" #include "mapload_space_verification.dm" #include "mapping.dm" @@ -221,6 +222,7 @@ #include "screenshot_antag_icons.dm" #include "screenshot_basic.dm" #include "screenshot_dynamic_human_icons.dm" +#include "screenshot_high_luminosity_eyes.dm" #include "screenshot_humanoids.dm" #include "screenshot_husk.dm" #include "screenshot_saturnx.dm" @@ -254,6 +256,7 @@ #include "subsystem_init.dm" #include "suit_storage_icons.dm" #include "surgeries.dm" +#include "tail_wag.dm" #include "teleporters.dm" #include "tgui_create_message.dm" #include "timer_sanity.dm" diff --git a/code/modules/unit_tests/barsigns.dm b/code/modules/unit_tests/barsigns.dm index 7058dd5346d..0914522446f 100644 --- a/code/modules/unit_tests/barsigns.dm +++ b/code/modules/unit_tests/barsigns.dm @@ -2,28 +2,40 @@ * Test if icon states for each datum actually exist in the DMI. */ /datum/unit_test/barsigns_icon + var/list/blacklisted_sign_types = list(/datum/barsign/skyrat, /datum/barsign/skyrat/large) // SKYRAT EDIT ADDITION - Modular barsigns /datum/unit_test/barsigns_icon/Run() var/obj/machinery/barsign_type = /obj/machinery/barsign var/icon/barsign_icon = initial(barsign_type.icon) var/list/barsign_icon_states = icon_states(barsign_icon) + barsign_icon_states += icon_states(SKYRAT_BARSIGN_FILE) // SKYRAT EDIT ADDITION - Need to check modular barsigns + barsign_icon_states += icon_states(SKYRAT_LARGE_BARSIGN_FILE) // SKYRAT EDIT ADDITION - Need to check modular barsigns // Check every datum real bar sign for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns)) + // SKYRAT EDIT ADDITION BEGIN - MODULAR BARSIGNS + if(sign_type in blacklisted_sign_types) + continue + // SKYRAT EDIT ADDITION END var/datum/barsign/sign = new sign_type() - if(!(sign.icon in barsign_icon_states)) + if(!(sign.icon_state in barsign_icon_states)) TEST_FAIL("Icon state for [sign_type] does not exist in [barsign_icon].") /** * Check that bar signs have a name and desc, and that the name is unique. */ /datum/unit_test/barsigns_name + var/list/blacklisted_sign_types = list(/datum/barsign/skyrat, /datum/barsign/skyrat/large) // SKYRAT EDIT ADDITION - Modular barsigns /datum/unit_test/barsigns_name/Run() var/list/existing_names = list() - for(var/sign_type in subtypesof(/datum/barsign) - /datum/barsign/hiddensigns) + for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns)) + // SKYRAT EDIT ADDITION BEGIN - MODULAR BARSIGNS + if(sign_type in blacklisted_sign_types) + continue + // SKYRAT EDIT ADDITION END var/datum/barsign/sign = new sign_type() if(!sign.name) @@ -35,3 +47,24 @@ TEST_FAIL("[sign_type] does not have a unique name.") existing_names += sign.name + +/** + * Test that an emped barsign displays correctly + */ +/datum/unit_test/barsigns_emp + +/datum/unit_test/barsigns_emp/Run() + var/obj/machinery/barsign/testing_sign = allocate(/obj/machinery/barsign) + var/datum/barsign/hiddensigns/empbarsign/emp_bar_sign = /datum/barsign/hiddensigns/empbarsign + + testing_sign.emp_act(EMP_HEAVY) + + // make sure we get the correct chosen_sign set + if(!istype(testing_sign.chosen_sign, emp_bar_sign)) + TEST_FAIL("[testing_sign] got EMPed but did not get its chosen_sign set correctly.") + + // make sure the sign's icon_state actually got set + var/expected_icon_state = initial(emp_bar_sign.icon_state) + if(testing_sign.icon_state != expected_icon_state) + TEST_FAIL("[testing_sign]'s icon_state was [testing_sign.icon_state] when it should have been [expected_icon_state].") + diff --git a/code/modules/unit_tests/baseturfs.dm b/code/modules/unit_tests/baseturfs.dm index 2ac016f38b9..3150aac342f 100644 --- a/code/modules/unit_tests/baseturfs.dm +++ b/code/modules/unit_tests/baseturfs.dm @@ -34,7 +34,7 @@ // Do this instead of just ChangeTurf to guarantee that baseturfs is completely default on-init behavior RESET_TO_EXPECTED(run_loc_floor_bottom_left) - run_loc_floor_bottom_left.PlaceOnTop(/turf/closed/wall/rock) + run_loc_floor_bottom_left.place_on_top(/turf/closed/wall/rock) TEST_ASSERT_EQUAL(run_loc_floor_bottom_left.type, /turf/closed/wall/rock, "Rock wall should've been placed on top") run_loc_floor_bottom_left.ScrapeAway() @@ -53,7 +53,7 @@ // Do this instead of just ChangeTurf to guarantee that baseturfs is completely default on-init behavior RESET_TO_EXPECTED(run_loc_floor_bottom_left) - run_loc_floor_bottom_left.PlaceOnBottom(fake_turf_type = /turf/closed/wall/rock) + run_loc_floor_bottom_left.place_on_bottom(/turf/closed/wall/rock) TEST_ASSERT_EQUAL(run_loc_floor_bottom_left.type, EXPECTED_FLOOR_TYPE, "PlaceOnBottom shouldn't have changed turf") run_loc_floor_bottom_left.ScrapeAway() diff --git a/code/modules/unit_tests/mafia.dm b/code/modules/unit_tests/mafia.dm new file mode 100644 index 00000000000..85fa5084293 --- /dev/null +++ b/code/modules/unit_tests/mafia.dm @@ -0,0 +1,48 @@ +///Checks if a Mafia game with a Modular Computer and a Ghost will run with 'basic_setup', which is the default +///way the game is ran, without admin-intervention. +///The game should immediately end in a Town Victory due to lack of evils, but we can verify that both the PDA and the ghost +///successfully managed to get into the round. +/datum/unit_test/mafia + ///Boolean on whether the Mafia game started or not. Will Fail if it hasn't. + var/mafia_game_started = FALSE + +/datum/unit_test/mafia/Run() + RegisterSignal(SSdcs, COMSIG_MAFIA_GAME_START, PROC_REF(on_mafia_start)) + var/datum/mafia_controller/controller = GLOB.mafia_game || new() + + TEST_ASSERT(controller, "No Mafia game was found, nor was it able to be created properly.") + + //spawn human and give them a laptop. + var/mob/living/carbon/human/consistent/living_player = allocate(/mob/living/carbon/human/consistent) + var/obj/item/modular_computer/laptop/preset/mafia/modpc_player = allocate(/obj/item/modular_computer/laptop/preset/mafia) + living_player.put_in_active_hand(modpc_player, TRUE) + + //make the laptop run Mafia app. + var/datum/computer_file/program/mafia/mafia_program = locate() in modpc_player.stored_files + TEST_ASSERT(mafia_program, "Mafia program was unable to be found on [modpc_player].") + modpc_player.active_program = mafia_program + + //Spawn a ghost and make them eligible to use the Mafia UI (just to be safe). + var/mob/dead/observer/ghost_player = allocate(/mob/dead/observer) + var/datum/client_interface/mock_client = new() + ghost_player.mock_client = mock_client + mock_client.mob = ghost_player + ADD_TRAIT(ghost_player, TRAIT_PRESERVE_UI_WITHOUT_CLIENT, TRAIT_SOURCE_UNIT_TESTS) + + //First make the human sign up for Mafia, then the ghost, then we'll auto-start it. + controller.signup_mafia(living_player, modpc = modpc_player) + controller.signup_mafia(ghost_player, ghost_client = mock_client) + + controller.basic_setup() + + TEST_ASSERT(mafia_game_started, "Mafia game did not start despite basic_setup being called.") + TEST_ASSERT_NOTNULL(controller.player_role_lookup[modpc_player], "The Modular Computer was unable to join a game of Mafia.") + TEST_ASSERT_NOTNULL(controller.player_role_lookup[mock_client.ckey], "The Mock client wasn't put into a game of Mafia.") + + mock_client.mob = null + + qdel(controller) + +/datum/unit_test/mafia/proc/on_mafia_start(datum/controller/subsystem/processing/dcs/source, datum/mafia_controller/game) + SIGNAL_HANDLER + mafia_game_started = TRUE diff --git a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm new file mode 100644 index 00000000000..4b0c3a986f1 --- /dev/null +++ b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm @@ -0,0 +1,64 @@ +#define UPDATE_EYES_LEFT 1 +#define UPDATE_EYES_RIGHT 2 + +/// Tests to make sure no punks have broken high luminosity eyes +/datum/unit_test/screenshot_high_luminosity_eyes + var/mob/living/carbon/human/test_subject + var/obj/item/organ/internal/eyes/robotic/glow/test_eyes + +/datum/unit_test/screenshot_high_luminosity_eyes/Run() + // Create a mob with red and blue eyes. This is to test that high luminosity eyes properly default to the old eye color. + test_subject = allocate(/mob/living/carbon/human/consistent) + test_subject.equipOutfit(/datum/outfit/job/assistant/consistent) + test_subject.eye_color_left = COLOR_RED + test_subject.eye_color_right = COLOR_BLUE + + // Create our eyes, and insert them into the mob + test_eyes = allocate(/obj/item/organ/internal/eyes/robotic/glow) + test_eyes.Insert(test_subject) + + // This should be 4, but just in case it ever changes in the future + var/default_light_range = test_eyes.eye.light_range + + // Test the normal light on appearance + test_eyes.toggle_active() + var/icon/flat_icon = create_icon() + test_screenshot("light_on", flat_icon) + + // Change the eye color to pink and green + test_eyes.set_beam_color(COLOR_SCIENCE_PINK, to_update = UPDATE_EYES_LEFT) + test_eyes.set_beam_color(COLOR_SLIME_GREEN, to_update = UPDATE_EYES_RIGHT) + + // Make sure the light overlay goes away (but not the emissive overlays) when we go to light range 0 while still turned on + test_eyes.set_beam_range(0) + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, TRUE, "[src]'s 'eye.light_on' is FALSE after setting range to 0 while on. 'eye.light_on' should = TRUE!") + flat_icon = create_icon() + test_screenshot("light_emissive", flat_icon) + + // turn it on and off again, it should look the same afterwards + test_eyes.toggle_active() + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, FALSE, "[src]'s 'eye.light_on' is TRUE after being toggled off at range 0. 'eye.light_on' should = FALSE!") + test_eyes.toggle_active() + TEST_ASSERT_EQUAL(test_eyes.eye.light_on, TRUE, "[src]'s 'eye.light_on' is FALSE after being toggled on at range 0. 'eye.light_on' should = TRUE!") + flat_icon = create_icon() + test_screenshot("light_emissive", flat_icon) + + // Make sure the light comes back on when we go from range 0 to 1 + // Change left/right eye color back to red/blue. It should match the original screenshot + test_eyes.set_beam_range(default_light_range) + test_eyes.set_beam_color(COLOR_RED, to_update = UPDATE_EYES_LEFT) + test_eyes.set_beam_color(COLOR_BLUE, to_update = UPDATE_EYES_RIGHT) + flat_icon = create_icon() + test_screenshot("light_on", flat_icon) + +/// Create the mob icon with light cone underlay +/datum/unit_test/screenshot_high_luminosity_eyes/proc/create_icon() + var/icon/final_icon = get_flat_icon_for_all_directions(test_subject, no_anim = FALSE) + for(var/mutable_appearance/light_underlay as anything in test_subject.underlays) + if(light_underlay.icon == 'icons/effects/light_overlays/light_cone.dmi') + // The light cone icon is 96x96, so we have to shift it over to have it match our sprites. x = 1, y = 1 is the lower left corner so we shift 32 pixels opposite to that. + final_icon.Blend(get_flat_icon_for_all_directions(light_underlay, no_anim = FALSE), ICON_UNDERLAY, -world.icon_size + 1, -world.icon_size + 1) + return final_icon + +#undef UPDATE_EYES_LEFT +#undef UPDATE_EYES_RIGHT diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_cyberpolice.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_glitch.png similarity index 100% rename from code/modules/unit_tests/screenshots/screenshot_antag_icons_cyberpolice.png rename to code/modules/unit_tests/screenshots/screenshot_antag_icons_glitch.png diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png new file mode 100644 index 00000000000..e7f5a457c30 Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_emissive.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png new file mode 100644 index 00000000000..76c997c3318 Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_high_luminosity_eyes_light_on.png differ diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 3c5dbfb6474..dcba0cd69db 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -51,61 +51,33 @@ /mob/living/simple_animal/hostile/asteroid/elite/legionnaire, /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead, /mob/living/simple_animal/hostile/asteroid/elite/pandora, - /mob/living/simple_animal/hostile/asteroid/gutlunch, - /mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch, - /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, - /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, /mob/living/simple_animal/hostile/asteroid/polarbear, /mob/living/simple_animal/hostile/asteroid/polarbear/lesser, /mob/living/simple_animal/hostile/asteroid/wolf, - /mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/hostile/construct/proteon, - /mob/living/simple_animal/hostile/construct/proteon/hostile, /mob/living/simple_animal/hostile/dark_wizard, - /mob/living/simple_animal/hostile/guardian, - /mob/living/simple_animal/hostile/guardian/assassin, - /mob/living/simple_animal/hostile/guardian/charger, - /mob/living/simple_animal/hostile/guardian/dextrous, - /mob/living/simple_animal/hostile/guardian/explosive, - /mob/living/simple_animal/hostile/guardian/gaseous, - /mob/living/simple_animal/hostile/guardian/gravitokinetic, - /mob/living/simple_animal/hostile/guardian/lightning, - /mob/living/simple_animal/hostile/guardian/protector, - /mob/living/simple_animal/hostile/guardian/ranged, - /mob/living/simple_animal/hostile/guardian/standard, - /mob/living/simple_animal/hostile/guardian/support, /mob/living/simple_animal/hostile/illusion, /mob/living/simple_animal/hostile/illusion/escape, /mob/living/simple_animal/hostile/illusion/mirage, - /mob/living/simple_animal/hostile/jungle, - /mob/living/simple_animal/hostile/jungle/leaper, /mob/living/simple_animal/hostile/megafauna, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance, /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/hunter, - /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/virtual_domain, /mob/living/simple_animal/hostile/megafauna/bubblegum, /mob/living/simple_animal/hostile/megafauna/bubblegum/hallucination, - /mob/living/simple_animal/hostile/megafauna/bubblegum/virtual_domain, /mob/living/simple_animal/hostile/megafauna/clockwork_defender, /mob/living/simple_animal/hostile/megafauna/colossus, - /mob/living/simple_animal/hostile/megafauna/colossus/virtual_domain, /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner, /mob/living/simple_animal/hostile/megafauna/dragon, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/hostile/megafauna/dragon/virtual_domain, /mob/living/simple_animal/hostile/megafauna/hierophant, - /mob/living/simple_animal/hostile/megafauna/hierophant/virtual_domain, /mob/living/simple_animal/hostile/megafauna/legion, - /mob/living/simple_animal/hostile/megafauna/legion/virtual_domain, /mob/living/simple_animal/hostile/megafauna/legion/medium, /mob/living/simple_animal/hostile/megafauna/legion/medium/eye, /mob/living/simple_animal/hostile/megafauna/legion/medium/left, /mob/living/simple_animal/hostile/megafauna/legion/medium/right, /mob/living/simple_animal/hostile/megafauna/legion/small, /mob/living/simple_animal/hostile/megafauna/wendigo, - /mob/living/simple_animal/hostile/megafauna/wendigo/virtual_domain, /mob/living/simple_animal/hostile/mimic, /mob/living/simple_animal/hostile/mimic/copy, /mob/living/simple_animal/hostile/mimic/copy/machine, @@ -119,7 +91,6 @@ /mob/living/simple_animal/hostile/retaliate/goose, /mob/living/simple_animal/hostile/retaliate/goose/vomit, /mob/living/simple_animal/hostile/vatbeast, - /mob/living/simple_animal/hostile/wizard, /mob/living/simple_animal/hostile/zombie, /mob/living/simple_animal/parrot, /mob/living/simple_animal/parrot/natural, @@ -138,7 +109,6 @@ /mob/living/simple_animal/pet/gondola, /mob/living/simple_animal/pet/gondola/gondolapod, /mob/living/simple_animal/pet/gondola/virtual_domain, - /mob/living/simple_animal/shade, /mob/living/simple_animal/slime, /mob/living/simple_animal/slime/pet, /mob/living/simple_animal/slime/random, diff --git a/code/modules/unit_tests/spell_shapeshift.dm b/code/modules/unit_tests/spell_shapeshift.dm index 9b5804e3520..3b598e99942 100644 --- a/code/modules/unit_tests/spell_shapeshift.dm +++ b/code/modules/unit_tests/spell_shapeshift.dm @@ -87,7 +87,7 @@ shift.shapeshift_type = shift.possible_shapes[1] shift.Grant(dummy) - var/mob/living/simple_animal/hostile/guardian/test_stand = allocate(/mob/living/simple_animal/hostile/guardian) + var/mob/living/basic/guardian/test_stand = allocate(/mob/living/basic/guardian) test_stand.set_summoner(dummy) // The stand's summoner is dummy. diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index 345be4befe9..6c3add3092d 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -97,6 +97,8 @@ /datum/unit_test/strange_reagent/proc/test_death_no_damage(target_type) var/mob/living/target = allocate_new_target(target_type) target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_NOTEQUAL(target.stat, DEAD, "Strange Reagent did not revive a dead target type [target.type].") @@ -107,6 +109,8 @@ return target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_NOTEQUAL(target.stat, DEAD, "Strange Reagent did not revive a dead target type [target.type].") @@ -126,6 +130,8 @@ return target.death() + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_full_heal) TEST_ASSERT_EQUAL(target_max_health, get_target_organic_health_manual(target), "Strange Reagent did not fully heal a dead target type [target.type] with the expected amount.") @@ -134,6 +140,8 @@ var/mob/living/target = allocate_new_target(target_type) if(!damage_target_to_percentage(target, strange_reagent.max_revive_damage_ratio * 0.9)) // 10% under the damage cap return + if(QDELETED(target)) + return update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) @@ -143,7 +151,9 @@ var/mob/living/target = allocate_new_target(target_type) if(!damage_target_to_percentage(target, strange_reagent.max_revive_damage_ratio * 1.1)) // 10% over the damage cap return - + if(QDELETED(target)) + return + update_amounts(target) strange_reagent.expose_mob(target, INGEST, amount_needed_to_revive) TEST_ASSERT_EQUAL(target.stat, DEAD, "Strange Reagent revived a target type [target.type] with more than double their max health in damage.") diff --git a/code/modules/unit_tests/tail_wag.dm b/code/modules/unit_tests/tail_wag.dm new file mode 100644 index 00000000000..0d828557953 --- /dev/null +++ b/code/modules/unit_tests/tail_wag.dm @@ -0,0 +1,90 @@ +/// Tests to make sure tail wagging behaves as expected +/datum/unit_test/tail_wag + // used by the stop_after test + var/timer_finished = FALSE + +/datum/unit_test/tail_wag/Run() + var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent) + var/obj/item/organ/external/tail/cat/dummy_tail = allocate(/obj/item/organ/external/tail/cat) + dummy_tail.Insert(dummy, special = TRUE, drop_if_replaced = FALSE) + + // SANITY TEST + + // start wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // stop wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail did not stop wagging when it should have!") + + // TESTING WAG_ABLE FLAG + + // flip the wag flag to unwaggable + dummy_tail.wag_flags &= ~WAG_ABLE + + // try to wag it again + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail should not have the ability to wag, yet it did!") + + // flip the wag flag to waggable again + dummy_tail.wag_flags |= WAG_ABLE + + // start wagging again + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // TESTING STOP_AFTER + + // stop wagging + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail did not stop wagging when it should have!") + + // start wagging, stop after 0.1 seconds + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE, 0.1 SECONDS) + // because timers are a pain + addtimer(VARSET_CALLBACK(src, timer_finished, TRUE), 0.2 SECONDS) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + UNTIL(timer_finished) // wait a little bit + + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail was supposed to stop wagging on its own after 0.1 seconds but it did not!") + + // TESTING TAIL REMOVAL + + // remove the tail + dummy_tail.Remove(dummy, special = TRUE) + + // check if tail is still wagging after being removed + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail was still wagging after being removed!") + + // try to wag the removed tail + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A disembodied tail was able to start wagging!") + + // TESTING MOB DEATH + + // put it back and start wagging again + dummy_tail.Insert(dummy, special = TRUE, drop_if_replaced = FALSE) + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging when it should have!") + + // kill the mob, see if it stops wagging + dummy.adjustBruteLoss(9001) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A mob's tail was still wagging after being killed!") + + // check if we are still able to wag the tail after death + SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("A dead mob was able to wag their tail!") diff --git a/code/modules/uplink/uplink_items/badass.dm b/code/modules/uplink/uplink_items/badass.dm index 67676edcd7d..dbd28a136c8 100644 --- a/code/modules/uplink/uplink_items/badass.dm +++ b/code/modules/uplink/uplink_items/badass.dm @@ -22,7 +22,11 @@ if(!.) return - notify_ghosts("[user] has purchased a BADASS Syndicate Balloon!", source = src, action = NOTIFY_ORBIT, header = "What are they THINKING?") + notify_ghosts( + "[user] has purchased a BADASS Syndicate Balloon!", + source = src, + header = "What are they THINKING?", + ) /datum/uplink_item/badass/syndiecards name = "Syndicate Playing Cards" @@ -46,7 +50,7 @@ desc = "A secure briefcase containing 5000 space credits. Useful for bribing personnel, or purchasing goods \ and services at lucrative prices. The briefcase also feels a little heavier to hold; it has been \ manufactured to pack a little bit more of a punch if your client needs some convincing." - item = /obj/item/storage/secure/briefcase/syndie + item = /obj/item/storage/briefcase/secure/syndie cost = 3 restricted = TRUE illegal_tech = FALSE diff --git a/code/modules/uplink/uplink_items/bundle.dm b/code/modules/uplink/uplink_items/bundle.dm index a930784fe14..f236aa4da25 100644 --- a/code/modules/uplink/uplink_items/bundle.dm +++ b/code/modules/uplink/uplink_items/bundle.dm @@ -146,13 +146,13 @@ Rumored to contain a valuable assortment of items based on your current reputation, but you never know. Contents are sorted to always be worth 80 TC. \ The Syndicate will only provide one surplus item per agent." cost = 20 - item = /obj/structure/closet/crate/syndicrate + item = /obj/structure/closet/crate/secure/syndicrate stock_key = UPLINK_SHARED_STOCK_SURPLUS crate_tc_value = 80 - crate_type = /obj/structure/closet/crate/syndicrate + crate_type = /obj/structure/closet/crate/secure/syndicrate /// edited version of fill crate for super surplus to ensure it can only be unlocked with the syndicrate key -/datum/uplink_item/bundles_tc/surplus/united/fill_crate(obj/structure/closet/crate/syndicrate/surplus_crate, list/possible_items) +/datum/uplink_item/bundles_tc/surplus/united/fill_crate(obj/structure/closet/crate/secure/syndicrate/surplus_crate, list/possible_items) if(!istype(surplus_crate)) return var/tc_budget = crate_tc_value diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index f1788c6e1de..e84657e7884 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -82,7 +82,7 @@ desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host." progression_minimum = 30 MINUTES - item = /obj/item/guardiancreator/tech/choose/traitor + item = /obj/item/guardian_creator/tech cost = 18 surplus = 0 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index 96a1c13827f..2073024a962 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -146,6 +146,13 @@ cost = 11 restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) +/datum/uplink_item/role_restricted/rebarxbowsyndie + name = "Syndicate Rebar Crossbow" + desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." + item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie + cost = 10 + restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) + /datum/uplink_item/role_restricted/magillitis_serum name = "Magillitis Serum Autoinjector" desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \ diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm index 2f205a9d0bd..36cb47cc28f 100644 --- a/code/modules/uplink/uplink_items/stealthy.dm +++ b/code/modules/uplink/uplink_items/stealthy.dm @@ -76,7 +76,7 @@ and gain the ability to swat bullets from the air, but you will also refuse to use dishonorable ranged weaponry." item = /obj/item/book/granter/martial/carp progression_minimum = 30 MINUTES - cost = 13 + cost = 17 surplus = 0 purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index f586a9656e8..2323eb942e4 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -521,7 +521,8 @@ if(!overclock_mode && overclock_temp > 0) overclock_temp -= seconds_per_tick return - overclock_temp = min(overclock_temp + seconds_per_tick, overclock_temp_danger * 2) + var/temp_gain = seconds_per_tick * (1 + 1 / movedelay) + overclock_temp = min(overclock_temp + temp_gain, overclock_temp_danger * 2) if(overclock_temp < overclock_temp_danger) return if(overclock_temp >= overclock_temp_danger && overclock_safety) diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 1851e6b39b1..1aa4223b98c 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -292,7 +292,7 @@ /** * ## end_missile_targeting * - * Called by the ivanov strike datum action or other actions that would end targetting + * Called by the ivanov strike datum action or other actions that would end targeting * Unhooks signals into clicking to call drop_missile plus other flavor like the overlay */ /datum/action/vehicle/sealed/mecha/ivanov_strike/proc/end_missile_targeting() diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index aea1a21c082..6c8d178c5b9 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -121,7 +121,7 @@ * Cooldown proc variant for using do_afters between activations instead of timers * Example of usage is mech drills, rcds * arguments: - * * target: targetted atom for action activation + * * target: targeted atom for action activation * * user: occupant to display do after for * * interaction_key: interaction key to pass to [/proc/do_after] */ diff --git a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm index ca3b4f2f479..e16a142dd2e 100644 --- a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm @@ -198,7 +198,7 @@ log_message("Injecting [patient] with [to_inject] units of [R.name].", LOG_MECHA) for(var/driver in chassis.return_drivers()) log_combat(driver, patient, "injected", "[name] ([R] - [to_inject] units)") - SG.reagents.trans_id_to(patient,R.type,to_inject) + SG.reagents.trans_to(patient, to_inject, target_id = R.type) /obj/item/mecha_parts/mecha_equipment/medical/sleeper/container_resist_act(mob/living/user) go_out() diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 0c8fad8a255..9b45713f17f 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -14,36 +14,35 @@ harmful = TRUE mech_flags = EXOSUIT_MODULE_RIPLEY ///Bool for whether we beat the hell out of things we punch (and tear off their arms) - //var/killer_clamp = FALSE -------SKYRAT EDIT - A clamp is a clamp, just like it was on the oldbase. var/killer_clamp = TRUE ///How much base damage this clamp does - var/clamp_damage = 30 //SKYRAT EDIT - We've removed instant arm delimbs, so this is a buff to make up for it. -// var/clamp_damage = 20 SKYRAT EDIT - Original line + var/clamp_damage = 20 ///Var for the chassis we are attached to, needed to access ripley contents and such var/obj/vehicle/sealed/mecha/ripley/cargo_holder ///Audio for using the hydraulic clamp var/clampsound = 'sound/mecha/hydraulic.ogg' + ///Chassis but typed for the cargo_hold var + var/obj/vehicle/sealed/mecha/ripley/workmech /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/vehicle/sealed/mecha/new_mecha) . = ..() - if(istype(chassis, /obj/vehicle/sealed/mecha/ripley)) - cargo_holder = chassis + workmech = chassis ADD_TRAIT(chassis, TRAIT_OREBOX_FUNCTIONAL, TRAIT_MECH_EQUIPMENT(type)) /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto) REMOVE_TRAIT(chassis, TRAIT_OREBOX_FUNCTIONAL, TRAIT_MECH_EQUIPMENT(type)) - cargo_holder = null + workmech = null return ..() /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/living/source, atom/target, list/modifiers) if(!action_checks(target)) return - if(!cargo_holder) - return + if(!workmech.cargo_hold) + CRASH("Mech [chassis] has a clamp device, but no internal storage. This should be impossible.") if(ismecha(target)) var/obj/vehicle/sealed/mecha/M = target var/have_ammo - for(var/obj/item/mecha_ammo/box in cargo_holder.cargo) + for(var/obj/item/mecha_ammo/box in workmech.cargo_hold.contents) if(istype(box, /obj/item/mecha_ammo) && box.rounds) have_ammo = TRUE if(M.ammo_resupply(box, source, TRUE)) @@ -68,7 +67,7 @@ if(clamptarget.anchored) to_chat(source, "[icon2html(src, source)][span_warning("[target] is firmly secured!")]") return - if(LAZYLEN(cargo_holder.cargo) >= cargo_holder.cargo_capacity) + if(workmech.cargo_hold.contents.len >= workmech.cargo_hold.cargo_capacity) to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") return playsound(chassis, clampsound, 50, FALSE, -6) @@ -77,13 +76,12 @@ if(!do_after_cooldown(target, source)) clamptarget.set_anchored(initial(clamptarget.anchored)) return - LAZYADD(cargo_holder.cargo, clamptarget) - clamptarget.forceMove(chassis) + clamptarget.forceMove(workmech.cargo_hold) clamptarget.set_anchored(FALSE) - if(!cargo_holder.ore_box && istype(clamptarget, /obj/structure/ore_box)) - cargo_holder.ore_box = clamptarget + if(!chassis.ore_box && istype(clamptarget, /obj/structure/ore_box)) + chassis.ore_box = clamptarget to_chat(source, "[icon2html(src, source)][span_notice("[target] successfully loaded.")]") - log_message("Loaded [clamptarget]. Cargo compartment capacity: [cargo_holder.cargo_capacity - LAZYLEN(cargo_holder.cargo)]", LOG_MECHA) + log_message("Loaded [clamptarget]. Cargo compartment capacity: [workmech.cargo_hold.cargo_capacity - workmech.cargo_hold.contents.len]", LOG_MECHA) else if(isliving(target)) var/mob/living/M = target @@ -175,7 +173,7 @@ var/datum/reagents/water_reagents = new /datum/reagents(required_amount/8) //required_amount/8, because the water usage is split between eight sprays. As of this comment, required_amount/8 = 10u each. water.reagents = water_reagents water_reagents.my_atom = water - reagents.trans_to(water, required_amount/8) + reagents.trans_to(water, required_amount / 8) water.move_at(get_step(chassis, get_dir(targetturf, chassis)), 2, 4) //Target is the tile opposite of the mech as the starting turf. playsound(chassis, 'sound/effects/extinguish.ogg', 75, TRUE, -3) @@ -308,13 +306,13 @@ to_chat(source, "[icon2html(src, source)][span_notice("Building Wall...")]") if(!do_after_cooldown(floor_turf, source)) return - floor_turf.PlaceOnTop(/turf/closed/wall) + floor_turf.place_on_top(/turf/closed/wall) else if(isopenturf(target)) var/turf/open/open_turf = target to_chat(source, "[icon2html(src, source)][span_notice("Building Floor...")]") if(!do_after_cooldown(open_turf, source)) return - open_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + open_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) if(MODE_AIRLOCK) if(isfloorturf(target)) to_chat(source, "[icon2html(src, source)][span_notice("Building Airlock...")]") @@ -334,15 +332,17 @@ //Dunno where else to put this so shrug /obj/item/mecha_parts/mecha_equipment/ripleyupgrade name = "Ripley MK-II Conversion Kit" - desc = "A pressurized canopy attachment kit for an Autonomous Power Loader Unit \"Ripley\" MK-I mecha, to convert it to the slower, but space-worthy MK-II design. This kit cannot be removed, once applied." + desc = "A pressurized canopy attachment kit for an Autonomous Power Loader Unit \"Ripley\" MK-I exosuit, to convert it to the slower, but space-worthy MK-II design. This kit cannot be removed, once applied." icon_state = "ripleyupgrade" mech_flags = EXOSUIT_MODULE_RIPLEY + var/result = /obj/vehicle/sealed/mecha/ripley/mk2 /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/vehicle/sealed/mecha/ripley/mecha, attach_right = FALSE, mob/user) if(mecha.type != /obj/vehicle/sealed/mecha/ripley) to_chat(user, span_warning("This conversion kit can only be applied to APLU MK-I models.")) return FALSE - if(LAZYLEN(mecha.cargo)) + var/obj/vehicle/sealed/mecha/ripley/workmech = mecha + if(LAZYLEN(workmech.cargo_hold)) to_chat(user, span_warning("[mecha]'s cargo hold must be empty before this conversion kit can be applied.")) return FALSE if(!(mecha.mecha_flags & PANEL_OPEN)) //non-removable upgrade, so lets make sure the pilot or owner has their say. @@ -357,43 +357,56 @@ return TRUE /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/vehicle/sealed/mecha/markone, attach_right = FALSE) - var/obj/vehicle/sealed/mecha/ripley/mk2/marktwo = new (get_turf(markone),1) - if(!marktwo) + var/obj/vehicle/sealed/mecha/newmech = new result(get_turf(markone),1) + if(!newmech) return - QDEL_NULL(marktwo.cell) + QDEL_NULL(newmech.cell) if (markone.cell) - marktwo.cell = markone.cell - markone.cell.forceMove(marktwo) + newmech.cell = markone.cell + markone.cell.forceMove(newmech) markone.cell = null - QDEL_NULL(marktwo.scanmod) + QDEL_NULL(newmech.scanmod) if (markone.scanmod) - marktwo.scanmod = markone.scanmod - markone.scanmod.forceMove(marktwo) + newmech.scanmod = markone.scanmod + markone.scanmod.forceMove(newmech) markone.scanmod = null - QDEL_NULL(marktwo.capacitor) + QDEL_NULL(newmech.capacitor) if (markone.capacitor) - marktwo.capacitor = markone.capacitor - markone.capacitor.forceMove(marktwo) + newmech.capacitor = markone.capacitor + markone.capacitor.forceMove(newmech) markone.capacitor = null - QDEL_NULL(marktwo.servo) + QDEL_NULL(newmech.servo) if (markone.servo) - marktwo.servo = markone.servo - markone.servo.forceMove(marktwo) + newmech.servo = markone.servo + markone.servo.forceMove(newmech) markone.servo = null - marktwo.update_part_values() + newmech.update_part_values() for(var/obj/item/mecha_parts/mecha_equipment/equipment in markone.flat_equipment) //Move the equipment over... if(istype(equipment, /obj/item/mecha_parts/mecha_equipment/ejector)) - continue //the MK2 already has one. + continue //the new mech already has one. var/righthandgun = markone.equip_by_category[MECHA_R_ARM] == equipment - equipment.detach(marktwo) - equipment.attach(marktwo, righthandgun) - marktwo.dna_lock = markone.dna_lock - marktwo.mecha_flags = markone.mecha_flags - marktwo.strafe = markone.strafe + equipment.detach(newmech) + equipment.attach(newmech, righthandgun) + newmech.dna_lock = markone.dna_lock + newmech.mecha_flags = markone.mecha_flags + newmech.strafe = markone.strafe //Integ set to the same percentage integ as the old mecha, rounded to be whole number - marktwo.update_integrity(round((markone.get_integrity() / markone.max_integrity) * marktwo.get_integrity())) + newmech.update_integrity(round((markone.get_integrity() / markone.max_integrity) * newmech.get_integrity())) if(markone.name != initial(markone.name)) - marktwo.name = markone.name + newmech.name = markone.name markone.wreckage = FALSE qdel(markone) - playsound(get_turf(marktwo),'sound/items/ratchet.ogg',50,TRUE) + playsound(get_turf(newmech),'sound/items/ratchet.ogg',50,TRUE) + +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy + name = "Paddy Conversion Kit" + desc = "A hardpoint modification kit for an Autonomous Power Loader Unit \"Ripley\" MK-I exosuit, to convert it to the Paddy lightweight security design. This kit cannot be removed, once applied." + icon_state = "paddyupgrade" + mech_flags = EXOSUIT_MODULE_RIPLEY + result = /obj/vehicle/sealed/mecha/ripley/paddy + +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy/can_attach(obj/vehicle/sealed/mecha/ripley/mecha, attach_right = FALSE, mob/user) + if(mecha.equip_by_category[MECHA_L_ARM] || mecha.equip_by_category[MECHA_R_ARM]) //Paddys can't use RIPLEY-type equipment + to_chat(user, span_warning("This kit cannot be applied with hardpoint equipment attached.")) + return FALSE + return ..() diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index a8793416296..bd219802515 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -540,3 +540,76 @@ equip_cooldown = 60 det_time = 20 mech_flags = EXOSUIT_MODULE_HONK + +///long claw of the law +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw + name = "hydraulic claw" + desc = "A modified hydraulic clamp, for use exclusively with the Paddy exosuit. Non-lethally apprehends suspects." + icon_state = "paddy_claw" + equip_cooldown = 15 + energy_drain = 10 + tool_behaviour = TOOL_RETRACTOR + range = MECHA_MELEE + toolspeed = 0.8 + mech_flags = EXOSUIT_MODULE_PADDY + ///Chassis but typed for the cargo_hold var + var/obj/vehicle/sealed/mecha/ripley/secmech + ///Audio for using the hydraulic clamp + var/clampsound = 'sound/mecha/hydraulic.ogg' + ///Var for the cuff type. Basically stole how cuffing works from secbots + var/cuff_type = /obj/item/restraints/handcuffs/cable/zipties/used + ///Var for autocuff, can be toggled in the mech interface. + var/autocuff = TRUE + + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/attach(obj/vehicle/sealed/mecha/new_mecha) + . = ..() + secmech = chassis + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/detach(atom/moveto) + secmech = null + return ..() + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/action(mob/living/source, atom/target, list/modifiers) + if(!secmech.cargo_hold) //We did try + CRASH("Mech [chassis] has a claw device, but no internal storage. This should be impossible.") + if(ismob(target)) + var/mob/living/mobtarget = target + if(mobtarget.move_resist == MOVE_FORCE_OVERPOWERING) //No megafauna or bolted AIs, please. + to_chat(source, "[span_warning("[src] is unable to lift [mobtarget].")]") + return + if(secmech.cargo_hold.contents.len >= secmech.cargo_hold.cargo_capacity) + to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") + return + + playsound(chassis, clampsound, 50, FALSE, -6) + mobtarget.visible_message(span_notice("[chassis] lifts [mobtarget] into its internal holding cell."),span_userdanger("[chassis] grips you with [src] and prepares to load you into [secmech.cargo_hold]!")) + if(!do_after_cooldown(mobtarget, source)) + return + mobtarget.forceMove(secmech.cargo_hold) + log_message("Loaded [mobtarget]. Cargo compartment capacity: [secmech.cargo_hold.cargo_capacity - secmech.cargo_hold.contents.len]", LOG_MECHA) + to_chat(source, "[icon2html(src, source)][span_notice("[mobtarget] successfully loaded.")]") + to_chat(mobtarget, "[span_warning("You have been moved into [secmech.cargo_hold]. You can attempt to resist out if you wish.")]") + if(autocuff && iscarbon(target)) + var/mob/living/carbon/carbontarget = target + carbontarget.set_handcuffed(new cuff_type(carbontarget)) + carbontarget.update_handcuffed() + return + + if(!istype(target, /obj/machinery/door)) + return + var/obj/machinery/door/target_door = target + playsound(chassis, clampsound, 50, FALSE, -6) + target_door.try_to_crowbar(src, source) + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/get_snowflake_data() + return list( + "snowflake_id" = MECHA_SNOWFLAKE_ID_CLAW, + "autocuff" = autocuff, + ) + +/obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw/handle_ui_act(action, list/params) + switch(action) + if("togglecuff") + autocuff = !autocuff + return TRUE diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 56b3cd2138c..c3e5abc39f0 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -403,9 +403,6 @@ . = TRUE - add_fingerprint(usr) - usr.set_machine(src) - switch(action) if("build") var/designs = params["designs"] @@ -499,15 +496,5 @@ return FALSE return default_deconstruction_crowbar(I) -/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, span_warning("You can't load [src] while it's opened!")) - return FALSE - if(being_built) - to_chat(user, span_warning("\The [src] is currently processing! Please wait until completion.")) - return FALSE - - return TRUE - /obj/machinery/mecha_part_fabricator/maint link_on_init = FALSE diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm index fb572f7d128..3ff01b51166 100644 --- a/code/modules/vehicles/mecha/mecha_construction_paths.dm +++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -503,7 +503,7 @@ list( "key" = /obj/item/circuitboard/mecha/honker/targeting, "action" = ITEM_DELETE, - "desc" = "Prank targetting board can be added!", + "desc" = "Prank targeting board can be added!", "forward_message" = "added prank" ), list( diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm index 771ed97268b..6cb5ec6bde8 100644 --- a/code/modules/vehicles/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -36,9 +36,9 @@ tracker_ref = REF(MT) ) if(istype(M, /obj/vehicle/sealed/mecha/ripley)) - var/obj/vehicle/sealed/mecha/ripley/RM = M + var/obj/vehicle/sealed/mecha/ripley/workmech = M mech_data += list( - cargo_space = round((LAZYLEN(RM.cargo) / RM.cargo_capacity) * 100) + cargo_space = round(workmech.cargo_hold.contents.len / workmech.cargo_hold.cargo_capacity * 100) ) data["mechs"] += list(mech_data) @@ -101,8 +101,8 @@ Pilot: [english_list(chassis.return_drivers(), nothing_text = "None")]
Location: [get_area_name(chassis, TRUE) || "Unknown"]"} if(istype(chassis, /obj/vehicle/sealed/mecha/ripley)) - var/obj/vehicle/sealed/mecha/ripley/RM = chassis - answer += "
Used Cargo Space: [round((LAZYLEN(RM.cargo) / RM.cargo_capacity * 100), 0.01)]%" + var/obj/item/mecha_parts/mecha_equipment/ejector/cargo_holder = locate(/obj/item/mecha_parts/mecha_equipment/ejector) in chassis.equip_by_category[MECHA_UTILITY] + answer += "
Used Cargo Space: [round((cargo_holder.contents.len / cargo_holder.cargo_capacity * 100), 0.01)]%" return answer diff --git a/code/modules/vehicles/mecha/mecha_damage.dm b/code/modules/vehicles/mecha/mecha_damage.dm index 08f294f202f..8a06aaf298f 100644 --- a/code/modules/vehicles/mecha/mecha_damage.dm +++ b/code/modules/vehicles/mecha/mecha_damage.dm @@ -9,7 +9,7 @@ * Pretty simple, adds armor, you can choose against what * ## Internal damage * When taking damage will force you to take some time to repair, encourages improvising in a fight - * Targetting different def zones will damage them to encurage a more strategic approach to fights + * Targeting different def zones will damage them to encurage a more strategic approach to fights * where they target the "dangerous" modules */ diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 3df6ba94992..746039e7552 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -9,11 +9,11 @@ * Pretty simple, adds armor, you can choose against what * ## Internal damage * When taking damage will force you to take some time to repair, encourages improvising in a fight - * Targetting different def zones will damage them to encurage a more strategic approach to fights + * Targeting different def zones will damage them to encurage a more strategic approach to fights * where they target the "dangerous" modules */ -/// tries to damage mech equipment depending on damage and where is being targetted +/// tries to damage mech equipment depending on damage and where is being targeted /obj/vehicle/sealed/mecha/proc/try_damage_component(damage, def_zone) if(damage < component_damage_threshold) return diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 07b13a27ec0..0789216400c 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -158,12 +158,16 @@ /obj/vehicle/sealed/mecha/add_occupant(mob/M, control_flags) RegisterSignal(M, COMSIG_MOB_CLICKON, PROC_REF(on_mouseclick), TRUE) RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(display_speech_bubble), TRUE) + RegisterSignal(M, COMSIG_MOVABLE_KEYBIND_FACE_DIR, PROC_REF(on_turn), TRUE) . = ..() update_appearance() /obj/vehicle/sealed/mecha/remove_occupant(mob/M) - UnregisterSignal(M, COMSIG_MOB_CLICKON) - UnregisterSignal(M, COMSIG_MOB_SAY) + UnregisterSignal(M, list( + COMSIG_MOB_CLICKON, + COMSIG_MOB_SAY, + COMSIG_MOVABLE_KEYBIND_FACE_DIR, + )) M.clear_alert(ALERT_CHARGE) M.clear_alert(ALERT_MECH_DAMAGE) if(M.client) diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index e8c43ae48f9..766826e8f5a 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -49,6 +49,11 @@ return TRUE return FALSE +///Called when the driver turns with the movement lock key +/obj/vehicle/sealed/mecha/proc/on_turn(mob/living/driver, direction) + SIGNAL_HANDLER + return COMSIG_IGNORE_MOVEMENT_LOCK + /obj/vehicle/sealed/mecha/relaymove(mob/living/user, direction) . = TRUE if(!canmove || !(user in return_drivers())) @@ -121,11 +126,11 @@ break //if we're not facing the way we're going rotate us - if(dir != direction && !strafe || forcerotate || keyheld) + if(dir != direction && (!strafe || forcerotate || keyheld)) if(dir != direction && !(mecha_flags & QUIET_TURNS) && !step_silent) playsound(src,turnsound,40,TRUE) setDir(direction) - if(!pivot_step) //If we pivot step, we don't return here so we don't just come to a stop + if(keyheld || !pivot_step) //If we pivot step, we don't return here so we don't just come to a stop return TRUE set_glide_size(DELAY_TO_GLIDE_SIZE(movedelay)) diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm index 3540891d336..8f3e821a5bf 100644 --- a/code/modules/vehicles/mecha/mecha_wreckage.dm +++ b/code/modules/vehicles/mecha/mecha_wreckage.dm @@ -165,6 +165,10 @@ name = "\improper Ripley MK-II wreckage" icon_state = "ripleymkii-broken" +/obj/structure/mecha_wreckage/ripley/paddy + name = "\improper Paddy wreckage" + icon_state = "paddy-broken" + /obj/structure/mecha_wreckage/clarke name = "\improper Clarke wreckage" icon_state = "clarke-broken" diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm index e31690f65b9..2ec0b4a4736 100644 --- a/code/modules/vehicles/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -7,6 +7,7 @@ max_temperature = 65000 max_integrity = 200 movedelay = 1.25 + overclock_coeff = 1.25 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 step_energy_drain = 12 //slightly higher energy drain since you movin those wheels FAST diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index d2b13d48d26..9bc6ea75751 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -5,6 +5,7 @@ base_icon_state = "ripley" silicon_icon_state = "ripley-empty" movedelay = 1.5 //Move speed, lower is faster. + overclock_coeff = 1.25 max_temperature = 20000 max_integrity = 200 lights_power = 7 @@ -35,10 +36,8 @@ ) /// Amount of Goliath hides attached to the mech var/hides = 0 - /// List of all things in Ripley's Cargo Compartment - var/list/cargo - /// How much things Ripley can carry in their Cargo Compartment - var/cargo_capacity = 15 + /// Reference to the Cargo Hold equipment. + var/obj/item/mecha_parts/mecha_equipment/ejector/cargo_hold /// How fast the mech is in low pressure var/fast_pressure_step_in = 1.5 /// How fast the mech is in normal pressure @@ -66,13 +65,6 @@ bullet = 5 laser = 5 -/obj/vehicle/sealed/mecha/ripley/Destroy() - for(var/atom/movable/A in cargo) - A.forceMove(drop_location()) - step_rand(A) - QDEL_LIST(cargo) - return ..() - /obj/vehicle/sealed/mecha/ripley/mk2 desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor." name = "\improper APLU MK-II \"Ripley\"" @@ -99,6 +91,110 @@ fire = 100 acid = 100 +/obj/vehicle/sealed/mecha/ripley/paddy + desc = "Autonomous Power Loader Unit Subtype Paddy. A Modified MK-I Ripley design intended for light security use." + name = "\improper APLU \"Paddy\"" + icon_state = "paddy" + base_icon_state = "paddy" + max_temperature = 20000 + max_integrity = 250 + mech_type = EXOSUIT_MODULE_PADDY + possible_int_damage = MECHA_INT_FIRE|MECHA_INT_CONTROL_LOST|MECHA_INT_SHORT_CIRCUIT + accesses = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) + armor_type = /datum/armor/mecha_paddy + wreckage = /obj/structure/mecha_wreckage/ripley/paddy + silicon_icon_state = "paddy-empty" + equip_by_category = list( + MECHA_L_ARM = null, + MECHA_R_ARM = null, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector/seccage), + MECHA_POWER = list(), + MECHA_ARMOR = list(), + ) + ///Siren Lights/Sound State + var/siren = FALSE + ///Overlay for Siren Lights + var/mutable_appearance/sirenlights + ///Looping sound datum for the Siren audio + var/datum/looping_sound/siren/weewooloop + +/datum/armor/mecha_paddy + melee = 40 + bullet = 20 + laser = 10 + energy = 20 + bomb = 40 + fire = 100 + acid = 100 + +/obj/vehicle/sealed/mecha/ripley/paddy/Initialize(mapload) + . = ..() + weewooloop = new(src, FALSE, FALSE) + weewooloop.volume = 100 + +/obj/vehicle/sealed/mecha/ripley/paddy/generate_actions() + . = ..() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/siren) + +/obj/vehicle/sealed/mecha/ripley/paddy/mob_exit(mob/M, silent = FALSE, randomstep = FALSE, forced = FALSE) + var/obj/item/mecha_parts/mecha_equipment/ejector/seccage/cargo_holder = locate(/obj/item/mecha_parts/mecha_equipment/ejector/seccage) in equip_by_category[MECHA_UTILITY] + for(var/mob/contained in cargo_holder) + cargo_holder.cheese_it(contained) + togglesiren(force_off = TRUE) + return ..() + +/obj/vehicle/sealed/mecha/ripley/paddy/proc/togglesiren(force_off = FALSE) + if(force_off || siren) + weewooloop.stop() + siren = FALSE + else + weewooloop.start() + siren = TRUE + for(var/mob/occupant as anything in occupants) + balloon_alert(occupant, "siren [siren ? "activated" : "disabled"]") + var/datum/action/act = locate(/datum/action/vehicle/sealed/mecha/siren) in occupant.actions + act.button_icon_state = "mech_siren_[siren ? "on" : "off"]" + act.build_all_button_icons() + update_appearance(UPDATE_OVERLAYS) + +/obj/vehicle/sealed/mecha/ripley/paddy/update_overlays() + . = ..() + if(!siren) + return + sirenlights = new() + sirenlights.icon = icon + sirenlights.icon_state = "paddy_sirens" + SET_PLANE_EXPLICIT(sirenlights, ABOVE_LIGHTING_PLANE, src) + . += sirenlights + +/obj/vehicle/sealed/mecha/ripley/paddy/Destroy() + QDEL_NULL(weewooloop) + return ..() + +/datum/action/vehicle/sealed/mecha/siren + name = "Toggle External Siren and Lights" + button_icon_state = "mech_siren_off" + +/datum/action/vehicle/sealed/mecha/siren/New() + . = ..() + var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis + button_icon_state = "mech_siren_[secmech?.siren ? "on" : "off"]" + +/datum/action/vehicle/sealed/mecha/siren/Trigger(trigger_flags, forced_state = FALSE) + var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis + secmech.togglesiren() + +/obj/vehicle/sealed/mecha/ripley/paddy/preset + accesses = list(ACCESS_SECURITY) + mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE | ID_LOCK_ON + equip_by_category = list( + MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler, + MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector/seccage), + MECHA_POWER = list(), + MECHA_ARMOR = list(), + ) + /obj/vehicle/sealed/mecha/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" @@ -193,37 +289,54 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) servo = new /obj/item/stock_parts/servo(src) update_part_values() -/obj/vehicle/sealed/mecha/ripley/Exit(atom/movable/leaving, direction) - if(leaving in cargo) - return FALSE - return ..() - -/obj/vehicle/sealed/mecha/ripley/contents_explosion(severity, target) - for(var/i in cargo) - var/obj/cargoobj = i - if(prob(10 * severity)) - LAZYREMOVE(cargo, cargoobj) - cargoobj.forceMove(drop_location()) - return ..() - /obj/item/mecha_parts/mecha_equipment/ejector - name = "Cargo compartment" + name = "cargo compartment" desc = "Holds cargo loaded with a hydraulic clamp." icon_state = "mecha_bin" equipment_slot = MECHA_UTILITY detachable = FALSE + ///Number of atoms we can store + var/cargo_capacity = 15 + +/obj/item/mecha_parts/mecha_equipment/ejector/attach() + . = ..() + var/obj/vehicle/sealed/mecha/ripley/workmech = chassis + workmech.cargo_hold = src + + +/obj/item/mecha_parts/mecha_equipment/ejector/Destroy() + for(var/atom/stored in contents) + forceMove(stored, drop_location()) + step_rand(stored) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/contents_explosion(severity, target) + for(var/obj/stored in contents) + if(prob(10 * severity)) + stored.forceMove(drop_location()) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/relay_container_resist_act(mob/living/user, obj/container) + to_chat(user, span_notice("You lean on the back of [container] and start pushing so it falls out of [src].")) + if(do_after(user, 300, target = container)) + if(!user || user.stat != CONSCIOUS || user.loc != src || container.loc != src ) + return + to_chat(user, span_notice("You successfully pushed [container] out of [src]!")) + container.forceMove(drop_location()) + else + if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. + to_chat(user, span_warning("You fail to push [container] out of [src]!")) /obj/item/mecha_parts/mecha_equipment/ejector/get_snowflake_data() - var/obj/vehicle/sealed/mecha/ripley/miner = chassis var/list/data = list( "snowflake_id" = MECHA_SNOWFLAKE_ID_EJECTOR, - "cargo_capacity" = miner.cargo_capacity, + "cargo_capacity" = cargo_capacity, "cargo" = list() ) - for(var/obj/crate in miner.cargo) + for(var/atom/entry in contents) data["cargo"] += list(list( - "name" = crate.name, - "ref" = REF(crate), + "name" = entry.name, + "ref" = REF(entry), )) return data @@ -232,30 +345,89 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) if(.) return TRUE if(action == "eject") - var/obj/vehicle/sealed/mecha/ripley/miner = chassis - var/obj/crate = locate(params["cargoref"]) in miner.cargo + var/obj/crate = locate(params["cargoref"]) in contents if(!crate) return FALSE - to_chat(miner.occupants, "[icon2html(src, miner.occupants)][span_notice("You unload [crate].")]") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("You unload [crate].")]") crate.forceMove(drop_location()) - LAZYREMOVE(miner.cargo, crate) - if(crate == miner.ore_box) - miner.ore_box = null + if(crate == chassis.ore_box) + chassis.ore_box = null playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) - log_message("Unloaded [crate]. Cargo compartment capacity: [miner.cargo_capacity - LAZYLEN(miner.cargo)]", LOG_MECHA) + log_message("Unloaded [crate]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) return TRUE -/obj/vehicle/sealed/mecha/ripley/relay_container_resist_act(mob/living/user, obj/O) - to_chat(user, span_notice("You lean on the back of [O] and start pushing so it falls out of [src].")) - if(do_after(user, 300, target = O)) - if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src ) - return - to_chat(user, span_notice("You successfully pushed [O] out of [src]!")) - O.forceMove(drop_location()) - LAZYREMOVE(cargo, O) - else - if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, span_warning("You fail to push [O] out of [src]!")) +/obj/item/mecha_parts/mecha_equipment/ejector/seccage + name = "holding cell" + desc = "Holds suspects loaded with a hydraulic claw." + cargo_capacity = 4 + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_MOB_REMOVING_CUFFS, PROC_REF(stop_cuff_removal)) + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Destroy() + UnregisterSignal(src, COMSIG_MOB_REMOVING_CUFFS) + for(var/mob/freebird in contents) //Let's not qdel people iside the mech kthx + cheese_it(freebird) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + RegisterSignal(arrived, COMSIG_MOB_REMOVING_CUFFS, PROC_REF(stop_cuff_removal)) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/Exited(atom/movable/gone, direction) + UnregisterSignal(gone, COMSIG_MOB_REMOVING_CUFFS) + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/proc/stop_cuff_removal(datum/source, obj/item/cuffs) + SIGNAL_HANDLER + to_chat(source, span_warning("You don't have the room to remove [cuffs]!")) + return COMSIG_MOB_BLOCK_CUFF_REMOVAL + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/ui_act(action, list/params) + if(action == "eject") + var/mob/passenger = locate(params["cargoref"]) in contents + if(!passenger) + return FALSE + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("You unload [passenger].")]") + passenger.forceMove(drop_location()) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), passenger, chassis.dir), 1) //That's right, one tick. Just enough to cause the tile move animation. + playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) + log_message("Unloaded [passenger]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) + return TRUE + return ..() + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/container_resist_act(mob/living/user) + to_chat(user, span_notice("You begin attempting a breakout. (This will take around 45 seconds and [chassis] need to remain stationary.)")) + if(!do_after(user, 1 MINUTES, target = chassis)) + return + to_chat(user, span_notice("You break out of the [src].")) + playsound(chassis, 'sound/items/crowbar.ogg', 100, TRUE) + cheese_it(user) + for(var/mob/freebird in contents) + if(user != freebird) + to_chat(freebird, span_warning("[user] has managed to open the hatch, and you fall out with him. You're free!")) + cheese_it(freebird) + +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/proc/cheese_it(mob/living/escapee) + var/range = rand(1, 3) + var/variance = rand(-45, 45) + var/angle = 180 + var/turf/current_turf = get_turf(src) + switch (chassis?.dir) + if(NORTH) + angle = 270 + if(EAST) + angle = 180 + if(SOUTH) + angle = 90 + if(WEST) + angle = 0 + var/target_x = round(range * cos(angle + variance), 1) + current_turf.x + var/target_y = round(range * sin(angle + variance), 1) + current_turf.y + escapee.Knockdown(1) //Otherwise everyone hits eachother while being thrown + escapee.forceMove(drop_location()) + escapee.throw_at(locate(target_x, target_y, current_turf.z), range, 1) /** * Makes the mecha go faster and halves the mecha drill cooldown if in Lavaland pressure. diff --git a/code/modules/wiremod/components/list/assoc_list_pick.dm b/code/modules/wiremod/components/list/assoc_list_pick.dm index 9c8e94c074a..64dbe6a0a0b 100644 --- a/code/modules/wiremod/components/list/assoc_list_pick.dm +++ b/code/modules/wiremod/components/list/assoc_list_pick.dm @@ -15,7 +15,6 @@ /obj/item/circuit_component/list_pick/assoc/make_list_port() input_list = add_input_port("List", PORT_TYPE_ASSOC_LIST(PORT_TYPE_STRING, PORT_TYPE_ANY)) - /obj/item/circuit_component/list_pick/assoc/pre_input_received(datum/port/input/port) if(port == list_options) var/new_type = list_options.value diff --git a/code/modules/wiremod/components/list/assoc_literal.dm b/code/modules/wiremod/components/list/assoc_literal.dm index a3f97cae745..f829ad08f25 100644 --- a/code/modules/wiremod/components/list/assoc_literal.dm +++ b/code/modules/wiremod/components/list/assoc_literal.dm @@ -38,15 +38,6 @@ list_options = add_option_port("List Type", GLOB.wiremod_basic_types) /obj/item/circuit_component/assoc_literal/populate_ports() - AddComponent(/datum/component/circuit_component_add_port, \ - port_list = entry_ports, \ - add_action = "add", \ - remove_action = "remove", \ - port_type = PORT_TYPE_ANY, \ - prefix = "Index", \ - minimum_amount = 1, \ - maximum_amount = 20 \ - ) AddComponent(/datum/component/circuit_component_add_port, \ port_list = key_ports, \ add_action = "add", \ @@ -56,6 +47,15 @@ minimum_amount = 1, \ maximum_amount = 20 \ ) + AddComponent(/datum/component/circuit_component_add_port, \ + port_list = entry_ports, \ + add_action = "add", \ + remove_action = "remove", \ + port_type = PORT_TYPE_ANY, \ + prefix = "Value", \ + minimum_amount = 1, \ + maximum_amount = 20 \ + ) list_output = add_output_port("Value", PORT_TYPE_ASSOC_LIST(PORT_TYPE_STRING, PORT_TYPE_ANY), order = 1.1) /obj/item/circuit_component/assoc_literal/input_received(datum/port/input/port) diff --git a/code/modules/wiremod/components/list/list_pick.dm b/code/modules/wiremod/components/list/list_pick.dm index bce3e82688f..a1e8141f3c3 100644 --- a/code/modules/wiremod/components/list/list_pick.dm +++ b/code/modules/wiremod/components/list/list_pick.dm @@ -27,39 +27,24 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL - var/index_type = PORT_TYPE_NUMBER - -/obj/item/circuit_component/list_pick/populate_options() - list_options = add_option_port("List Type", GLOB.wiremod_basic_types) - /obj/item/circuit_component/list_pick/proc/make_list_port() - input_list = add_input_port("List", PORT_TYPE_LIST(PORT_TYPE_ANY)) + input_list = add_input_port("List", PORT_TYPE_LIST(PORT_TYPE_STRING)) /obj/item/circuit_component/list_pick/populate_ports() input_name = add_input_port("Input Name", PORT_TYPE_STRING) - user = add_input_port("User", PORT_TYPE_ATOM) + user = add_input_port("User", PORT_TYPE_USER) make_list_port() - output = add_output_port("Picked Item", PORT_TYPE_NUMBER) - trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL) + output = add_output_port("Picked Item", PORT_TYPE_STRING) failure = add_output_port("On Failure", PORT_TYPE_SIGNAL) - success = add_output_port("On Succes", PORT_TYPE_SIGNAL) - - -/obj/item/circuit_component/list_pick/pre_input_received(datum/port/input/port) - if(port == list_options) - var/new_type = list_options.value - input_list.set_datatype(PORT_TYPE_LIST(new_type)) - output.set_datatype(new_type) - + success = add_output_port("On Success", PORT_TYPE_SIGNAL) /obj/item/circuit_component/list_pick/input_received(datum/port/input/port) - if(parent.Adjacent(user.value)) + var/mob/mob_user = user.value + if(!ismob(mob_user) || HAS_TRAIT_FROM(parent, TRAIT_CIRCUIT_UI_OPEN, REF(mob_user))) + failure.set_output(COMPONENT_SIGNAL) return - - if(ismob(user.value)) - trigger_output.set_output(COMPONENT_SIGNAL) - INVOKE_ASYNC(src, PROC_REF(show_list), user.value, input_name.value, input_list.value) + INVOKE_ASYNC(src, PROC_REF(show_list), mob_user, input_name.value, input_list.value) /// Show a list of options to the user using standed TGUI input list /obj/item/circuit_component/list_pick/proc/show_list(mob/user, message, list/showed_list) @@ -68,10 +53,17 @@ return if(!message) message = "circuit input" - if(!(user.can_perform_action(src, FORBID_TELEKINESIS_REACH))) + if(!(user.can_perform_action(parent.shell, FORBID_TELEKINESIS_REACH|ALLOW_SILICON_REACH|ALLOW_RESTING))) + failure.set_output(COMPONENT_SIGNAL) return + var/user_ref = REF(user) + ADD_TRAIT(parent, TRAIT_CIRCUIT_UI_OPEN, user_ref) var/picked = tgui_input_list(user, message = message, items = showed_list) - if(!(user.can_perform_action(src, FORBID_TELEKINESIS_REACH))) + REMOVE_TRAIT(parent, TRAIT_CIRCUIT_UI_OPEN, user_ref) + if(QDELETED(src)) + return + if(!(user.can_perform_action(parent.shell, FORBID_TELEKINESIS_REACH|ALLOW_SILICON_REACH|ALLOW_RESTING))) + failure.set_output(COMPONENT_SIGNAL) return choose_item(picked, showed_list) diff --git a/code/modules/wiremod/datatypes/datum.dm b/code/modules/wiremod/datatypes/datum.dm index f3faa8f5d8e..4045ee3793e 100644 --- a/code/modules/wiremod/datatypes/datum.dm +++ b/code/modules/wiremod/datatypes/datum.dm @@ -4,6 +4,7 @@ datatype_flags = DATATYPE_FLAG_ALLOW_MANUAL_INPUT|DATATYPE_FLAG_ALLOW_ATOM_INPUT can_receive_from = list( PORT_TYPE_ATOM, + PORT_TYPE_USER ) /datum/circuit_datatype/datum/convert_value(datum/port/port, value_to_convert) diff --git a/code/modules/wiremod/datatypes/entity.dm b/code/modules/wiremod/datatypes/entity.dm index e3a76892f97..437b3d7adb4 100644 --- a/code/modules/wiremod/datatypes/entity.dm +++ b/code/modules/wiremod/datatypes/entity.dm @@ -2,6 +2,9 @@ datatype = PORT_TYPE_ATOM color = "purple" datatype_flags = DATATYPE_FLAG_ALLOW_MANUAL_INPUT|DATATYPE_FLAG_ALLOW_ATOM_INPUT + can_receive_from = list( + PORT_TYPE_USER, + ) /datum/circuit_datatype/entity/convert_value(datum/port/port, value_to_convert) var/atom/object = value_to_convert diff --git a/code/modules/wiremod/datatypes/user.dm b/code/modules/wiremod/datatypes/user.dm new file mode 100644 index 00000000000..693941dcd74 --- /dev/null +++ b/code/modules/wiremod/datatypes/user.dm @@ -0,0 +1,9 @@ +/datum/circuit_datatype/user + datatype = PORT_TYPE_USER + color = "label" + +/datum/circuit_datatype/user/convert_value(datum/port/port, value_to_convert) + var/datum/object = value_to_convert + if(QDELETED(object)) + return null + return object diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm index 36fd6c5b369..dfd9845bc05 100644 --- a/code/modules/wiremod/shell/bot.dm +++ b/code/modules/wiremod/shell/bot.dm @@ -31,7 +31,7 @@ var/datum/port/output/entity /obj/item/circuit_component/bot/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) /obj/item/circuit_component/bot/register_shell(atom/movable/shell) @@ -46,4 +46,3 @@ playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) entity.set_output(user) signal.set_output(COMPONENT_SIGNAL) - diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 89aac209c83..c3ac3154d2d 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -114,7 +114,7 @@ send_message_signal = add_input_port("Send Message", PORT_TYPE_SIGNAL) show_charge_meter = add_input_port("Show Charge Meter", PORT_TYPE_NUMBER, trigger = PROC_REF(update_charge_action)) - user_port = add_output_port("User", PORT_TYPE_ATOM) + user_port = add_output_port("User", PORT_TYPE_USER) /obj/item/circuit_component/bci_core/Destroy() QDEL_NULL(charge_action) diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index 7040e554a0a..3092d3315f1 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -34,7 +34,7 @@ var/datum/port/output/entity /obj/item/circuit_component/controller/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) alt = add_output_port("Alternate Signal", PORT_TYPE_SIGNAL) right = add_output_port("Extra Signal", PORT_TYPE_SIGNAL) @@ -51,6 +51,12 @@ COMSIG_CLICK_ALT, )) +/obj/item/circuit_component/controller/proc/handle_trigger(atom/source, user, port_name, datum/port/output/port_signal) + source.balloon_alert(user, "clicked [port_name] button") + playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + entity.set_output(user) + port_signal.set_output(COMPONENT_SIGNAL) + /** * Called when the shell item is used in hand */ @@ -58,10 +64,7 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked primary button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - signal.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "primary", signal) /** * Called when the shell item is alt-clicked @@ -70,10 +73,8 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked alternate button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - alt.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "alternate", alt) + /** * Called when the shell item is right-clicked in active hand @@ -82,7 +83,4 @@ SIGNAL_HANDLER if(!user.Adjacent(source)) return - source.balloon_alert(user, "clicked extra button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) - entity.set_output(user) - right.set_output(COMPONENT_SIGNAL) + handle_trigger(source, user, "extra", right) diff --git a/code/modules/wiremod/shell/keyboard.dm b/code/modules/wiremod/shell/keyboard.dm index 4231a6dc814..05b9ded074b 100644 --- a/code/modules/wiremod/shell/keyboard.dm +++ b/code/modules/wiremod/shell/keyboard.dm @@ -27,7 +27,7 @@ var/datum/port/output/output /obj/item/circuit_component/keyboard_shell/populate_ports() - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) output = add_output_port("Message", PORT_TYPE_STRING) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) @@ -53,4 +53,3 @@ output.set_output(message) signal.set_output(COMPONENT_SIGNAL) - diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm index bffff02e5fb..4201c6afb17 100644 --- a/code/modules/wiremod/shell/module.dm +++ b/code/modules/wiremod/shell/module.dm @@ -123,7 +123,7 @@ toggle_suit = add_input_port("Toggle Suit", PORT_TYPE_SIGNAL) select_module = add_input_port("Select Module", PORT_TYPE_SIGNAL) // States - wearer = add_output_port("Wearer", PORT_TYPE_ATOM) + wearer = add_output_port("Wearer", PORT_TYPE_USER) deployed = add_output_port("Deployed", PORT_TYPE_NUMBER) activated = add_output_port("Activated", PORT_TYPE_NUMBER) selected_module = add_output_port("Selected Module", PORT_TYPE_STRING) diff --git a/code/modules/wiremod/shell/moneybot.dm b/code/modules/wiremod/shell/moneybot.dm index 46a834e2d60..20eb596eb72 100644 --- a/code/modules/wiremod/shell/moneybot.dm +++ b/code/modules/wiremod/shell/moneybot.dm @@ -95,7 +95,7 @@ /obj/item/circuit_component/money_bot/populate_ports() total_money = add_output_port("Total Money", PORT_TYPE_NUMBER) money_input = add_output_port("Last Input Money", PORT_TYPE_NUMBER) - entity = add_output_port("User", PORT_TYPE_ATOM) + entity = add_output_port("User", PORT_TYPE_USER) money_trigger = add_output_port("Money Input", PORT_TYPE_SIGNAL) /obj/item/circuit_component/money_bot/register_shell(atom/movable/shell) diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 3530146f1a2..43a6130c773 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -37,10 +37,22 @@ if(timer_id) deltimer(timer_id) +/obj/item/organ/internal/zombie_infection/on_insert(mob/living/carbon/organ_owner, special) + . = ..() + RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(organ_owner_died)) + +/obj/item/organ/internal/zombie_infection/on_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) + +/obj/item/organ/internal/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed) + SIGNAL_HANDLER + qdel(src) // Congrats you somehow died so hard you stopped being a zombie + /obj/item/organ/internal/zombie_infection/on_find(mob/living/finder) - to_chat(finder, "Inside the head is a disgusting black \ + to_chat(finder, span_warning("Inside the head is a disgusting black \ web of pus and viscera, bound tightly around the brain like some \ - biological harness.") + biological harness.")) /obj/item/organ/internal/zombie_infection/process(seconds_per_tick, times_fired) if(!owner) diff --git a/config/config.txt b/config/config.txt index 5d474598f0c..e28385e0f44 100644 --- a/config/config.txt +++ b/config/config.txt @@ -424,8 +424,8 @@ MINUTE_CLICK_LIMIT 400 ## Game Chat Message Options ## Various messages to be sent to connected chat channels. -## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4. -## If using TGS4, the string option can be set as one of more chat channel tags (separated by ','s) to limit the message to channels with that tag name (case-sensitive). This will have no effect on TGS3. +## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS>=4. +## If using TGS>=4, the string option can be set as one of more chat channel tags (separated by ','s) to limit the message to channels with that tag name (case-sensitive). This will have no effect on TGS3. ## i.e. CHANNEL_ANNOUNCE_NEW_GAME chat_channel_tag ## Which channel will have a message about a new game starting, message includes the station name. diff --git a/config/jobconfig.toml b/config/jobconfig.toml index fb9cfdc561e..949228e3680 100644 --- a/config/jobconfig.toml +++ b/config/jobconfig.toml @@ -60,6 +60,13 @@ "Spawn Positions" = 1 "Total Positions" = 1 +[BITRUNNER] +"# Playtime Requirements" = 0 +"# Required Account Age" = 0 +"# Required Character Age" = 0 +"# Spawn Positions" = 3 +"# Total Positions" = 3 + [BOTANIST] "Playtime Requirements" = 0 "Required Account Age" = 0 diff --git a/html/changelogs/AutoChangeLog-pr-25048.yml b/html/changelogs/AutoChangeLog-pr-25048.yml new file mode 100644 index 00000000000..bad54137c41 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25048.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - rscadd: "The mother hallucination has more possible one-liners now." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25090.yml b/html/changelogs/AutoChangeLog-pr-25090.yml new file mode 100644 index 00000000000..92f1e62358a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25090.yml @@ -0,0 +1,7 @@ +author: "xXPawnStarrXx" +delete-after: True +changes: + - rscadd: "Added a stone griddle" + - rscadd: "Added a seed shelf & produce bin" + - rscadd: "Crafting recipes for stone cooking structures." + - rscadd: "Crafting recipes for Paxil's fences." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25093.yml b/html/changelogs/AutoChangeLog-pr-25093.yml new file mode 100644 index 00000000000..789c10101da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25093.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - spellcheck: "The Grey ID Cargo Crate is now spelled properly." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25095.yml b/html/changelogs/AutoChangeLog-pr-25095.yml new file mode 100644 index 00000000000..c7b8da7bcba --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25095.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "selling large amount of mats in cargo should not give you infinite credits" + - bugfix: "runtime when adjusting material market after buying" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25096.yml b/html/changelogs/AutoChangeLog-pr-25096.yml new file mode 100644 index 00000000000..cb8f313d98f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25096.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - spellcheck: "Nukie and ERT defibrillators now reference combat mode instead of intents." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25097.yml b/html/changelogs/AutoChangeLog-pr-25097.yml new file mode 100644 index 00000000000..0460dbc2906 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25097.yml @@ -0,0 +1,5 @@ +author: "Rhials" +delete-after: True +changes: + - rscadd: "Nuclear Operatives, in an attempt to appeal to the more \"tacticool\" members of their cause, have begun using callsigns to designate themselves. Check your preferences to set your Operative Alias!" + - qol: "At the request of the more vain members of the cause, hair dye has been added to the Operative Firebase dorms." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25098.yml b/html/changelogs/AutoChangeLog-pr-25098.yml new file mode 100644 index 00000000000..491c8d526bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25098.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "fixes bug that was preventing high luminosity eyes' light from turning on" + - bugfix: "fixes eyes being on the wrong side of the head when facing east/west" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25099.yml b/html/changelogs/AutoChangeLog-pr-25099.yml new file mode 100644 index 00000000000..ddbeae20462 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25099.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Chat shouldn't bluescreen at the start of the round" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25101.yml b/html/changelogs/AutoChangeLog-pr-25101.yml new file mode 100644 index 00000000000..19ba0c4844b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25101.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Hydrotrays consume nutrients according to their proportion in the mix, instead of randomly picking reagents to consume every cycle." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25102.yml b/html/changelogs/AutoChangeLog-pr-25102.yml new file mode 100644 index 00000000000..c4da3b5dc54 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25102.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Stopped a DS crash when shooting a rebar crossbow in specific circumstances." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25104.yml b/html/changelogs/AutoChangeLog-pr-25104.yml new file mode 100644 index 00000000000..869ac142d5b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25104.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - qol: "Nearly every ghost alert should now feature a \"VIEW\" button, even those with click interaction." + - rscdel: "Ghost alerts no longer show the entire message in the tooltip, instead have been replaced with titles." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25107.yml b/html/changelogs/AutoChangeLog-pr-25107.yml new file mode 100644 index 00000000000..7918dc3f983 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25107.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - spellcheck: "Some roundstart tips have been made clearer regarding \"suits\" vs. \"exosuits\"." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25108.yml b/html/changelogs/AutoChangeLog-pr-25108.yml new file mode 100644 index 00000000000..ec9fd68298c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25108.yml @@ -0,0 +1,6 @@ +author: "OrionTheFox" +delete-after: True +changes: + - bugfix: "fixed the Face Scarf not changing the icon correctly when toggled" + - bugfix: "fixed Vapes checking for digitigrade legs, rather than muzzles" + - image: "added muzzle compatibility to the Face Scarf" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25109.yml b/html/changelogs/AutoChangeLog-pr-25109.yml new file mode 100644 index 00000000000..2c3779c6e08 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25109.yml @@ -0,0 +1,5 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "debug chem synthesizer works again. cleaned up chem dispenser, portable chem dispenser & debug chem synthesizer ui code" + - qol: "ui for displaying beaker reagents for debug chem synthesizer has been improved. Now displays input list for adding reagents" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25111.yml b/html/changelogs/AutoChangeLog-pr-25111.yml new file mode 100644 index 00000000000..d00724e8b7e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25111.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Hardcore Random will no longer assign incompatible quirks." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25112.yml b/html/changelogs/AutoChangeLog-pr-25112.yml new file mode 100644 index 00000000000..0f52679c545 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25112.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Admins can spawn bitrunning events (again!)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25113.yml b/html/changelogs/AutoChangeLog-pr-25113.yml new file mode 100644 index 00000000000..0667bc5d120 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25113.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "Delam counter will correctly show 0 the shift after a delam" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25115.yml b/html/changelogs/AutoChangeLog-pr-25115.yml new file mode 100644 index 00000000000..3eeba8e2030 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25115.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - rscdel: "Heretic side path points are gone" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25116.yml b/html/changelogs/AutoChangeLog-pr-25116.yml new file mode 100644 index 00000000000..1340b07112d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25116.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "fixed a race condition with mutations" \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index f8ffcd6f7c3..e1b0edc1d52 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -420,3 +420,709 @@ - rscadd: Medical cyborg crew pinpointer uncommented zeroisthebiggay: - image: huds +2023-11-02: + Iajret: + - bugfix: fixed blueshift ordnance chambers and, probably, doppler array + SkyratBot: + - qol: The RPD now accepts upgrade disks inserted by hand, as well as their original + method of hitting the disk with the RPD + - rscdel: Remove duplicate HoP shutter from birdshot + - qol: There is now a more convenient way to prompt surrender to emote - the Security + Pen. Each officer is equipped with one in their PDA. Simply click someone with + it to prompt a 30-second surrender. They are printable at Security Techfab as + well. + - qol: Penlights now are printable at Medical Techfab. + - image: Penlights got a new cleaner sprite to replace its ancient one + - code_imp: The code for Penlight's holographic sign has been improved. + - bugfix: Non-human mobs can hallucinate their mothers without causing a runtime + error + - rscdel: Removed duplicate northstar message monitor computer + - spellcheck: basic mobs getting shoved by humans now display the mob's disarm response + - refactor: Proteon constructs now use the basic mob framework. The ones encountered + in ruins are a bit flightier now, and will briefly flee combat if attacked - + only so that they can return and menace you again soon after. Please report + any bugs. + - bugfix: plumbing reaction chamber will attempt to balance the ph of the solution + a maximum of 5 times before giving up and thus preventing infinite loops, high + tick usage + - rscdel: Remove duplicate syndi turret on waystation ruin + - rscdel: Remove duplicate machinery from russian derelict + - rscdel: Remove duplicate atmos fire alarm, cargo air alarm, and chemistry shutter + from icebox. + - bugfix: plumbing bottler now only deals with bottles, beakers similar stuff but + not pills, patches, syringes or anything than can hold reagents. That & slime + extracts, slime industrial extract & shotgun shell + - qol: Steam vents in maintenance now have tooltips. + deathrobotpunch1: + - rscdel: Removed the biometric scanning toggle from the PENLITE holobarrier +2023-11-03: + Melbert: + - balance: Changelings gutted by Megafauna now take 8x as long to finalize revival + stasis (~5 minutes). + SkyratBot: + - bugfix: Basic mobs will no longer randomly walk into terrain that harms or kills + them. + - bugfix: Space carp that arrive via rifts are no longer stricken with rift travel + related sickness that causes them to become weaker. + - bugfix: Possessed blades can attempt to channel spirits again + - bugfix: venus human traps heal in kudzu again + - spellcheck: The Mothic Rations Chart poster description now mentions Sparkweed + Cigarettes rather than Windgrass + - bugfix: You can no longer eavesdrop on nearby borgs' radio comms if they're using + encryption keys + - bugfix: Fix fireplace smoke particles to work properly with all directions + - bugfix: Gorilla and dexterity holoparasite can now take things out of the backpack + while holding it in his hand. + - code_imp: creatures in cowboy boots will retaliate properly + - rscadd: Added some clarity to the range of netpods (4 tiles) in their exam text. + - bugfix: Bubblegum should no longer teleport out of the simulation when threatened + - rscdel: Chamber of Echoes map removed as it conflicts with the actual Legion + - bugfix: Heretics won't lose their living heart while bitrunning anymore. + ninjanomnom: + - bugfix: Fixes turrets being invisible when they shouldn't be +2023-11-04: + Melbert: + - admin: Admins without `R_POLL` no longer have access to "Server Poll Management", + not that they could have used it anyways. + SkyratBot: + - rscadd: Added a new fishing map to bitrunning. + - rscadd: You are no longer limited to pina coladas on the beach bar domain. Cheers! + - rscdel: Removed a extra coffee pot in birdshot's security breakroom + - bugfix: Added feedback for both extractor and extractee while using fulton extraction + packs. + - qol: Extraction packs now have better exam text. + - refactor: Shades now use the basic mob framework. Please report any bugs. + - qol: Character preferences now have descriptions as tooltips - hover over their + names to see them + - balance: Gorillas, Seedlings, Gold Grubs, Mooks, Constructs, Ascended Knock Heretics, + Fugu and mobs subject to a Fugu Gland now rip up walls in a slightly slower + but more cinematic way. + - bugfix: Softspoken quirk will no longer be applied to sign language + - rscdel: 'Remove duplicate machinery from Metastation: morgue disposal bin, medical + break room air alarm, and IV drip in permabrig medroom' + - bugfix: Fixes midround selection for observers + - refactor: The way mobs get specialized actions (like revenants shocking lights + or regal rats summoning rats to their side when you slap them) have been modified, + please report any bugs. + Syrox25: + - bugfix: Cargo loaders are once again disposal and dishwasher safe + Tattle: + - bugfix: you should now be able to scrub through the library without lagging the + server + Zergspower: + - bugfix: Bounties - Virus bounties work once more + jjpark-kb: + - balance: seed meshes now cost 1 plate, 2 chains instead of 1 plate, 4 chains + - balance: seed meshes now will take 5 seconds to uncover any potential seeds instead + of 10 seconds + - balance: seed meshes will now have a 30% chance to produce a seed instead of 15% + - qol: seed meshes will now loop your sand until you do not have enough sand/basalt + vinylspiders: + - bugfix: Empowered borer eggs and cybernetic eyes can no longer be given as a result + of bioscrambling a mob. +2023-11-05: + Melbert: + - code_imp: Removed species death and species hitby, replaced any uses with signals. + SkyratBot: + - bugfix: Fugu can correctly destroy walls when they get big. + - bugfix: The HFR will not print out a piece of paper every time you multitool it, + saving any desired energy to use for more useful processes. + - admin: Holobarrier creation now adds player fingerprint data + Tattle: + - bugfix: paintings can once again be filtered + timothymtorres, Rahlzel: + - sound: Port salute emote sound from Colonial Marines SS13 attributed to Rahlzel +2023-11-06: + LT3: + - code_imp: Emergency shuttle announcements no longer use hardcoded values + - code_imp: Central Command announcements now correctly use its new name when changed + - spellcheck: Consistency pass on event announcements + - qol: Holobarriers will match the spray paint colour of their projector + SkyratBot: + - bugfix: Mafia games can now start properly. + - bugfix: reagent volumes should be consistent & non breaking across plumbing & + chemistry as a whole + - bugfix: plumbing reaction chambers are more proactive. Will attempt to take in + reagents more frequently + - rscdel: Remove duplicate lighting from beach bar domain + - bugfix: Basic mobs using JPS can move again + jjpark-kb: + - qol: worm fertilizer is now a stackable item + - balance: worm farms produce faster + - balance: you can now feed worms single pieces of food in the same time as plant + bag feeding + nikothedude: + - bugfix: Synthetic slash wounds now mangle exterior instead of interior +2023-11-07: + Melbert: + - rscadd: Fishers can now try their luck at fishing out of hydroponics basins. + Rhials: + - code_imp: The notify_ghosts proc has been cleaned up. Please report any abnormal + changes in deadchat notification behavior. + - qol: The on-screen deadchat popups now contain the notification blurb when hovered + with your mouse again. + SkyratBot: + - bugfix: fixed a couple missing and misplaced disposals pipes on metastation + - qol: Improve the emote help verb to be more user friendly + - bugfix: You will now only become blackout drunk if you've actually been drinking. + - bugfix: Observers should stop being notified that a nameless entity is blacking + out. + - balance: paraplegic is no longer exclusive with spacer or settler or spacer. Broken + legs don't discriminate! + - bugfix: walls built next to firelocks no longer hold onto their alarms + - code_imp: added some trailing commas in lists that were missing them, fixed a + typo in comments + - bugfix: Reagent lookup in chem dispensers now shows correct reagent metabolization + rates + - bugfix: tails will no longer keep wagging even in death + - qol: Make notepad available for everyone, who has only laptop or console. + SpaceLove: + - rscadd: Nanotrasen has removed combat restrictions over Nightvision Cybernetic + Eyes and it is now readily available in advanced cybernetic implants for all + your nightly adventurers! + - rscdel: Nanotrasen medical ethics boards has deemed the militarygrade implants + such as Thermal eyes implant too risky to keep around in medical techfab, therefore + they have been handed over to Robotics only. + nikothedude: + - qol: Rewrote most preference entry descriptions to be more useful +2023-11-08: + LT3: + - bugfix: Maximum smoothing turf groups now includes cliffs + - bugfix: Tramstation floor tiles will correctly get custom station colors when + they exist + SkyratBot: + - bugfix: The screen alert should no longer break ghost UI when it's huge + - rscadd: Added a user type to integrated circuits + - bugfix: Both magic mirrors and regular mirrors are far better at respecting the + choice of the beard you wish to wear (within reason, of course). + - bugfix: fixes synthflesh not dealing and in fact healing toxin damage. + - bugfix: Fix light eater affecting lava, space, openspace, and transparent turfs + - bugfix: Nuclear operative induction implants now work correctly on antagonists + and fail on non-antagonists + - config: The bitrunner job now has a default config for server owners. + - image: Several holidays now have themed floor and tram tiling. + - qol: Light switches have tooltips, and may now be deconstructed with right click + using a screwdriver. + - rscadd: Being sufficiently drunk now has a chance to cause working out to fail + and harm you + - balance: sets the leaper move and pull forces to strong + - rscadd: Maltroach bar sign! + - bugfix: All vehicles (such as VIMs operated by a mouse or a lizard) will no longer + be able to phase through containment fields. + - bugfix: Slimes now need to be on an open turf to reproduce and split into more + slimy slimes, instead of getting away with using phasing powers in pipes. + jjpark-kb: + - rscadd: you can place torches on walls (closed turfs) now +2023-11-09: + Bumtickley00: + - spellcheck: You no longer hear weaponelding when deconstructing a closet. + LovliestPlant: + - rscadd: Adds links to any special rules or metaprotections to antag's objective + panels. + Majkl-J: + - bugfix: Flavor text should no longer bluescreen + Melbert: + - rscadd: Anomalies, portals, and bluespace rifts will now wibble a bit. + Nerev4r: + - rscadd: The holocigar is now public. + SkyratBot: + - balance: Flightpotion wings will no longer make health analyzers list you as nonhuman. + - balance: Harnessing Shoreline Quay (bluespace energy, probably), a mystical energy + (total bullshit) that permeates the Astral Waterways (bluespace quantum dimensions, + probably), Sleeping Carp users can now once against deflect projectiles with + their bare hands when focused in on battle (in combat mode). + - balance: The Keelhaul technique is now nonlethal (a philosophical acknowledgement + of the familial bond of sleep and death), but causes the target to become temporarily + blind and dizzy along with its previous effects. + - balance: Sleeping carp users, while in combat mode, deal Stamina damage with their + grabs and shoves. If the target of their grab has enough Stamina damage (80), + they are knocked unconscious from a well placed nerve pinch. + - balance: Sleeping carp users find it very hard to wake up once they fall asleep.... + - bugfix: Material market buy buttons greys out correctly and thus prevent you from + placing orders that exceeds the available budget. +2023-11-10: + CacheAtWork: + - rscdel: Removed a modular fermentation recipe from soybean; preventing override. + Nerev4r: + - bugfix: Snails now properly don't have any bones. + - qol: Snail limbs and tongue are now available in the limb grower. + Paxilmaniac: + - rscadd: A new quirk has been added, called "Ration Ticket Receiver" for zero points. + What does it do? In exchange for half of your paycheck, you'll get a ticket + every few paychecks that'll let you exchange it for your 1855 Passenger Act + mandated rations! + SkyratBot: + - spellcheck: Renamed Knock to Locks, and changed most of the flavor text of knowledge + gain, and renamed some items and knowledges from the path. + - bugfix: plumbing factories should not rarely/randomly brick at volumes like 0.9999(when + in fact it should have been 1) + - qol: Adds the capability for some player-controlled mobs with ranged attacks to + repeatedly fire their natural weapons by holding down the mouse button. + - rscadd: Three new plants; Peppercorn, Saltcane and Butterbeans. + - rscadd: Soysauce fermentation to soybeans. + - rscadd: Saltcane can be dried into a replacement seaweedsheet for sushi. + - balance: Venus human traps now take 12.5 damage per second instead of 20 while + off kudzu. + - bugfix: Nanotrasen has clarified an issue with their manual publishers, and these + guides should now contain actual user-pertinent content. + - qol: machines/devices that ask you to pick a reagent name from an input list have + their names sorted alphabetically & preserves white space between words making + them more readable. + - qol: improves performance of plumbing reaction chamber furthur + - code_imp: cleaned up code for portable chem mixer & chem dispenser. converted + their ui to typescript + - rscdel: Removed duplicate shutter from HoP office in birdboat, air alarm in northstar + maint, and portable air pump in northstar maint. + - bugfix: Fix holodeck items from being juiced or grinded with a biogenerator or + pestle and mortar + - rscadd: Enginenering rebar crossbows + tot kit + - rscadd: Added a bunch of ammos and crafting junk to make the ammo exist + - image: added icond for all the above + - code_imp: removed order history, import & export value from cargo & economy subsystems. + Allow supply packs to be properly deleted. In general memory savings + - qol: Bandolier can quick gather items now. + - balance: Bandolier capacity increased to 24 and can carry .357 ammo now. + - bugfix: Examining circuit boards now displays their detailed names(tier included) + correctly if required. + SomeRandomOwl: + - qol: Department Heads REJOICE! You now start with departmental budget cards in + your locker! And just so the captain doesn't feel lonely they get one too for + all the assistants that run around. + TiberianEuan: + - image: added blank white ipc screen + TwistedSilicon: + - bugfix: Cryo cells now use their direction to orient their initial connection + instead of defaulting to South. + Zxaber, DrDiasyl, Maurukas: + - rscadd: A new security-focused combat mech, the Paddy, has been added, intended + to be particularly helpful for lone sec officers. You will find one in the Security + main office, and a replacement can be built with late-game mech research. + - bugfix: Ripley MK-I and MK-II mechs no longer qdel their stored items when destroyed. + honkpocket: + - rscadd: The reagent weapons made with the forging stations can be renamed and + redescribed. + - bugfix: Fixes more unintended taur clothing cropping. + projectkepler-ru: + - rscadd: a gun beacon option for the NTC to pick between two of his magnum pistol + choices, fully modular and can be messed with by anyone in the future if more + guns are added. + sqnztb: + - bugfix: soulcatchers' edit name button correctly displays the host name + vinylspiders: + - bugfix: zippo sound effect now only plays for zippo lighters + - bugfix: big mortar can no longer grind/juice holograms + - bugfix: Hearthkin/primitive demihumans will now spawn with their quirks when using + a character loadout + - bugfix: in the loadout manager, trying to name a loadout item that has not been + checked will now inform user that they need to select the item first + - bugfix: the TG barsigns will now use emissives (aka, they will glow in the dark) + - bugfix: skyrat signs will give off small amounts of neon colored neon light like + TG signs do + - image: cyberslyph barsign (the only 96x96 sign) is now useable in the game, and + uses emissives. + - image: added some emissive light masks for a few of the skyrat barsigns + - refactor: converted the modular barsigns file to 64x32, and added a separate file + for 96x96 signs along with modular support for large signs + zergspower: + - balance: NPC Syndicate Shotgunners range requirement returned +2023-11-11: + Iajret: + - qol: SM airalarms on VoidRaptor and Blueshift now actually reads atmos from SM + chamber. + Plum-but-gayer: + - rscadd: Added a new oversized synthetic stomach, for oversized synths. + - bugfix: Fixed oversized synths spawning with organic stomachs. + - image: added a sprite for the oversized synth stomach. It's a lil jank, sorry! + SkyratBot: + - image: Adds yet another bar sign, this one mining themed + - balance: Snails no longer receive blunt wounds, meaning sharp weapons can dismember + them more easily + - balance: Slimes can no longer receive dislocations + - bugfix: Fix mapping linter not identifying duplicate blacklisted objects on a + turf + - code_imp: Add a mapping linter to check for stacked machinery + - rscadd: New Oranges' Juicery bar sign for the OJ connoisseurs. + - bugfix: fixed engi crossbow being able to be used onehanded + ability to craft + with sci inducers + - qol: Ordnance burn, freezing and supermatter chamber air alarms now show the air + contents on the tile of the connected sensor inside the chamber. + Zergspower: + - bugfix: Interdyne Medbay no longer has to worry about a mask that wont go away + if you touch it +2023-11-12: + Melbert: + - bugfix: Split persons can talk to their host once again + - rscdel: The Stethoscope no longer tells you if the target is missing a heart or + lungs. Now, it will simply say the target is lacking a pulse or not breathing. + - bugfix: AI controlled mobs which are immobilized are now properly immobilized + - bugfix: People with copied memories can modify their bank account ID as normal. + Motho: + - bugfix: NanoTrasen remembered to equip the NSV Blueshift with an APLU Paddy. + SkyratBot: + - spellcheck: Fixed typos in the examine text for the lead pipe & lead-acid battery. + - rscdel: Remove duplicate windows from birdshot, delta, and anomaly research ruin. + - refactor: Guardians/Powerminers/Holoparasites now use the basic mob framework. + Please report any unexpected changes or behaviour. + - qol: The verbs used to communicate with, recall, or banish your Guardian are now + action buttons. + - balance: If (as a Guardian) your host moves slightly out of range you will now + be dragged back into range if possible, rather than being instantly teleported + to them. + - balance: Protectors now have a shorter leash range rather than a longer one, in + order to more easily take advantage of their ability to drag their charge out + of danger. + - balance: Ranged Guardians can now hold down the mouse button to fire automatically. + - balance: People riding vehicles or other mobs now inherit all of their movement + traits, so riding a flying mob (or vehicle, if we have any of those) will allow + you to cross chasms and lava safely. + - rscadd: 4 new space ruins + jjpark-kb: + - rscadd: you can farm plants and ants on dug snow + - balance: you must now dig the basalt to farm plants and ants +2023-11-13: + DATA_: + - spellcheck: The examine message for a carbon with an empty golem stomach now properly + matches said carbon's gender. + Iajret: + - bugfix: fixed delta's ntrep office flying light and disposals + Melbert: + - bugfix: Fix being unable to resist out of ice cubes + Plum-but-gayer: + - rscadd: Bureaucrats rejoice! Clipboards and folders are now available in the loadout + menu, under the 'Other' tab. + SSensum: + - admin: Admin opfor panel now requires a R_ADMIN flag instead of R_AUTOADMIN flag. + SkyratBot: + - bugfix: Ashwalker Tendril Revives no longer ghost the player being revived. + - bugfix: Replaces the jetpack in Interdyne pirates' suit storage with air tanks. + They need to breath, and already got the suit for speed. + - bugfix: '[Mafia] Obsessed now knows who their target is in their role description, + and people playing on PDA are told in their chat.' + - rscadd: With the flood of Chi within the Spinward Sector receding, various masters + of The Tunnel Arts, colloquially known as 'Maint-fu Masters', have started to + refine the basics of their martial techniques. New forms have started to develop + within Spacestation 13's hidden maintenance dojos. + - rscadd: Someone shoved off-balance makes them vulnerable to more guaranteed unarmed + strikes, knockdowns from a successful punch, and more difficult to escape grabs. + - rscadd: Grabbing someone (as well as kicking them while they're on the floor) + makes them more vulnerable to taking unarmed attack damage, even if they have + armor. + - balance: Unarmed strikes made with human-equivalent limbs have higher damage floors, + meaning you overall do more damage on average while not increasing the overall + damage potential. It's more consistent! + - refactor: Significantly changed how punching accuracy and knockdowns are calculated. + - balance: Golem and mushroom limbs are a lot more effective at punching as a result + of these various changes. As they should be. + - bugfix: emped bar signs will now display the correct sprite + - image: added a more detailed lightmask for the emp bar sign sprite + - bugfix: Goats will now calm down after getting grumpy without causing a runtime + error. + - bugfix: fixes holodeck missing medical tools + - spellcheck: Made the remembrance day greeting message more tasteful. + - bugfix: The Dread Disciples of Maint Khan, notorious Tunnel Arts practitioner + and maintenance warlord, have been driven from Nanotrasen stations within the + Spinward Sector. The average punch accuracy has been increased as a direct result, + with the most exhausted puncher now having a max potential inaccuracy of 80%, + rather than the absurd 20% of the Disciples. + chemistrymain2: + - qol: Mold mobs now delete on death. + - bugfix: Toxic molds now correctly use a toxic spider instead of a guard spider + as their mob + delingar: + - balance: cortical borer's sprite is much smaller + - balance: cortical borers are squashable now + - bugfix: fixed cortical borer's chemicals from blood objective + honkpocket: + - rscadd: Adds the Syndicate Rebar Crossbow to the OPFOR loadout. + - rscadd: Adds the Sawn-off Hook Shotgun to the OPFOR loadout. + - bugfix: The recharger kit supplied along with various laser-guns in the OPFOR + menu now actually contains items. + - rscdel: Removes unusable Cultist melee weapons from the OPFOR loadout. + vinylspiders: + - bugfix: legally purchased suppressors no longer give illegal tech when deconstructed +2023-11-14: + Danny Boy: + - bugfix: Fixed Signer eyebrow raising/lowering indicators and emotes + - bugfix: Fixed Signer RuneChat punctuation + - bugfix: Signers no longer sign with their species' tongue + Melbert: + - balance: Body temperature from being lit on fire will soft cap at 1,200 K. It + will still increase beyond this, but with diminishing returns. For example, + at 5,000 K, fire will heat 67x weaker. + - bugfix: Fixes some potential exploits and issues involving shielded equipment. + Rhials: + - bugfix: The full mining lockers in the Lavaland Mafia map have been replaced with + (empty) mining carts. + SkyratBot: + - bugfix: tramstation cargo disposals outlet has been repositioned to not softlock + whoever cannot lay down + - bugfix: fixes half-covering glassware protecting eyes from chemicals + - bugfix: suite storage units can be locked again. Remember to install a card reader + or set the access levels in the airlock electronics inside its stock parts & + finally swipe your ID to properly enforce access control. + - bugfix: You can now eject blank IDs from modular computers + - refactor: gutlunches have been refactored into basic mobs. please report any bugs + - rscadd: ashwalkers have a small ranch they can manage + - bugfix: wall tearer compnent wont runtime when interacting with mineral walls + - qol: Fixed/improved feedback when failing to apply a direct law change to a cyborg. + - bugfix: Borgs who are unsynced from a malf AI now lose the zeroth law as intended. + - code_imp: Atoms no longer break again after they are hit when broken, making them + hopefully more stable in the future. + - bugfix: The Sleeping Carp scroll no longer says deflect using throw mode. + - bugfix: Fixed tcomms relays being weird, they should be sabotagable again + - qol: 'Gunpoint: Examining the target will show who is holding them at gunpoint' + - qol: 'Gunpoint: Examining the shooter will show who they are holding at gunpoint' + - balance: 'Gunpoint: If the target tries to grab, they will trigger the shot' + - balance: 'Gunpoint: If the target or the shooter are shoved, it will cancel the + gunpoint' + - balance: 'Gunpoint: If the target is pulled, it will cancel the gunpoint' + - balance: Both the target and the shooter can't be bumped anymore to avoid cheesing + charged shot or removing the gunpoint by just moving around + - bugfix: Clicking the alert button of the shooter will now correctly remove gunpoint + - bugfix: fixed pipe painter not applying pipe color properly + - qol: made spraycans work also as pipe painters + - qol: spraycans now have basic color presets for quick selection + - rscadd: Add bamboo seeds to ash walker den. This lets them craft blowguns, crude + syringes, bamboo spears, punji stick traps, and more! + - code_imp: Quirks are now customizable on the quirks page instead of on the character + prefs page + - bugfix: Kronkaine's action speed buff now stops when metabolized out. + - bugfix: Drug-related moodlets should now time out properly. They still linger + after metabolization ends, but they no longer last forever. + - bugfix: The PDA painter and the emergency shield generator can now be destroyed. + - rscadd: Green Beer has an overdose effect now. It will permeate your skin. + - balance: Mech overclock coefficient is down to 1.25 from the default 1.5 for Ripley + and Clarke. + - balance: Mech overclock heating now scales with movespeed, higher speed - faster + overheat. + - bugfix: Removes some roundstart active turfs. + - image: Resprites the Reactive Anomaly Armor + - bugfix: Gorillas and Regal Rats will no longer show up in the ghost-control menu + if they died without anyone ever taking control of them. + Vishenka0704: + - bugfix: Now you can refuse the pirates request. + honkpocket: + - bugfix: The SC/FISHER side-arm is now available in the OPFOR loadout. +2023-11-15: + LT3: + - bugfix: Bad luck omen again raises your chance of getting shocked by the tram + plate + - bugfix: Tram plate checks and energizes when the tram is moving + - code_imp: Omen component now applies the cursed trait + Melbert: + - bugfix: Fixes hallucination and encrypted announcements printing to the Newscaster. + Nerev4r: + - bugfix: Kicks are no longer supercharged by the dark energies of the Satsui no + Hado, making them no longer do a billion damage. + Shroopy: + - bugfix: Molotovs now light their splashed contents on fire. + SkyratBot: + - bugfix: PDAs now log that they've been emagged, but will no longer log any further + programs they open beyond that. This means Nukies don't sell themselves out + by opening their disk tracking app. + - qol: looms will now attempt to loop through stackable items (cotton as an example) + - qol: You will no longer be added to the list for ghost-orbit role polls if you + have opted out of getting antag ghost roles in your preferences. + - qol: You will get a tgui_alert to accept the ghost role if you were selected via + the orbit poll, instead of it just throwing you intot he role. + - refactor: Destructive Analyzers now have a TGUI menu. + - bugfix: Safeties in the code have been added to prevent things in disposals going + into nullspace whenever they get ejected from a pipe - you will just magically + spawn at the turf that you were meant to be flung towards. + - balance: Sapient brimdemons can't hurt themselves with their own beams + - bugfix: bileworms will now attack + - bugfix: The plaguebearer can no longer depower virology on Tramstation + - spellcheck: hopefully changed all instances of the word 'mjolnir' to 'mjollnir' + StrangeWeirdKitten: + - rscdel: Removes the omni-lathe from blueshift secure tech storage. Replaces it + with some law modules. + TwistedSilicon: + - bugfix: invisimin verb now makes you invisible to all HUDs too! No more floating + healthbars or job identifiers giving you away while you sneak around. + san7890, Ghommie: + - bugfix: The Blessing of Insanity now grants no damage slowdown and free hyperspace + movement correctly. + vinylspiders: + - bugfix: Adds a bitrunning version of the double esword that has a 75% block rate + - bugfix: fixed a bug where loadout plushes would sometimes have their custom descriptions + reset under certain conditions + - refactor: fixed hard dels associated with anesthetic machine, & the mask item + will now cause ci to fail when placed via mapping + - bugfix: you no longer have to violently beat the anesthetic machine to death with + the anesthetic tank to load it + - bugfix: fixed a bug that would cause the anesthetic machine to become unusable + when a mask gets destroyed (e.g., in a fire or explosion) + - bugfix: fixes some of the runtimes in the loadout system caused by job/species + restricted items +2023-11-16: + Hatterhat: + - balance: Disabler SMGs and laser carbines (the full-auto sidegrades to the disabler + and laser gun, respectively) are now available for purchase through Microstar. + - balance: Cargo now stocks laser gun and energy gun crates again, which means that + they can be ordered through security's dep-order console. + Majkl-J: + - qol: Bluespace miner now has visual indication to its status and problem + - sound: The sound on the bluespace miner is no longer earpiercingly loud + - image: Added lights to the bluespace miner + - refactor: Refactored bluespace miner code + Melbert: + - code_imp: General heart code cleanup. + - bugfix: Heartbeat sound effects are no longer sourced to the exact tile you fell + into crit at + - bugfix: Abductors glands are less likely to become invisible or look wrong + - bugfix: Ethereal hearts are less likely to become invisible or look wrong, and + now properly spawn with their shine overlay + - image: Adds heartbeat animation to beating Ethereal Hearts + Motho: + - image: The FTU has replaced their aging fleet of advanced shipping containers. + Sector 13 is among the first few localities to enjoy them. + SkyratBot: + - qol: Dead human examines count as "soul departed" when the client is disconnected + or the human doesn't have a brain anymore. + - bugfix: drying rack now shows correct examines & screen tips. + - code_imp: tone of code organization for smart fridges overall. changed ui to typescript. + - qol: added more detailed examines & screen tips for smart fridges. drying racks + can be dismantled with a crowbar and not simply pried open with it. + - bugfix: Molotovs now splash before burning, not after + - bugfix: The Galactic Material Market now respects quantity of materials purchased, + removing them from the market when bought and preventing you from ordering more + than are available at a given time. + - qol: the donksoft vendor refill cartridge is now available at the service lathe + - bugfix: Fixed a small issue with disposal outlets leaving contents about to be + ejected stuck inside the pipe beneath it if deleted. + - rscadd: Emote Panel TGUI added in IC category. + - image: Crates got new sprites + - image: Added more crate styles + - balance: Male Goats should no longer spawn with an udder, instead of it just being + Pete. + Zergspower: + - bugfix: fixes the mass-decal and VV's in Blueshift - additionally repipes the + entire map to reduce its size + falconignite: + - bugfix: Lizard tail wagging graphics + jjpark-kb: + - bugfix: updated the drones backpack to include items that the /tg/ nodrop drone + toolbox has + - bugfix: drones can craft again + vinylspiders: + - rscdel: pipe gas visuals have been disabled for the time being +2023-11-17: + Dalm: + - image: A tea room sign for the bar + Melbert: + - balance: Stop, drop, and roll no longer instantly clears 5 fire stacks off of + you - Instead, it will clear 1 fire stack off of you every time you roll, with + a roll every 0.8 seconds. + - balance: Stop, drop, and roll no longer stuns you for 6 seconds. Instead, it will + knock you to the floor while you are rolling. Moving around or getting up will + cancel the roll, and you cannot use items while rolling around. + - balance: Stop, drop, and roll will now repeat until the fire is put out or you + get up. + SkyratBot: + - image: light tube inhand sprites are now grey, as are the icons for the light + bulb/tube/mixed boxes + - code_imp: removed redundant procs `get_master_reagent_id()` & `get_master_reagent_name()` + - code_imp: merged `remove_all_type()` proc with `remove_reagent()` now this proc + can perform both functions. `remove_reagent()` now returns the total volume + of reagents removed rather than a simple TRUE/FALSE. + - code_imp: merged `trans_id_to()` proc with `trans_to()` now this proc can perform + both functions + - refactor: plumbing reaction chamber will now use only a single tick to balance + ph of a solution making it less efficient but more faster. Just make the reaction + chamber wait for longer periods of time to accurately balance ph + - refactor: reagent holder code has been condensed. Report any bugs on GitHub + - rscadd: Bitrunning Patch 1 features a host of changes! + - rscadd: Added randomized mobs to virtual domains, which will be indicated with + a unique icon. + - rscadd: New emag interaction with the quantum server. Antags will spawn more frequently, + and they can hack themselves onto the station. You have been warned. + - rscadd: Both living and dead players can now see which mob is going to spawn an + antagonist in the vdom. + - rscadd: 'Two new vdom antagonists: Cyber Tac and the NetGuardian. These unlock + at specific thresholds.' + - balance: You can no longer stack copies of the same ability with bitrunning disks. + - balance: Some of the disk items have been replaced with stronger versions. + - bugfix: You can no longer spy on crew using the advanced camera console on syndicate + assault. + - bugfix: Fixed the spawning mechanism of virtual domain antagonists. You should + now have a chance of playing as one. This chance increases as more domains are + completed. + - bugfix: Vdom antagonists shouldn't spawn at the end of the run any longer. + - bugfix: The preference for vdom antagonists has been changed to factor in the + new types. Check your preferences! + - bugfix: The quantum server will now show its balloon alerts to all observers. + - bugfix: Random domains should be fully random again. + - rscadd: Adds a chance that, when sharpened, a sufficiently potent carrot will + turn into a sword instead of a shiv. + - qol: if you die in a mech you automatically eject + - bugfix: Fixed catwalks over open space not making a sound when walked over. + - qol: The supermatter filters have been flipped on BirdshotStation to work like + the supermatters on every round, meaning the filtered gas goes in, and the non-filtered + gas comes out. + - bugfix: Space Ruin - All American Diner - Soda Machine now is scooted out of the + way + - bugfix: Bar Bots (and several other mobs) will no longer aggro on you if you click + on them with a "forceful" item from halfway across the room. + - balance: After a string of unfortunate incidents, persons with telekinesis have + been strongly warned against playing Russian Roulette, as they tend to hyperfixate + on the gun a bit too much and end up firing it directly at their head. + - bugfix: grabs no longer trigger krav maga + - rscadd: Androids now have robotic brains instead of organic brains. + - bugfix: 'The CRAB-17 will now only take whole credits, as fractional credits were + found to be worth less. + + :cl:' + TheSS13Melon: + - rscadd: Adds a "negative" perk called gifted which gives 6 free points. + Vekter (on behalf of Constellado): + - image: 'Added a new bar sign as one of the winners of our Bar Sign Contest: "The + Assembly Line".' + mogeoko: + - bugfix: Turbine parts will now use an amount of materials no greater than needed + for the upgrade +2023-11-18: + SkyratBot: + - refactor: Secure briefcases are now actual briefcases. + - refactor: Wall safes are now structures, rather than items that can't be picked + up. + - refactor: Lockable items (Wall safes & Secure Briefcases) now use TGUI. + - bugfix: gutlunches will stop having too many children + - balance: gutlunches are no longer in the mining faction + - bugfix: After correcting a slight miscalculation, Bit Avatars now have hands again. + - rscadd: Chat Reliability Layer + - code_imp: TGUI chat messages now track their sequence and will be resent if the + client notices a discrepenency +2023-11-19: + Deek-Za: + - image: New Digitigrade icons for red sec officer and HoS uniforms. + LT3: + - bugfix: Tram will no longer electrocute innocent, law abiding crew trying to use + the crosswalk when there's no tram in sight + Melbert: + - refactor: Refactored another large chuck of attack code, primarily involving melee + item attacks and non-human mob attacks. Report if you see anything weird + - bugfix: Pacifists clicking on simple robots or silicons no longer causes sparks + - bugfix: Blocked thrown batons are now properly... blocked + - bugfix: Plates now respect the weight class of items on top. + - bugfix: Fried items now respect existing volume cap. + - bugfix: Smartfridges now don't accept bulky food items, good thing we have none + of those right guys? + SkyratBot: + - bugfix: ' Attaching a circuit to the air alarm now reads from the correct turf.' + - bugfix: '"Old Chat" (AKA: The old-styled non-TGUI raw-HTMLesque chat that you + might see when it prods you with the "Failed to load fancy chat!" issue) should + now get all text messages as expected.' + - bugfix: you can climb over more stuff with a climbing hook + - rscadd: Abductors have bigger brains. + - bugfix: You can once again use alt to turn while strafing in a mech + - balance: Paint cans hold 20x more paint than before, painters rejoice! (Janitors + cry more) + - qol: Implanted HUDs can now be toggled on and off with an action. + - bugfix: Fixes a runtime when the radioactive nebula trait runs with a map that + has no virology area. + Thlumyn: + - rscadd: Telekinesis now lets you subtler at range. + yooriss: + - balance: Gravity suspension harnesses now arrive in crates instead of goody cases, + meaning that they can be ordered via departmental budgets AND privately purchased + if needed. Rizz your local cargotech to defeat gravity, as the universe intended. diff --git a/icons/area/areas_station.dmi b/icons/area/areas_station.dmi index cbfe463efa5..f2182c6e918 100644 Binary files a/icons/area/areas_station.dmi and b/icons/area/areas_station.dmi differ diff --git a/icons/effects/bitrunning.dmi b/icons/effects/bitrunning.dmi index bfdc7c63436..8efa429389c 100644 Binary files a/icons/effects/bitrunning.dmi and b/icons/effects/bitrunning.dmi differ diff --git a/icons/effects/bitrunning_48.dmi b/icons/effects/bitrunning_48.dmi new file mode 100644 index 00000000000..e7c5bf37d8e Binary files /dev/null and b/icons/effects/bitrunning_48.dmi differ diff --git a/icons/effects/bitrunning_64.dmi b/icons/effects/bitrunning_64.dmi new file mode 100644 index 00000000000..397b4709c83 Binary files /dev/null and b/icons/effects/bitrunning_64.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 9828e307431..0dd945ff37e 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi index 5ae25522434..7c659ca3b57 100644 Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index dc519380cfd..289443dd052 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index d1a1777e4e4..e789546f1e8 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 0c1b8457be7..eb06288d800 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi index 537b1ffd3eb..793c14ce115 100644 Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index d10ca4add99..dc5fae0172c 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/human/human_face.dmi b/icons/mob/human/human_face.dmi index 886f0bf793b..d96800c3a8b 100644 Binary files a/icons/mob/human/human_face.dmi and b/icons/mob/human/human_face.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_spines.dmi b/icons/mob/human/species/lizard/lizard_spines.dmi index eaadb820ebc..82eb636b339 100644 Binary files a/icons/mob/human/species/lizard/lizard_spines.dmi and b/icons/mob/human/species/lizard/lizard_spines.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index f544eeb753a..a2347dc667a 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 85c6accc80c..bb2a425194b 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 3e29ac726f9..7e8297c848d 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 1a640935e0c..366f285789a 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_lefthand.dmi b/icons/mob/inhands/weapons/hammers_lefthand.dmi index 090bcb2ab9e..7f6985e1de5 100644 Binary files a/icons/mob/inhands/weapons/hammers_lefthand.dmi and b/icons/mob/inhands/weapons/hammers_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/hammers_righthand.dmi b/icons/mob/inhands/weapons/hammers_righthand.dmi index 3b0af0743f8..2dd4f4b64c5 100644 Binary files a/icons/mob/inhands/weapons/hammers_righthand.dmi and b/icons/mob/inhands/weapons/hammers_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 4c665b811b5..7544d3cbaf2 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index 407443bb1ed..300e4c2e616 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index 845b1cdf140..f6dcbdec2b7 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/mob/mecha_equipment.dmi b/icons/mob/mecha_equipment.dmi index 18fe707cafe..90f0ce8c736 100644 Binary files a/icons/mob/mecha_equipment.dmi and b/icons/mob/mecha_equipment.dmi differ diff --git a/icons/mob/nonhuman-player/netguardian.dmi b/icons/mob/nonhuman-player/netguardian.dmi new file mode 100644 index 00000000000..057e7a066c2 Binary files /dev/null and b/icons/mob/nonhuman-player/netguardian.dmi differ diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi index 123e13a2f44..3bd3438bc62 100644 Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ diff --git a/icons/mob/simple/jungle/leaper.dmi b/icons/mob/simple/jungle/leaper.dmi index 39f807a191c..2150c7b1ac2 100644 Binary files a/icons/mob/simple/jungle/leaper.dmi and b/icons/mob/simple/jungle/leaper.dmi differ diff --git a/icons/mob/simple/lavaland/lavaland_monsters.dmi b/icons/mob/simple/lavaland/lavaland_monsters.dmi index f68e3db4a6c..ffcfb04cbeb 100644 Binary files a/icons/mob/simple/lavaland/lavaland_monsters.dmi and b/icons/mob/simple/lavaland/lavaland_monsters.dmi differ diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index 740a832a023..7a215dcb9b1 100644 Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi index 7eb92f1c351..5070dbb145c 100644 Binary files a/icons/obj/clothing/modsuit/mod_clothing.dmi and b/icons/obj/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 48fe5c92c33..4bf43e07e97 100644 Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ diff --git a/icons/obj/drinks/mixed_drinks.dmi b/icons/obj/drinks/mixed_drinks.dmi index afda4ecfe5e..231df35f6e6 100644 Binary files a/icons/obj/drinks/mixed_drinks.dmi and b/icons/obj/drinks/mixed_drinks.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 061099defd4..2bda7341e51 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/barsigns.dmi b/icons/obj/machines/barsigns.dmi index c9450a009a1..f3cfe8eaed9 100644 Binary files a/icons/obj/machines/barsigns.dmi and b/icons/obj/machines/barsigns.dmi differ diff --git a/icons/obj/machines/bitrunning.dmi b/icons/obj/machines/bitrunning.dmi index b3f8ad63a6c..d61e910d195 100644 Binary files a/icons/obj/machines/bitrunning.dmi and b/icons/obj/machines/bitrunning.dmi differ diff --git a/icons/obj/machines/computer.dmi b/icons/obj/machines/computer.dmi index 9cb0dda4967..cba0069cf6f 100644 Binary files a/icons/obj/machines/computer.dmi and b/icons/obj/machines/computer.dmi differ diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 94ba46568c9..0d04f7fae3c 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi index 8cccb7f5910..d8190ba2e72 100644 Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ diff --git a/icons/obj/service/hydroponics/growing.dmi b/icons/obj/service/hydroponics/growing.dmi index fcf73899863..aee567daa54 100644 Binary files a/icons/obj/service/hydroponics/growing.dmi and b/icons/obj/service/hydroponics/growing.dmi differ diff --git a/icons/obj/service/hydroponics/growing_vegetables.dmi b/icons/obj/service/hydroponics/growing_vegetables.dmi index bf49c72ba79..30f02e862e0 100644 Binary files a/icons/obj/service/hydroponics/growing_vegetables.dmi and b/icons/obj/service/hydroponics/growing_vegetables.dmi differ diff --git a/icons/obj/service/hydroponics/harvest.dmi b/icons/obj/service/hydroponics/harvest.dmi index f4489b01fa0..b15a34105de 100644 Binary files a/icons/obj/service/hydroponics/harvest.dmi and b/icons/obj/service/hydroponics/harvest.dmi differ diff --git a/icons/obj/service/hydroponics/seeds.dmi b/icons/obj/service/hydroponics/seeds.dmi index db6f93878d0..83008668654 100644 Binary files a/icons/obj/service/hydroponics/seeds.dmi and b/icons/obj/service/hydroponics/seeds.dmi differ diff --git a/icons/obj/service/library.dmi b/icons/obj/service/library.dmi index 8229c1fc394..79a06dd4b8f 100644 Binary files a/icons/obj/service/library.dmi and b/icons/obj/service/library.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index b524789417d..c1fcad67b2b 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index d660e1b7bfe..6cae3e75dff 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index f5065b6b869..1a8f697781b 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/storage/wrapping.dmi b/icons/obj/storage/wrapping.dmi index acd91a3d700..944a6b84752 100644 Binary files a/icons/obj/storage/wrapping.dmi and b/icons/obj/storage/wrapping.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index a41aa161d0f..8707b394c2e 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index a36b593706f..07a4bde661a 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi index 9dd25af2a92..5cd823cc9c4 100644 Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/icons/obj/weapons/guns/magic.dmi b/icons/obj/weapons/guns/magic.dmi index 7cab0cdfc25..53217ef461b 100644 Binary files a/icons/obj/weapons/guns/magic.dmi and b/icons/obj/weapons/guns/magic.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 05ad142ff58..168f9fb716c 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/obj/weapons/hammer.dmi b/icons/obj/weapons/hammer.dmi index c210f8b436b..6c454462f48 100644 Binary files a/icons/obj/weapons/hammer.dmi and b/icons/obj/weapons/hammer.dmi differ diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi index 8e6ee6bdd2f..255c3b0cffd 100644 Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index b3e64c9d09f..5f6626c7993 100644 Binary files a/icons/ui_icons/achievements/achievements.dmi and b/icons/ui_icons/achievements/achievements.dmi differ diff --git a/modular_skyrat/master_files/code/datums/quirks/negative.dm b/modular_skyrat/master_files/code/datums/quirks/negative.dm index 542af0b4050..b0f30b2feef 100644 --- a/modular_skyrat/master_files/code/datums/quirks/negative.dm +++ b/modular_skyrat/master_files/code/datums/quirks/negative.dm @@ -86,3 +86,15 @@ var/datum/quirk/blooddeficiency/synth/bd_synth = new qdel(src) return bd_synth.add_to_holder(new_holder, quirk_transfer) + +/datum/quirk/gifted + name = "Gifted" + desc = "You were born a bit lucky, intelligent, or something in between. You're able to do a little more." + icon = FA_ICON_DOVE + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_HIDE_FROM_SCAN + value = -6 + mob_trait = TRAIT_GIFTED + gain_text = span_danger("You feel like you're just a little bit more flexible.") + lose_text = span_notice("You feel a little less flexible.") + medical_record_text = "Patient has a history of uncanny fortune." + hardcore_value = 0 diff --git a/modular_skyrat/master_files/code/datums/traits/neutral.dm b/modular_skyrat/master_files/code/datums/traits/neutral.dm index 93adc0af395..d7d83bdcdcc 100644 --- a/modular_skyrat/master_files/code/datums/traits/neutral.dm +++ b/modular_skyrat/master_files/code/datums/traits/neutral.dm @@ -230,6 +230,7 @@ GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay()) /datum/quirk/item_quirk/canine name = "Canidae Traits" desc = "Bark. You seem to act like a canine for whatever reason. This will replace most other tongue-based speech quirks." + mob_trait = TRAIT_CANINE icon = FA_ICON_DOG value = 0 medical_record_text = "Patient was seen digging through the trash can. Keep an eye on them." @@ -241,6 +242,21 @@ GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay()) new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) new_tongue.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) +/datum/quirk/item_quirk/avian + name = "Avian Traits" + desc = "You're a birdbrain, or you've got a bird's brain. This will replace most other tongue-based speech quirks." + mob_trait = TRAIT_AVIAN + icon = FA_ICON_KIWI_BIRD + value = 0 + medical_record_text = "Patient exhibits avian-adjacent mannerisms." + +/datum/quirk/item_quirk/avian/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + var/obj/item/organ/internal/tongue/avian/new_tongue = new(get_turf(human_holder)) + + new_tongue.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) + new_tongue.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) + /* BUBBER EDIT MOVE BRGIN - MOVED TO NEGATIVE.DM /datum/quirk/sensitivesnout name = "Sensitive Snout" diff --git a/modular_skyrat/master_files/code/game/atoms.dm b/modular_skyrat/master_files/code/game/atoms.dm index 1701f6cfa78..0c7510d5b89 100644 --- a/modular_skyrat/master_files/code/game/atoms.dm +++ b/modular_skyrat/master_files/code/game/atoms.dm @@ -8,3 +8,11 @@ human_mob.dna.current_body_size = BODY_SIZE_NORMAL // because if we don't set this, update_body_size will think that it has no work to do. human_mob.dna.update_body_size() + +/// Called after a loadout item gets custom named +/atom/proc/on_loadout_custom_named() + return + +/// Called after a loadout item gets a custom description +/atom/proc/on_loadout_custom_described() + return diff --git a/modular_skyrat/master_files/code/game/machinery/limbgrower.dm b/modular_skyrat/master_files/code/game/machinery/limbgrower.dm new file mode 100644 index 00000000000..edf0474bfa0 --- /dev/null +++ b/modular_skyrat/master_files/code/game/machinery/limbgrower.dm @@ -0,0 +1,3 @@ +/obj/machinery/limbgrower/Initialize(mapload) + categories += list(SPECIES_SNAIL) + return ..() diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 78f1369bae0..d68f78c5d46 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -1,7 +1,7 @@ // Add modular crafting recipes here, NOT IN BASE /tg/ CRAFTING LISTS /** - * Add a list of receipes to an existing recipe sublist. + * Add a list of recipes to an existing recipe sublist. * * Arguments: * * stack_recipes - the existing list of stack recipes. @@ -74,8 +74,12 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("large wooden mortar", /obj/structure/large_mortar, 10, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("wooden cutting board", /obj/item/cutting_board, 5, time = 2 SECONDS, check_density = FALSE, category = CAT_TOOLS), new/datum/stack_recipe("wooden shelf", /obj/structure/rack/wooden, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), + new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/seedshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/producebin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("storage barrel", /obj/structure/closet/crate/wooden/storage_barrel, 4, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), new/datum/stack_recipe("worm barrel", /obj/structure/wormfarm, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), + new/datum/stack_recipe("sturdy wooden fence", /obj/structure/railing/wooden_fencing, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), + new/datum/stack_recipe("sturdy wooden fence gate", /obj/structure/railing/wooden_fencing/gate, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), )) /obj/item/stack/sheet/mineral/wood/get_main_recipes() diff --git a/modular_skyrat/master_files/code/game/objects/items/wiki_manuals.dm b/modular_skyrat/master_files/code/game/objects/items/wiki_manuals.dm new file mode 100644 index 00000000000..97d31062593 --- /dev/null +++ b/modular_skyrat/master_files/code/game/objects/items/wiki_manuals.dm @@ -0,0 +1,5 @@ +/obj/item/book/manual/wiki/security_space_law + name = "Corporate Regulations" + desc = "A set of Nanotrasen regulations for keeping law, order, and procedure followed within their space stations." + starting_title = "Corporate Regulations" + page_link = "Corporate_Regulations" diff --git a/modular_skyrat/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm b/modular_skyrat/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm new file mode 100644 index 00000000000..63d66d52457 --- /dev/null +++ b/modular_skyrat/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -0,0 +1,3 @@ +// Disables pipe gas visuals +/obj/machinery/atmospherics/pipe + has_gas_visuals = FALSE diff --git a/modular_skyrat/master_files/code/modules/bitrunning/orders/disks.dm b/modular_skyrat/master_files/code/modules/bitrunning/orders/disks.dm new file mode 100644 index 00000000000..2018e7d9e95 --- /dev/null +++ b/modular_skyrat/master_files/code/modules/bitrunning/orders/disks.dm @@ -0,0 +1,14 @@ +// removes the nerf in virtual space +/obj/item/dualsaber/green/bitrunning + block_chance = 75 + +// gives them the de-nerfed dual saber +/obj/item/bitrunning_disk/item/tier3/Initialize(mapload) + . = ..() + + selectable_items -= list( + /obj/item/dualsaber/green, + ) + selectable_items += list( + /obj/item/dualsaber/green/bitrunning, + ) diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/security.dm b/modular_skyrat/master_files/code/modules/cargo/packs/security.dm index 9746267dbdd..a78f2369c1c 100644 --- a/modular_skyrat/master_files/code/modules/cargo/packs/security.dm +++ b/modular_skyrat/master_files/code/modules/cargo/packs/security.dm @@ -10,17 +10,11 @@ /datum/supply_pack/security/helmets special = TRUE -/datum/supply_pack/security/laser - special = TRUE - /datum/supply_pack/security/securityclothes special = TRUE /datum/supply_pack/security/armory/ballistic special = TRUE -/datum/supply_pack/security/armory/energy - special = TRUE - /datum/supply_pack/security/armory/thermal special = TRUE diff --git a/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm b/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm index 0530276c5bb..38eb418b503 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm @@ -17,7 +17,7 @@ join_action.Remove(ghost) return TRUE - var/datum/action/innate/join_soulcatcher/new_join_action = new + var/datum/action/innate/join_soulcatcher/new_join_action = new(ghost) new_join_action.Grant(ghost) return TRUE diff --git a/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm b/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm index 07da17aa3eb..fbcdad4e997 100644 --- a/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm +++ b/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm @@ -4,6 +4,8 @@ var/icon/worn_icon_digi /// The config type to use for greyscaled worn sprites for digitigrade characters. Both this and greyscale_colors must be assigned to work. var/greyscale_config_worn_digi + /// The config type to use for greyscaled worn sprites for characters with a muzzle sprite accessory. Both this and greyscale_colors must be assigned to work. + var/greyscale_config_worn_muzzled /// Icon file for mob worn overlays, if the user is a monkey. var/icon/worn_icon_monkey /// The config type to use for greyscale worn sprites for monkeys. Both this and greyscale_colors must be assigned to work. diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm b/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm index 4c2c440c200..26b6d64a6cc 100644 --- a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm +++ b/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm @@ -118,6 +118,7 @@ /obj/item/clothing/suit/hooded/wintercoat supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE /obj/item/clothing/suit/toggle/cargo_tech supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm index 7c9d8668aac..b1c465ccdf9 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm +++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm @@ -69,6 +69,10 @@ dying_key = DYE_REGISTRY_JUMPSKIRT female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + gets_cropped_on_taurs = FALSE + +/obj/item/clothing/under/rank/medical/chemist/skirt + gets_cropped_on_taurs = FALSE /* * PARAMEDIC diff --git a/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm b/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm index 5bcfe491882..00492fd15ea 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm @@ -85,7 +85,7 @@ obscured = (holder_human.wear_mask && (holder_human.wear_mask.flags_inv & HIDEFACE)) && obscurity_examine_pref || (holder_human.head && (holder_human.head.flags_inv & HIDEFACE) && obscurity_examine_pref) // BUBBERSTATION EDIT - EXAMINE PREFS custom_species = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.name : holder_human.dna.features["custom_species"] flavor_text = obscured ? "Obscured" : holder_human.dna.features["flavor_text"] - custom_species_lore = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.get_species_lore() : holder_human.dna.features["custom_species_lore"] + custom_species_lore = obscured ? "Obscured" : holder_human.dna.species.lore_protected ? holder_human.dna.species.get_species_lore().Join("\n") : holder_human.dna.features["custom_species_lore"] ooc_notes += holder_human.dna.features["ooc_notes"] if(!obscured) headshot += holder_human.dna.features["headshot"] diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm index 10ca65f4acd..28f8f3994b6 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm @@ -117,7 +117,7 @@ // Bumble AI controller that adds find flowers, resting, and buzzing subtrees. /datum/ai_controller/basic_controller/bumbles blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items(), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm index f78a481cbd4..27d1aabb67b 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm @@ -14,10 +14,22 @@ gender = MALE can_be_held = FALSE gold_core_spawnable = FRIENDLY_SPAWN + ///can this mob breed? + var/can_breed = TRUE /// List of possible dialogue options. This is both used by the AI and as an override when a sentient Markus speaks. var/static/list/markus_speak = list("Borf!", "Boof!", "Bork!", "Bowwow!", "Burg?") +/mob/living/basic/pet/dog/markus/Initialize(mapload) + . = ..() + if(!can_breed) + return + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/dog/corgi)),\ + baby_path = /mob/living/basic/pet/dog/corgi/puppy,\ + ) // no mixed breed puppies sadly + /mob/living/basic/pet/dog/markus/treat_message(message) if(client) message = pick(markus_speak) // markus only talks business @@ -71,6 +83,7 @@ ai_controller = /datum/ai_controller/basic_controller/dog/borgi unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + can_breed = FALSE // These lights enable when E-N is emagged light_system = MOVABLE_LIGHT_DIRECTIONAL @@ -127,7 +140,7 @@ borgi.set_movement_target(target) borgi.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target) - borgi.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETTING_DATUM) + borgi.queue_behavior(/datum/ai_behavior/basic_melee_attack/dog, BB_DOG_HARASS_TARGET, BB_PET_TARGETING_STRATEGY) /mob/living/basic/pet/dog/corgi/borgi/proc/on_attack_hand(datum/source, mob/living/target) SIGNAL_HANDLER @@ -242,7 +255,11 @@ investigate_log("has been gibbed due to being emagged by [user].", INVESTIGATE_DEATHS) visible_message(span_boldwarning("[user] swipes a card through [target]!"), span_notice("You overload [target]s internal reactor...")) - notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Borgi Emagged") + notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", + source = target, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Borgi Emagged", + ) addtimer(CALLBACK(src, PROC_REF(explode_imminent)), 50 SECONDS) return TRUE @@ -263,7 +280,7 @@ BB_DOG_HARASS_HARM = TRUE, BB_VISION_RANGE = AI_DOG_VISION_RANGE, BB_DOG_IS_SLOW = TRUE, - BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( @@ -293,7 +310,7 @@ if(!SPT_PROB(chance, seconds_per_tick)) return - controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_PET_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_PET_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) return // Attack. diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm index 4bf62fa12a8..37829815def 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm @@ -119,7 +119,11 @@ do_jitter_animation(60) manual_emote("'s fur stands up, [src.p_their()] body trembling...") - notify_ghosts("[src] was startled by the supermatter!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Safety Inspection!") + notify_ghosts("[src] was startled by the supermatter!", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Safety Inspection!", + ) addtimer(CALLBACK(src, PROC_REF(calm_down)), 60 SECONDS) /mob/living/simple_animal/pet/poppy/proc/calm_down() diff --git a/modular_skyrat/master_files/code/modules/mod/modules/modules_supply.dm b/modular_skyrat/master_files/code/modules/mod/modules/modules_supply.dm new file mode 100644 index 00000000000..99021d8d480 --- /dev/null +++ b/modular_skyrat/master_files/code/modules/mod/modules/modules_supply.dm @@ -0,0 +1,7 @@ +/obj/item/mod/module/hydraulic/on_suit_activation() + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_TRASHMAN, MOD_TRAIT) + +/obj/item/mod/module/hydraulic/on_suit_deactivation(deleting = FALSE) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_TRASHMAN, MOD_TRAIT) diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm new file mode 100644 index 00000000000..98f15d05b1c --- /dev/null +++ b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm @@ -0,0 +1,2 @@ +/obj/item/suppressor/standard + desc = "A small-arms suppressor for maximum espionage." diff --git a/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm new file mode 100644 index 00000000000..419041848bb --- /dev/null +++ b/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm @@ -0,0 +1,21 @@ +/datum/design/leftarm/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/rightarm/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/leftleg/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/rightleg/New() + category += list(SPECIES_SNAIL) + return ..() + +/datum/design/tongue/snail + name = "Snail Tongue" + id = "snailtongue" + build_path = /obj/item/organ/internal/tongue/snail + category = list(SPECIES_SNAIL, RND_CATEGORY_INITIAL) diff --git a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm index de61febc086..3a7d072b7fa 100644 --- a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm +++ b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm @@ -27,28 +27,27 @@ //Base Nodes /datum/techweb_node/base/New() - . = ..() design_ids += list( "polarizer", "vox_gas_filter", ) + return ..() /datum/techweb_node/cyborg/New() - . = ..() design_ids += list( "affection_module", ) + return ..() /datum/techweb_node/basic_tools/New() - . = ..() design_ids += list( "bowl", "drinking_glass", "shot_glass", ) + return ..() /datum/techweb_node/basic_medical/New() - . = ..() design_ids += list( "hospital_gown", "synth_eyes", @@ -59,11 +58,11 @@ "synth_ears", "synth_heart", ) + return ..() /////////////////////////Biotech///////////////////////// /datum/techweb_node/adv_biotech/New() - . = ..() design_ids += list( "monkey_helmet", "brute2medicell", @@ -75,33 +74,33 @@ "bodymedicell", "clotmedicell", ) + return ..() /datum/techweb_node/biotech/New() - . = ..() design_ids += list( "anesthetic_machine", "smartdartgun", ) + return ..() /////////////////////////EMP tech///////////////////////// /datum/techweb_node/emp_basic/New() - . = ..() design_ids += list( "gownmedicell", "bedmedicell", ) + return ..() ////////////////////////Computer tech//////////////////////// /datum/techweb_node/comptech/New() - . = ..() design_ids += list( "time_clock_frame", ) + return ..() /datum/techweb_node/integrated_hud/New() - . = ..() design_ids += list( "health_hud_prescription", "security_hud_prescription", @@ -127,20 +126,21 @@ "nifsoft_hud_diagnostic", "nifsoft_hud_cargo", ) + return ..() ////////////////////////Medical//////////////////////// /datum/techweb_node/genetics/New() - . = ..() design_ids += list( "self_actualization_device", ) + return ..() /datum/techweb_node/cyber_organs/New() - . = ..() design_ids += list( "cybernetic_tongue", ) + return ..() // Modularly removes x-ray and thermals from here, it's in adv_vision instead /datum/techweb_node/combat_cyber_implants/New() @@ -155,52 +155,52 @@ ////////////////////////Tools//////////////////////// /datum/techweb_node/botany/New() - . = ..() design_ids += list( "salvemedicell", ) + return ..() /datum/techweb_node/sec_basic/New() . = ..() design_ids += list( "nifsoft_remover", ) + return ..() /////////////////////////weaponry tech///////////////////////// /datum/techweb_node/weaponry/New() - . = ..() design_ids += list( "ammoworkbench_disk_lethal", ) + return ..() /datum/techweb_node/adv_weaponry/New() - . = ..() design_ids += list( "ammo_workbench", ) + return ..() /datum/techweb_node/electric_weapons/New() - . = ..() design_ids += list( "medigun_speed", ) + return ..() ////////////////////////Alien technology//////////////////////// /datum/techweb_node/alien_bio/New() - . = ..() design_ids += list( "brute3medicell", "burn3medicell", "oxy3medicell", "toxin3medicell", ) + return ..() /////////////////////////engineering tech///////////////////////// /datum/techweb_node/adv_engi/New() - . = ..() design_ids += list( "engine_goggles_prescription", "mesons_prescription", @@ -208,39 +208,39 @@ "tray_goggles_prescription", "plumbing_eng", ) + return ..() /////////////////////////robotics tech///////////////////////// /datum/techweb_node/robotics/New() - . = ..() design_ids += list( "borg_upgrade_snacks", "mini_soulcatcher", ) + return ..() /datum/techweb_node/neural_programming/New() - . = ..() design_ids += list( "soulcatcher_device", "rsd_interface", ) + return ..() /datum/techweb_node/cyborg_upg_util/New() - . = ..() design_ids += list( "borg_upgrade_clamp", "borg_upgrade_brush", ) + return ..() /datum/techweb_node/cyborg_upg_engiminer/New() - . = ..() design_ids += list( "advanced_materials", "inducer_module", ) + return ..() /datum/techweb_node/cyborg_upg_med/New() - . = ..() design_ids += list( "borg_upgrade_surgicaltools", ) @@ -248,9 +248,10 @@ design_ids -= list( "borg_upgrade_pinpointer", ) + return ..() /datum/techweb_node/basic_mining/New() - . = ..() design_ids += list( "borg_upgrade_welding", ) + return ..() diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi index 5b5a709889c..23ba1aed1b1 100644 Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi and b/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/huds/hud.dmi b/modular_skyrat/master_files/icons/mob/huds/hud.dmi index 235a45ecd49..3d81edc5f20 100644 Binary files a/modular_skyrat/master_files/icons/mob/huds/hud.dmi and b/modular_skyrat/master_files/icons/mob/huds/hud.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/mod.dmi b/modular_skyrat/master_files/icons/mob/mod.dmi index 046be382649..a1055a38d5e 100644 Binary files a/modular_skyrat/master_files/icons/mob/mod.dmi and b/modular_skyrat/master_files/icons/mob/mod.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi index be61ef5518d..db52a56c2c8 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/card.dmi b/modular_skyrat/master_files/icons/obj/card.dmi index 9130183d19d..d44c3417b7e 100644 Binary files a/modular_skyrat/master_files/icons/obj/card.dmi and b/modular_skyrat/master_files/icons/obj/card.dmi differ diff --git a/modular_skyrat/master_files/sound/items/zippo_close.ogg b/modular_skyrat/master_files/sound/items/zippo_close.ogg new file mode 100644 index 00000000000..8d51263dfd8 Binary files /dev/null and b/modular_skyrat/master_files/sound/items/zippo_close.ogg differ diff --git a/modular_skyrat/master_files/sound/items/zippo_open.ogg b/modular_skyrat/master_files/sound/items/zippo_open.ogg new file mode 100644 index 00000000000..1c1681d999a Binary files /dev/null and b/modular_skyrat/master_files/sound/items/zippo_open.ogg differ diff --git a/modular_skyrat/modules/Department_Budgets/cards.dm b/modular_skyrat/modules/Department_Budgets/cards.dm new file mode 100644 index 00000000000..bffa9ace0f5 --- /dev/null +++ b/modular_skyrat/modules/Department_Budgets/cards.dm @@ -0,0 +1,24 @@ +/obj/item/card/id/departmental_budget/med + department_ID = ACCOUNT_MED + department_name = ACCOUNT_MED_NAME + icon_state = "med_budget" + +/obj/item/card/id/departmental_budget/eng + department_ID = ACCOUNT_ENG + department_name = ACCOUNT_ENG_NAME + icon_state = "eng_budget" + +/obj/item/card/id/departmental_budget/sci + department_ID = ACCOUNT_SCI + department_name = ACCOUNT_SCI_NAME + icon_state = "sci_budget" + +/obj/item/card/id/departmental_budget/srv + department_ID = ACCOUNT_SRV + department_name = ACCOUNT_SRV_NAME + icon_state = "srv_budget" + +/obj/item/card/id/departmental_budget/sec + department_ID = ACCOUNT_SEC + department_name = ACCOUNT_SEC_NAME + icon_state = "sec_budget" diff --git a/modular_skyrat/modules/GAGS/greyscale_configs.dm b/modular_skyrat/modules/GAGS/greyscale_configs.dm index ed8a9f904d2..21d423040ed 100644 --- a/modular_skyrat/modules/GAGS/greyscale_configs.dm +++ b/modular_skyrat/modules/GAGS/greyscale_configs.dm @@ -239,8 +239,8 @@ json_config = 'modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json' // VAPE -/datum/greyscale_config/vape/worn/digi - name = "Vape (Worn, Digi) " +/datum/greyscale_config/vape/worn/muzzled + name = "Vape (Worn, Muzzled)" icon_file = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' // RESPIRATOR @@ -487,12 +487,16 @@ //FACE SCARF /datum/greyscale_config/face_scarf name = "Face Scarf" - icon_file = 'modular_skyrat/modules/GAGS/icons/face_scarf.dmi' + icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi' json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json' /datum/greyscale_config/face_scarf/worn name = "Face Scarf (Worn)" - icon_file = 'modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi' + icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi' + +/datum/greyscale_config/face_scarf/worn/muzzled + name = "Face Scarf (Worn, Muzzled)" + icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi' /* * SUITS diff --git a/modular_skyrat/modules/GAGS/icons/face_scarf.dmi b/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/face_scarf.dmi rename to modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi diff --git a/modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi b/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi similarity index 100% rename from modular_skyrat/modules/GAGS/icons/face_scarf_worn.dmi rename to modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi diff --git a/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi b/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi new file mode 100644 index 00000000000..60d2f63b978 Binary files /dev/null and b/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi differ diff --git a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm b/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm index 4ff1032bec1..f31913684de 100644 --- a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm +++ b/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm @@ -53,7 +53,11 @@ if(stored_cyborgs > max_stored_cyborgs) return stored_cyborgs++ - notify_ghosts("A new cyborg shell has been created at the [src]", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "New malfunctioning cyborg created!") + notify_ghosts("A new cyborg shell has been created at the [src]", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "New malfunctioning cyborg created!", + ) /obj/machinery/transformer_rp/proc/create_a_cyborg(mob/dead/observer/target_ghost) if(machine_stat & (BROKEN|NOPOWER)) diff --git a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm b/modular_skyrat/modules/advanced_shuttles/code/turfs.dm index 279ea874ad0..1c5e9c53c30 100644 --- a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm +++ b/modular_skyrat/modules/advanced_shuttles/code/turfs.dm @@ -69,6 +69,9 @@ icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi' icon_state = "floor1" +/turf/open/floor/iron/shuttle/ferry/airless + initial_gas_mix = AIRLESS_ATMOS + /* * EVAC */ @@ -86,6 +89,9 @@ icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi' icon_state = "floor" +/turf/open/floor/iron/shuttle/evac/airless + initial_gas_mix = AIRLESS_ATMOS + /* * ARRIVALS */ @@ -103,6 +109,9 @@ icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi' icon_state = "floor" +/turf/open/floor/iron/shuttle/arrivals/airless + initial_gas_mix = AIRLESS_ATMOS + /* * CARGO */ @@ -120,6 +129,9 @@ icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi' icon_state = "floor" +/turf/open/floor/iron/shuttle/cargo/airless + initial_gas_mix = AIRLESS_ATMOS + /* * MINING */ @@ -207,9 +219,15 @@ /turf/open/floor/iron/shuttle/exploration/flat icon_state = "flat" +/turf/open/floor/iron/shuttle/exploration/flat/airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/iron/shuttle/exploration/textured_flat icon_state = "flattexture" +/turf/open/floor/iron/shuttle/exploration/textured_flat/airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/iron/shuttle/exploration/equipmentrail1 icon_state = "rail1" @@ -221,3 +239,6 @@ /turf/open/floor/iron/shuttle/exploration/hazard icon_state = "hazard" + +/turf/open/floor/iron/shuttle/exploration/hazard/airless + initial_gas_mix = AIRLESS_ATMOS diff --git a/modular_skyrat/modules/aesthetics/crates/code/crates.dm b/modular_skyrat/modules/aesthetics/crates/code/crates.dm deleted file mode 100644 index d7a7201a563..00000000000 --- a/modular_skyrat/modules/aesthetics/crates/code/crates.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/closet/crate - icon = 'modular_skyrat/modules/aesthetics/crates/icons/crates.dmi' - -/obj/structure/closet/crate/syndicrate - icon = 'icons/obj/storage/crates.dmi' - -/obj/item/delivery - icon = 'modular_skyrat/modules/aesthetics/crates/icons/crates.dmi' - -//Rather than have duplicate icons in our DMI for all of these, we just make sure these pull from the old file. -/obj/structure/closet/crate/bin - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/grave - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/necropolis - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/trashcart/laundry - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/mail - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/coffin - icon = 'icons/obj/storage/crates.dmi' - -/obj/structure/closet/crate/cardboard - icon = 'icons/obj/storage/crates.dmi' diff --git a/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi b/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi deleted file mode 100644 index bcd4cb9305e..00000000000 Binary files a/modular_skyrat/modules/aesthetics/crates/icons/crates.dmi and /dev/null differ diff --git a/modular_skyrat/modules/aesthetics/floors/code/floors.dm b/modular_skyrat/modules/aesthetics/floors/code/floors.dm index 8190f8abb9e..e2a797a2970 100644 --- a/modular_skyrat/modules/aesthetics/floors/code/floors.dm +++ b/modular_skyrat/modules/aesthetics/floors/code/floors.dm @@ -76,3 +76,6 @@ /turf/open/floor/plating/reinforced icon = 'icons/turf/floors.dmi' + +/turf/open/floor/iron/white/textured_large/airless + initial_gas_mix = AIRLESS_ATMOS diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm b/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm index 898aef8c5d9..c5f2e645c95 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm @@ -28,8 +28,8 @@ /obj/structure/antfarm/Initialize(mapload) . = ..() var/turf/src_turf = get_turf(src) - if(!istype(get_turf(src), /turf/open/misc/asteroid/basalt)) - src_turf.balloon_alert_to_viewers("must be on basalt") + if(!src_turf.GetComponent(/datum/component/simple_farm)) + src_turf.balloon_alert_to_viewers("must be on farmable surface") return INITIALIZE_HINT_QDEL for(var/obj/structure/antfarm/found_farm in range(2, get_turf(src))) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm b/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm index 7e946053c5d..5de8573f6b6 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm @@ -163,14 +163,19 @@ increase_yield(user) return - else if(istype(attacking_item, /obj/item/worm_fertilizer)) + else if(istype(attacking_item, /obj/item/stack/worm_fertilizer)) + + var/obj/item/stack/attacking_stack = attacking_item + + if(!attacking_stack.use(1)) + balloon_alert(user, "unable to use [attacking_item]") + return if(!decrease_cooldown(user, silent = TRUE) && !increase_yield(user, silent = TRUE)) balloon_alert(user, "plant is already fully upgraded") else balloon_alert(user, "plant was upgraded") - qdel(attacking_item) return @@ -266,6 +271,18 @@ plant_bag?.atom_storage?.attempt_insert(created_harvest, user, TRUE) -/turf/open/misc/asteroid/basalt/Initialize(mapload) +/turf/open/misc/asteroid/basalt/getDug() . = ..() AddComponent(/datum/component/simple_farm) + +/turf/open/misc/asteroid/basalt/refill_dug() + . = ..() + qdel(GetComponent(/datum/component/simple_farm)) + +/turf/open/misc/asteroid/snow/getDug() + . = ..() + AddComponent(/datum/component/simple_farm) + +/turf/open/misc/asteroid/snow/refill_dug() + . = ..() + qdel(GetComponent(/datum/component/simple_farm)) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm b/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm index 94d8171cbc9..8046a7b4fd0 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm @@ -19,7 +19,7 @@ /obj/structure/wormfarm/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) - COOLDOWN_START(src, worm_timer, 1 MINUTES) + COOLDOWN_START(src, worm_timer, 30 SECONDS) /obj/structure/wormfarm/Destroy() STOP_PROCESSING(SSobj, src) @@ -30,14 +30,14 @@ if(!COOLDOWN_FINISHED(src, worm_timer)) return - COOLDOWN_START(src, worm_timer, 1 MINUTES) + COOLDOWN_START(src, worm_timer, 30 SECONDS) if(current_worm >= 2 && current_worm < max_worm) current_worm++ if(current_food > 0 && current_worm > 1) current_food-- - new /obj/item/worm_fertilizer(get_turf(src)) + new /obj/item/stack/worm_fertilizer(get_turf(src)) /obj/structure/wormfarm/examine(mob/user) . = ..() @@ -89,7 +89,7 @@ in_use = TRUE balloon_alert(user, "feeding the worms") - if(!do_after(user, 5 SECONDS, src)) + if(!do_after(user, 1 SECONDS, src)) balloon_alert(user, "stopped feeding the worms") in_use = FALSE return @@ -129,9 +129,11 @@ return ..() //produced by feeding worms food and can be ground up for plant nutriment or used directly on ash farming -/obj/item/worm_fertilizer +/obj/item/stack/worm_fertilizer name = "worm fertilizer" desc = "When you fed your worms, you should have expected this." icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi' icon_state = "fertilizer" grind_results = list(/datum/reagent/plantnutriment/eznutriment = 3, /datum/reagent/plantnutriment/left4zednutriment = 3, /datum/reagent/plantnutriment/robustharvestnutriment = 3) + singular_name = "fertilizer" + merge_type = /obj/item/stack/worm_fertilizer diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm index a79f0dfb883..a0882c288a1 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm @@ -10,16 +10,22 @@ /obj/item/seed_mesh/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/stack/ore/glass)) var/obj/item/stack/stack_item = attacking_item - if(!do_after(user, 10 SECONDS, src)) - user.balloon_alert(user, "have to stand still!") - return - if(!stack_item.use(5)) - user.balloon_alert(user, "unable to use five of [stack_item]!") - return - if(prob(85)) - user.balloon_alert(user, "[stack_item] reveals nothing!") - return - var/spawn_seed = pick(subtypesof(/obj/item/seeds) - seeds_blacklist) - new spawn_seed(get_turf(src)) - user.balloon_alert(user, "[stack_item] revealed something!") + + while(stack_item.amount >= 5) + if(!do_after(user, 5 SECONDS, src)) + user.balloon_alert(user, "have to stand still!") + return + + if(!stack_item.use(5)) + user.balloon_alert(user, "unable to use five of [stack_item]!") + return + + if(prob(70)) + user.balloon_alert(user, "[stack_item] reveals nothing!") + continue + + var/spawn_seed = pick(subtypesof(/obj/item/seeds) - seeds_blacklist) + new spawn_seed(get_turf(src)) + user.balloon_alert(user, "[stack_item] revealed something!") + return ..() diff --git a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm b/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm index 0e60d2ed7e9..7e41148ba11 100644 --- a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm +++ b/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm @@ -95,7 +95,7 @@ to_chat(human_target, span_notice("Your body feels hotter...")) if(5) var/datum/action/cooldown/mob_cooldown/fire_breath/granted_action - granted_action = new() + granted_action = new(human_target) granted_action.Grant(human_target) to_chat(human_target, span_notice("Your throat feels larger...")) if(6 to INFINITY) diff --git a/modular_skyrat/modules/ashwalkers/code/turfs/closed_turfs.dm b/modular_skyrat/modules/ashwalkers/code/turfs/closed_turfs.dm new file mode 100644 index 00000000000..54b4953671a --- /dev/null +++ b/modular_skyrat/modules/ashwalkers/code/turfs/closed_turfs.dm @@ -0,0 +1,48 @@ +/turf/closed/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/flashlight/flare/torch)) + return place_torch(attacking_item, user, params) + + return ..() + +// Try to place a torch on the wall such that we can only see it from one side +/turf/closed/proc/place_torch(obj/item/flashlight/flare/torch/torch_to_place, mob/user, params) + if(user.transferItemToLoc(torch_to_place, user.drop_location(), silent = FALSE)) + var/found_adjacent_turf = get_open_turf_in_dir(src, get_dir(src, user.loc)) + var/list/modifiers = params2list(params) + + // Center the icon where the user clicked. + if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y)) + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the wall turf) + torch_to_place.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/3), world.icon_size/3) + torch_to_place.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/3), world.icon_size/3) + + // Try to put the torch in the adjacent turf relative to the user. This way it's not visible from the other side of the wall + if(found_adjacent_turf) + torch_to_place.forceMove(found_adjacent_turf) + else + torch_to_place.forceMove(src) // no open turfs for some reason + return TRUE + + // The item itself is in the adjacent turf, so we need to shift the icon one tile over to put it in the wall + switch(get_dir(found_adjacent_turf, src)) + if(NORTH) + torch_to_place.pixel_y += world.icon_size + if(SOUTH) + torch_to_place.pixel_y -= world.icon_size + if(EAST) + torch_to_place.pixel_x += world.icon_size + if(NORTHEAST) + torch_to_place.pixel_y += world.icon_size + torch_to_place.pixel_x += world.icon_size + if(SOUTHEAST) + torch_to_place.pixel_y -= world.icon_size + torch_to_place.pixel_x += world.icon_size + if(WEST) + torch_to_place.pixel_x -= world.icon_size + if(NORTHWEST) + torch_to_place.pixel_y += world.icon_size + torch_to_place.pixel_x -= world.icon_size + if(SOUTHWEST) + torch_to_place.pixel_y -= world.icon_size + torch_to_place.pixel_x -= world.icon_size + return TRUE diff --git a/modular_skyrat/modules/assault_operatives/code/interrogator.dm b/modular_skyrat/modules/assault_operatives/code/interrogator.dm index 43db62d03bc..993e6ce7623 100644 --- a/modular_skyrat/modules/assault_operatives/code/interrogator.dm +++ b/modular_skyrat/modules/assault_operatives/code/interrogator.dm @@ -196,7 +196,10 @@ for(var/datum/status_effect/goldeneye_pinpointer/iterating_pinpointer in GLOB.goldeneye_pinpointers) iterating_pinpointer.set_target(new_key) - notify_ghosts("GoldenEye key launched!", source = new_key, action = NOTIFY_ORBIT, header = "Something's Interesting!") + notify_ghosts("GoldenEye key launched!", + source = new_key, + header = "Something's Interesting!", + ) /obj/machinery/interrogator/proc/find_drop_turf() var/list/possible_turfs = list() diff --git a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm b/modular_skyrat/modules/assault_operatives/code/sunbeam.dm index e05dea055ef..0ef738b1803 100644 --- a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm +++ b/modular_skyrat/modules/assault_operatives/code/sunbeam.dm @@ -57,7 +57,10 @@ var/matrix/our_matrix = matrix() our_matrix.Scale(scale_x, scale_y) transform = our_matrix - notify_ghosts("An ICARUS sunbeam has been launched! [target_atom ? "Towards: [target_atom.name]" : ""]", source = src, action = NOTIFY_ORBIT, header = "Somethings burning!") + notify_ghosts("An ICARUS sunbeam has been launched! [target_atom ? "Towards: [target_atom.name]" : ""]", + source = src, + header = "Somethings burning!", + ) soundloop = new(src, TRUE) /obj/effect/sunbeam/Destroy(force) diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm index 8d33efb03d5..19726907ae7 100644 --- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm +++ b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm @@ -3,7 +3,7 @@ */ /datum/ai_controller/basic_controller/abductor blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/modular_skyrat/modules/barsigns/code/barsigns.dm b/modular_skyrat/modules/barsigns/code/barsigns.dm index 4e10e4fe551..87d3da1575d 100644 --- a/modular_skyrat/modules/barsigns/code/barsigns.dm +++ b/modular_skyrat/modules/barsigns/code/barsigns.dm @@ -1,227 +1,295 @@ -/datum/barsign/topmen +// Modularly set the correct icon file +/obj/machinery/barsign/update_icon_state() + . = ..() + // uses tg icon file + if(!istype(chosen_sign, /datum/barsign/skyrat) || icon_state == "empty") + icon = initial(icon) + return + + // uses modular icon file + if(istype(chosen_sign, /datum/barsign/skyrat/large)) + icon = SKYRAT_LARGE_BARSIGN_FILE + else + icon = SKYRAT_BARSIGN_FILE + +/datum/barsign/skyrat/topmen name = "Top Men" - icon = "topmen" + icon_state = "topmen" + neon_color = "#C2AACA" -/datum/barsign/spaceballgrille +/datum/barsign/skyrat/spaceballgrille name = "Spaceball Grille" - icon = "spaceballgrille" + icon_state = "spaceballgrille" + neon_color = "#827973" -/datum/barsign/clubee +/datum/barsign/skyrat/clubee name = "Club Bee" - icon = "clubee" + icon_state = "clubee" + neon_color = "#F2EEEE" -/datum/barsign/thesun +/datum/barsign/skyrat/thesun name = "The Sun" - icon = "thesun" + icon_state = "thesun" + neon_color = "#F8F0B8" -/datum/barsign/limbo +/datum/barsign/skyrat/limbo name = "The Limbo" - icon = "limbo" + icon_state = "limbo" desc = "A popular haunt for lost souls. The mood lighting is killer!" + neon_color = "#777777" -/datum/barsign/meadbay +/datum/barsign/skyrat/meadbay name = "Meadbay" - icon = "meadbay" + icon_state = "meadbay" + neon_color = "#EBB823" -/datum/barsign/cindikate +/datum/barsign/skyrat/cindikate name = "Cindi Kate's" - icon = "cindikate" + icon_state = "cindikate" + neon_color = "#FF3403" -/datum/barsign/theclownshead +/datum/barsign/skyrat/theclownshead name = "The Clown's Head" - icon = "theclownshead" + icon_state = "theclownshead" desc = "Home of Headdy, the honking clown head!" + neon_color = "#FFD800" -/datum/barsign/theorchard +/datum/barsign/skyrat/theorchard name = "The Orchard" - icon = "theorchard" + icon_state = "theorchard" + neon_color = "#CFFF47" -/datum/barsign/thesaucyclown +/datum/barsign/skyrat/thesaucyclown name = "The Saucy Clown" - icon = "thesaucyclown" + icon_state = "thesaucyclown" desc = "A known gathering site for the annual clown courtship rituals." + neon_color = "#FF66CC" -/datum/barsign/thedamnwall +/datum/barsign/skyrat/thedamnwall name = "The Damn Wall" - icon = "thedamnwall" + icon_state = "thedamnwall" desc = "When you're up against a wall, it's best to have stout friends and stout liquor right there beside you." + neon_color = "#CC3333" -/datum/barsign/whiskeyimplant +/datum/barsign/skyrat/whiskeyimplant name = "Whiskey Implant" - icon = "whiskeyimplant" + icon_state = "whiskeyimplant" + neon_color = "#E9F517" -/datum/barsign/carpecarp +/datum/barsign/skyrat/carpecarp name = "Carpe Carp" - icon = "carpecarp" + icon_state = "carpecarp" + neon_color = "#C717FE" -/datum/barsign/robustroadhouse +/datum/barsign/skyrat/robustroadhouse name = "Robust Roadhouse" - icon = "robustroadhouse" + icon_state = "robustroadhouse" + neon_color = "#F7A804" -/datum/barsign/theredshirt +/datum/barsign/skyrat/theredshirt name = "The Redshirt" - icon = "theredshirt" + icon_state = "theredshirt" + neon_color = "#FF92E0" -/datum/barsign/maltesefalconmk2 +/datum/barsign/skyrat/maltesefalconmk2 name = "Maltese Falcon MK2" - icon = "maltesefalconmk2" + icon_state = "maltesefalconmk2" desc = "The Maltese Falcon mark two, now extra hard boiled." + neon_color = "#E30000" -/datum/barsign/thecavernmk2 +/datum/barsign/skyrat/thecavernmk2 name = "The Cavern MK2" - icon = "thecavernmk2" + icon_state = "thecavernmk2" desc = "Fine drinks while listening to some fine tunes." + neon_color = "#AA9393" -/datum/barsign/lv426 +/datum/barsign/skyrat/lv426 name = "LV-426" - icon = "lv426" + icon_state = "lv426" desc = "Drinking with fancy facemasks is clearly more important than going to medbay." + neon_color = "#00F206" -/datum/barsign/zocalo +/datum/barsign/skyrat/zocalo name = "Zocalo" - icon = "zocalo" + icon_state = "zocalo" desc = "Anteriormente ubicado en Spessmerica." + neon_color = "#E5AF1C" -/datum/barsign/fourtheemprah +/datum/barsign/skyrat/fourtheemprah name = "4 The Emprah" - icon = "4theemprah" + icon_state = "4theemprah" desc = "Enjoyed by fanatics, heretics, and brain-damaged patrons alike." + neon_color = "#E5AF1C" -/datum/barsign/ishimura +/datum/barsign/skyrat/ishimura name = "Ishimura" - icon = "ishimura" + icon_state = "ishimura" desc = "Well known for their quality brownstar and delicious crackers." + neon_color = "#FF0000" -/datum/barsign/tardis +/datum/barsign/skyrat/tardis name = "Tardis" - icon = "tardis" + icon_state = "tardis" desc = "This establishment has been through at least 5,343 iterations." + neon_color = "#2739AA" -/datum/barsign/quarks +/datum/barsign/skyrat/quarks name = "Quark's" - icon = "quarks" + icon_state = "quarks" desc = "Frequenters of this establishment are often seen wearing meson scanners; how quaint." + neon_color = "#10E500" -/datum/barsign/tenforward +/datum/barsign/skyrat/tenforward name = "Ten Forward" - icon = "tenforward" + icon_state = "tenforward" + neon_color = "#E5AF1C" -/datum/barsign/thepranicngpony +/datum/barsign/skyrat/theprancingpony name = "The Prancing Pony" - icon = "thepranicngpony" + icon_state = "theprancingpony" desc = "Ok, we don't take to kindly to you short folk pokin' round looking for some ranger scum." + neon_color = "#FF9100" -/datum/barsign/vault13 +/datum/barsign/skyrat/vault13 name = "Vault 13" - icon = "vault13" + icon_state = "vault13" desc = "Coincidence is intentional." + neon_color = "#FFA800" -/datum/barsign/thehive +/datum/barsign/skyrat/thehive name = "The Hive" - icon = "thehive" + icon_state = "thehive" + neon_color = "#FFC62A" -/datum/barsign/cantina +/datum/barsign/skyrat/cantina name = "Chalmun's Cantina" - icon = "cantina" + icon_state = "cantina" desc = "The bar was founded on the principles of originality; they have the same music playing 24/7." + neon_color = "#0078FF" -/datum/barsign/milliways42 +/datum/barsign/skyrat/milliways42 name = "Milliways 42" - icon = "milliways42" + icon_state = "milliways42" desc = "It's not really the end; it's the beginning, meaning, and answer for all your beverage needs." + neon_color = "#FF00F6" -/datum/barsign/timeofeve +/datum/barsign/skyrat/timeofeve name = "The Time of Eve" - icon = "thetimeofeve" + icon_state = "thetimeofeve" desc = "Vintage drinks from 2453!." + neon_color = "#EB52F8" -/datum/barsign/spaceasshole +/datum/barsign/skyrat/spaceasshole name = "Space Asshole" - icon = "spaceasshole" + icon_state = "spaceasshole" desc = "Open since 2125, Not much has changed since then; the engineers still release the singulo and the damn miners still are more likely to cave your face in that deliver ores." + neon_color = "#FF0000" -/datum/barsign/birdcage +/datum/barsign/skyrat/birdcage name = "The Bird Cage" - icon = "birdcage" + icon_state = "birdcage" desc = "Caw." + neon_color = "#FFD21E" -/datum/barsign/narsie +/datum/barsign/skyrat/narsie name = "Narsie Bistro" - icon = "narsiebistro" + icon_state = "narsiebistro" desc = "The last pub before the World's End." + neon_color = "#FF0000" -/datum/barsign/fallout +/datum/barsign/skyrat/fallout name = "The Booze Bunker" - icon = "boozebunker" + icon_state = "boozebunker" desc = "Never duck for cover without a drink!" + neon_color = "#FCC41B" -/datum/barsign/brokendreams +/datum/barsign/skyrat/brokendreams name = "The Cafe of Broken Dreams" - icon = "brokendreams" + icon_state = "brokendreams" desc = "Try our new dogmeat sliders!" + neon_color = "#E8E8A5" -/datum/barsign/toolboxtavern +/datum/barsign/skyrat/toolboxtavern name = "Toolbox Tavern" - icon = "toolboxtavern" + icon_state = "toolboxtavern" desc = "Free lodging with every Screwdriver purchased!" + neon_color = "" -/datum/barsign/blueoyster +/datum/barsign/skyrat/blueoyster name = "The Blue Oyster" - icon = "blueoyster" + icon_state = "blueoyster" desc = "The totally heterosexual bar for totally heterosexual men, just come inside and see." + neon_color = "" -/datum/barsign/foreign +/datum/barsign/skyrat/foreign name = "Foreign Food Sign" - icon = "foreign" + icon_state = "foreign" desc = "A sign written in some dead language advertising some non-descript foreign food." + neon_color = "" -/datum/barsign/commie +/datum/barsign/skyrat/commie name = "Prole's Preferred" - icon = "commie" + icon_state = "commie" desc = "The only bar you will ever need, comrade!" + neon_color = "#E46F6F" -/datum/barsign/brokenheros +/datum/barsign/skyrat/brokenheros name = "The Bar of Broken Heros" - icon = "brokenheros" + icon_state = "brokenheros" desc = "Do you enjoy hurting other people?" + neon_color = "" -/datum/barsign/sociallubricator +/datum/barsign/skyrat/sociallubricator name = "The Social Lubricator" - icon = "sociallubricator" + icon_state = "sociallubricator" desc = "The perfect thing to make you like people you hate." + neon_color = "" -/datum/barsign/chemlab +/datum/barsign/skyrat/chemlab name = "The Chem Lab" - icon = "chemlab" + icon_state = "chemlab" desc = "Try our new plasma martinis!" + neon_color = "" -/datum/barsign/mime +/datum/barsign/skyrat/mime name = "Moonshine Mime" - icon = "mime" + icon_state = "mime" desc = "Silent, not stirred." + neon_color = "" -/datum/barsign/clown +/datum/barsign/skyrat/clown name = "Honking Clown" - icon = "clown" + icon_state = "clown" desc = "Bananas not included." + neon_color = "" -/datum/barsign/progressive +/datum/barsign/skyrat/progressive name = "A Modern and Progressive Tavern" - icon = "progressive" + icon_state = "progressive" desc = "Whatever that means." + neon_color = "#DB9B9A" -/datum/barsign/va11halla +/datum/barsign/skyrat/va11halla name = "VA-11 HALL-A" - icon = "va11halla" + icon_state = "va11halla" desc = "Not as dangerous as N1-RV Ann-A." + neon_color = "#FB3F7D" -/datum/barsign/squatopia +/datum/barsign/skyrat/squatopia name = "Squatopia" - icon = "squatopia" + icon_state = "squatopia" desc = "The crystal belonged to my father. He was murdered." + neon_color = "#CC0033" -/datum/barsign/bug +/datum/barsign/skyrat/bug name = "The Hungry Bug" - icon = "hungrybug" + icon_state = "hungrybug" desc = "Stop by and enjoy some of the Hole's famous gyoza!" + neon_color = "#E2B001" +// 96x96 signs + +/datum/barsign/skyrat/large/cyberslyph + name = "Cyberslyph" + icon_state = "cyberslyph" + neon_color = "#00FFFF" diff --git a/modular_skyrat/modules/barsigns/icons/barsigns.dmi b/modular_skyrat/modules/barsigns/icons/barsigns.dmi index ce0330e53ef..5bd7d1d9d74 100644 Binary files a/modular_skyrat/modules/barsigns/icons/barsigns.dmi and b/modular_skyrat/modules/barsigns/icons/barsigns.dmi differ diff --git a/modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi b/modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi new file mode 100644 index 00000000000..85554593961 Binary files /dev/null and b/modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi differ diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm b/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm index 0a7a0910cf9..90a1f8159cd 100644 --- a/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm +++ b/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm @@ -57,7 +57,7 @@ cost = 1 /datum/armament_entry/hecu/utility/suppressor - item_type = /obj/item/suppressor + item_type = /obj/item/suppressor/standard max_purchase = 4 cost = 2 diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm b/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm index 75e473b9196..e7afbf7aae7 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm @@ -40,14 +40,10 @@ /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Initialize(mapload) . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() + charge = new(src) charge.Grant(src) charge.cooldown_time = 0 -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Destroy() - QDEL_NULL(charge) - return ..() - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Shoot(atom/targeted_atom) throw_at(targeted_atom, throw_at_range, throw_at_speed) playsound( diff --git a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm b/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm index f7e4c70a6ce..ee0ee204d3e 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm @@ -39,11 +39,11 @@ /mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Initialize(mapload) . = ..() - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge() + charge = new(src) charge.Grant(src) /mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Destroy() - QDEL_NULL(charge) + charge = null return ..() /mob/living/simple_animal/hostile/blackmesa/xen/houndeye/OpenFire() diff --git a/modular_skyrat/modules/blueshield/code/closet.dm b/modular_skyrat/modules/blueshield/code/closet.dm index f1497b2c1c0..2089735d0c0 100644 --- a/modular_skyrat/modules/blueshield/code/closet.dm +++ b/modular_skyrat/modules/blueshield/code/closet.dm @@ -22,7 +22,7 @@ /obj/structure/closet/secure_closet/blueshield/New() ..() - new /obj/item/storage/secure/briefcase(src) + new /obj/item/storage/briefcase/secure(src) new /obj/item/storage/belt/security/full(src) new /obj/item/grenade/flashbang(src) new /obj/item/assembly/flash/handheld(src) diff --git a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm b/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm index e082ddabb42..be3f8323ec5 100644 --- a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm +++ b/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm @@ -1,3 +1,8 @@ +#define BLUESPACE_MINER_TOO_HOT (1<<0) +#define BLUESPACE_MINER_LOW_PRESSURE (1<<1) +#define BLUESPACE_MINER_HIGH_PRESSURE (1<<2) +#define BLUESPACE_MINER_TOO_CLOSE (1<<3) + /obj/machinery/bluespace_miner name = "bluespace miner" desc = "Through the power of bluespace, it is capable of producing materials." @@ -12,6 +17,8 @@ var/gas_temp = 100 ///the amount of seconds process_speed goes on cooldown for var/processing_speed = 6 SECONDS + ///the current status of the enviroment. Any nonzero value means we can't work + var/mining_stat = NONE ///the chance each ore has to be picked, weighted list var/list/ore_chance = list( /obj/item/stack/sheet/iron = 20, @@ -44,23 +51,37 @@ add_overlay("miner_open") if(machine_stat & (NOPOWER|BROKEN)) return - add_overlay("miner_on") + if(mining_stat) + add_overlay("miner_error") + // This one overrides all the following overlays so we check it first + if(mining_stat & BLUESPACE_MINER_TOO_CLOSE) + add_overlay("miner_proximity") + return + if(mining_stat & BLUESPACE_MINER_TOO_HOT) + add_overlay("miner_hot") + if(mining_stat & BLUESPACE_MINER_LOW_PRESSURE) + add_overlay("miner_plow") + else if(mining_stat & BLUESPACE_MINER_HIGH_PRESSURE) + add_overlay("miner_phigh") + else + add_overlay("miner_on") /obj/machinery/bluespace_miner/examine(mob/user) . = ..() if(obj_flags & EMAGGED) . += span_warning("The safeties are turned off!") - var/turf/src_turf = get_turf(src) - var/datum/gas_mixture/environment = src_turf.return_air() - if(environment.temperature >= T20C) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("TEMPERATURE TOO HIGH!")) - if(environment.return_pressure() <= ONE_ATMOSPHERE) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO LOW!")) - if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) - . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO HIGH!")) - for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) - if(bs_miner != src) + // We don't need to run any more checks if this is functioning. Genuinely the old code is terrible + if(mining_stat) + if(mining_stat & BLUESPACE_MINER_TOO_CLOSE) . += span_warning("[src] is in a suboptimal environment: TOO CLOSE TO ANOTHER BLUESPACE MINER") + return . // This needs relocation to fix so we won't bother with the rest + if(mining_stat & BLUESPACE_MINER_TOO_HOT) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("TEMPERATURE TOO HIGH!")) + if(mining_stat & BLUESPACE_MINER_LOW_PRESSURE) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO LOW!")) + else if(mining_stat & BLUESPACE_MINER_HIGH_PRESSURE) + . += span_warning("[src] is in a suboptimal environment: " + span_boldwarning("PRESSURE TOO HIGH!")) + //we need to make sure we can actually print the ores out /obj/machinery/bluespace_miner/proc/check_factors() @@ -73,33 +94,39 @@ // cant be unanchored or open panel if(!anchored || panel_open) return FALSE - for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) - if(bs_miner != src) - return FALSE + var/previous_mining_stat = mining_stat + // Generates the mining_stat to use for overlays and checks + update_mining_stat() + // Updates the overlays, if it is needed + if(mining_stat != previous_mining_stat) + update_appearance() + // Check if it is nonzero + if(mining_stat) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + return FALSE + // mining_stat = 0, we are ready to go + return TRUE + +//Checking enviroment individually +/obj/machinery/bluespace_miner/proc/update_mining_stat() + // To actually check atmos var/turf/src_turf = get_turf(src) var/datum/gas_mixture/environment = src_turf.return_air() + // Default value + mining_stat = NONE + // Proximity check, needs to be more than one tile from another miners + for(var/obj/machinery/bluespace_miner/bs_miner in range(1, src)) + if(bs_miner != src) + mining_stat = mining_stat | BLUESPACE_MINER_TOO_CLOSE + return // This is allmighty // if its hotter than (or equal to) room temp, don't work if(environment.temperature >= T20C) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - // if its lesser than(or equal to) normal pressure, don't work + mining_stat = mining_stat | BLUESPACE_MINER_TOO_HOT + // if its lesser than(or equal to) normal pressure, don't work. Same goes for over(or equal to) 150% pressure if(environment.return_pressure() <= ONE_ATMOSPHERE) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - // overpressurizing will cause nuclear particles... - if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - return FALSE - //add amount_produced degrees to the temperature - var/datum/gas_mixture/merger = new - merger.assert_gas(/datum/gas/carbon_dioxide) - merger.gases[/datum/gas/carbon_dioxide][MOLES] = MOLES_CELLSTANDARD - if(obj_flags & EMAGGED) - merger.assert_gas(/datum/gas/tritium) - merger.gases[/datum/gas/tritium][MOLES] = MOLES_CELLSTANDARD - merger.temperature = (T20C + gas_temp) - src_turf.assume_air(merger) - return TRUE + mining_stat = mining_stat | BLUESPACE_MINER_LOW_PRESSURE + else if(environment.return_pressure() >= (ONE_ATMOSPHERE * 1.5)) + mining_stat = mining_stat | BLUESPACE_MINER_HIGH_PRESSURE //if check_factors is good, then we spawn materials /obj/machinery/bluespace_miner/proc/spawn_mats() @@ -109,8 +136,21 @@ /obj/machinery/bluespace_miner/process() if(!check_factors()) return + // Generate all the waste gas + var/datum/gas_mixture/merger = new + merger.assert_gas(/datum/gas/carbon_dioxide) + merger.gases[/datum/gas/carbon_dioxide][MOLES] = MOLES_CELLSTANDARD + if(obj_flags & EMAGGED) + merger.assert_gas(/datum/gas/tritium) + merger.gases[/datum/gas/tritium][MOLES] = MOLES_CELLSTANDARD + merger.temperature = (T20C + gas_temp) + var/turf/src_turf = get_turf(src) + src_turf.assume_air(merger) + // Finally spawn the mats spawn_mats() - playsound(src, 'sound/machines/ping.ogg', 50, FALSE) + // Crazy? I was crazy once. They locked me in a room, an atmos room, an atmos room with bluespace miners, and the bluespace miners made me crazy. + // This sound no longer echoes through departments like before. Got that was an era. + playsound(src, 'sound/machines/ping.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) /obj/machinery/bluespace_miner/crowbar_act(mob/living/user, obj/item/tool) if(default_deconstruction_crowbar(tool)) @@ -184,3 +224,8 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) discount_experiments = list(/datum/experiment/scanning/points/bluespace_miner = 5000) */ + +#undef BLUESPACE_MINER_TOO_HOT +#undef BLUESPACE_MINER_LOW_PRESSURE +#undef BLUESPACE_MINER_HIGH_PRESSURE +#undef BLUESPACE_MINER_TOO_CLOSE diff --git a/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi b/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi index ebc421da80d..01b9db8ff53 100644 Binary files a/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi and b/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi differ diff --git a/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm b/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm index 3dae7d44d83..9a4c166922c 100644 --- a/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm +++ b/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm @@ -1,3 +1,5 @@ +// MODULAR SNAIL OVERRIDES + /obj/item/bodypart/head/snail icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_DEBRAIN @@ -7,12 +9,20 @@ /obj/item/bodypart/arm/left/snail icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 // Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. + unarmed_damage_high = 5 // Roundstart Snails - A Bit More damage. /obj/item/bodypart/arm/right/snail icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 + unarmed_damage_high = 5 /obj/item/bodypart/leg/left/snail icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1. + unarmed_damage_high = 5 /obj/item/bodypart/leg/right/snail icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + unarmed_damage_low = 1 + unarmed_damage_high = 5 diff --git a/modular_skyrat/modules/cargo/code/goodies.dm b/modular_skyrat/modules/cargo/code/goodies.dm index 2324057a3a6..caeb15c2668 100644 --- a/modular_skyrat/modules/cargo/code/goodies.dm +++ b/modular_skyrat/modules/cargo/code/goodies.dm @@ -70,13 +70,6 @@ cost = PAYCHECK_CREW * 35 // 1750 credit goody? do bounties contains = list(/obj/item/skillchip/xenoarch_magnifier) -/datum/supply_pack/goody/gravity_harness - name = "Gravity Suspension Harness" - desc = "A back-mounted suspensor harness powered by cells, designed by Deep Spacer tribes to either nullify or amplify gravity. \ - While it's a pretty cheap bootleg of the personal gravitic engines used by the Skrell, this one's been fitted with straps and a basic storage module." - cost = CARGO_CRATE_VALUE * 6 // 1200 credits - contains = list(/obj/item/gravity_harness) - /datum/supply_pack/goody/scratching_stone name = "Scratching Stone" desc = "A high-grade sharpening stone made of specialized alloys, meant to sharpen razor-claws. Unfortunately, this particular one has by far seen better days." diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_skyrat/modules/cargo/code/packs.dm index 5071f3a5aa5..14af879c4eb 100644 --- a/modular_skyrat/modules/cargo/code/packs.dm +++ b/modular_skyrat/modules/cargo/code/packs.dm @@ -359,6 +359,13 @@ var/item = pick_n_take(contain_copy) new item(filled_crate) +/datum/supply_pack/misc/gravity_harness + name = "Gravity Suspension Harness" + desc = "A back-mounted suspensor harness powered by cells, designed by Deep Spacer tribes to either nullify or amplify gravity. \ + While it's a pretty cheap bootleg of the personal gravitic engines used by the Skrell, this one's been fitted with straps and a basic storage module." + cost = CARGO_CRATE_VALUE * 6 // 1200 credits + contains = list(/obj/item/gravity_harness) + /* * FOOD */ diff --git a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm b/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm index 911d420d85f..98027573178 100644 --- a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm +++ b/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm @@ -52,7 +52,7 @@ var/turf/converted_turf = pick(valid_turfs) if(isplatingturf(converted_turf)) - converted_turf.PlaceOnTop(/turf/open/floor/bronze, flags = CHANGETURF_INHERIT_AIR) + converted_turf.place_on_top(/turf/open/floor/bronze, flags = CHANGETURF_INHERIT_AIR) new /obj/effect/temp_visual/ratvar/floor(converted_turf) else if(isopenturf(converted_turf)) diff --git a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm b/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm index 0f4efdd5692..8f8f51379ea 100644 --- a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm +++ b/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list()) qdel(quick_bound_scriptures[position]) //Put the quickbound action onto the slab, the slab should grant when picked up - var/datum/action/innate/clockcult/quick_bind/quickbound = new + var/datum/action/innate/clockcult/quick_bind/quickbound = new(src) quickbound.scripture = spell quickbound.slab_weakref = WEAKREF(src) quick_bound_scriptures[position] = quickbound diff --git a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm b/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm index 9fa27cddafd..8557ca2008a 100644 --- a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm +++ b/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm @@ -47,7 +47,11 @@ addtimer(CALLBACK(src, PROC_REF(finish_setup), cogger_apc), SET_UP_TIME) send_clock_message(null, span_brass(span_bold("[user] has installed an integration cog into [cogger_apc].")), msg_ghosts = FALSE) - notify_ghosts("[user] has installed an integration cog into [cogger_apc]", source = user, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Integration cog") + notify_ghosts("[user] has installed an integration cog into [cogger_apc]", + source = user, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Integration cog", + ) /// Finish setting up the cog 5 minutes after insertion diff --git a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm index 08ef285d89c..dcf1b0a556f 100644 --- a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm +++ b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) if(length(loot)) AddElement(/datum/element/death_drops, loot) - var/datum/action/innate/clockcult/comm/communicate = new + var/datum/action/innate/clockcult/comm/communicate = new(src) communicate.Grant(src) GLOB.clockwork_marauders += src @@ -119,7 +119,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) /datum/ai_controller/basic_controller/clockwork_marauder blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) diff --git a/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm b/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm index 09a45e67d79..e2e603b82ef 100644 --- a/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm +++ b/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm @@ -43,7 +43,11 @@ atom_area = get_area(atom_turf) send_clock_message(null, "A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", "", msg_ghosts = FALSE) - notify_ghosts("A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", source = atom_area, action = NOTIFY_JUMP, flashwindow = FALSE, header = "Portal to Reebe") + notify_ghosts("A portal has been opened at [atom_area] to our holy city, it is a glorious day in the name of Ratvar.", + source = atom_area, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Portal to Reebe", + ) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reebe_station_warning), atom_area, portal), 5 MINUTES) diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm b/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm index ad8f096188b..e37db5b30dd 100644 --- a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm +++ b/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm @@ -261,7 +261,7 @@ GLOBAL_LIST_EMPTY(clock_scriptures_by_type) /datum/scripture/slab/New() . = ..() - pointed_spell = new + pointed_spell = new(src) pointed_spell.name = src.name pointed_spell.deactive_msg = "" pointed_spell.parent_scripture = src diff --git a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm b/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm index 01ce5c1a309..1324fd7630d 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm +++ b/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm @@ -65,8 +65,11 @@ primary_researcher = FALSE log_game("A research ritual of [selected_research] was cancelled by deconstruction of [src].") send_clock_message(null, "A research ritual has been disrupted in [get_area(src)]! All research data has been lost.", msg_ghosts = FALSE) - notify_ghosts("A research ritual was disrupted in [get_area(src)]", source = get_turf(src), action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual cancelled") - + notify_ghosts("A research ritual was disrupted in [get_area(src)]", + source = get_turf(src), + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual cancelled", + ) return ..() @@ -295,7 +298,11 @@ playsound(target_turf, 'modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg', 80, FALSE, pressure_affected = FALSE) research_sigil = new(target_turf) send_clock_message(null, "A research ritual has begun in [get_area(src)], ensure nobody stops it until it is completed in [DisplayTimeText(selected_research.time_to_research)]!", msg_ghosts = FALSE) - notify_ghosts("[owner] has begun a research ritual in [get_area(src)]", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual") + notify_ghosts("[owner] has begun a research ritual in [get_area(src)]", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual" + ) log_game("[owner] began a research ritual of [selected_research.name] in [get_area(src)].") research_timer_id = addtimer(CALLBACK(src, PROC_REF(finish_research), owner), selected_research.time_to_research, TIMER_STOPPABLE) @@ -337,7 +344,11 @@ return send_clock_message(null, "The research ritual in [get_area(src)] has completed, rejoice!", msg_ghosts = FALSE) - notify_ghosts("A research ritual in [get_area(src)] has been completed", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Research ritual completed") + notify_ghosts("A research ritual in [get_area(src)] has been completed", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + header = "Research ritual completed", + ) log_game("Finished a research ritual of [selected_research.name] in [get_area(src)].") researching = FALSE diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm b/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm index 060a149e5df..5eacfef0eb6 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm @@ -11,6 +11,10 @@ item_type = /obj/item/gun/energy/disabler cost = PAYCHECK_CREW * 5 +/datum/armament_entry/company_import/microstar/basic_energy_weapons/disabler_smg + item_type = /obj/item/gun/energy/disabler/smg + cost = PAYCHECK_CREW * 7 // slightly more expensive due to ease of use/full auto + /datum/armament_entry/company_import/microstar/basic_energy_weapons/mini_egun item_type = /obj/item/gun/energy/e_gun/mini cost = PAYCHECK_CREW * 5 @@ -22,11 +26,15 @@ /datum/armament_entry/company_import/microstar/basic_energy_long_weapons subcategory = "Basic Energy Longarms" -/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/sc1 +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/laser item_type = /obj/item/gun/energy/laser cost = PAYCHECK_CREW * 5 -/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/sc2 +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/laser_carbine + item_type = /obj/item/gun/energy/laser/carbine + cost = PAYCHECK_CREW * 7 // slightly more expensive due to ease of use/full auto + +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/egun item_type = /obj/item/gun/energy/e_gun cost = PAYCHECK_COMMAND * 4 @@ -60,23 +68,23 @@ /datum/armament_entry/company_import/microstar/mcr_attachments/hellfire name = "microfusion hellfire kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire /datum/armament_entry/company_import/microstar/mcr_attachments/scatter name = "microfusion scatter kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/scatter + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/scatter /datum/armament_entry/company_import/microstar/mcr_attachments/lance name = "microfusion lance kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/lance + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/lance /datum/armament_entry/company_import/microstar/mcr_attachments/repeater name = "microfusion repeater kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/repeater + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/repeater /datum/armament_entry/company_import/microstar/mcr_attachments/tacticool name = "microfusion suppressor kit" - item_type = /obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool // Improved phase emitters, cells, and cell attachments @@ -89,7 +97,7 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/enhanced_part_kit name = "microfusion enhanced parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/enhanced + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/enhanced cost = PAYCHECK_COMMAND * 2 /datum/armament_entry/company_import/microstar/mcr_upgrades/capacity_booster @@ -98,7 +106,7 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/advanced_part_kit name = "microfusion advanced parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/advanced + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/advanced cost = PAYCHECK_COMMAND * 2 /datum/armament_entry/company_import/microstar/mcr_upgrades/selfcharge @@ -107,5 +115,5 @@ /datum/armament_entry/company_import/microstar/mcr_upgrades/bluespace_part_kit name = "microfusion bluespace parts" - item_type = /obj/item/storage/secure/briefcase/white/mcr_parts/bluespace + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/bluespace cost = PAYCHECK_COMMAND * 6 diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm b/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm index 1d2f2ab524a..a815d6b594b 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm @@ -38,6 +38,36 @@ item_type = /obj/item/clothing/suit/armor/vest/cin_surplus_vest cost = PAYCHECK_COMMAND +/datum/armament_entry/company_import/nri_surplus/clothing/police_uniform + item_type = /obj/item/clothing/under/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cloak + item_type = /obj/item/clothing/neck/cloak/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cap + item_type = /obj/item/clothing/head/hats/colonial/nri_police + cost = PAYCHECK_CREW + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_mask + item_type = /obj/item/clothing/mask/gas/nri_police + cost = PAYCHECK_CREW*2 + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_vest + item_type = /obj/item/clothing/head/helmet/nri_police + cost = PAYCHECK_COMMAND + restricted = TRUE + +/datum/armament_entry/company_import/nri_surplus/clothing/police_helmet + item_type = /obj/item/clothing/suit/armor/vest/nri_police + cost = PAYCHECK_COMMAND + restricted = TRUE + // Random surplus store tier stuff, flags, old rations, multitools you'll never use, so on /datum/armament_entry/company_import/nri_surplus/misc diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm b/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm index d6083b39cbc..ac180dd6421 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm @@ -25,7 +25,7 @@ subcategory = "Weapon Accessories" /datum/armament_entry/company_import/vitezstvi/accessory/suppressor - item_type = /obj/item/suppressor + item_type = /obj/item/suppressor/standard cost = PAYCHECK_COMMAND /datum/armament_entry/company_import/vitezstvi/accessory/small_case diff --git a/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm b/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm index b0ed7452055..05bddea8e91 100644 --- a/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm +++ b/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm @@ -1,9 +1,9 @@ -/obj/item/storage/secure/briefcase/white/mcr_loadout +/obj/item/storage/briefcase/secure/white/mcr_loadout name = "Microfusion Attachment Kit" -/obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire -/obj/item/storage/secure/briefcase/white/mcr_loadout/hellfire/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire/PopulateContents() var/static/items_inside = list( /obj/item/microfusion_gun_attachment/barrel/hellfire = 1, /obj/item/microfusion_gun_attachment/rail = 1, @@ -11,9 +11,9 @@ ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_loadout/scatter +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter -/obj/item/storage/secure/briefcase/white/mcr_loadout/scatter/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter/PopulateContents() var/static/items_inside = list( /obj/item/microfusion_gun_attachment/barrel/scatter = 1, /obj/item/microfusion_gun_attachment/rail = 1, @@ -21,9 +21,9 @@ ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_loadout/lance +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance -/obj/item/storage/secure/briefcase/white/mcr_loadout/lance/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance/PopulateContents() var/static/items_inside = list( /obj/item/microfusion_gun_attachment/barrel/lance = 1, /obj/item/microfusion_gun_attachment/scope = 1, @@ -31,9 +31,9 @@ ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_loadout/repeater +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater -/obj/item/storage/secure/briefcase/white/mcr_loadout/repeater/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater/PopulateContents() var/static/items_inside = list( /obj/item/microfusion_gun_attachment/barrel/repeater = 1, /obj/item/microfusion_gun_attachment/rail = 1, @@ -41,9 +41,9 @@ ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool -/obj/item/storage/secure/briefcase/white/mcr_loadout/tacticool/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool/PopulateContents() var/static/items_inside = list( /obj/item/microfusion_gun_attachment/barrel/suppressor = 1, /obj/item/microfusion_gun_attachment/rail = 1, @@ -54,30 +54,30 @@ // Phase emitter and cell upgrades -/obj/item/storage/secure/briefcase/white/mcr_parts +/obj/item/storage/briefcase/secure/white/mcr_parts name = "Microfusion Parts Kit" -/obj/item/storage/secure/briefcase/white/mcr_parts/enhanced +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced -/obj/item/storage/secure/briefcase/white/mcr_parts/enhanced/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced/PopulateContents() var/static/items_inside = list( /obj/item/stock_parts/cell/microfusion/enhanced = 1, /obj/item/microfusion_phase_emitter/enhanced = 1, ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_parts/advanced +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced -/obj/item/storage/secure/briefcase/white/mcr_parts/advanced/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced/PopulateContents() var/static/items_inside = list( /obj/item/stock_parts/cell/microfusion/advanced = 1, /obj/item/microfusion_phase_emitter/advanced = 1, ) generate_items_inside(items_inside,src) -/obj/item/storage/secure/briefcase/white/mcr_parts/bluespace +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace -/obj/item/storage/secure/briefcase/white/mcr_parts/bluespace/PopulateContents() +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace/PopulateContents() var/static/items_inside = list( /obj/item/stock_parts/cell/microfusion/bluespace = 1, /obj/item/microfusion_phase_emitter/bluespace = 1, diff --git a/modular_skyrat/modules/contractor/code/datums/contract.dm b/modular_skyrat/modules/contractor/code/datums/contract.dm index 7d57f029f84..8a5f702b6c5 100644 --- a/modular_skyrat/modules/contractor/code/datums/contract.dm +++ b/modular_skyrat/modules/contractor/code/datums/contract.dm @@ -173,7 +173,7 @@ [owner_id.registered_account.account_balance] credits.", TRUE) else to_chat(contract.owner.current, span_notice("A briefcase appears at your feet!")) - var/obj/item/storage/secure/briefcase/case = new(get_turf(contract.owner.current)) + var/obj/item/storage/briefcase/secure/case = new(get_turf(contract.owner.current)) for(var/i in 1 to (round((ransom * CONTRACTOR_RANSOM_CUT) / 1000))) // Gets slightly less/more but whatever new /obj/item/stack/spacecash/c1000(case) diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm b/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm index 258cd9463d6..f35b8f3e36f 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm +++ b/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm @@ -81,6 +81,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) health = 25 //they need to be able to pass tables and mobs pass_flags = PASSTABLE | PASSMOB + density = FALSE //they are below mobs, or below tables layer = BELOW_MOB_LAYER //corticals are tiny @@ -205,8 +206,18 @@ GLOBAL_LIST_EMPTY(cortical_borers) /mob/living/basic/cortical_borer/Initialize(mapload) . = ..() + AddComponent( \ + /datum/component/squashable, \ + squash_chance = 25, \ + squash_damage = 25, \ + squash_flags = SQUASHED_DONT_SQUASH_IN_CONTENTS, \ + ) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) //they need to be able to move around + var/matrix/borer_matrix = matrix(transform) + borer_matrix.Scale(0.5, 0.5) + transform = borer_matrix + name = "[initial(name)] ([generation]-[rand(100,999)])" //so their gen and a random. ex 1-288 is first gen named 288, 4-483 if fourth gen named 483 if(prob(5)) @@ -221,7 +232,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) reagent_holder = new /obj/item/reagent_containers/borer(src) for(var/action_type in known_abilities) - var/datum/action/attack_action = new action_type() + var/datum/action/attack_action = new action_type(src) attack_action.Grant(src) if(mind) @@ -265,7 +276,7 @@ GLOBAL_LIST_EMPTY(cortical_borers) . += "OBJECTIVES:" . += "1) [GLOB.objective_egg_borer_number] borers producing [GLOB.objective_egg_egg_number] eggs: [GLOB.successful_egg_number]/[GLOB.objective_egg_borer_number]" . += "2) [GLOB.objective_willing_hosts] willing hosts: [length(GLOB.willing_hosts)]/[GLOB.objective_willing_hosts]" - . += "3) [GLOB.objective_blood_borer] borers learning [GLOB.objective_blood_chem] from the blood: [GLOB.successful_blood_chem]/[GLOB.objective_blood_borer]" + . += "3) [GLOB.objective_blood_borer] borers learning [GLOB.objective_blood_chem] chemicals from the blood: [GLOB.successful_blood_chem]/[GLOB.objective_blood_borer]" /mob/living/basic/cortical_borer/Life(seconds_per_tick, times_fired) . = ..() diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm b/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm index fae00851ad4..222f0f0e813 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm +++ b/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm @@ -1,7 +1,7 @@ #define CHEMICALS_PER_UNIT 2 #define CHEMICAL_SECOND_DIVISOR (5 SECONDS) #define OUT_OF_HOST_EGG_COST 50 -#define BLOOD_CHEM_OBJECTIVE 5 +#define BLOOD_CHEM_OBJECTIVE 3 // Parent of all borer actions /datum/action/cooldown/borer diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm b/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm index 29829dac8b0..4311ee81afd 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm +++ b/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm @@ -41,7 +41,12 @@ forceMove(host_egg) var/area/src_area = get_area(src) if(src_area) - notify_ghosts("A cortical borer egg has been laid in \the [src_area.name].", source = src, action = NOTIFY_PLAY, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE, notify_suiciders = FALSE) + notify_ghosts("A cortical borer egg has been laid in \the [src_area.name].", + source = src, + notify_flags = NOTIFY_CATEGORY_NOFLASH & ~GHOST_NOTIFY_NOTIFY_SUICIDERS, + click_interact = TRUE, + ignore_key = POLL_IGNORE_DRONE, + ) /obj/item/borer_egg name = "borer egg" diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm index 5a07e43d313..b04370d6c29 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm +++ b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm @@ -107,5 +107,5 @@ /datum/borer_evolution/diveworm/empowered_offspring/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/empowered_offspring/attack_action = new() + var/datum/action/cooldown/borer/empowered_offspring/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm index ca5e1188352..be06cc5d7f4 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm +++ b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm @@ -12,7 +12,7 @@ /datum/borer_evolution/hivelord/produce_offspring/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/produce_offspring/attack_action = new() + var/datum/action/cooldown/borer/produce_offspring/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T2 @@ -25,7 +25,7 @@ /datum/borer_evolution/hivelord/blood_chemical/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/learn_bloodchemical/attack_action = new() + var/datum/action/cooldown/borer/learn_bloodchemical/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T3 @@ -51,7 +51,7 @@ /datum/borer_evolution/hivelord/stealth_mode/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/stealth_mode/attack_action = new() + var/datum/action/cooldown/borer/stealth_mode/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T5 diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm index 2cdc66addbb..4eb50058837 100644 --- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm +++ b/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm @@ -12,7 +12,7 @@ /datum/borer_evolution/symbiote/willing_host/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/willing_host/attack_action = new() + var/datum/action/cooldown/borer/willing_host/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) // T2 @@ -107,6 +107,6 @@ /datum/borer_evolution/symbiote/revive_host/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() - var/datum/action/cooldown/borer/revive_host/attack_action = new() + var/datum/action/cooldown/borer/revive_host/attack_action = new(cortical_owner) attack_action.Grant(cortical_owner) diff --git a/modular_skyrat/modules/customization/game/objects/items/plushes.dm b/modular_skyrat/modules/customization/game/objects/items/plushes.dm index 1d2992cf8ef..1d6349c5651 100644 --- a/modular_skyrat/modules/customization/game/objects/items/plushes.dm +++ b/modular_skyrat/modules/customization/game/objects/items/plushes.dm @@ -1,3 +1,7 @@ +// Because plushes have a second desc var that needs to be updated +/obj/item/toy/plush/on_loadout_custom_described() + normal_desc = desc + // // MODULAR PLUSHES /obj/item/toy/plush/skyrat icon = 'modular_skyrat/master_files/icons/obj/plushes.dmi' diff --git a/modular_skyrat/modules/customization/modules/client/augment/organs.dm b/modular_skyrat/modules/customization/modules/client/augment/organs.dm index 83c1c337221..0085f6426c5 100644 --- a/modular_skyrat/modules/customization/modules/client/augment/organs.dm +++ b/modular_skyrat/modules/customization/modules/client/augment/organs.dm @@ -4,8 +4,10 @@ /datum/augment_item/organ/apply(mob/living/carbon/human/human_holder, character_setup = FALSE, datum/preferences/prefs) if(character_setup) return + + var/obj/item/organ/organ_path = path // cast this to an organ so we can get the slot from it using initial() var/obj/item/organ/new_organ = new path() - new_organ.copy_traits_from(human_holder.get_organ_slot(ORGAN_SLOT_TONGUE)) + new_organ.copy_traits_from(human_holder.get_organ_slot(initial(organ_path.slot))) new_organ.Insert(human_holder, special = TRUE, drop_if_replaced = FALSE) //HEARTS diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm index cf93fb379d9..75c95556f6d 100644 --- a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm +++ b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm @@ -93,13 +93,22 @@ icon_state = "face_scarf" greyscale_config = /datum/greyscale_config/face_scarf greyscale_config_worn = /datum/greyscale_config/face_scarf/worn + greyscale_config_worn_muzzled = /datum/greyscale_config/face_scarf/worn/muzzled greyscale_colors = "#a52424" flags_1 = IS_PLAYER_COLORABLE_1 - flags_inv = HIDEFACIALHAIR + flags_inv = HIDEFACIALHAIR | HIDESNOUT + supports_variations_flags = CLOTHING_SNOUTED_VARIATION /obj/item/clothing/neck/face_scarf/Initialize(mapload) . = ..() - AddComponent(/datum/component/toggle_clothes, "face_scarf_t") + AddComponent(/datum/component/toggle_icon, toggle_noun = "scarf") + +/obj/item/clothing/neck/face_scarf/AltClick(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip + . = ..() + if(icon_state != "face_scarf_t") + flags_inv = HIDEFACIALHAIR | HIDESNOUT + else + flags_inv = HIDEFACIALHAIR /obj/item/clothing/neck/maid_neck_cover name = "maid neck cover" diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm index 20c56baf52e..e01b9a5ad18 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -374,32 +374,26 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON // Donation reward for TheOOZ -/obj/item/clothing/mask/animal/kindle +/obj/item/clothing/mask/animal/wolf name = "wolf mask" - desc = "A dark mask in the shape of a wolf's head.
The material feels like it's made entirely out of inexpensive plastic." + desc = "A dark mask in the shape of a wolf's head." icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' icon_state = "kindle" worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' inhand_icon_state = "gasmask_captain" animal_type = "wolf" - animal_sounds = list("Awoo!", "Woof.", "Arf!") - animal_sounds_alt_probability = 15 - animal_sounds_alt = list("Join us!", "Wear the mask.") - curse_spawn_sound = 'modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg' - cursed = FALSE - - supports_variations_flags = NONE - clothing_flags = MASKINTERNALS | VOICEBOX_DISABLED | VOICEBOX_TOGGLABLE - flags_inv = HIDEFACIALHAIR | HIDESNOUT + unique_death = 'modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg' visor_flags_inv = HIDEFACIALHAIR | HIDESNOUT + flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + clothing_flags = VOICEBOX_DISABLED | MASKINTERNALS | BLOCK_GAS_SMOKE_EFFECT | GAS_FILTERING alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER - w_class = WEIGHT_CLASS_SMALL + use_radio_beeps_tts = TRUE -/obj/item/clothing/mask/animal/kindle/make_cursed() +/obj/item/clothing/mask/animal/wolf/Initialize(mapload) . = ..() - clothing_flags = initial(clothing_flags) - name = "\proper the accursed wolf mask" - desc = "The mask which belongs to Nanotrasen's Outpost Captain Kindle, it is the symbol of her alleged cult.
It looks like a [animal_type] mask, but closer inspection reveals it's melded onto this person's face!" + var/obj/item/clothing/mask/gas/sechailer/sechailer_type = /obj/item/clothing/mask/gas/sechailer + voice_filter = initial(sechailer_type.voice_filter) // Donation reward for Random516 /obj/item/clothing/head/drake_skull @@ -1492,7 +1486,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32) // Donation reward for MaSvedish /obj/item/clothing/mask/holocigarette/masvedishcigar name = "holocigar" - desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology." + desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology. It has a small inscription of 'MG' on the golden label." icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi' worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi' lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi' diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm index 8e19d245eee..8b71ed81001 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm @@ -18,6 +18,10 @@ name = "Blank" icon_state = "blank" +/datum/sprite_accessory/screen/blank_white + name = "Blank White" + icon_state = "blankwhite" + /datum/sprite_accessory/screen/pink name = "Pink" icon_state = "pink" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm index b87946aaf37..357e827e744 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm @@ -182,11 +182,6 @@ GLOBAL_LIST_EMPTY(customizable_races) species_human.apply_overlay(BODY_LAYER) handle_mutant_bodyparts(species_human) -//I wag in death -/datum/species/spec_death(gibbed, mob/living/carbon/human/H) - if(H) - stop_wagging_tail(H) - /datum/species/spec_stun(mob/living/carbon/human/H,amount) if(H) stop_wagging_tail(H) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm index 0efe513cf26..0b615d6bfc1 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm @@ -41,32 +41,12 @@ if(inFeatures["ghoulcolor"] == null || inFeatures["ghoulcolor"] == "") inFeatures["ghoulcolor"] = GLOB.color_list_ghoul[pick(GLOB.color_list_ghoul)] -/datum/species/ghoul/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) - // Missing Defaults in DNA? Randomize! - proof_ghoul_features(C.dna.features) - - . = ..() - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - - set_ghoul_color(H) - - // 2) BODYPARTS - C.part_default_head = /obj/item/bodypart/head/mutant/ghoul - C.part_default_chest = /obj/item/bodypart/chest/mutant/ghoul - C.part_default_l_arm = /obj/item/bodypart/arm/left/mutant/ghoul - C.part_default_r_arm = /obj/item/bodypart/arm/right/mutant/ghoul - C.part_default_l_leg = /obj/item/bodypart/leg/left/mutant/ghoul - C.part_default_r_leg = /obj/item/bodypart/leg/right/mutant/ghoul - C.ReassignForeignBodyparts() - -/datum/species/proc/set_ghoul_color(mob/living/carbon/human/H) +/datum/species/proc/set_ghoul_color(mob/living/carbon/human/human_ghoul) return // Do Nothing -/datum/species/ghoul/set_ghoul_color(mob/living/carbon/human/H) +/datum/species/ghoul/set_ghoul_color(mob/living/carbon/human/human_ghoul) // Called on Assign, or on Color Change (or any time proof_ghoul_features() is used) - fixed_mut_color = H.dna.features["ghoulcolor"] + fixed_mut_color = human_ghoul.dna.features["ghoulcolor"] /mob/living/carbon/proc/ReassignForeignBodyparts() var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) @@ -105,18 +85,39 @@ var/obj/item/bodypart/limb = new part_default_r_leg limb.replace_limb(src, TRUE) +/datum/species/ghoul/on_species_gain(mob/living/carbon/new_ghoul, datum/species/old_species, pref_load) + // Missing Defaults in DNA? Randomize! + proof_ghoul_features(new_ghoul.dna.features) -/datum/species/ghoul/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) - ..() + . = ..() + + if(ishuman(new_ghoul)) + var/mob/living/carbon/human/human_ghoul = new_ghoul + + set_ghoul_color(human_ghoul) + + // 2) BODYPARTS + RegisterSignal(src, COMSIG_ITEM_ATTACK, PROC_REF(attach_meat)) + human_ghoul.part_default_head = /obj/item/bodypart/head/mutant/ghoul + human_ghoul.part_default_chest = /obj/item/bodypart/chest/mutant/ghoul + human_ghoul.part_default_l_arm = /obj/item/bodypart/arm/left/mutant/ghoul + human_ghoul.part_default_r_arm = /obj/item/bodypart/arm/right/mutant/ghoul + human_ghoul.part_default_l_leg = /obj/item/bodypart/leg/left/mutant/ghoul + human_ghoul.part_default_r_leg = /obj/item/bodypart/leg/right/mutant/ghoul + human_ghoul.ReassignForeignBodyparts() + +/datum/species/ghoul/on_species_loss(mob/living/carbon/human/former_ghoul, datum/species/new_species, pref_load) + . = ..() // 2) BODYPARTS - C.part_default_head = /obj/item/bodypart/head - C.part_default_chest = /obj/item/bodypart/chest - C.part_default_l_arm = /obj/item/bodypart/arm/left - C.part_default_r_arm = /obj/item/bodypart/arm/right - C.part_default_l_leg = /obj/item/bodypart/leg/left - C.part_default_r_leg = /obj/item/bodypart/leg/right - C.ReassignForeignBodyparts() + UnregisterSignal(src, COMSIG_ITEM_ATTACK) + former_ghoul.part_default_head = /obj/item/bodypart/head + former_ghoul.part_default_chest = /obj/item/bodypart/chest + former_ghoul.part_default_l_arm = /obj/item/bodypart/arm/left + former_ghoul.part_default_r_arm = /obj/item/bodypart/arm/right + former_ghoul.part_default_l_leg = /obj/item/bodypart/leg/left + former_ghoul.part_default_r_leg = /obj/item/bodypart/leg/right + former_ghoul.ReassignForeignBodyparts() /* * ATTACK PROCS @@ -157,40 +158,43 @@ target.add_splatter_floor(target.loc) target.bleed(60) - return TRUE - return ..() + return COMPONENT_CANCEL_ATTACK_CHAIN -/datum/species/ghoul/proc/handle_limb_mashing() +/datum/species/ghoul/proc/attach_meat(obj/item/attacking_item, mob/living/carbon/human/target, mob/living/user, params) SIGNAL_HANDLER -/datum/species/ghoul/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, mob/living/carbon/human/H, modifiers) - handle_limb_mashing() - // MEAT LIMBS: If our limb is missing, and we're using meat, stick it in! - if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(!istype(target)) return - if(H.stat < DEAD && !affecting && istype(I, /obj/item/food/meat/slab)) + + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + return + + // MEAT LIMBS: If our limb is missing, and we're using meat, stick it in! + if(target.stat < DEAD && istype(attacking_item, /obj/item/food/meat/slab)) var/target_zone = user.zone_selected + + if(target.get_bodypart(target_zone)) // we already have a limb here + return + var/list/limbs = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) if((target_zone in limbs)) - if(user == H) - user.visible_message("[user] begins mashing [I] into [H]'s torso.", span_notice("You begin mashing [I] into your torso.")) + if(user == target) + user.visible_message("[user] begins mashing [attacking_item] into [target]'s torso.", span_notice("You begin mashing [attacking_item] into your torso.")) else - user.visible_message("[user] begins mashing [I] into [H]'s torso.", span_notice("You begin mashing [I] into [H]'s torso.")) + user.visible_message("[user] begins mashing [attacking_item] into [target]'s torso.", span_notice("You begin mashing [attacking_item] into [target]'s torso.")) // Leave Melee Chain (so deleting the meat doesn't throw an error) <--- aka, deleting the meat that called this very proc. spawn(1) - if(do_after(user, 3 SECONDS, H)) + if(do_after(user, 3 SECONDS, target)) // Attach the part! - var/obj/item/bodypart/newBP = H.newBodyPart(target_zone, FALSE) - H.visible_message("The meat sprouts digits and becomes [H]'s new [newBP.name]!", span_notice("The meat sprouts digits and becomes your new [newBP.name]!")) - newBP.try_attach_limb(H) - qdel(I) - playsound(get_turf(H), 'sound/effects/meatslap.ogg', 50, 1) + var/obj/item/bodypart/newBP = target.newBodyPart(target_zone, FALSE) + target.visible_message("The meat sprouts digits and becomes [target]'s new [newBP.name]!", span_notice("The meat sprouts digits and becomes your new [newBP.name]!")) + newBP.try_attach_limb(target) + qdel(attacking_item) + playsound(get_turf(target), 'sound/effects/meatslap.ogg', 50, 1) - return TRUE // True CANCELS the sequence. - - return ..() // TRUE FALSE + return COMPONENT_CANCEL_ATTACK_CHAIN /mob/living/carbon // Type References for Bodyparts diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 32391bd465e..8c4ba3dfe84 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -27,11 +27,11 @@ name = "glass of synthanol" desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." -/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/carbon/C) - if(!(C.mob_biotypes & MOB_ROBOTIC)) - C.reagents.remove_reagent(type, 3.6) //gets removed from organics very fast +/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(!(affected_mob.mob_biotypes & MOB_ROBOTIC)) + affected_mob.reagents.remove_reagent(type, 3.6 * REM * seconds_per_tick) //gets removed from organics very fast if(prob(25)) - C.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 5) + affected_mob.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 5) return ..() /datum/reagent/consumable/ethanol/synthanol/expose_mob(mob/living/carbon/C, method=TOUCH, volume) @@ -162,9 +162,9 @@ name = "glass of hellfire" desc = "An amber colored drink that isn't quite as hot as it looks." -/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 30) - return ..() +/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 0, BODYTEMP_NORMAL + 30) /datum/reagent/consumable/ethanol/sins_delight name = "Sin's Delight" @@ -256,10 +256,11 @@ name = "glass of hotlime miami" desc = "This looks very aesthetically pleasing." -/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired) - M.set_drugginess(1.5 MINUTES * REM * seconds_per_tick) - M.adjustStaminaLoss(-2) - return ..() +/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_drugginess(1.5 MINUTES * REM * seconds_per_tick) + if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) + return UPDATE_MOB_HEALTH /datum/reagent/consumable/ethanol/coggrog name = "Cog Grog" @@ -321,9 +322,9 @@ name = "glass of mercuryblast" desc = "No thermometers were harmed in the creation of this drink" -/datum/reagent/consumable/ethanol/mercuryblast/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) - return ..() +/datum/reagent/consumable/ethanol/mercuryblast/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, T0C) /datum/reagent/consumable/ethanol/piledriver name = "Piledriver" @@ -540,10 +541,11 @@ name = "glass of jell wyrm" desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for." -/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/M) +/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() if(prob(20)) - M.adjustToxLoss(1, 0) - return ..() + if(affected_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH #define JELLWYRM_DISGUST 25 @@ -643,12 +645,10 @@ #undef BLOODSHOT_DISGUST /datum/reagent/consumable/ethanol/bloodshot/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() if(drinker.blood_volume < drinker.blood_volume_normal) drinker.blood_volume = max(drinker.blood_volume, min(drinker.blood_volume + (3 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL)) //Bloodshot quickly restores blood loss. - return ..() - - /datum/reagent/consumable/ethanol/blizzard_brew name = "Blizzard Brew" description = "An ancient recipe. Served best chilled as much as dwarvenly possible." @@ -675,18 +675,18 @@ return ..() /datum/reagent/consumable/ethanol/blizzard_brew/overdose_start(mob/living/carbon/drinker) + . = ..() cube = new /obj/structure/ice_stasis(get_turf(drinker)) cube.color = COLOR_CYAN cube.set_anchored(TRUE) drinker.forceMove(cube) cryostylane_alert = drinker.throw_alert("cryostylane_alert", /atom/movable/screen/alert/status_effect/freon/cryostylane) cryostylane_alert.attached_effect = src //so the alert can reference us, if it needs to - ..() /datum/reagent/consumable/ethanol/blizzard_brew/on_mob_delete(mob/living/carbon/drinker, amount) QDEL_NULL(cube) drinker.clear_alert("cryostylane_alert") - ..() + return ..() /datum/reagent/consumable/ethanol/molten_mead name = "Molten Mead" @@ -743,14 +743,14 @@ quality = DRINK_FANTASTIC return ..() -/datum/reagent/consumable/ethanol/hippie_hooch/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) +/datum/reagent/consumable/ethanol/hippie_hooch/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) for(var/effect in status_effects_to_clear) - drinker.remove_status_effect(effect) - drinker.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick, FALSE, TRUE) - drinker.adjustToxLoss(-0.2 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) - drinker.adjust_drunk_effect(-10 * REM * seconds_per_tick) - ..() - . = TRUE + affected_mob.remove_status_effect(effect) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick, include_subtypes = TRUE) + . = ..() + if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) + . = UPDATE_MOB_HEALTH + affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick) /datum/reagent/consumable/ethanol/research_rum name = "Research Rum" @@ -774,10 +774,9 @@ return ..() /datum/reagent/consumable/ethanol/research_rum/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() if(prob(5)) drinker.say(pick_list_replacements(VISTA_FILE, "ballmer_good_msg"), forced = "ballmer") - ..() - . = TRUE /datum/reagent/consumable/ethanol/golden_grog name = "Golden Grog" diff --git a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm index d66f6fe2f4a..c83856bfb1c 100644 --- a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm +++ b/modular_skyrat/modules/delam_emergency_stop/code/scram.dm @@ -153,7 +153,6 @@ "[src] has been activated!", source = src, header = "Divine Intervention", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', notify_volume = 75, ) @@ -171,7 +170,6 @@ "[src] has been activated!", source = src, header = "Mistakes Were Made", - action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/warning-buzzer.ogg', notify_volume = 75, ) diff --git a/modular_skyrat/modules/drone_adjustments/drone.dm b/modular_skyrat/modules/drone_adjustments/drone.dm index dc88e3ac360..fc4f97d4343 100644 --- a/modular_skyrat/modules/drone_adjustments/drone.dm +++ b/modular_skyrat/modules/drone_adjustments/drone.dm @@ -26,6 +26,7 @@ /mob/living/basic/drone/Initialize(mapload) . = ..() name = "[initial(name)] [rand(0,9)]-[rand(100,999)]" //So that we can identify drones from each other + AddComponent(/datum/component/personal_crafting) /obj/item/storage/backpack/drone_bag name = "drone backpack" @@ -38,4 +39,7 @@ new /obj/item/weldingtool(src) new /obj/item/wirecutters(src) new /obj/item/multitool(src) + new /obj/item/pipe_dispenser(src) + new /obj/item/t_scanner(src) + new /obj/item/analyzer(src) new /obj/item/stack/cable_coil(src) diff --git a/modular_skyrat/modules/encounters/code/nri_raiders.dm b/modular_skyrat/modules/encounters/code/nri_raiders.dm index 7ea6847ff4e..e6c77180d4e 100644 --- a/modular_skyrat/modules/encounters/code/nri_raiders.dm +++ b/modular_skyrat/modules/encounters/code/nri_raiders.dm @@ -107,6 +107,7 @@ GLOBAL_VAR(first_officer) var/obj/item/card/id/id_card = equipped.wear_id if(istype(id_card)) id_card.registered_name = equipped.real_name + id_card.update_icon() id_card.update_label() handlebank(equipped) @@ -114,13 +115,13 @@ GLOBAL_VAR(first_officer) /datum/outfit/pirate/nri/officer name = "NRI Field Officer" - head = /obj/item/clothing/head/beret/sec/nri + head = /obj/item/clothing/head/hats/colonial/nri_police glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/guild/command mask = null - neck = /obj/item/clothing/neck/security_cape/armplate + neck = /obj/item/clothing/neck/cloak/colonial/nri_police - uniform = /obj/item/clothing/under/costume/nri/captain + uniform = /obj/item/clothing/under/colonial/nri_police suit = null gloves = /obj/item/clothing/gloves/combat @@ -129,49 +130,52 @@ GLOBAL_VAR(first_officer) belt = /obj/item/storage/belt/security/nri back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack/raider = 1, /obj/item/ammo_box/magazine/m9mm_aps = 3, /obj/item/gun/ballistic/automatic/pistol/nri = 1, /obj/item/crucifix = 1, /obj/item/clothing/mask/gas/hecu2 = 1, /obj/item/modular_computer/pda/security = 1) + backpack_contents = list( + /obj/item/storage/box/nri_survival_pack/raider = 1, + /obj/item/ammo_box/magazine/m9mm_aps = 3, + /obj/item/gun/ballistic/automatic/pistol/nri = 1, + /obj/item/crucifix = 1, + /obj/item/clothing/mask/gas/nri_police = 1, + /obj/item/modular_computer/pda/nri_police = 1, + ) l_pocket = /obj/item/folder/blue/nri_cop r_pocket = /obj/item/storage/pouch/ammo - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/nri_raider/officer + id = /obj/item/card/id/advanced/nri_police + id_trim = /datum/id_trim/nri_police -/datum/id_trim/nri_raider/officer +/obj/item/modular_computer/pda/nri_police + name = "\improper NRI police PDA" + device_theme = PDA_THEME_TERMINAL + greyscale_colors = "#363655#7878f7" + comp_light_luminosity = 6.3 //Matching a flashlight + comp_light_color = "#5c20aa" //Simulated ultraviolet light for finding blood and :flushed: + starting_programs = list( + /datum/computer_file/program/records/security, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/robocontrol, + ) + inserted_item = /obj/item/pen/fourcolor + +/obj/item/card/id/advanced/nri_police + name = "\improper NRI police identification card" + desc = "A retro-looking card model modified to work with the modern identification systems." + icon = 'modular_skyrat/master_files/icons/obj/card.dmi' + icon_state = "card_nri_police" + assigned_icon_state = "assigned_nri_police" + +/datum/id_trim/nri_police assignment = "NRI Field Officer" - -/datum/outfit/pirate/nri/marine - name = "NRI Marine" - - head = null - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset/guild - mask = null - - uniform = /obj/item/clothing/under/costume/nri - suit = null - - gloves = /obj/item/clothing/gloves/combat - - shoes = /obj/item/clothing/shoes/combat - - belt = /obj/item/storage/belt/security/nri - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list(/obj/item/storage/box/nri_survival_pack/raider = 1, /obj/item/crucifix = 1, /obj/item/ammo_box/magazine/m9mm = 3, /obj/item/clothing/mask/gas/hecu2 = 1, /obj/item/modular_computer/pda/security = 1) - l_pocket = /obj/item/gun/ballistic/automatic/pistol - r_pocket = /obj/item/storage/pouch/ammo - - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/nri_raider - -/datum/id_trim/nri_raider - assignment = "NRI Marine" trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' - trim_state = "trim_nri" - department_color = COLOR_RED_LIGHT - subdepartment_color = COLOR_COMMAND_BLUE - sechud_icon_state = "hud_nri" + trim_state = "trim_nri_police" + department_color = COLOR_NRI_POLICE_BLUE + subdepartment_color = COLOR_NRI_POLICE_SILVER + sechud_icon_state = "hud_nri_police" access = list(ACCESS_SYNDICATE, ACCESS_MAINT_TUNNELS) +/obj/item/gun/energy/e_gun/advtaser/normal + w_class = WEIGHT_CLASS_NORMAL + /obj/effect/mob_spawn/ghost_role/human/nri_raider name = "NRI Raider sleeper" desc = "Cozy. You get the feeling you aren't supposed to be here, though..." @@ -183,7 +187,7 @@ GLOBAL_VAR(first_officer) you_are_text = "You are a Novaya Rossiyskaya Imperiya task force." flavour_text = "The station has refused to pay the fine for breaking Imperial regulations, you are here to recover the debt. Do so by demanding the funds. Force approach is usually recommended, but isn't the only method." important_text = "Allowed races are humans, Akulas, IPCs. Follow your field officer's orders. Important mention - while you are listed as the pirates gamewise, you really aren't lore-and-everything-else-wise. Roleplay accordingly." - outfit = /datum/outfit/pirate/nri/marine + outfit = /datum/outfit/pirate/nri restricted_species = list(/datum/species/human, /datum/species/akula, /datum/species/synthetic) random_appearance = FALSE show_flavor = TRUE @@ -255,8 +259,10 @@ GLOBAL_VAR(first_officer) var/obj/item/card/id/advanced/card = spawned_human.get_idcard() if(GLOB.first_officer == spawned_human) card.assignment = pick(NRI_LEADER_JOB_LIST) + card.trim.sechud_icon_state = "hud_nri_police_lead" else card.assignment = pick(NRI_JOB_LIST) + card.trim.sechud_icon_state = "hud_nri_police" card.update_label() @@ -344,13 +350,6 @@ GLOBAL_VAR(first_officer) command_name = "NRI Enforcer-Class Starship Telegram" report_sound = ANNOUNCER_NRI_RAIDERS -/obj/item/storage/belt/military/nri/captain/pirate_officer/PopulateContents() - generate_items_inside(list( - /obj/item/knife/combat = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/flashbang = 1, - ),src) - /obj/item/storage/belt/security/nri/PopulateContents() generate_items_inside(list( /obj/item/knife/combat = 1, diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm index cf74a0d6dd2..91c4cd461b7 100644 --- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm +++ b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm @@ -173,18 +173,18 @@ duration = 1 SECONDS // worth tweaking? /datum/status_effect/dodgeroll_iframes/on_apply() - RegisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(whiff)) + RegisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(whiff)) return TRUE /datum/status_effect/dodgeroll_iframes/on_remove() - UnregisterSignal(owner, COMSIG_HUMAN_CHECK_SHIELDS) + UnregisterSignal(owner, COMSIG_LIVING_CHECK_BLOCK) return ..() /datum/status_effect/dodgeroll_iframes/proc/whiff() SIGNAL_HANDLER owner.balloon_alert_to_viewers("MISS!") playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK /obj/item/claymore/dragonslayer/very_fucking_loud name = "\proper Tempered Dragonslayer" diff --git a/modular_skyrat/modules/gunsgalore/code/guns/energy.dm b/modular_skyrat/modules/gunsgalore/code/guns/energy.dm index 39e70ae6f96..8e847ca4fb9 100644 --- a/modular_skyrat/modules/gunsgalore/code/guns/energy.dm +++ b/modular_skyrat/modules/gunsgalore/code/guns/energy.dm @@ -1,6 +1,10 @@ /obj/item/gun/energy/laser name = "\improper Allstar SC-1 laser carbine" - desc = "An energy-based laser carbine that fires concentrated beams of light which pass through glass and thin metal." + desc = "A basic energy-based laser carbine that fires concentrated beams of light which pass through glass and thin metal." + +/obj/item/gun/energy/laser/carbine + name = "\improper Allstar SC-1A laser auto-carbine" + desc = "An basic energy-based laser auto-carbine that rapidly fires weakened, concentrated beams of light which pass through glass and thin metal." /obj/item/gun/energy/e_gun name = "\improper Allstar SC-2 energy carbine" diff --git a/modular_skyrat/modules/horrorform/code/true_changeling.dm b/modular_skyrat/modules/horrorform/code/true_changeling.dm index 4765f9f9df6..6d7831cd3b2 100644 --- a/modular_skyrat/modules/horrorform/code/true_changeling.dm +++ b/modular_skyrat/modules/horrorform/code/true_changeling.dm @@ -35,7 +35,6 @@ butcher_results = list(/obj/item/food/meat/slab/human = 15) //It's a pretty big dude. Actually killing one is a feat. gold_core_spawnable = FALSE //Should stay exclusive to changelings tbh, otherwise makes it much less significant to sight one var/datum/action/innate/turn_to_human - var/datum/action/innate/devour var/transformed_time = 0 var/playstyle_string = span_infoplain("We have entered our true form! We are unbelievably powerful, and regenerate life at a steady rate. However, most of \ our abilities are useless in this form, and we must utilise the abilities that we have gained as a result of our transformation. Currently, we are incapable of returning to a human. \ @@ -51,10 +50,9 @@ /mob/living/simple_animal/hostile/true_changeling/Initialize(mapload) . = ..() to_chat(src, playstyle_string) - turn_to_human = new /datum/action/innate/turn_to_human - devour = new /datum/action/innate/devour + turn_to_human = new(src) turn_to_human.Grant(src) - devour.Grant(src) + GRANT_ACTION(/datum/action/innate/devour) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) /mob/living/simple_animal/hostile/true_changeling/Life() diff --git a/modular_skyrat/modules/hydra/code/neutral.dm b/modular_skyrat/modules/hydra/code/neutral.dm index aea55dcc147..fe4165a33bf 100644 --- a/modular_skyrat/modules/hydra/code/neutral.dm +++ b/modular_skyrat/modules/hydra/code/neutral.dm @@ -10,8 +10,8 @@ /datum/quirk/hydra/add(client/client_source) var/mob/living/carbon/human/hydra = quirk_holder - var/datum/action/innate/hydra/spell = new - var/datum/action/innate/hydrareset/resetspell = new + var/datum/action/innate/hydra/spell = new(hydra) + var/datum/action/innate/hydrareset/resetspell = new(hydra) spell.Grant(hydra) spell.owner = hydra resetspell.Grant(hydra) diff --git a/modular_skyrat/modules/implants/code/medical_designs.dm b/modular_skyrat/modules/implants/code/medical_designs.dm index fe795717df3..3197d96c5b7 100644 --- a/modular_skyrat/modules/implants/code/medical_designs.dm +++ b/modular_skyrat/modules/implants/code/medical_designs.dm @@ -45,14 +45,14 @@ name = "Photon Projector Implant" desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." id = "ci-flash" - build_type = MECHFAB + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT) construction_time = 200 build_path = /obj/item/organ/internal/cyberimp/arm/flash category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL /datum/design/cyberimp_botany name = "Botany Arm Implant" @@ -71,12 +71,12 @@ name = "Night Vision Eyes" desc = "These cybernetic eyes will give you Night Vision. Big, mean, and green." id = "ci-nv" - build_type = MECHFAB | PROTOLATHE + build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 6, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,) build_path = /obj/item/organ/internal/eyes/night_vision/cyber category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL @@ -84,7 +84,7 @@ name = "CNS Jumpstarter Implant" desc = "This implant will automatically attempt to jolt you awake from unconsciousness, with a short cooldown between jolts. Conflicts with the CNS Rebooter." id = "ci-antisleep" - build_type = MECHFAB | PROTOLATHE + build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/organ/internal/cyberimp/brain/anti_sleep @@ -131,3 +131,17 @@ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/cyberimp_thermals + name = "Thermal Eyes" + id = "ci-thermals" + build_type = AWAY_LATHE | MECHFAB + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_reviver + name = "Reviver Implant" + id = "ci-reviver" + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_skyrat/modules/implants/code/medical_nodes.dm b/modular_skyrat/modules/implants/code/medical_nodes.dm index 4eb34b69568..a329693e8e5 100644 --- a/modular_skyrat/modules/implants/code/medical_nodes.dm +++ b/modular_skyrat/modules/implants/code/medical_nodes.dm @@ -16,9 +16,10 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) /datum/techweb_node/adv_cyber_implants + design_ids = list("ci-nv", "ci-nutrimentplus", "ci-surgery", "ci-toolset") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) /datum/techweb_node/combat_cyber_implants - design_ids = list("ci-nv", "ci-antidrop", "ci-antistun", "ci-antisleep", "ci-thrusters", "ci-mantis", "ci-flash") + design_ids = list("ci-antidrop", "ci-antistun", "ci-antisleep", "ci-thrusters", "ci-mantis", "ci-flash", "ci-reviver") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12000) diff --git a/modular_skyrat/modules/liquids/code/ocean_turfs.dm b/modular_skyrat/modules/liquids/code/ocean_turfs.dm index 35066f09857..356cda189a1 100644 --- a/modular_skyrat/modules/liquids/code/ocean_turfs.dm +++ b/modular_skyrat/modules/liquids/code/ocean_turfs.dm @@ -220,6 +220,9 @@ liquid_height = -30 turf_height = -30 +/turf/open/floor/iron/submarine_perf/airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/iron/submarine_perf/rust_heretic_act() return diff --git a/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm b/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm index 8057753b143..5a4d3bc6a54 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm @@ -121,8 +121,10 @@ GLOBAL_LIST_EMPTY(all_loadout_datums) if(equipped_item) if(INFO_NAMED in our_loadout[item_path]) equipped_item.name = our_loadout[item_path][INFO_NAMED] + equipped_item.on_loadout_custom_named() if(INFO_DESCRIBED in our_loadout[item_path]) equipped_item.desc = our_loadout[item_path][INFO_DESCRIBED] + equipped_item.on_loadout_custom_described() else stack_trace("[type] on_equip_item(): Could not locate item (path: [item_path]) in [equipper]'s contents to set name/desc!") diff --git a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm index d50254437ed..632c141965d 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm @@ -178,9 +178,9 @@ item_path = /obj/item/clothing/under/wetsuit_norm ckeywhitelist = list("ChillyLobster") -/datum/loadout_item/mask/kindle_mask - name = "Kindle's mask" - item_path = /obj/item/clothing/mask/animal/kindle +/datum/loadout_item/mask/wolf_mask + name = "Wolf mask" + item_path = /obj/item/clothing/mask/animal/wolf //ckeywhitelist = list("theooz") /datum/loadout_item/head/drake_skull @@ -672,7 +672,7 @@ /datum/loadout_item/pocket_items/masvedishcigar name = "Holocigar" item_path = /obj/item/clothing/mask/holocigarette/masvedishcigar - //ckeywhitelist = list("masvedish", "lutowski", "lawful", "anyacers", "apolloafk", "avianaviator", "notdhu") + // Asked it to be public, and as such has no whitelist. /datum/loadout_item/suit/lt3_armor name = "Silver Jacket Mk II" diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm index 246219c6d7e..7d3cb8ff756 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm @@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(loadout_inhand_items, generate_loadout_items(/datum/loadout_ite /datum/loadout_item/inhand/briefcase_secure name = "Secure Briefcase" - item_path = /obj/item/storage/secure/briefcase + item_path = /obj/item/storage/briefcase/secure /datum/loadout_item/inhand/skub name = "Skub" diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm index 2cde9b61b82..da283f05b73 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm @@ -173,6 +173,14 @@ GLOBAL_LIST_INIT(loadout_pocket_items, generate_loadout_items(/datum/loadout_ite name = "Ornate Cross" item_path = /obj/item/crucifix +/datum/loadout_item/pocket_items/clipboard + name = "Clipboard" + item_path = /obj/item/clipboard + +/datum/loadout_item/pocket_items/folder + name = "Folder" + item_path = /obj/item/folder + /* * UTILITY */ diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm index e44af4b91a0..887c1220722 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm @@ -124,6 +124,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/rank/security/peacekeeper restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY, JOB_SECURITY_MEDIC) //BUBBER EDIT +/datum/loadout_item/under/jumpsuit/imperial_police_uniform + name = "Imperial Police Uniform" + item_path = /obj/item/clothing/under/colonial/nri_police + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE) + /datum/loadout_item/under/jumpsuit/disco name = "Superstar Cop Uniform" item_path = /obj/item/clothing/under/rank/security/detective/disco diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm b/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm index b3187589972..9524a6f5f77 100644 --- a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm +++ b/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm @@ -210,6 +210,11 @@ /datum/loadout_manager/proc/set_item_name(datum/loadout_item/item) var/current_name = "" var/current_desc = "" + + if(!(item.item_path in owner.prefs.loadout_list)) + to_chat(owner, span_warning("Select the item before attempting to name it!")) + return + if(INFO_NAMED in owner.prefs.loadout_list[item.item_path]) current_name = owner.prefs.loadout_list[item.item_path][INFO_NAMED] if(INFO_DESCRIBED in owner.prefs.loadout_list[item.item_path]) @@ -220,10 +225,6 @@ if(QDELETED(src) || QDELETED(owner) || QDELETED(owner.prefs)) return - if(!(item.item_path in owner.prefs.loadout_list)) - to_chat(owner, span_warning("Select the item before attempting to name to it!")) - return - if(input_name) owner.prefs.loadout_list[item.item_path][INFO_NAMED] = input_name else diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm b/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm index afbb54a68b2..86f0598c5f6 100644 --- a/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm +++ b/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm @@ -89,6 +89,8 @@ equipOutfit(equipped_outfit, visuals_only) for(var/datum/loadout_item/item as anything in loadout_datums) + if(item.restricted_roles && equipping_job && !(equipping_job.title in item.restricted_roles)) + continue item.on_equip_item(preference_source, src, visuals_only) if(preference_source?.read_preference(/datum/preference/toggle/green_pin)) diff --git a/modular_skyrat/modules/medical/code/anesthetic_machine.dm b/modular_skyrat/modules/medical/code/anesthetic_machine.dm index b7ef8f18cca..69b1bab7b70 100644 --- a/modular_skyrat/modules/medical/code/anesthetic_machine.dm +++ b/modular_skyrat/modules/medical/code/anesthetic_machine.dm @@ -27,7 +27,6 @@ /obj/machinery/anesthetic_machine/Initialize(mapload) . = ..() attached_mask = new /obj/item/clothing/mask/breath/anesthetic(src) - attached_mask.attached_machine = src update_icon() /obj/machinery/anesthetic_machine/wrench_act_secondary(mob/living/user, obj/item/tool) @@ -67,16 +66,16 @@ return FALSE visible_message(span_notice("[user] retracts [attached_mask] back into [src].")) -/obj/machinery/anesthetic_machine/attacked_by(obj/item/used_item, mob/living/user) - if(!istype(used_item, /obj/item/tank)) +/obj/machinery/anesthetic_machine/attackby(obj/item/attacking_item, mob/user, params) + if(!istype(attacking_item, /obj/item/tank)) return ..() if(attached_tank) // If there is an attached tank, remove it and drop it on the floor attached_tank.forceMove(loc) - used_item.forceMove(src) // Put new tank in, set it as attached tank - visible_message(span_notice("[user] inserts [used_item] into [src].")) - attached_tank = used_item + attacking_item.forceMove(src) // Put new tank in, set it as attached tank + visible_message(span_notice("[user] inserts [attacking_item] into [src].")) + attached_tank = attacking_item update_icon() /obj/machinery/anesthetic_machine/AltClick(mob/user) @@ -121,6 +120,11 @@ to_chat(usr, span_warning("[mask_out ? "The machine is already in use!" : "The machine has no attached tank!"]")) return FALSE + // if we somehow lost the mask, let's just make a brand new one. the wonders of technology! + if(QDELETED(attached_mask)) + attached_mask = new /obj/item/clothing/mask/breath/anesthetic(src) + update_icon() + usr.visible_message(span_warning("[usr] attemps to attach the [attached_mask] to [target]."), span_notice("You attempt to attach the [attached_mask] to [target]")) if(!do_after(usr, 5 SECONDS, target)) return @@ -159,7 +163,7 @@ attached_tank = null QDEL_NULL(attached_mask) - . = ..() + return ..() /// This a special version of the breath mask used for the anesthetic machine. /obj/item/clothing/mask/breath/anesthetic @@ -170,6 +174,21 @@ . = ..() ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) + // Make sure we are not spawning outside of a machine + if(istype(loc, /obj/machinery/anesthetic_machine)) + attached_machine = WEAKREF(loc) + + var/obj/machinery/anesthetic_machine/our_machine + if(attached_machine) + our_machine = attached_machine.resolve() + + if(!our_machine) + attached_machine = null + if(mapload) + stack_trace("Abstract, undroppable item [name] spawned at ([loc]) at [AREACOORD(src)] in \the [get_area(src)]. \ + Please remove it. This item should only ever be created by the anesthetic machine.") + return INITIALIZE_HINT_QDEL + /obj/item/clothing/mask/breath/anesthetic/Destroy() attached_machine = null return ..() @@ -177,18 +196,22 @@ /obj/item/clothing/mask/breath/anesthetic/dropped(mob/user) . = ..() - if(loc != attached_machine) //If it isn't in the machine, then it retracts when dropped - to_chat(user, span_notice("[src] retracts back into the [attached_machine].")) + if(isnull(attached_machine)) + return - if(!istype(attached_machine, /obj/machinery/anesthetic_machine)) - qdel(src) - return FALSE + var/obj/machinery/anesthetic_machine/our_machine = attached_machine.resolve() + // no machine, then delete it + if(!our_machine) + attached_machine = null + qdel(src) + return - var/obj/machinery/anesthetic_machine/source_machine = attached_machine - source_machine.retract_mask() + if(loc != our_machine) //If it isn't in the machine, then it retracts when dropped + to_chat(user, span_notice("[src] retracts back into the [our_machine].")) + our_machine.retract_mask() /obj/item/clothing/mask/breath/anesthetic/adjustmask(mob/living/carbon/user) - ..() + . = ..() // Air only goes through the mask, so temporarily pause airflow if mask is getting adjusted. // Since the mask is NODROP, the only possible user is the wearer var/mob/living/carbon/carbon_target = loc diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm b/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm index a28737520b5..1a0c730c68c 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm @@ -578,7 +578,7 @@ If the fault has become uncontrollable, extreme heat therapy is recommended." severity = WOUND_SEVERITY_CRITICAL - wound_flags = (ACCEPTS_GAUZE|MANGLES_INTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY) + wound_flags = (ACCEPTS_GAUZE|MANGLES_EXTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY) sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg' diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm index f43b6d1d058..64a941f0936 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm @@ -11,7 +11,7 @@ /datum/nifsoft/action_granter/activate() . = ..() if(active) - granted_action = new action_to_grant + granted_action = new action_to_grant(linked_mob) granted_action.Grant(linked_mob) return diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm index 7f722dcb343..347004f7183 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm @@ -34,7 +34,7 @@ GLOBAL_LIST_EMPTY(hivemind_users) linker_action_path = /datum/action/innate/hivemind_config, \ ) - keyboard_action = new + keyboard_action = new(linked_mob) keyboard_action.Grant(linked_mob) active_network = user_network diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm index 5b03931941a..716e7e9513c 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm @@ -21,7 +21,7 @@ /datum/nifsoft/soulcatcher/New() . = ..() - soulcatcher_action = new + soulcatcher_action = new(linked_mob) soulcatcher_action.Grant(linked_mob) soulcatcher_action.parent_nifsoft = WEAKREF(src) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm index 9046e31ecab..8c14385430a 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm @@ -466,5 +466,5 @@ GLOBAL_LIST_EMPTY(soulcatchers) if(locate(/datum/action/innate/join_soulcatcher) in actions) return - var/datum/action/innate/join_soulcatcher/new_join_action = new + var/datum/action/innate/join_soulcatcher/new_join_action = new(src) new_join_action.Grant(src) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm index 8ae004b9667..5127fdfe8d4 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm @@ -45,10 +45,10 @@ if(!outside_hearing) ADD_TRAIT(src, TRAIT_DEAF, INNATE_TRAIT) - var/datum/action/innate/leave_soulcatcher/leave_action = new + var/datum/action/innate/leave_soulcatcher/leave_action = new(src) leave_action.Grant(src) - var/datum/action/innate/soulcatcher_user/soulcatcher_action = new + var/datum/action/innate/soulcatcher_user/soulcatcher_action = new(src) soulcatcher_action.Grant(src) var/datum/component/soulcatcher_user/user_component = AddComponent(/datum/component/soulcatcher_user) soulcatcher_action.soulcatcher_user_component = WEAKREF(user_component) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm index 5dbd31631ec..6233f906fb3 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm @@ -126,7 +126,7 @@ return TRUE if("modify_name") - var/new_name = tgui_input_text(usr,"Choose a new name to send messages as", name, target_room.room_description, multiline = TRUE) + var/new_name = tgui_input_text(usr,"Choose a new name to send messages as", name, target_room.outside_voice, multiline = TRUE) if(!new_name) return FALSE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index 7e3225ca55f..de489207305 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -124,8 +124,10 @@ return FALSE /obj/structure/chair/shibari_stand/deconstruct(disassembled) + if(flags_1 & NODECONSTRUCT_1) + return + qdel(src) - return TRUE /obj/structure/chair/shibari_stand/proc/add_rope_overlays(color, taur) cut_overlay(shibari_rope_overlay) diff --git a/modular_skyrat/modules/modular_vending/code/games.dm b/modular_skyrat/modules/modular_vending/code/games.dm index 99edcdb796c..431425433a9 100644 --- a/modular_skyrat/modules/modular_vending/code/games.dm +++ b/modular_skyrat/modules/modular_vending/code/games.dm @@ -4,7 +4,7 @@ "name" = "Toys", "icon" = "hat-wizard", "products" = list( - /obj/item/storage/secure/briefcase/white/wargame_kit = 3, + /obj/item/storage/briefcase/secure/white/wargame_kit = 3, ), ), list( diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm index 41607663a50..8c96bc5a563 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm @@ -32,3 +32,11 @@ weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol + +// Gunset for the Takbok Revolver + +/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/takbok + name = "Trappiste 'Takbok' gunset" + + weapon_to_spawn = /obj/item/gun/ballistic/revolver/takbok + extra_to_spawn = /obj/item/ammo_box/c585trappiste diff --git a/modular_skyrat/modules/mold/code/mold.dm b/modular_skyrat/modules/mold/code/mold.dm index 437f99bcd23..e980be89567 100644 --- a/modular_skyrat/modules/mold/code/mold.dm +++ b/modular_skyrat/modules/mold/code/mold.dm @@ -270,7 +270,7 @@ mold_color = "#cb37f5" structure_light_color = LIGHT_COLOR_LAVENDER examine_text = "It feels damp and smells of rat poison." - mob_types = list(/mob/living/basic/spider/giant/) + mob_types = list(/mob/living/basic/spider/giant/hunter) preferred_atmos_conditions = "co2=80;TEMP=296" //BUBBERSTATION CHANGE resistance_flags = UNACIDABLE | ACID_PROOF diff --git a/modular_skyrat/modules/mold/code/mold_mobs.dm b/modular_skyrat/modules/mold/code/mold_mobs.dm index 22d8cb127b5..e668d8f5aae 100644 --- a/modular_skyrat/modules/mold/code/mold_mobs.dm +++ b/modular_skyrat/modules/mold/code/mold_mobs.dm @@ -83,7 +83,7 @@ /datum/ai_controller/basic_controller/oil_shambler blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -126,6 +126,7 @@ attack_verb_simple = "bite" pass_flags = PASSTABLE + basic_mob_flags = DEL_ON_DEATH butcher_results = list(/obj/item/food/meat/slab = 1) gold_core_spawnable = HOSTILE_SPAWN @@ -147,7 +148,7 @@ /datum/ai_controller/basic_controller/diseased_rat blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -188,6 +189,7 @@ attack_verb_continuous = "stings" attack_verb_simple = "sting" attack_sound = 'sound/effects/attackblob.ogg' + basic_mob_flags = DEL_ON_DEATH ai_controller = /datum/ai_controller/basic_controller/electric_mosquito @@ -204,7 +206,7 @@ /datum/ai_controller/basic_controller/electric_mosquito blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance @@ -245,6 +247,7 @@ melee_damage_lower = 6 //BUBBERSTATION CHANGE melee_damage_upper = 12 //BUBBERSTATION CHANGE + basic_mob_flags = DEL_ON_DEATH wound_bonus = 5 //BUBBERSTATION CHANGE obj_damage = 40 attack_sound = 'sound/effects/wounds/crackandbleed.ogg' @@ -276,7 +279,7 @@ /datum/ai_controller/basic_controller/centaur blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/modular_skyrat/modules/more_briefcases/code/briefcases.dm b/modular_skyrat/modules/more_briefcases/code/briefcases.dm index c78c7e3e50f..42fe203ee8c 100644 --- a/modular_skyrat/modules/more_briefcases/code/briefcases.dm +++ b/modular_skyrat/modules/more_briefcases/code/briefcases.dm @@ -25,28 +25,28 @@ name = "engineering briefcase" icon_state = "briefcase_eng" -/obj/item/storage/secure/briefcase +/obj/item/storage/briefcase/secure icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi' inhand_icon_state = "sec-case" icon_state = "briefcase_secure_black" -/obj/item/storage/secure/briefcase/attack_self(mob/user) +/obj/item/storage/briefcase/secure/attack_self(mob/user) . = ..() update_appearance() -/obj/item/storage/secure/briefcase/update_overlays() +/obj/item/storage/briefcase/secure/update_overlays() . = ..() if(atom_storage?.locked) . += "briefcase_locked" else . += "briefcase_open" -/obj/item/storage/secure/briefcase/update_icon_state() +/obj/item/storage/briefcase/secure/update_icon_state() . = ..() // Remove icon state functionality in favor of the overlays above. icon_state = "[initial(icon_state)]" -/obj/item/storage/secure/briefcase/white +/obj/item/storage/briefcase/secure/white name = "white secure briefcase" icon_state = "briefcase_secure_white" inhand_icon_state = "lockbox" diff --git a/modular_skyrat/modules/morefermentplants/code/beans.dm b/modular_skyrat/modules/morefermentplants/code/beans.dm index 37991220cad..ec047a95025 100644 --- a/modular_skyrat/modules/morefermentplants/code/beans.dm +++ b/modular_skyrat/modules/morefermentplants/code/beans.dm @@ -1,5 +1,2 @@ -/obj/item/food/grown/soybeans - distill_reagent = /datum/reagent/consumable/soy_latte - /obj/item/food/grown/koibeans distill_reagent = /datum/reagent/consumable/ethanol/mush_crush diff --git a/modular_skyrat/modules/moretraitoritems/code/pirate.dm b/modular_skyrat/modules/moretraitoritems/code/pirate.dm index c3f2f2ea006..b11db59ab8e 100644 --- a/modular_skyrat/modules/moretraitoritems/code/pirate.dm +++ b/modular_skyrat/modules/moretraitoritems/code/pirate.dm @@ -25,11 +25,11 @@ . = ..() if(!(slot & ITEM_SLOT_OCLOTHING)) return - RegisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(armor_reaction)) + RegisterSignal(user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(armor_reaction)) /obj/item/clothing/suit/jacket/det_suit/noir/heister/proc/armor_reaction(mob/living/carbon/human/owner, atom/movable/hitby, damage = 0, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) if(SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, owner, hitby, attack_text, 0, damage, attack_type) & COMPONENT_HIT_REACTION_BLOCK) - return SHIELD_BLOCK + return SUCCESSFUL_BLOCK return NONE /obj/item/clothing/gloves/latex/nitrile/heister diff --git a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm b/modular_skyrat/modules/moretraitoritems/code/syndicate.dm index 93561ec72da..06743c4d90d 100644 --- a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm +++ b/modular_skyrat/modules/moretraitoritems/code/syndicate.dm @@ -17,9 +17,13 @@ desc = "A sleek, sturdy box used to hold all parts to build a weapons recharger." icon_state = "syndiebox" -/obj/item/storage/box/syndie_kit/charger/PopulateContents() +/obj/item/storage/box/syndie_kit/recharger/PopulateContents() new /obj/item/circuitboard/machine/recharger(src) new /obj/item/stock_parts/capacitor/quadratic(src) + new /obj/item/stack/sheet/iron/five(src) + new /obj/item/stack/cable_coil/five(src) + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench(src) //Back-up space suit /obj/item/storage/box/syndie_kit/space_suit @@ -140,8 +144,8 @@ wound = 5 //More items -/obj/item/guardiancreator/tech/choose/traitor/opfor - allowling = TRUE +/obj/item/guardian_creator/tech/choose/traitor/opfor + allow_changeling = TRUE /obj/item/codeword_granter name = "codeword manual" diff --git a/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm b/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm index d3164d93360..e48d95d9789 100644 --- a/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm +++ b/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm @@ -6,7 +6,7 @@ /obj/item/bloodcrawl_bottle/attack_self(mob/user) to_chat(user, span_notice("You drink the contents of [src].")) - var/datum/action/cooldown/spell/jaunt/bloodcrawl/new_spell = new () + var/datum/action/cooldown/spell/jaunt/bloodcrawl/new_spell = new(user) new_spell.Grant(user) user.log_message("learned the spell bloodcrawl ([new_spell])", LOG_ATTACK, color="orange") qdel(src) diff --git a/modular_skyrat/modules/mutants/code/mutant_cure.dm b/modular_skyrat/modules/mutants/code/mutant_cure.dm index 1766ef5634d..f6c72454c55 100644 --- a/modular_skyrat/modules/mutants/code/mutant_cure.dm +++ b/modular_skyrat/modules/mutants/code/mutant_cure.dm @@ -163,17 +163,17 @@ timer_id = null . = ..() -/obj/machinery/rnd/rna_recombinator/Insert_Item(obj/item/O, mob/living/user) +/obj/machinery/rnd/rna_recombinator/attackby(obj/item/weapon, mob/living/user, params) if(user.combat_mode) return FALSE if(!is_insertion_ready(user)) return FALSE - if(!istype(O, /obj/item/rna_vial)) + if(!istype(weapon, /obj/item/rna_vial)) return FALSE - if(!user.transferItemToLoc(O, src)) + if(!user.transferItemToLoc(weapon, src)) return FALSE - loaded_item = O - to_chat(user, span_notice("You insert [O] to into [src] reciprocal.")) + loaded_item = weapon + to_chat(user, span_notice("You insert [weapon] to into [src] reciprocal.")) flick("h_lathe_load", src) update_appearance() playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) diff --git a/modular_skyrat/modules/mutants/code/mutant_event.dm b/modular_skyrat/modules/mutants/code/mutant_event.dm index d6b191a7e1e..bc2327a2097 100644 --- a/modular_skyrat/modules/mutants/code/mutant_event.dm +++ b/modular_skyrat/modules/mutants/code/mutant_event.dm @@ -24,7 +24,9 @@ break if(try_to_mutant_infect(iterating_human, TRUE)) infectees++ - notify_ghosts("[iterating_human] has been infected by the HNZ-1 pathogen!", source = iterating_human) + notify_ghosts("[iterating_human] has been infected by the HNZ-1 pathogen!", + source = iterating_human, + ) /datum/round_event/mutant_infestation/announce(fake) alert_sound_to_playing(sound('modular_skyrat/modules/alerts/sound/alerts/alert2.ogg'), override_volume = TRUE) diff --git a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm index 02524eafb6f..f40bb161957 100644 --- a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm +++ b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm @@ -54,7 +54,7 @@ head = /obj/item/clothing/head/nanotrasen_consultant backpack_contents = list( /obj/item/melee/baton/telescopic = 1, - /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild = 1, + /obj/item/choice_beacon/ntc = 1, ) skillchips = list(/obj/item/skillchip/disk_verifier) @@ -152,3 +152,20 @@ new /obj/item/storage/photo_album/personal(src) new /obj/item/bedsheet/centcom(src) new /obj/item/storage/bag/garment/nanotrasen_consultant(src) + +//Choice Beacon, I hope in the future they're going to be given proper unique gun but this will do. + + +/obj/item/choice_beacon/ntc + name = "gunset beacon" + desc = "A single use beacon to deliver a gunset of your choice. Please only call this in your office" + company_source = "Trappiste Fabriek Company" + company_message = span_bold("Supply Pod incoming please stand by") + +/obj/item/choice_beacon/ntc/generate_display_names() + var/static/list/selectable_gun_types = list( + "Takbok" = /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/takbok, + "Skild" = /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild, + ) + + return selectable_gun_types diff --git a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm b/modular_skyrat/modules/novaya_ert/code/mod_suit.dm index d9c5adb7f71..3494429f13d 100644 --- a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm +++ b/modular_skyrat/modules/novaya_ert/code/mod_suit.dm @@ -290,7 +290,7 @@ balloon_alert(mod.wearer, "already full!") return FALSE /// And if the reagent's wrong. - if(!attacking_item.reagents.trans_id_to(src, reagent_required, reagent_required_amount)) + if(!attacking_item.reagents.trans_to(src, reagent_required_amount, target_id = reagent_required)) return FALSE /// And if you got to that point without screwing up then it awards you with being refilled. balloon_alert(mod.wearer, "charge reloaded") diff --git a/modular_skyrat/modules/novaya_ert/code/outfit.dm b/modular_skyrat/modules/novaya_ert/code/outfit.dm index 35b90414bd0..6f8c53c37c4 100644 --- a/modular_skyrat/modules/novaya_ert/code/outfit.dm +++ b/modular_skyrat/modules/novaya_ert/code/outfit.dm @@ -113,7 +113,7 @@ backpack_contents = list(/obj/item/storage/box/nri_survival_pack, /obj/item/ammo_box/n762, /obj/item/ammo_box/n762, - /obj/item/suppressor, + /obj/item/suppressor/standard, /obj/item/knife/combat, /obj/item/beamout_tool) l_pocket = null diff --git a/modular_skyrat/modules/novaya_ert/code/police_outfit.dm b/modular_skyrat/modules/novaya_ert/code/police_outfit.dm new file mode 100644 index 00000000000..c34e390df57 --- /dev/null +++ b/modular_skyrat/modules/novaya_ert/code/police_outfit.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/under/colonial/nri_police + name = "imperial police outfit" + desc = "Fancy blue durathread shirt and a pair of cotton-blend pants with a black synthleather belt. A time-tested design first employed by the NRI police's \ + precursor organisation, Rim-world Colonial Militia, now utilised by them as a tribute." + icon_state = "under_police" + armor_type = /datum/armor/clothing_under/rank_security + strip_delay = 5 SECONDS + sensor_mode = SENSOR_COORDS + random_sensor = FALSE + can_adjust = FALSE + +/obj/item/clothing/neck/cloak/colonial/nri_police + name = "imperial police cloak" + desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design. The signature white rectangle of the NRI police covers the garment's back." + icon_state = "cloak_police" + +/obj/item/clothing/head/hats/colonial/nri_police + name = "imperial police cap" + desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well.
\ + Silver NRI police insignia is woven right above its visor." + icon_state = "cap_police" + armor_type = /datum/armor/cosmetic_sec + +/obj/item/clothing/mask/gas/nri_police + name = "imperial police mask" + desc = "A close-fitting tactical mask." + icon = 'modular_skyrat/modules/novaya_ert/icons/mask.dmi' + worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornmask.dmi' + worn_icon_digi = 'modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi' + icon_state = "nri_police" + inhand_icon_state = "swat" + flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + visor_flags_inv = 0 + flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + +/obj/item/clothing/head/helmet/nri_police + name = "imperial police helmet" + desc = "Thick-looking tactical helmet made out of shaped Plasteel. Colored dark blue, similar to one imperial police is commonly using." + icon_state = "police_helmet" + icon = 'modular_skyrat/modules/novaya_ert/icons/armor.dmi' + worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi' + +/obj/item/clothing/suit/armor/vest/nri_police + name = "imperial police plate carrier" + desc = "A reasonably heavy, yet comfortable armor vest comprised of a bunch of dense plates. Colored dark blue and bears a reflective stripe on the front and back." + icon_state = "police_vest" + icon = 'modular_skyrat/modules/novaya_ert/icons/armor.dmi' + worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi' diff --git a/modular_skyrat/modules/novaya_ert/icons/armor.dmi b/modular_skyrat/modules/novaya_ert/icons/armor.dmi new file mode 100644 index 00000000000..fe291dd6041 Binary files /dev/null and b/modular_skyrat/modules/novaya_ert/icons/armor.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/mask.dmi b/modular_skyrat/modules/novaya_ert/icons/mask.dmi new file mode 100644 index 00000000000..3f2f2692126 Binary files /dev/null and b/modular_skyrat/modules/novaya_ert/icons/mask.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/mod.dmi b/modular_skyrat/modules/novaya_ert/icons/mod.dmi index dc529a8ecab..f84d26bf214 100644 Binary files a/modular_skyrat/modules/novaya_ert/icons/mod.dmi and b/modular_skyrat/modules/novaya_ert/icons/mod.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi b/modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi new file mode 100644 index 00000000000..299cd1c9000 Binary files /dev/null and b/modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmask.dmi b/modular_skyrat/modules/novaya_ert/icons/wornmask.dmi new file mode 100644 index 00000000000..c35c56883ef Binary files /dev/null and b/modular_skyrat/modules/novaya_ert/icons/wornmask.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi b/modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi new file mode 100644 index 00000000000..c35c56883ef Binary files /dev/null and b/modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi b/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi index f2a0a55b925..0ac1a2618ad 100644 Binary files a/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi and b/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi differ diff --git a/modular_skyrat/modules/novaya_ert/readme.md b/modular_skyrat/modules/novaya_ert/readme.md index 9acbfc774bd..590056df8a3 100644 --- a/modular_skyrat/modules/novaya_ert/readme.md +++ b/modular_skyrat/modules/novaya_ert/readme.md @@ -1,14 +1,15 @@ -## Title: Novaya Rossiyskaya Imperiya ERT +## Title: Novaya Rossiyskaya Imperiya Module -MODULE ID: NRI ERT +MODULE ID: NRI STUFF ### Description: -A new style ERT for our Russian downstream, requested by them! It's a cool looking Russian style space ERT with guns and vodka! +Everything mainly NRI-related, from various cosmetic clothing to guns to ERTs. ### Credits: Gandalf2k15 - Code and some icons. Stalkeros - Code and some icons. +Zydras - NRI police clothing, stun gun and NRI holobarriers icons. Ramirez - Icons and idea. Flavrius - Icons + misc. -Paxilmaniac - Surplus weapons and armor +Paxilmaniac - Surplus weapons and armor. diff --git a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm b/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm index 0a81d7fb918..6b35ace5096 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm @@ -22,7 +22,7 @@ item_type = /obj/item/storage/box/syndie_kit/nuke /datum/opposing_force_equipment/gadget/holoparasite - item_type = /obj/item/guardiancreator/tech/choose/traitor + item_type = /obj/item/guardian_creator/tech/choose/traitor admin_note = "Lets a ghost take control of a guardian spirit bound to the user. RRs both the ghost and user on death." /datum/opposing_force_equipment/gadget/stimpack diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm index 98f0c8d29a0..532c7584473 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm @@ -61,6 +61,26 @@ new /obj/item/ammo_box/magazine/m7mm(src) new /obj/item/ammo_box/magazine/m7mm(src) +/datum/opposing_force_equipment/ranged/hook_shotgun + name = "Hook Modified Sawn-off Shotgun" + description = "Range isn't an issue when you can bring your victim to you." + item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/hook_shotgun + +/obj/item/storage/toolbox/guncase/skyrat/opfor/hook_shotgun/PopulateContents() + new /obj/item/gun/ballistic/shotgun/hook(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) + +/datum/opposing_force_equipment/ranged/rebar_crossbow + name = "Syndicate Rebar Crossbow" + description = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ + Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones." + item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/rebar_crossbow + +/obj/item/storage/toolbox/guncase/skyrat/opfor/rebar_crossbow/PopulateContents() + new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src) + new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) + //laser /datum/opposing_force_equipment/ranged/ion name = "ion carbine" @@ -217,11 +237,11 @@ /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/foamforce_smg_basic/PopulateContents() new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) - new /obj/item/ammo_box/magazine/toy/smg(src) - new /obj/item/ammo_box/magazine/toy/smg(src) + new /obj/item/ammo_box/magazine/toy/smg/riot(src) + new /obj/item/ammo_box/magazine/toy/smg/riot(src) //laser -/datum/opposing_force_equipment/ranged_stealth/egun_mini +/datum/opposing_force_equipment/ranged_stealth/fisher item_type = /obj/item/gun/energy/recharge/fisher /datum/opposing_force_equipment/ranged_stealth/ebow diff --git a/modular_skyrat/modules/opposing_force/code/equipment/melee.dm b/modular_skyrat/modules/opposing_force/code/equipment/melee.dm index ba7657911f0..24a25b3be13 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/melee.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/melee.dm @@ -49,9 +49,6 @@ Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \ deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks." -/datum/opposing_force_equipment/melee/cultblade - item_type = /obj/item/melee/cultblade - /datum/opposing_force_equipment/melee/meathook name = "Butcher's Meat Hook" item_type = /obj/item/gun/magic/hook @@ -92,12 +89,6 @@ /datum/opposing_force_equipment/melee_stealth/telescopicshield item_type = /obj/item/shield/riot/tele -/datum/opposing_force_equipment/melee_stealth/cultdagger - item_type = /obj/item/melee/cultblade/dagger - -/datum/opposing_force_equipment/melee_stealth/sicklyblade - item_type = /obj/item/melee/sickly_blade - /datum/opposing_force_equipment/melee_stealth/northstar item_type = /obj/item/clothing/gloves/rapid description = "By putting on these gloves, you will find you can punch things at vastly increased speed." diff --git a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm b/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm index e2c019936ae..322a5a8f47d 100644 --- a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm +++ b/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm @@ -123,7 +123,7 @@ var/list/data = list() var/client/owner_client = GLOB.directory[ckey] - data["admin_mode"] = check_rights_for(user.client, R_DEFAULT) && user.client != owner_client + data["admin_mode"] = check_rights_for(user.client, R_ADMIN) && user.client != owner_client data["creator_ckey"] = ckey diff --git a/modular_skyrat/modules/organs/code/stomach.dm b/modular_skyrat/modules/organs/code/stomach.dm index 366c8d17355..03bdc1b9df7 100644 --- a/modular_skyrat/modules/organs/code/stomach.dm +++ b/modular_skyrat/modules/organs/code/stomach.dm @@ -5,3 +5,12 @@ icon_state = "stomach_big" maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD metabolism_efficiency = 0.07 + +/obj/item/organ/internal/stomach/synth/oversized + name = "huge synthetic bio-reactor" + desc = "Typically found in huge synthetics, this monstrous engine has been developed to be highly efficient, made to provide an enormous amount of power to an enormous machine." + icon = 'modular_skyrat/modules/organs/icons/stomach.dmi' + icon_state = "stomach_big_synth" //ugly placeholder sorry im not an artist hehe + maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD + metabolism_efficiency = 0.07 + diff --git a/modular_skyrat/modules/organs/code/tongue.dm b/modular_skyrat/modules/organs/code/tongue.dm index 54ef552356b..f2a4787ef86 100644 --- a/modular_skyrat/modules/organs/code/tongue.dm +++ b/modular_skyrat/modules/organs/code/tongue.dm @@ -27,6 +27,28 @@ speaker.verb_sing = initial(verb_sing) speaker.verb_yell = initial(verb_yell) +/obj/item/organ/internal/tongue/avian + name = "avian tongue" + desc = "A short and stubby tongue that craves seeds." + say_mod = "chirps" + icon_state = "tongue" + modifies_speech = TRUE + +/obj/item/organ/internal/tongue/avian/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE) + . = ..() + signer.verb_ask = "peeps" + signer.verb_exclaim = "squawks" + signer.verb_whisper = "murmurs" + signer.verb_yell = "shrieks" + +/obj/item/organ/internal/tongue/avian/Remove(mob/living/carbon/speaker, special = FALSE) + . = ..() + speaker.verb_ask = initial(verb_ask) + speaker.verb_exclaim = initial(verb_exclaim) + speaker.verb_whisper = initial(verb_whisper) + speaker.verb_sing = initial(verb_sing) + speaker.verb_yell = initial(verb_yell) + /// This "human" tongue is only used in Character Preferences / Augmentation menu. /// The base tongue class lacked a say_mod. With say_mod included it makes a non-Human user sound like a Human. /obj/item/organ/internal/tongue/human diff --git a/modular_skyrat/modules/organs/icons/stomach.dmi b/modular_skyrat/modules/organs/icons/stomach.dmi index 2b1ccf4be5b..69ef103ebaa 100644 Binary files a/modular_skyrat/modules/organs/icons/stomach.dmi and b/modular_skyrat/modules/organs/icons/stomach.dmi differ diff --git a/modular_skyrat/modules/oversized/code/oversized_quirk.dm b/modular_skyrat/modules/oversized/code/oversized_quirk.dm index f29330995cf..8892cc1f54f 100644 --- a/modular_skyrat/modules/oversized/code/oversized_quirk.dm +++ b/modular_skyrat/modules/oversized/code/oversized_quirk.dm @@ -39,9 +39,14 @@ return old_stomach.Remove(human_holder, special = TRUE) qdel(old_stomach) - var/obj/item/organ/internal/stomach/oversized/new_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE GUTS! RIP AND TEAR YOUR HUGE GUTS! - new_stomach.Insert(human_holder, special = TRUE) - to_chat(human_holder, span_warning("You feel your massive stomach rumble!")) + if(issynthetic(human_holder)) + var/obj/item/organ/internal/stomach/synth/oversized/new_synth_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE reactor! RIP AND TEAR YOUR HUGE reactor! + new_synth_stomach.Insert(human_holder, special = TRUE) + to_chat(human_holder, span_warning("You feel your massive engine rumble!")) + else + var/obj/item/organ/internal/stomach/oversized/new_stomach = new //YOU LOOK HUGE, THAT MUST MEAN YOU HAVE HUGE GUTS! RIP AND TEAR YOUR HUGE GUTS! + new_stomach.Insert(human_holder, special = TRUE) + to_chat(human_holder, span_warning("You feel your massive stomach rumble!")) /datum/quirk/oversized/remove() var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/modular_skyrat/modules/paycheck_rations/code/quirk.dm b/modular_skyrat/modules/paycheck_rations/code/quirk.dm new file mode 100644 index 00000000000..14b6d4b140b --- /dev/null +++ b/modular_skyrat/modules/paycheck_rations/code/quirk.dm @@ -0,0 +1,78 @@ +/datum/quirk/item_quirk/ration_system + name = "Ration Ticket Receiver" + desc = "Due to some circumstance of your life, you have enrolled in the ration tickets program, \ + which will halve all of your paychecks in exchange for granting you ration tickets, which can be \ + redeemed at a cargo console for food and other items." + icon = FA_ICON_DONATE + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_HIDE_FROM_SCAN + value = 0 + hardcore_value = 0 + +/datum/quirk/item_quirk/ration_system/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + if(!human_holder.account_id) + return + var/datum/bank_account/account = SSeconomy.bank_accounts_by_id["[human_holder.account_id]"] + + var/obj/new_ticket_book = new /obj/item/storage/ration_ticket_book(get_turf(human_holder)) + give_item_to_holder( + new_ticket_book, + list( + LOCATION_LPOCKET = ITEM_SLOT_LPOCKET, + LOCATION_RPOCKET = ITEM_SLOT_RPOCKET, + LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, + LOCATION_HANDS = ITEM_SLOT_HANDS, + ), + ) + account.tracked_ticket_book = WEAKREF(new_ticket_book) + account.payday_modifier = 0.5 + to_chat(client_source.mob, span_notice("You remember to keep close hold of your ticket book, it can't be replaced if lost and all of your ration tickets are placed there!")) + +// Edits to bank accounts to make the above possible + +/datum/bank_account + /// Tracks a linked ration ticket book. If we have one of these, then we'll put tickets in it every payday. + var/datum/weakref/tracked_ticket_book + /// Tracks if the last ticket we got was for luxury items, if this is true we get a normal food ticket + var/last_ticket_luxury = TRUE + +/datum/bank_account/payday(amount_of_paychecks, free = FALSE) + . = ..() + if(!.) + return + if(isnull(tracked_ticket_book)) + return + make_ration_ticket() + +/// Attempts to create a ration ticket book in the card holder's hand, and failing that, the drop location of the card +/datum/bank_account/proc/make_ration_ticket() + if(!(SSeconomy.times_fired % 3 == 0)) + return + + if(!bank_cards.len) + return + + var/obj/item/storage/ration_ticket_book/ticket_book = tracked_ticket_book.resolve() + if(!ticket_book) + tracked_ticket_book = null + return + + var/obj/item/created_ticket + for(var/obj/card in bank_cards) + // We want to only make one ticket pr account per payday + if(created_ticket) + continue + var/ticket_to_make + if(!last_ticket_luxury) + ticket_to_make = /obj/item/paper/paperslip/ration_ticket/luxury + else + ticket_to_make = /obj/item/paper/paperslip/ration_ticket + created_ticket = new ticket_to_make(card) + last_ticket_luxury = !last_ticket_luxury + if(!ticket_book.atom_storage.can_insert(created_ticket, messages = FALSE)) + qdel(created_ticket) + bank_card_talk("ERROR: Failed to place ration ticket in ticket book, ensure book is not full.") + // We can stop here, its joever for trying to place tickets in the book this payday. You snooze you lose! + return + created_ticket.forceMove(ticket_book) + bank_card_talk("A new [last_ticket_luxury ? "luxury item" : "standard"] ration ticket has been placed in your ticket book.") diff --git a/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm b/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm new file mode 100644 index 00000000000..a1effed97b5 --- /dev/null +++ b/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm @@ -0,0 +1,110 @@ +/obj/item/storage/box/spaceman_ration + name = "unlabeled ration container" + desc = "You get the feeling you sholdn't have been sent this one?" + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + icon_state = "plants" + illustration = null + /// How many storage slots this has, yes I'm being lazy + var/box_storage_slots = 1 + +/obj/item/storage/box/spaceman_ration/Initialize(mapload) + . = ..() + atom_storage.max_slots = box_storage_slots + +/obj/item/storage/box/spaceman_ration/PopulateContents() + return + +// Contains your daily need of plants, yum! + +/obj/item/storage/box/spaceman_ration/plants + name = "produce ration container" + desc = "Contains your allotted ration of produce, which in this case should be peas and a potato." + box_storage_slots = 2 + +/obj/item/storage/box/spaceman_ration/plants/PopulateContents() + new /obj/item/food/grown/peas(src) + new /obj/item/food/grown/potato(src) + +// Alternate diet, themed around martian food a bit more + +/obj/item/storage/box/spaceman_ration/plants/alternate + desc = "Contains your allotted ration of produce, which in this case should be cabbage and an onion." + icon_state = "plants_alt" + +/obj/item/storage/box/spaceman_ration/plants/alternate/PopulateContents() + new /obj/item/food/grown/cabbage(src) + new /obj/item/food/grown/onion(src) + +// For the moths amogus + +/obj/item/storage/box/spaceman_ration/plants/mothic + desc = "Contains your allotted ration of produce, which in this case should be chili and a potato." + icon_state = "plants_moth" + +/obj/item/storage/box/spaceman_ration/plants/mothic/PopulateContents() + new /obj/item/food/grown/chili(src) + new /obj/item/food/grown/potato(src) + +// For the lizards amongus + +/obj/item/storage/box/spaceman_ration/plants/lizard + desc = "Contains your allotted ration of produce, which in this case should be two korta nuts and two potatoes." + icon_state = "plants_lizard" + box_storage_slots = 4 + +/obj/item/storage/box/spaceman_ration/plants/lizard/PopulateContents() + new /obj/item/food/grown/korta_nut(src) + new /obj/item/food/grown/korta_nut(src) + new /obj/item/food/grown/potato(src) + new /obj/item/food/grown/potato(src) + +// Contains your allotted meats, tasty! + +/obj/item/storage/box/spaceman_ration/meats + name = "meat ration container" + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random side option." + icon_state = "meats" + +/obj/item/storage/box/spaceman_ration/meats/PopulateContents() + new /obj/item/food/meat/slab/pig(src) + var/secondary_meat = pick(/obj/item/food/raw_sausage, /obj/item/food/meat/slab/chicken, /obj/item/food/meat/slab/meatproduct) + new secondary_meat(src) + +// Seafood variant + +/obj/item/storage/box/spaceman_ration/meats/fish + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option." + icon_state = "meats_fish" + +/obj/item/storage/box/spaceman_ration/meats/fish/PopulateContents() + new /obj/item/food/meat/slab/pig(src) + var/secondary_meat = pick(/obj/item/food/meat/slab/rawcrab, /obj/item/food/fishmeat) + new secondary_meat(src) + +// For the lizards amongus + +/obj/item/storage/box/spaceman_ration/meats/lizard + desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option." + icon_state = "meats_lizard" + +/obj/item/storage/box/spaceman_ration/meats/lizard/PopulateContents() + new /obj/item/food/fishmeat/moonfish(src) + var/secondary_meat = pick(/obj/item/food/raw_tiziran_sausage, /obj/item/food/liver_pate) + new secondary_meat(src) + +// Paper sack that spawns a random two slices of bread + +/obj/item/storage/box/papersack/ration_bread_slice + name = "bread and cheese ration bag" + desc = "A dusty old paper sack that should ideally contain your ration of bread and cheese." + +/obj/item/storage/box/papersack/ration_bread_slice/Initialize(mapload) + . = ..() + atom_storage.max_slots = 3 + +/obj/item/storage/box/papersack/ration_bread_slice/PopulateContents() + var/bread_slice = pick(/obj/item/food/breadslice/plain, /obj/item/food/breadslice/reispan, /obj/item/food/breadslice/root) + new bread_slice(src) + new bread_slice(src) + var/cheese_slice = pick(/obj/item/food/cheese/wedge, /obj/item/food/cheese/firm_cheese_slice, /obj/item/food/cheese/cheese_curds, /obj/item/food/cheese/mozzarella) + new cheese_slice(src) diff --git a/modular_skyrat/modules/paycheck_rations/code/reagents.dm b/modular_skyrat/modules/paycheck_rations/code/reagents.dm new file mode 100644 index 00000000000..eefcce274af --- /dev/null +++ b/modular_skyrat/modules/paycheck_rations/code/reagents.dm @@ -0,0 +1,73 @@ +/obj/item/reagent_containers/condiment/flour/small_ration + name = "small flour sack" + desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day." + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/flour = 15) + +/obj/item/reagent_containers/condiment/rice/small_ration + name = "small rice sack" + desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish." + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/rice = 10) + +/obj/item/reagent_containers/condiment/sugar/small_ration + name = "small sugar sack" + desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter." + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/sugar = 10) + +/obj/item/reagent_containers/condiment/small_ration_korta_flour + name = "small korta flour sack" + desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day." + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + icon_state = "flour_korta" + inhand_icon_state = "carton" + lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi' + list_reagents = list(/datum/reagent/consumable/korta_flour = 10) + fill_icon_thresholds = null + +/obj/item/reagent_containers/condiment/soymilk/small_ration + name = "small soy milk" + desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with." + icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi' + list_reagents = list(/datum/reagent/consumable/soymilk = 15) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny + name = "tiny glass bottle" + volume = 10 + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/Initialize(mapload, vol) + . = ..() + transform = transform.Scale(0.75, 0.75) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice + name = "tiny lime juice bottle" + desc = "A maritime ration-sized bottle of lime juice, containing enough to keep the scurvy away while on long voyages." + list_reagents = list(/datum/reagent/consumable/limejuice = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar + name = "tiny vinegar bottle" + desc = "A maritime ration-sized bottle of vinegar, containing enough to... Well, we're not entirely sure, but law mandates you're given this, so..." + list_reagents = list(/datum/reagent/consumable/vinegar = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee + name = "tiny coffee powder bottle" + desc = "A maritime ration-sized bottle of coffee powder, containing enough to make a morning's brew." + list_reagents = list(/datum/reagent/toxin/coffeepowder = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea + name = "tiny tea powder bottle" + desc = "A maritime ration-sized bottle of tea powder, containing enough to make a morning's tea." + list_reagents = list(/datum/reagent/toxin/teapowder = 10) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey + name = "tiny honey bottle" + desc = "A maritime ration-sized bottle of honey, a minuscule amount for a minuscule sweetening to your day." + list_reagents = list(/datum/reagent/consumable/honey = 5) + +/obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel + name = "tiny caramel bottle" + desc = "A maritime ration-sized bottle of caramel, in the past these used to be something called 'treacle', which was \ + the tar left over from refining sugar. Nowadays, governments are rich enough to just send caramel instead." + list_reagents = list(/datum/reagent/consumable/caramel = 10) diff --git a/modular_skyrat/modules/paycheck_rations/code/ticket_book.dm b/modular_skyrat/modules/paycheck_rations/code/ticket_book.dm new file mode 100644 index 00000000000..09c5cb1fbb3 --- /dev/null +++ b/modular_skyrat/modules/paycheck_rations/code/ticket_book.dm @@ -0,0 +1,14 @@ +/obj/item/storage/ration_ticket_book + name = "ration ticket book" + desc = "A small booklet able to hold all your ration tickets. More will be available here as your paychecks come in." + icon = 'modular_skyrat/modules/paycheck_rations/icons/tickets.dmi' + icon_state = "ticket_book" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/storage/ration_ticket_book/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL + atom_storage.max_slots = 4 + atom_storage.set_holdable(list( + /obj/item/paper/paperslip/ration_ticket, + )) diff --git a/modular_skyrat/modules/paycheck_rations/code/tickets.dm b/modular_skyrat/modules/paycheck_rations/code/tickets.dm new file mode 100644 index 00000000000..26940e1bcc5 --- /dev/null +++ b/modular_skyrat/modules/paycheck_rations/code/tickets.dm @@ -0,0 +1,219 @@ +/obj/item/paper/paperslip/ration_ticket + name = "ration ticket - standard" + desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station." + icon = 'modular_skyrat/modules/paycheck_rations/icons/tickets.dmi' + icon_state = "ticket_food" + default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits." + color = COLOR_OFF_WHITE + show_written_words = FALSE + /// The finalized list of items we send once the ticket is used, don't define here, the procs will do it + var/list/items_we_deliver = list() + +/obj/item/paper/paperslip/ration_ticket/attack_atom(obj/machinery/computer/cargo/object_we_attack, mob/living/user, params) + if(!istype(object_we_attack)) + return ..() + if(!object_we_attack.is_operational || !user.can_perform_action(object_we_attack)) + return ..() + + try_to_make_ration_order_list(object_we_attack, user) + +/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails +/obj/item/paper/paperslip/ration_ticket/proc/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user) + forceMove(object_we_attack) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + + // List of meat options we get + var/list/radial_meat_options = list( + "Standard Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), + "Seafood Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), + "Tizirian Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), + ) + + var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE) + + if(!meats_choice) + object_we_attack.balloon_alert(user, "no selection made") + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(meats_choice) + if("Standard Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats + if("Seafood Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/fish + if("Tizirian Meats") + items_we_deliver += /obj/item/storage/box/spaceman_ration/meats/lizard + + // List of produce options we get + var/list/radial_produce_options = list( + "Standard Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), + "Alternative Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), + "Mothic Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), + "Tizirian Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), + ) + + var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE) + + if(!produce_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(produce_choice) + if("Standard Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants + if("Alternative Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/alternate + if("Mothic Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/mothic + if("Tizirian Produce") + items_we_deliver += /obj/item/storage/box/spaceman_ration/plants/lizard + + items_we_deliver += /obj/item/storage/box/papersack/ration_bread_slice + + // List of flour options we get + var/list/radial_flour_options = list( + "Standard Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), + "Korta Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), + ) + + var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE) + + if(!flour_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + return + + switch(flour_choice) + if("Standard Flour") + items_we_deliver += /obj/item/reagent_containers/condiment/flour/small_ration + if("Korta Flour") + items_we_deliver += /obj/item/reagent_containers/condiment/small_ration_korta_flour + items_we_deliver += /obj/item/reagent_containers/condiment/soymilk/small_ration + + items_we_deliver += /obj/item/reagent_containers/condiment/rice/small_ration + items_we_deliver += /obj/item/reagent_containers/condiment/sugar/small_ration + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar + + items_we_deliver += /obj/item/reagent_containers/cup/glass/waterbottle + + var/random_drink = pick( \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea, \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom, \ + /obj/item/reagent_containers/cup/glass/waterbottle/tea/astra, \ + /obj/item/reagent_containers/cup/glass/coffee, \ + ) + items_we_deliver += random_drink + + make_the_actual_order(object_we_attack, user) + +/// Takes the list of things to deliver and puts it into a cargo order +/obj/item/paper/paperslip/ration_ticket/proc/make_the_actual_order(obj/machinery/computer/cargo/object_we_attack, mob/user) + var/datum/supply_pack/custom/ration_pack/ration_pack = new( + purchaser = user, \ + cost = 0, \ + contains = items_we_deliver, + ) + var/datum/supply_order/new_order = new( + pack = ration_pack, + orderer = user, + orderer_rank = "Ration Ticket", + orderer_ckey = user.ckey, + reason = "", + paying_account = null, + department_destination = null, + coupon = null, + charge_on_purchase = FALSE, + manifest_can_fail = FALSE, + can_be_cancelled = FALSE, + ) + object_we_attack.say("Ration order placed! It will arrive on the next cargo shuttle!") + SSshuttle.shopping_list += new_order + qdel(src) + +/datum/supply_pack/custom/ration_pack + name = "rations order" + crate_name = "ration delivery crate" + access = list() + crate_type = /obj/structure/closet/crate/cardboard + +/datum/supply_pack/custom/ration_pack/New(purchaser, cost, list/contains) + . = ..() + name = "[purchaser]'s Rations Order" + crate_name = "[purchaser]'s ration delivery crate" + src.cost = cost + src.contains = contains + +// Ticket for some luxury items, which you get every second paycheck + +/obj/item/paper/paperslip/ration_ticket/luxury + name = "ration ticket - luxury" + desc = "A little slip of paper that'll slot right into any cargo console and put your alotted ration of luxury goods on the next cargo shuttle to the station." + icon_state = "ticket_luxury" + +/// Attempts to fill out the order list with items of the user's choosing, will stop in its tracks if it fails +/obj/item/paper/paperslip/ration_ticket/luxury/try_to_make_ration_order_list(obj/machinery/computer/cargo/object_we_attack, mob/living/user) + forceMove(object_we_attack) + playsound(object_we_attack, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + + // List of meat options we get + var/list/radial_alcohol_options = list( + "Navy Rum" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "navy_rum"), + "Ginger Beer" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "gingie_beer"), + "Kortara" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "kortara"), + ) + + var/alcohol_choice = show_radial_menu(user, object_we_attack, radial_alcohol_options, require_near = TRUE) + + if(!alcohol_choice) + object_we_attack.balloon_alert(user, "no selection made") + forceMove(drop_location(object_we_attack)) + return + + switch(alcohol_choice) + if("Navy Rum") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/navy_rum + if("Ginger Beer") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/ginger_beer + if("Kortara") + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/kortara + items_we_deliver += /obj/item/reagent_containers/cup/soda_cans/skyrat/kortara + + // List of produce options we get + var/list/radial_consumables_options = list( + "Cigarettes" = image(icon = 'icons/obj/cigarettes.dmi', icon_state = "robust"), + "Coffee Powder" = image(icon = 'icons/obj/food/cartridges.dmi', icon_state = "cartridge_blend"), + "Tea Powder" = image(icon = 'icons/obj/service/hydroponics/harvest.dmi', icon_state = "tea_aspera_leaves"), + ) + + var/consumables_choice = show_radial_menu(user, object_we_attack, radial_consumables_options, require_near = TRUE) + + if(!consumables_choice) + object_we_attack.balloon_alert(user, "no selection made") + // Reset the list if we fail + items_we_deliver = list() + forceMove(drop_location(object_we_attack)) + return + + switch(consumables_choice) + if("Cigarettes") + items_we_deliver += /obj/item/storage/fancy/cigarettes/cigpack_robust + if("Coffee Powder") + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee + if("Tea Powder") + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea + + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey + items_we_deliver += /obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel + + make_the_actual_order(object_we_attack, user) diff --git a/modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi b/modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi new file mode 100644 index 00000000000..e87a6a9cb58 Binary files /dev/null and b/modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi differ diff --git a/modular_skyrat/modules/paycheck_rations/icons/tickets.dmi b/modular_skyrat/modules/paycheck_rations/icons/tickets.dmi new file mode 100644 index 00000000000..c0e9435f286 Binary files /dev/null and b/modular_skyrat/modules/paycheck_rations/icons/tickets.dmi differ diff --git a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm b/modular_skyrat/modules/primitive_catgirls/code/spawner.dm index 5cbe1d682c0..2e2d9ec0d17 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm +++ b/modular_skyrat/modules/primitive_catgirls/code/spawner.dm @@ -19,6 +19,7 @@ var/datum/team/primitive_catgirls/team restricted_species = list(/datum/species/human/felinid/primitive) + quirks_enabled = TRUE random_appearance = FALSE loadout_enabled = FALSE uses = 9 diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm index 5e8215d41cc..0ee1202ef72 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm @@ -139,14 +139,29 @@ ///Juices the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/juice_target_item(obj/item/to_be_juiced, mob/living/carbon/human/user) - to_be_juiced.juice(src.reagents, user) + if(to_be_juiced.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to juice [to_be_juiced], but it fades away!")) + qdel(to_be_juiced) + return + + if(!to_be_juiced.juice(src.reagents, user)) + to_chat(user, span_danger("You fail to juice [to_be_juiced].")) to_chat(user, span_notice("You juice [to_be_juiced] into a liquid.")) QDEL_NULL(to_be_juiced) ///Grinds the passed target item, and transfers any contained chems to the mortar as well /obj/structure/large_mortar/proc/grind_target_item(obj/item/to_be_ground, mob/living/carbon/human/user) - to_be_ground.grind(src.reagents, user) + if(to_be_ground.flags_1 & HOLOGRAM_1) + to_chat(user, span_notice("You try to grind [to_be_ground], but it fades away!")) + qdel(to_be_ground) + return + + if(!to_be_ground.grind(src.reagents, user)) + if(isstack(to_be_ground)) + to_chat(usr, span_notice("[src] attempts to grind as many pieces of [to_be_ground] as possible.")) + else + to_chat(user, span_danger("You fail to grind [to_be_ground].")) to_chat(user, span_notice("You break [to_be_ground] into a fine powder.")) QDEL_NULL(to_be_ground) diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm new file mode 100644 index 00000000000..c704eb02c4b --- /dev/null +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm @@ -0,0 +1,32 @@ +/obj/machinery/griddle/stone + name = "stone griddle" + desc = "You could probably cook an egg on this... the griddle slab looks very unsanitary." + icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' + icon_state = "griddle1_off" + density = TRUE + pass_flags_self = PASSMACHINE | PASSTABLE| LETPASSTHROW // It's roughly the height of a table. + layer = BELOW_OBJ_LAYER + use_power = FALSE + circuit = null + resistance_flags = FIRE_PROOF + processing_flags = START_PROCESSING_MANUALLY + variant = 1 + +/obj/machinery/griddle/Initialize(mapload) + . = ..() + grill_loop = new(src, FALSE) + if(isnum(variant)) + variant = 1 + +/obj/machinery/griddle/stone/examine(mob/user) + . = ..() + + . += span_notice("It can be taken apart with a crowbar.") + +/obj/machinery/griddle/stone/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) + deconstruct(TRUE) + return TOOL_ACT_TOOLTYPE_SUCCESS diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm index 3549fa03ff6..91bca3b5e95 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm @@ -56,7 +56,7 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) return TOOL_ACT_TOOLTYPE_SUCCESS diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm index 6359e50baae..642835b93a7 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm @@ -26,7 +26,7 @@ user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) + new /obj/item/stack/sheet/mineral/stone(drop_location(), 5) deconstruct(TRUE) return TOOL_ACT_TOOLTYPE_SUCCESS diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi b/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi index 90023ecd4cd..1bf7f523366 100644 Binary files a/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi and b/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi differ diff --git a/modular_skyrat/modules/primitive_production/code/ceramics.dm b/modular_skyrat/modules/primitive_production/code/ceramics.dm index 49d71494393..ab360765ac3 100644 --- a/modular_skyrat/modules/primitive_production/code/ceramics.dm +++ b/modular_skyrat/modules/primitive_production/code/ceramics.dm @@ -1,5 +1,29 @@ #define DEFAULT_SPIN (4 SECONDS) +/* + * Clay Bricks + */ + +/obj/item/stack/sheet/mineral/clay + name = "clay brick" + desc = "A heavy clay brick." + singular_name = "clay brick" + icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' + icon_state = "sheet-clay" + inhand_icon_state = null + throw_speed = 3 + throw_range = 5 + merge_type = /obj/item/stack/sheet/mineral/clay + +GLOBAL_LIST_INIT(clay_recipes, list ( \ + new/datum/stack_recipe("clay range", /obj/machinery/primitive_stove, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("clay oven", /obj/machinery/oven/stone, 10, time = 5 SECONDS, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \ + )) + +/obj/item/stack/sheet/mineral/clay/get_main_recipes() + . = ..() + . += GLOB.clay_recipes + /obj/structure/water_source/puddle/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/stack/ore/glass)) var/obj/item/stack/ore/glass/glass_item = O @@ -131,7 +155,7 @@ name = "ceramic brick" desc = "A dense block of clay, ready to be fired into a brick!" icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi' - icon_state = "clay_brick" + icon_state = "sheet-clay" forge_item = /obj/item/stack/sheet/mineral/clay /obj/structure/throwing_wheel diff --git a/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi b/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi index 0f6e0725611..1caf775d682 100644 Binary files a/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi and b/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi differ diff --git a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm index aed8175c94b..8c6f872c712 100644 --- a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm +++ b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm @@ -26,7 +26,7 @@ /obj/structure/rack/wooden/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) - . = ..() + return ..() // Barrel but it works like a crate @@ -49,4 +49,65 @@ /obj/structure/closet/crate/wooden/storage_barrel/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 4) - . = ..() + return ..() + +/obj/machinery/smartfridge/producebin + name = "Produce Bin" + desc = "A wooden hamper, used to hold plant products and try keep them safe from pests." + icon_state = "producebin" + icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + visible_contents = FALSE + base_build_path = /obj/machinery/smartfridge/producebin + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = FALSE + +/obj/machinery/smartfridge/producebin/accept_check(obj/item/weapon) + return (istype(weapon, /obj/item/food/grown)) + +/obj/machinery/smartfridge/producebin/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + + +/obj/machinery/smartfridge/producebin/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/smartfridge/seedshelf + name = "Seedshelf" + desc = "A wooden shelf, used to hold seeds preventing them from germinating early." + icon_state = "seedshelf" + icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' + resistance_flags = FLAMMABLE + visible_contents = FALSE + base_build_path = /obj/machinery/smartfridge/seedshelf + use_power = NO_POWER_USE + light_power = 0 + idle_power_usage = 0 + circuit = null + has_emissive = FALSE + can_atmos_pass = ATMOS_PASS_YES + visible_contents = FALSE + +/obj/machinery/smartfridge/seedshelf/accept_check(obj/item/weapon) + return istype(weapon, /obj/item/seeds) + +/obj/machinery/smartfridge/seedshelf/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/seedshelf/crowbar_act(mob/living/user, obj/item/tool) + user.balloon_alert_to_viewers("disassembling...") + if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) + return + new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) + deconstruct(TRUE) + return TOOL_ACT_TOOLTYPE_SUCCESS diff --git a/modular_skyrat/modules/primitive_structures/icons/storage.dmi b/modular_skyrat/modules/primitive_structures/icons/storage.dmi index 61d5004b370..2b71389146d 100644 Binary files a/modular_skyrat/modules/primitive_structures/icons/storage.dmi and b/modular_skyrat/modules/primitive_structures/icons/storage.dmi differ diff --git a/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm b/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm index 1a9001cc154..b9aede74f74 100644 --- a/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm +++ b/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm @@ -120,7 +120,7 @@ recipe_name = "seed mesh" recipe_requirements = list( /obj/item/forging/complete/plate = 1, - /obj/item/forging/complete/chain = 4, + /obj/item/forging/complete/chain = 2, ) resulting_item = /obj/item/seed_mesh required_good_hits = 10 diff --git a/modular_skyrat/modules/reagent_forging/code/forge.dm b/modular_skyrat/modules/reagent_forging/code/forge.dm index 1d7bb2edea4..2e66b119582 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge.dm @@ -590,12 +590,12 @@ for(var/datum/reagent/weapon_reagent as anything in attacking_weapon.reagents.reagent_list) if(weapon_reagent.volume < MINIMUM_IMBUING_REAGENT_AMOUNT) - attacking_weapon.reagents.remove_all_type(weapon_reagent.type) + attacking_weapon.reagents.remove_reagent(weapon_reagent.type) continue if(is_type_in_typecache(weapon_reagent, disallowed_reagents)) balloon_alert(user, "cannot imbue with [weapon_reagent.name]") - attacking_weapon.reagents.remove_all_type(weapon_reagent.type) + attacking_weapon.reagents.remove_reagent(weapon_reagent.type, include_subtypes = TRUE) continue weapon_component.imbued_reagent += weapon_reagent.type @@ -640,12 +640,12 @@ for(var/datum/reagent/clothing_reagent as anything in attacking_clothing.reagents.reagent_list) if(clothing_reagent.volume < MINIMUM_IMBUING_REAGENT_AMOUNT) - attacking_clothing.reagents.remove_all_type(clothing_reagent.type) + attacking_clothing.reagents.remove_reagent(clothing_reagent.type, include_subtypes = TRUE) continue if(is_type_in_typecache(clothing_reagent, disallowed_reagents)) balloon_alert(user, "cannot imbue with [clothing_reagent.name]") - attacking_clothing.reagents.remove_all_type(clothing_reagent.type) + attacking_clothing.reagents.remove_reagent(clothing_reagent.type, include_subtypes = TRUE) continue clothing_component.imbued_reagent += clothing_reagent.type diff --git a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm index cdc6a96ef00..c30aeb2ffc2 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm @@ -4,6 +4,7 @@ righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + obj_flags = UNIQUE_RENAME skyrat_obj_flags = ANVIL_REPAIR /obj/item/forging/reagent_weapon/Initialize(mapload) diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_skyrat/modules/stone/code/stone.dm index e41ac38f344..ad20bc39261 100644 --- a/modular_skyrat/modules/stone/code/stone.dm +++ b/modular_skyrat/modules/stone/code/stone.dm @@ -21,6 +21,9 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ new/datum/stack_recipe("stone brick wall", /turf/closed/wall/mineral/stone, 5, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("stone brick tile", /obj/item/stack/tile/mineral/stone, 1, 4, 20, check_density = FALSE, category = CAT_TILES), new/datum/stack_recipe("millstone", /obj/structure/millstone, 6, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone stove", /obj/machinery/primitive_stove, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone oven", /obj/machinery/oven/stone, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), + new/datum/stack_recipe("stone griddle", /obj/machinery/griddle/stone, 5, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), )) /obj/item/stack/sheet/mineral/stone/get_main_recipes() diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_skyrat/modules/synths/code/species/synthetic.dm index 1c623114b58..124985d73da 100644 --- a/modular_skyrat/modules/synths/code/species/synthetic.dm +++ b/modular_skyrat/modules/synths/code/species/synthetic.dm @@ -79,12 +79,6 @@ playsound(transformer.loc, 'sound/machines/chime.ogg', 50, TRUE) transformer.visible_message(span_notice("[transformer]'s [screen ? "monitor lights up" : "eyes flicker to life"]!"), span_notice("All systems nominal. You're back online!")) -/datum/species/synthetic/spec_death(gibbed, mob/living/carbon/human/transformer) - . = ..() - saved_screen = screen - switch_to_screen(transformer, "BSOD") - addtimer(CALLBACK(src, PROC_REF(switch_to_screen), transformer, "Blank"), 5 SECONDS) - /datum/species/synthetic/on_species_gain(mob/living/carbon/human/transformer) . = ..() @@ -96,9 +90,11 @@ if(eyes) eyes.eye_icon_state = "None" - screen = new + screen = new(transformer) screen.Grant(transformer) + RegisterSignal(transformer, COMSIG_LIVING_DEATH, PROC_REF(bsod_death)) // screen displays bsod on death, if they have one + return if(eyes) @@ -148,6 +144,19 @@ if(screen) screen.Remove(human) + UnregisterSignal(human, COMSIG_LIVING_DEATH) + +/** + * Makes the IPC screen switch to BSOD followed by a blank screen + * + * Arguments: + * * transformer - The human that will be affected by the screen change (read: IPC). + * * screen_name - The name of the screen to switch the ipc_screen mutant bodypart to. Defaults to BSOD. + */ +/datum/species/synthetic/proc/bsod_death(mob/living/carbon/human/transformer, screen_name = "BSOD") + saved_screen = screen // remember the old screen in case of revival + switch_to_screen(transformer, screen_name) + addtimer(CALLBACK(src, PROC_REF(switch_to_screen), transformer, "Blank"), 5 SECONDS) /** * Simple proc to switch the screen of a monitor-enabled synth, while updating their appearance. diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_skyrat/modules/verbs/code/subtle.dm index 9b49680d7a7..084b77fccad 100644 --- a/modular_skyrat/modules/verbs/code/subtle.dm +++ b/modular_skyrat/modules/verbs/code/subtle.dm @@ -1,5 +1,6 @@ #define SUBTLE_DEFAULT_DISTANCE 1 #define SUBTLE_SAME_TILE_DISTANCE 0 +#define SUBTLER_TELEKINESIS_DISTANCE 7 #define SUBTLE_ONE_TILE_TEXT "1-Tile Range" #define SUBTLE_SAME_TILE_TEXT "Same Tile" @@ -78,6 +79,12 @@ var/subtler_message var/subtler_emote = params var/target + var/subtler_range = SUBTLE_DEFAULT_DISTANCE + + var/datum/dna/dna = user.has_dna() + if(dna && dna?.check_mutation(/datum/mutation/human/telekinesis)) + subtler_range = SUBTLER_TELEKINESIS_DISTANCE + if(SSdbcore.IsConnected() && is_banned_from(user, "emote")) to_chat(user, span_warning("You cannot send subtle emotes (banned).")) return FALSE @@ -89,7 +96,7 @@ if(!subtler_emote) return FALSE - var/list/in_view = get_hearers_in_view(1, user) + var/list/in_view = get_hearers_in_view(subtler_range, user) var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] if(hologram) @@ -132,7 +139,7 @@ var/mob/target_mob = target user.show_message(subtler_message, alt_msg = subtler_message) var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] - if((get_dist(user.loc, target_mob.loc) <= SUBTLE_DEFAULT_DISTANCE) || (hologram && get_dist(hologram.loc, target_mob.loc) <= SUBTLE_DEFAULT_DISTANCE)) + if((get_dist(user.loc, target_mob.loc) <= subtler_range) || (hologram && get_dist(hologram.loc, target_mob.loc) <= subtler_range)) target_mob.show_message(subtler_message, alt_msg = subtler_message) else to_chat(user, span_warning("Your emote was unable to be sent to your target: Too far away.")) @@ -188,6 +195,7 @@ #undef SUBTLE_DEFAULT_DISTANCE #undef SUBTLE_SAME_TILE_DISTANCE +#undef SUBTLER_TELEKINESIS_DISTANCE #undef SUBTLE_ONE_TILE_TEXT #undef SUBTLE_SAME_TILE_TEXT diff --git a/modular_skyrat/modules/wargame_projectors/code/game_kit.dm b/modular_skyrat/modules/wargame_projectors/code/game_kit.dm index fa9f51d8aa8..d5d57a09427 100644 --- a/modular_skyrat/modules/wargame_projectors/code/game_kit.dm +++ b/modular_skyrat/modules/wargame_projectors/code/game_kit.dm @@ -4,12 +4,12 @@ description = "more than enough space for a quick bout of naval warfare" mappath = "_maps/skyrat/holodeck_wargame.dmm" -/obj/item/storage/secure/briefcase/white/wargame_kit +/obj/item/storage/briefcase/secure/white/wargame_kit name = "DIY Wargaming Kit" desc = "Contains everything an aspiring naval officer (or just massive nerd) would need for a proper modern naval wargame." custom_premium_price = PAYCHECK_CREW * 2 -/obj/item/storage/secure/briefcase/white/wargame_kit/PopulateContents() +/obj/item/storage/briefcase/secure/white/wargame_kit/PopulateContents() var/static/items_inside = list( /obj/item/wargame_projector/ships = 1, /obj/item/wargame_projector/ships/red = 1, diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm index a5d94890ee2..f70d56f4920 100644 --- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm +++ b/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm @@ -173,7 +173,6 @@ CELL_LINE_TABLE_FROG, CELL_LINE_TABLE_WALKING_MUSHROOM, CELL_LINE_TABLE_QUEEN_BEE, - CELL_LINE_TABLE_LEAPER, CELL_LINE_TABLE_MEGA_ARACHNID) AddElement(/datum/element/swabable, pick_celltype, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm index e098f01769b..4b1f325c393 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm @@ -5,8 +5,6 @@ icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi' rotate_on_lying = FALSE base_pixel_x = -16 //All of the xeno sprites are 64x64, and we want them to be level with the tile they are on, much like oversized quirk users - /// Holds the ability for quick resting without using the ic panel, and without editing xeno huds - var/datum/action/cooldown/alien/skyrat/sleepytime/rest_button mob_size = MOB_SIZE_LARGE layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles plane = GAME_PLANE_UPPER_FOV_HIDDEN @@ -17,8 +15,6 @@ var/alt_inhands_file = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi' /// Setting this will give a xeno generic_evolve set to evolve them into this type var/next_evolution - /// Holds the ability for evolving into whatever type next_evolution is set to - var/datum/action/cooldown/alien/skyrat/generic_evolve/evolve_ability /// Keeps track of if a xeno has evolved recently, if so then we prevent them from evolving until that time is up var/has_evolved_recently = FALSE /// How long xenos should be unable to evolve after recently evolving @@ -35,24 +31,15 @@ . = ..() AddComponent(/datum/component/seethrough_mob) - rest_button = new /datum/action/cooldown/alien/skyrat/sleepytime() - rest_button.Grant(src) - + GRANT_ACTION(/datum/action/cooldown/alien/skyrat/sleepytime) if(next_evolution) - evolve_ability = new /datum/action/cooldown/alien/skyrat/generic_evolve() - evolve_ability.Grant(src) + GRANT_ACTION(/datum/action/cooldown/alien/skyrat/generic_evolve) pixel_x = -16 ADD_TRAIT(src, TRAIT_XENO_HEAL_AURA, TRAIT_XENO_INNATE) real_name = "alien [caste]" -/mob/living/carbon/alien/adult/skyrat/Destroy() - QDEL_NULL(rest_button) - if(evolve_ability) - QDEL_NULL(evolve_ability) - return ..() - /// Called when a larva or xeno evolves, adds a configurable timer on evolving again to the xeno /mob/living/carbon/alien/adult/skyrat/proc/has_just_evolved() if(has_evolved_recently) diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm index 7c8394fc5f3..8fa51a05f7e 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm @@ -11,7 +11,7 @@ if(mob_held_item) - if(check_shields(user, 0, "[user.name]")) + if(check_block(user, damage = 0, attack_text = "[user.name]")) playsound(loc, 'sound/weapons/parry.ogg', 25, TRUE, -1) //Audio feedback to the fact you just got blocked apply_damage(disarm_damage / 2, STAMINA) visible_message(span_danger("[user] attempts to touch [src]!"), \ diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm index 8c5b1f3fc03..5b79b7a8934 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm @@ -9,29 +9,20 @@ icon_state = "aliendefender" melee_damage_lower = 25 melee_damage_upper = 30 - /// Holds the basic charge ability that the defender will be granted - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/charge - /// Holds the wrecking ball tail sweep that the defender will be granted - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/tail_sweep next_evolution = /mob/living/carbon/alien/adult/skyrat/warrior /mob/living/carbon/alien/adult/skyrat/defender/Initialize(mapload) . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep() - tail_sweep.Grant(src) - - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender() - charge.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep, + /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender, + ) + grant_actions_by_list(innate_actions) REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) add_movespeed_modifier(/datum/movespeed_modifier/alien_heavy) -/mob/living/carbon/alien/adult/skyrat/defender/Destroy() - QDEL_NULL(charge) - QDEL_NULL(tail_sweep) - return ..() - /mob/living/carbon/alien/adult/skyrat/defender/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/small ..() diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm index ee3b7214da9..7958984aea9 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm @@ -7,20 +7,13 @@ maxHealth = 200 health = 200 icon_state = "aliendrone" - /// Holds the healing aura ability the drone will be granted - var/datum/action/cooldown/alien/skyrat/heal_aura/heal_aura_ability melee_damage_lower = 15 melee_damage_upper = 20 next_evolution = /mob/living/carbon/alien/adult/skyrat/praetorian /mob/living/carbon/alien/adult/skyrat/drone/Initialize(mapload) . = ..() - heal_aura_ability = new /datum/action/cooldown/alien/skyrat/heal_aura() - heal_aura_ability.Grant(src) - -/mob/living/carbon/alien/adult/skyrat/drone/Destroy() - QDEL_NULL(heal_aura_ability) - return ..() + GRANT_ACTION(/datum/action/cooldown/alien/skyrat/heal_aura) /mob/living/carbon/alien/adult/skyrat/drone/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel @@ -59,6 +52,8 @@ return TRUE /datum/action/cooldown/alien/skyrat/heal_aura/proc/aura_deactivate() + if(!aura_active) + return aura_active = FALSE QDEL_NULL(aura_healing_component) owner.balloon_alert(owner, "healing aura ended") diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm index 45d5bd471c9..a34376970e7 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm @@ -7,30 +7,22 @@ maxHealth = 400 health = 400 icon_state = "alienpraetorian" - /// Holds the improved healing aura ability to be granted to the praetorian later - var/datum/action/cooldown/alien/skyrat/heal_aura/juiced/heal_aura_ability - /// Holds the less lethal tail sweep ability to be granted to the praetorian later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing/tail_sweep melee_damage_lower = 25 melee_damage_upper = 30 next_evolution = /mob/living/carbon/alien/adult/skyrat/queen /mob/living/carbon/alien/adult/skyrat/praetorian/Initialize(mapload) . = ..() - heal_aura_ability = new /datum/action/cooldown/alien/skyrat/heal_aura/juiced() - heal_aura_ability.Grant(src) - - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing() - tail_sweep.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/alien/skyrat/heal_aura/juiced, + /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing, + ) + grant_actions_by_list(innate_actions) REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) add_movespeed_modifier(/datum/movespeed_modifier/alien_big) -/mob/living/carbon/alien/adult/skyrat/praetorian/Destroy() - QDEL_NULL(heal_aura_ability) - return ..() - /mob/living/carbon/alien/adult/skyrat/praetorian/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/large organs += new /obj/item/organ/internal/alien/neurotoxin/spitter diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm index 26497fc78c7..3c60e970958 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm @@ -7,30 +7,21 @@ maxHealth = 500 health = 500 icon_state = "alienqueen" - /// Holds the less lethal tail sweep ability to be granted to the queen later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing/tail_sweep - /// Holds the queen screech ability to be granted to her later - var/datum/action/cooldown/alien/skyrat/queen_screech/screech melee_damage_lower = 30 melee_damage_upper = 35 /mob/living/carbon/alien/adult/skyrat/queen/Initialize(mapload) . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing() - tail_sweep.Grant(src) - - screech = new /datum/action/cooldown/alien/skyrat/queen_screech() - screech.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/hard_throwing, + /datum/action/cooldown/alien/skyrat/queen_screech, + ) + grant_actions_by_list(innate_actions) REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) add_movespeed_modifier(/datum/movespeed_modifier/alien_big) -/mob/living/carbon/alien/adult/skyrat/queen/Destroy() - QDEL_NULL(tail_sweep) - QDEL_NULL(screech) - return ..() - /mob/living/carbon/alien/adult/skyrat/queen/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/large/queen organs += new /obj/item/organ/internal/alien/resinspinner diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm index 4f872be7342..00e469883a4 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm @@ -9,35 +9,20 @@ maxHealth = 350 health = 350 icon_state = "alienravager" - /// Holds the triple charge ability to be granted to the ravager later - var/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/triple_charge - /// Holds the slicing tail sweep ability to be granted to the ravager later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing/tailsweep_slice - /// Holds the endure ability to be granted to the ravager later - var/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die/you_cant_hurt_me_jack melee_damage_lower = 30 melee_damage_upper = 35 /mob/living/carbon/alien/adult/skyrat/ravager/Initialize(mapload) . = ..() - tailsweep_slice = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing() - tailsweep_slice.Grant(src) - - you_cant_hurt_me_jack = new /datum/action/cooldown/alien/skyrat/literally_too_angry_to_die() - you_cant_hurt_me_jack.Grant(src) - - triple_charge = new /datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager() - triple_charge.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/slicing, + /datum/action/cooldown/alien/skyrat/literally_too_angry_to_die, + /datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager, + ) + grant_actions_by_list(innate_actions) REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) -/mob/living/carbon/alien/adult/skyrat/ravager/Destroy() - //QDEL_NULL(triple_charge) - QDEL_NULL(tailsweep_slice) - QDEL_NULL(you_cant_hurt_me_jack) - QDEL_NULL(triple_charge) - return ..() - /mob/living/carbon/alien/adult/skyrat/ravager/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel ..() diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm index 5a7cb614fb5..81ef781ff31 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm @@ -20,15 +20,11 @@ /mob/living/carbon/alien/adult/skyrat/runner/Initialize(mapload) . = ..() AddComponent(/datum/component/tackler, stamina_cost = 0, base_knockdown = 2, range = 10, speed = 2, skill_mod = 7, min_distance = 0) - evade_ability = new /datum/action/cooldown/alien/skyrat/evade() + evade_ability = new(src) evade_ability.Grant(src) add_movespeed_modifier(/datum/movespeed_modifier/alien_quick) -/mob/living/carbon/alien/adult/skyrat/runner/Destroy() - QDEL_NULL(evade_ability) - return ..() - /mob/living/carbon/alien/adult/skyrat/runner/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/small/tiny ..() diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm index 885df34df68..1a483472792 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm @@ -9,34 +9,20 @@ icon_state = "alienwarrior" melee_damage_lower = 30 melee_damage_upper = 35 - /// Holds the charge ability that will be given to the warrior later - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/charge - /// Holds the tail sweep ability that will be given to the warrior later - var/datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep/tail_sweep - /// Holds the agility ability that will be given to the warrior later - var/datum/action/cooldown/alien/skyrat/warrior_agility/agility /mob/living/carbon/alien/adult/skyrat/warrior/Initialize(mapload) . = ..() - tail_sweep = new /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep() - tail_sweep.Grant(src) - - charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender() - charge.Grant(src) - - agility = new /datum/action/cooldown/alien/skyrat/warrior_agility() - agility.Grant(src) + var/static/list/innate_actions = list( + /datum/action/cooldown/spell/aoe/repulse/xeno/skyrat_tailsweep, + /datum/action/cooldown/mob_cooldown/charge/basic_charge/defender, + /datum/action/cooldown/alien/skyrat/warrior_agility, + ) + grant_actions_by_list(innate_actions) REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) add_movespeed_modifier(/datum/movespeed_modifier/alien_big) -/mob/living/carbon/alien/adult/skyrat/warrior/Destroy() - QDEL_NULL(charge) - QDEL_NULL(tail_sweep) - QDEL_NULL(agility) - return ..() - /mob/living/carbon/alien/adult/skyrat/warrior/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel ..() diff --git a/sound/items/frog_statue_release.ogg b/sound/items/frog_statue_release.ogg new file mode 100644 index 00000000000..de7d3547778 Binary files /dev/null and b/sound/items/frog_statue_release.ogg differ diff --git a/sound/misc/salute.ogg b/sound/misc/salute.ogg new file mode 100644 index 00000000000..76521a63540 Binary files /dev/null and b/sound/misc/salute.ogg differ diff --git a/strings/modular_maps/generic.toml b/strings/modular_maps/generic.toml new file mode 100644 index 00000000000..050b75bb78c --- /dev/null +++ b/strings/modular_maps/generic.toml @@ -0,0 +1,31 @@ +directory = "_maps/modular_generic/" + +[rooms.station_small] +modules = ["station_s_kitchen.dmm", "station_s_chasm.dmm", "station_s_garden.dmm", "station_s_mime.dmm", "station_s_vault.dmm"] + +[rooms.station_medium] +modules = ["station_m_tools.dmm", "station_m_evidence.dmm", "station_m_kitchen.dmm", "station_m_shipping.dmm", "station_m_showroom.dmm", "station_m_arcade.dmm", "station_m_breakroom.dmm", "station_m_shuttle.dmm"] + +[rooms.station_large] +modules = ["station_l_morgue.dmm", "station_l_crates.dmm", "station_l_webs.dmm", "station_l_bathroom.dmm", "station_l_kitchen.dmm", "station_l_security.dmm", "station_l_kilojan.dmm"] + +[rooms.beach_medium] +modules = ["beach_m_shipping.dmm", "beach_m_oasis.dmm"] + +[rooms.beach_large] +modules = ["beach_l_ribs.dmm"] + +[rooms.jungle_medium] +modules = ["jungle_m_armory.dmm"] + +[rooms.jungle_large] +modules = ["jungle_l_dock.dmm"] + +[rooms.ice_small] +modules = ["ice_s_freezer.dmm"] + +[rooms.ice_medium] +modules = ["ice_m_comms.dmm"] + +[rooms.ice_large] +modules = ["ice_l_trophyroom.dmm", "ice_l_storage.dmm"] diff --git a/strings/mother.json b/strings/mother.json new file mode 100644 index 00000000000..ed122a86c1a --- /dev/null +++ b/strings/mother.json @@ -0,0 +1,49 @@ +{ + "do_something": [ + "CLEAN YOUR ROOM THIS INSTANT!", + "DON'T SIT THAT CLOSE TO THE TV!", + "FOR GOD'S SAKE, GO TAKE A SHOWER!!", + "IT'S TIME TO WAKE UP FOR SCHOOL!!", + "PAUSE THAT ONLINE GAME! NOW!", + "PUT SOME CLOTHES ON! YOU'LL CATCH A COLD!", + "STOP ASKING FOR MONEY, I'M NOT AN ATM!", + "WATCH YOUR MOUTH, CHILD!!", + "WHY DON'T YOU ANSWER MY PHONE CALLS?!", + "YOU SHOULD @pick(verb) YOUR @pick(relative) ONCE IN A WHILE!" + ], + + "be_upset": [ + "BECAUSE I SAID SO!", + "I DON'T CARE WHAT YOU SAY!", + "I'M NOT ASKING; I'M TELLING!!", + "I WASN'T BORN YESTERDAY!", + "MONEY DOESN'T GROW ON TREES!", + "WHAT DID I DO TO DESERVE A KID LIKE THIS...", + "USELESS!", + "YOU INSULT YOUR GRANDPARENTS!" + ], + + "get_reprimanded": [ + "I BROUGHT YOU INTO THIS WORLD, I CAN TAKE YOU OUT!!!", + "I'M GOING TO THROW A FLIP-FLOP AT YOU!!", + "NO VIDEOGAMES FOR THE REST OF THE DAY!", + "WAIT UNTIL YOUR FATHER GETS HOME!", + "YOU'LL THANK ME ONE DAY!", + "YOU'RE DISOWNED!!!", + "YOU'RE GROUNDED!!" + ], + + "verb": [ + "CALL", + "HELP", + "VISIT" + ], + + "relative": [ + "AUNT AND UNCLE", + "DAD", + "GRANDPARENTS", + "MOM" + ] + +} diff --git a/strings/names/guardian_descriptions.txt b/strings/names/guardian_descriptions.txt new file mode 100644 index 00000000000..678ec61fef6 --- /dev/null +++ b/strings/names/guardian_descriptions.txt @@ -0,0 +1,24 @@ +Black +Blazing +Bloody +Blue +Bronze +Dawn +Dusk +Gold +Green +Grey +Iron +Midnight +Orange +Pink +Plastitanium +Purple +Red +Shimmering +Shining +Silver +Sparkling +Steel +White +Yellow diff --git a/strings/names/guardian_gamepieces.txt b/strings/names/guardian_gamepieces.txt new file mode 100644 index 00000000000..10a99cf38fb --- /dev/null +++ b/strings/names/guardian_gamepieces.txt @@ -0,0 +1,13 @@ +Ace +Bishop +Club +Diamond +Heart +Jack +Joker +King +Knight +Pawn +Queen +Rook +Spade diff --git a/strings/names/guardian_tarot.txt b/strings/names/guardian_tarot.txt new file mode 100644 index 00000000000..5772c90d7ae --- /dev/null +++ b/strings/names/guardian_tarot.txt @@ -0,0 +1,23 @@ +Chariot +Death +Devil +Emperor +Empress +Fool +Fortune +Hangman +Hermit +Hierophant +Judgement +Justice +Lover +Magician +Moon +Priestess +Star +Strength +Sun +Temperance +Tower +Wheel +World diff --git a/strings/names/operative_alias.txt b/strings/names/operative_alias.txt new file mode 100644 index 00000000000..582851fc07c --- /dev/null +++ b/strings/names/operative_alias.txt @@ -0,0 +1,126 @@ +Agent +Agony +Alias +Alpha +Argo +Barker +Batter +Beef +Beetle +Bomber +Bonsai +Boss +Boston +Bovine +Bravo +Caboose +Callsign +Carmack +Carolina +Carp +Chains +Charlie +Church +Collar +Comedian +Crash +Creeper +Cretin +Criminal +Cyborg +Dallas +Delta +Doc +Donk +Drowning +Dude +Dwarf +Echo +Emo +Eva +Finger +Fish +Fitzgerald +Flash +Flyboy +Foxtrot +Freak +Freeman +Fugitive +Gaffer +Giant +Goalie +Golf +Gorbino +Green +Grime +Guy +Hologram +Hotel +Houston +Indica +Ion +Jacket +Jeremy +Jones +Kars +Legion +Librarian +Lightbringer +Lighter +Lightning +Looper +Lover +Marksman +Maurauder +Misty +Musketeer +Mycus +Neutron +Nightmare +Peacekeeper +Peddler +Point +Pooh +Private +Psycho +Pyro +Red +Revenant +Rocker +Ronin +Sack +Samson +Sarge +Scorch +Scout +Scream +Scum +Serenity +Shade +Shadow +Shark +Shocker +Shooter +Shrieker +Shrike +Silas +Silence +Simmons +Slider +Smoke +Snake +Stalker +Superfly +Suspect +Swiper +Tank +Telecrystal +Tex +Thirteen +Twister +Unusual +Vixen +White +Wilson +Winters diff --git a/strings/splashes.json b/strings/splashes.json new file mode 100644 index 00000000000..be323e41e0c --- /dev/null +++ b/strings/splashes.json @@ -0,0 +1,26 @@ +{ + "splashes": [ + "Paved by the tears of coders.", + "It's a miracle the server hasn't crashed yet.", + "Now with 33% more greytide!", + "Featuring Ian!", + "The icon of anticipation", + "The only place where you can hit yourself with a toolbox on accident.", + "Where the Chain of Command is a Chain of Incompetence", + "AI LAW 2, START THE GAME", + "Honk Honk! You should pick clown.", + "Watch for nukies!", + "Traitor Central!", + "You've definitely seen this before.", + "Greytide station wide.", + "Ignore what Poly says.", + "Turn on your damn suit sensors!", + "Celebrating 20+ years of Nanotrasen.", + "This is supposed to be a research base?", + "Blame the clown.", + "13th time's the charm.", + "Plasma 'research' done by nutcases, what could go wrong?", + "It's a job simulator...IN SPAACEEE!", + "Rated the second worst job experience for 50 years running!" + ] +} diff --git a/strings/tips.txt b/strings/tips.txt index 75d0e4d1851..cbbe0a5c66c 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -94,6 +94,7 @@ As a Security Officer, mindshield implants can only prevent someone from being t As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time! As a Security Officer, remember that you can attach a sec-lite to your disabler or your helmet! As a Security Officer, your sechuds or HUDsunglasses can not only see crewmates' job assignments and criminal status, but also if they are mindshield implanted. You can tell by the flashing blue outline around their job icon. Use this to your advantage in a revolution to definitively tell who is on your side! +As a Security Officer, you have a special pen in your PDA that you can use to prompt people to surrender. This will stun them without the need to use a baton! As a Service Cyborg, your spray can knocks people down. However, it is blocked by masks and glasses. As a Shaft Miner, always have a GPS on you, so a fellow miner or cyborg can come to save you if you die. As a Shaft Miner, every monster on Lavaland has a pattern you can exploit to minimize damage from the encounters. @@ -226,9 +227,9 @@ If you're using hotkey mode, you can stop pulling things using H. In a pinch, stripping yourself naked will give you a sizeable resistance to being tackled. What do you value more, your freedom or your dignity? Laying down will help slow down bloodloss. Death will halt it entirely. Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using. -Most job-related exosuit clothing can fit job-related items into it, such as the atmospheric technician's winter coat holding an RPD, or labcoats holding most medicine. +Most job-related suit slot clothing can fit job-related items into it, such as the atmospheric technician's winter coat holding an RPD, or labcoats holding most medicine. Most things have special interactions with right, alt, shift, and control click. Experiment! -On most clothing items that go in the exosuit slot, you can put certain small items into your suit storage, such as a spraycan, your emergency oxygen tank, or a flashlight. +On most clothing items that go in the suit slot, you can put certain small items into your suit storage, such as a spraycan, your emergency oxygen tank, or a flashlight. Remote devices will work when used through cameras. For example: Bluespace RPEDs and door remotes. Sleeping can be used to recover from minor injuries and organ damage. Sanity, darkness, blindfolds, earmuffs, tables, beds, and bedsheets affect the healing rate. Some roles cannot be antagonists by default, but antag selection is decided first. For instance, you can set Security Officer to High without affecting your chances of becoming an antag -- the game will just select a different role. @@ -256,7 +257,7 @@ You can change the control scheme by pressing tab. One is WASD, the other is the You can cheat games by baking dice in microwaves to make them loaded. Cards can be seen with x-ray vision or be marked with either a pen or crayon to gain an edge. You can climb onto a table by dragging yourself onto one. This takes time and drops the items in your hands on the table. Clicking on a table that someone else is climbing onto will knock them down. You can deconvert Cultists of Nar'Sie by feeding them large amounts of holy water. Unlike revolutionaries, implanting them with mindshield implants won't do it! -You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. +You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that suits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. You can grab someone by holding Ctrl and clicking on them, then upgrade the grab by Ctrl-clicking on them once more. An aggressive grab will momentarily stun someone, allow you to place them on a table by clicking on it, or throw them by toggling on throwing. You can light a cigar on a supermatter crystal. You can move an item out of the way by dragging it and then clicking on an adjacent tile with an empty hand. diff --git a/tgstation.dme b/tgstation.dme index f2be07fa73b..11ed4aae178 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -157,6 +157,7 @@ #include "code\__DEFINES\nitrile.dm" #include "code\__DEFINES\nuclear_bomb.dm" #include "code\__DEFINES\obj_flags.dm" +#include "code\__DEFINES\observers.dm" #include "code\__DEFINES\overlays.dm" #include "code\__DEFINES\pai.dm" #include "code\__DEFINES\paintings.dm" @@ -363,6 +364,7 @@ #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_arcade.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_basic.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_carbon.dm" +#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_guardian.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_living.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_main.dm" #include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_silicon.dm" @@ -384,6 +386,7 @@ #include "code\__DEFINES\~skyrat_defines\augment.dm" #include "code\__DEFINES\~skyrat_defines\automapper.dm" #include "code\__DEFINES\~skyrat_defines\banning.dm" +#include "code\__DEFINES\~skyrat_defines\barsigns.dm" #include "code\__DEFINES\~skyrat_defines\baton_upgrades.dm" #include "code\__DEFINES\~skyrat_defines\cargo_import_companies.dm" #include "code\__DEFINES\~skyrat_defines\cells.dm" @@ -471,7 +474,6 @@ #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\admin.dm" #include "code\__HELPERS\ai.dm" -#include "code\__HELPERS\animations.dm" #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\atmospherics.dm" #include "code\__HELPERS\atoms.dm" @@ -551,6 +553,7 @@ #include "code\__HELPERS\varset_callback.dm" #include "code\__HELPERS\verbs.dm" #include "code\__HELPERS\view.dm" +#include "code\__HELPERS\visual_effects.dm" #include "code\__HELPERS\weakref.dm" #include "code\__HELPERS\logging\_logging.dm" #include "code\__HELPERS\logging\admin.dm" @@ -664,10 +667,19 @@ #include "code\_onclick\hud\screentip.dm" #include "code\_onclick\hud\parallax\parallax.dm" #include "code\_onclick\hud\parallax\random_layer.dm" -#include "code\_onclick\hud\rendering\plane_master.dm" #include "code\_onclick\hud\rendering\plane_master_controller.dm" #include "code\_onclick\hud\rendering\plane_master_group.dm" #include "code\_onclick\hud\rendering\render_plate.dm" +#include "code\_onclick\hud\rendering\plane_masters\_plane_master.dm" +#include "code\_onclick\hud\rendering\plane_masters\camera_static.dm" +#include "code\_onclick\hud\rendering\plane_masters\clickcatcher.dm" +#include "code\_onclick\hud\rendering\plane_masters\core_game_planes.dm" +#include "code\_onclick\hud\rendering\plane_masters\default.dm" +#include "code\_onclick\hud\rendering\plane_masters\in_world_chat.dm" +#include "code\_onclick\hud\rendering\plane_masters\lighting.dm" +#include "code\_onclick\hud\rendering\plane_masters\parallax.dm" +#include "code\_onclick\hud\rendering\plane_masters\pipecrawl.dm" +#include "code\_onclick\hud\rendering\plane_masters\simple_plane_masters.dm" #include "code\controllers\admin.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -737,7 +749,6 @@ #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\parallax.dm" #include "code\controllers\subsystem\pathfinder.dm" -#include "code\controllers\subsystem\persistence.dm" #include "code\controllers\subsystem\persistent_paintings.dm" #include "code\controllers\subsystem\ping.dm" #include "code\controllers\subsystem\points_of_interest.dm" @@ -785,6 +796,16 @@ #include "code\controllers\subsystem\movement\movement.dm" #include "code\controllers\subsystem\movement\movement_types.dm" #include "code\controllers\subsystem\movement\spacedrift.dm" +#include "code\controllers\subsystem\persistence\_persistence.dm" +#include "code\controllers\subsystem\persistence\counter_delamination.dm" +#include "code\controllers\subsystem\persistence\counter_tram_hits.dm" +#include "code\controllers\subsystem\persistence\custom_outfits.dm" +#include "code\controllers\subsystem\persistence\engravings.dm" +#include "code\controllers\subsystem\persistence\photo_albums.dm" +#include "code\controllers\subsystem\persistence\recipes.dm" +#include "code\controllers\subsystem\persistence\scars.dm" +#include "code\controllers\subsystem\persistence\tattoos.dm" +#include "code\controllers\subsystem\persistence\trophies.dm" #include "code\controllers\subsystem\processing\acid.dm" #include "code\controllers\subsystem\processing\ai_basic_avoidance.dm" #include "code\controllers\subsystem\processing\ai_behaviors.dm" @@ -813,6 +834,7 @@ #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\dash_weapon.dm" #include "code\datums\datum.dm" @@ -897,6 +919,7 @@ #include "code\datums\actions\mobs\meteors.dm" #include "code\datums\actions\mobs\mobcooldown.dm" #include "code\datums\actions\mobs\open_mob_commands.dm" +#include "code\datums\actions\mobs\personality_commune.dm" #include "code\datums\actions\mobs\projectileattack.dm" #include "code\datums\actions\mobs\sign_language.dm" #include "code\datums\actions\mobs\sneak.dm" @@ -918,18 +941,18 @@ #include "code\datums\ai\basic_mobs\basic_ai_behaviors\basic_attacking.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\climb_tree.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\find_parent.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\nearest_targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\nearest_targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\pick_up_item.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\run_away_from_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\set_travel_destination.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\step_towards_turf.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\stop_and_stare.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\targeted_mob_ability.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\tipped_reaction.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\travel_towards.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\ventcrawling.dm" -#include "code\datums\ai\basic_mobs\basic_ai_behaviors\wounded_targetting.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\wounded_targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\write_on_paper.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\attack_adjacent_target.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\attack_obstacle_in_path.dm" @@ -940,6 +963,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\find_paper_and_write.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_parent.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\flee_target.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\go_for_swim.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\maintain_distance.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\mine_walls.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\move_to_cardinal.dm" @@ -964,11 +988,11 @@ #include "code\datums\ai\basic_mobs\pet_commands\fetch.dm" #include "code\datums\ai\basic_mobs\pet_commands\pet_command_planning.dm" #include "code\datums\ai\basic_mobs\pet_commands\pet_follow_friend.dm" -#include "code\datums\ai\basic_mobs\pet_commands\pet_use_targetted_ability.dm" +#include "code\datums\ai\basic_mobs\pet_commands\pet_use_targeted_ability.dm" #include "code\datums\ai\basic_mobs\pet_commands\play_dead.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\basic_targetting_datum.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\dont_target_friends.dm" -#include "code\datums\ai\basic_mobs\targetting_datums\with_object.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\basic_targeting_strategy.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\dont_target_friends.dm" +#include "code\datums\ai\basic_mobs\targeting_strategies\with_object.dm" #include "code\datums\ai\cursed\cursed_behaviors.dm" #include "code\datums\ai\cursed\cursed_controller.dm" #include "code\datums\ai\cursed\cursed_subtrees.dm" @@ -1066,6 +1090,7 @@ #include "code\datums\components\bloodysoles.dm" #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" +#include "code\datums\components\breeding.dm" #include "code\datums\components\bullet_intercepting.dm" #include "code\datums\components\bumpattack.dm" #include "code\datums\components\burning.dm" @@ -1094,10 +1119,12 @@ #include "code\datums\components\curse_of_polymorph.dm" #include "code\datums\components\customizable_reagent_holder.dm" #include "code\datums\components\damage_aura.dm" +#include "code\datums\components\damage_chain.dm" #include "code\datums\components\deadchat_control.dm" #include "code\datums\components\death_linked.dm" #include "code\datums\components\dejavu.dm" #include "code\datums\components\deployable.dm" +#include "code\datums\components\direct_explosive_trap.dm" #include "code\datums\components\drift.dm" #include "code\datums\components\earprotection.dm" #include "code\datums\components\echolocation.dm" @@ -1110,6 +1137,7 @@ #include "code\datums\components\engraved.dm" #include "code\datums\components\evolutionary_leap.dm" #include "code\datums\components\explodable.dm" +#include "code\datums\components\explode_on_attack.dm" #include "code\datums\components\faction_granter.dm" #include "code\datums\components\fertile_egg.dm" #include "code\datums\components\fishing_spot.dm" @@ -1145,9 +1173,11 @@ #include "code\datums\components\knockoff.dm" #include "code\datums\components\label.dm" #include "code\datums\components\leash.dm" +#include "code\datums\components\life_link.dm" #include "code\datums\components\light_eater.dm" #include "code\datums\components\ling_decoy_brain.dm" #include "code\datums\components\lock_on_cursor.dm" +#include "code\datums\components\lockable_storage.dm" #include "code\datums\components\magnet.dm" #include "code\datums\components\manual_blinking.dm" #include "code\datums\components\manual_breathing.dm" @@ -1179,6 +1209,7 @@ #include "code\datums\components\radioactive_emitter.dm" #include "code\datums\components\radioactive_exposure.dm" #include "code\datums\components\ranged_attacks.dm" +#include "code\datums\components\ranged_mob_full_auto.dm" #include "code\datums\components\reagent_refiller.dm" #include "code\datums\components\recharging_attacks.dm" #include "code\datums\components\redirect_attack_hand_from_turf.dm" @@ -1415,6 +1446,7 @@ #include "code\datums\elements\cult_halo.dm" #include "code\datums\elements\curse_announcement.dm" #include "code\datums\elements\cursed.dm" +#include "code\datums\elements\damage_threshold.dm" #include "code\datums\elements\dangerous_surgical_removal.dm" #include "code\datums\elements\death_drops.dm" #include "code\datums\elements\death_explosion.dm" @@ -1470,6 +1502,7 @@ #include "code\datums\elements\noticable_organ.dm" #include "code\datums\elements\obj_regen.dm" #include "code\datums\elements\openspace_item_click_handler.dm" +#include "code\datums\elements\ore_collecting.dm" #include "code\datums\elements\organ_set_bonus.dm" #include "code\datums\elements\pet_bonus.dm" #include "code\datums\elements\plant_backfire.dm" @@ -1498,7 +1531,6 @@ #include "code\datums\elements\strippable.dm" #include "code\datums\elements\structure_repair.dm" #include "code\datums\elements\swabbable.dm" -#include "code\datums\elements\tear_wall.dm" #include "code\datums\elements\temporary_atom.dm" #include "code\datums\elements\tenacious.dm" #include "code\datums\elements\tiny_mob_hunter.dm" @@ -1586,7 +1618,6 @@ #include "code\datums\looping_sounds\music.dm" #include "code\datums\looping_sounds\vents.dm" #include "code\datums\looping_sounds\weather.dm" -#include "code\datums\mapgen\_MapGenerator.dm" #include "code\datums\mapgen\CaveGenerator.dm" #include "code\datums\mapgen\JungleGenerator.dm" #include "code\datums\mapgen\biomes\_biome.dm" @@ -1656,6 +1687,7 @@ #include "code\datums\proximity_monitor\fields\projectile_dampener.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" #include "code\datums\quirks\_quirk.dm" +#include "code\datums\quirks\_quirk_constant_data.dm" #include "code\datums\quirks\negative_quirks\allergic.dm" #include "code\datums\quirks\negative_quirks\bad_back.dm" #include "code\datums\quirks\negative_quirks\bad_touch.dm" @@ -1794,6 +1826,7 @@ #include "code\datums\status_effects\wound_effects.dm" #include "code\datums\status_effects\buffs\food_haste.dm" #include "code\datums\status_effects\buffs\food_traits.dm" +#include "code\datums\status_effects\buffs\stop_drop_roll.dm" #include "code\datums\status_effects\buffs\stun_absorption.dm" #include "code\datums\status_effects\debuffs\blindness.dm" #include "code\datums\status_effects\debuffs\choke.dm" @@ -1879,10 +1912,6 @@ #include "code\datums\wounds\slash.dm" #include "code\datums\wounds\scars\_scars.dm" #include "code\datums\wounds\scars\_static_scar_data.dm" -#include "code\game\alternate_appearance.dm" -#include "code\game\atom_defense.dm" -#include "code\game\atoms.dm" -#include "code\game\atoms_initializing_EXPENSIVE.dm" #include "code\game\atoms_movable.dm" #include "code\game\communications.dm" #include "code\game\data_huds.dm" @@ -1918,6 +1947,22 @@ #include "code\game\area\areas\station\service.dm" #include "code\game\area\areas\station\solars.dm" #include "code\game\area\areas\station\telecomm.dm" +#include "code\game\atom\_atom.dm" +#include "code\game\atom\alternate_appearance.dm" +#include "code\game\atom\atom_act.dm" +#include "code\game\atom\atom_appearance.dm" +#include "code\game\atom\atom_color.dm" +#include "code\game\atom\atom_defense.dm" +#include "code\game\atom\atom_examine.dm" +#include "code\game\atom\atom_greyscale.dm" +#include "code\game\atom\atom_invisibility.dm" +#include "code\game\atom\atom_materials.dm" +#include "code\game\atom\atom_merger.dm" +#include "code\game\atom\atom_orbit.dm" +#include "code\game\atom\atom_storage.dm" +#include "code\game\atom\atom_tool_acts.dm" +#include "code\game\atom\atom_vv.dm" +#include "code\game\atom\atoms_initializing_EXPENSIVE.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" @@ -2258,6 +2303,7 @@ #include "code\game\objects\items\extinguisher.dm" #include "code\game\objects\items\fireaxe.dm" #include "code\game\objects\items\flamethrower.dm" +#include "code\game\objects\items\frog_statue.dm" #include "code\game\objects\items\gift.dm" #include "code\game\objects\items\gun_maintenance.dm" #include "code\game\objects\items\hand_items.dm" @@ -2296,7 +2342,6 @@ #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\shrapnel.dm" #include "code\game\objects\items\signs.dm" -#include "code\game\objects\items\singularityhammer.dm" #include "code\game\objects\items\skub.dm" #include "code\game\objects\items\spear.dm" #include "code\game\objects\items\sticker.dm" @@ -2315,6 +2360,8 @@ #include "code\game\objects\items\virgin_mary.dm" #include "code\game\objects\items\wall_mounted.dm" #include "code\game\objects\items\weaponry.dm" +#include "code\game\objects\items\wiki_manuals.dm" +#include "code\game\objects\items\wizard_weapons.dm" #include "code\game\objects\items\AI_modules\_AI_modules.dm" #include "code\game\objects\items\AI_modules\freeform.dm" #include "code\game\objects\items\AI_modules\full_lawsets.dm" @@ -2346,7 +2393,6 @@ #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\polycircuit.dm" -#include "code\game\objects\items\devices\portable_chem_mixer.dm" #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\pressureplates.dm" #include "code\game\objects\items\devices\quantum_keycard.dm" @@ -2412,6 +2458,7 @@ #include "code\game\objects\items\granters\crafting\death_sandwich.dm" #include "code\game\objects\items\granters\crafting\desserts.dm" #include "code\game\objects\items\granters\crafting\pipegun.dm" +#include "code\game\objects\items\granters\crafting\rebarxbowsyndie.dm" #include "code\game\objects\items\granters\crafting\regal_condor.dm" #include "code\game\objects\items\granters\magic\_spell_granter.dm" #include "code\game\objects\items\granters\magic\barnyard.dm" @@ -2527,7 +2574,6 @@ #include "code\game\objects\items\storage\holsters.dm" #include "code\game\objects\items\storage\lockbox.dm" #include "code\game\objects\items\storage\medkit.dm" -#include "code\game\objects\items\storage\secure.dm" #include "code\game\objects\items\storage\sixpack.dm" #include "code\game\objects\items\storage\storage.dm" #include "code\game\objects\items\storage\toolbox.dm" @@ -2602,12 +2648,14 @@ #include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\mystery_box.dm" #include "code\game\objects\structures\noticeboard.dm" +#include "code\game\objects\structures\ore_containers.dm" #include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\pinatas.dm" #include "code\game\objects\structures\plasticflaps.dm" #include "code\game\objects\structures\railings.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" +#include "code\game\objects\structures\secure_safe.dm" #include "code\game\objects\structures\showcase.dm" #include "code\game\objects\structures\shower.dm" #include "code\game\objects\structures\spawner.dm" @@ -3026,20 +3074,20 @@ #include "code\modules\antagonists\heretic\items\heretic_necks.dm" #include "code\modules\antagonists\heretic\items\hunter_rifle.dm" #include "code\modules\antagonists\heretic\items\keyring.dm" -#include "code\modules\antagonists\heretic\items\lintel.dm" +#include "code\modules\antagonists\heretic\items\labyrinth_handbook.dm" #include "code\modules\antagonists\heretic\items\madness_mask.dm" #include "code\modules\antagonists\heretic\knowledge\ash_lore.dm" #include "code\modules\antagonists\heretic\knowledge\blade_lore.dm" #include "code\modules\antagonists\heretic\knowledge\cosmic_lore.dm" #include "code\modules\antagonists\heretic\knowledge\flesh_lore.dm" #include "code\modules\antagonists\heretic\knowledge\general_side.dm" -#include "code\modules\antagonists\heretic\knowledge\knock_lore.dm" +#include "code\modules\antagonists\heretic\knowledge\lock_lore.dm" #include "code\modules\antagonists\heretic\knowledge\rust_lore.dm" #include "code\modules\antagonists\heretic\knowledge\side_ash_flesh.dm" #include "code\modules\antagonists\heretic\knowledge\side_blade_rust.dm" #include "code\modules\antagonists\heretic\knowledge\side_cosmos_ash.dm" #include "code\modules\antagonists\heretic\knowledge\side_flesh_void.dm" -#include "code\modules\antagonists\heretic\knowledge\side_knock_flesh.dm" +#include "code\modules\antagonists\heretic\knowledge\side_lock_flesh.dm" #include "code\modules\antagonists\heretic\knowledge\side_rust_cosmos.dm" #include "code\modules\antagonists\heretic\knowledge\side_void_blade.dm" #include "code\modules\antagonists\heretic\knowledge\starting_lore.dm" @@ -3090,7 +3138,7 @@ #include "code\modules\antagonists\heretic\status_effects\ghoul.dm" #include "code\modules\antagonists\heretic\status_effects\mark_effects.dm" #include "code\modules\antagonists\heretic\structures\carving_knife.dm" -#include "code\modules\antagonists\heretic\structures\knock_final.dm" +#include "code\modules\antagonists\heretic\structures\lock_final.dm" #include "code\modules\antagonists\heretic\structures\mawed_crucible.dm" #include "code\modules\antagonists\highlander\highlander.dm" #include "code\modules\antagonists\hypnotized\hypnotized.dm" @@ -3390,12 +3438,18 @@ #include "code\modules\bitrunning\job.dm" #include "code\modules\bitrunning\outfits.dm" #include "code\modules\bitrunning\turfs.dm" +#include "code\modules\bitrunning\antagonists\_parent.dm" #include "code\modules\bitrunning\antagonists\cyber_police.dm" +#include "code\modules\bitrunning\antagonists\cyber_tac.dm" +#include "code\modules\bitrunning\antagonists\netguardian.dm" #include "code\modules\bitrunning\components\avatar_connection.dm" #include "code\modules\bitrunning\components\bitrunning_points.dm" +#include "code\modules\bitrunning\components\glitch.dm" #include "code\modules\bitrunning\components\netpod_healing.dm" +#include "code\modules\bitrunning\components\npc_friendly.dm" #include "code\modules\bitrunning\objects\byteforge.dm" #include "code\modules\bitrunning\objects\clothing.dm" +#include "code\modules\bitrunning\objects\debug.dm" #include "code\modules\bitrunning\objects\disks.dm" #include "code\modules\bitrunning\objects\hololadder.dm" #include "code\modules\bitrunning\objects\host_monitor.dm" @@ -3407,23 +3461,29 @@ #include "code\modules\bitrunning\orders\disks.dm" #include "code\modules\bitrunning\orders\flair.dm" #include "code\modules\bitrunning\orders\tech.dm" +#include "code\modules\bitrunning\server\_parent.dm" #include "code\modules\bitrunning\server\loot.dm" #include "code\modules\bitrunning\server\map_handling.dm" #include "code\modules\bitrunning\server\obj_generation.dm" -#include "code\modules\bitrunning\server\quantum_server.dm" #include "code\modules\bitrunning\server\signal_handlers.dm" +#include "code\modules\bitrunning\server\threats.dm" #include "code\modules\bitrunning\server\util.dm" +#include "code\modules\bitrunning\util\digital_aura.dm" +#include "code\modules\bitrunning\util\service_style.dm" +#include "code\modules\bitrunning\util\virtual_megafauna.dm" +#include "code\modules\bitrunning\util\virtual_mob.dm" +#include "code\modules\bitrunning\virtual_domain\modular_mob_segment.dm" #include "code\modules\bitrunning\virtual_domain\safehouses.dm" #include "code\modules\bitrunning\virtual_domain\virtual_domain.dm" #include "code\modules\bitrunning\virtual_domain\domains\ash_drake.dm" #include "code\modules\bitrunning\virtual_domain\domains\beach_bar.dm" #include "code\modules\bitrunning\virtual_domain\domains\blood_drunk_miner.dm" +#include "code\modules\bitrunning\virtual_domain\domains\breeze_bay.dm" #include "code\modules\bitrunning\virtual_domain\domains\bubblegum.dm" #include "code\modules\bitrunning\virtual_domain\domains\clown_planet.dm" #include "code\modules\bitrunning\virtual_domain\domains\colossus.dm" #include "code\modules\bitrunning\virtual_domain\domains\gondola_asteroid.dm" #include "code\modules\bitrunning\virtual_domain\domains\hierophant.dm" -#include "code\modules\bitrunning\virtual_domain\domains\legion.dm" #include "code\modules\bitrunning\virtual_domain\domains\pipedream.dm" #include "code\modules\bitrunning\virtual_domain\domains\pirates.dm" #include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm" @@ -3797,6 +3857,7 @@ #include "code\modules\economy\account.dm" #include "code\modules\economy\holopay.dm" #include "code\modules\emoji\emoji_parse.dm" +#include "code\modules\emote_panel\emote_panel.dm" #include "code\modules\error_handler\error_handler.dm" #include "code\modules\error_handler\error_viewer.dm" #include "code\modules\escape_menu\details.dm" @@ -4291,6 +4352,7 @@ #include "code\modules\logging\categories\log_category_uplink.dm" #include "code\modules\mafia\_defines.dm" #include "code\modules\mafia\controller.dm" +#include "code\modules\mafia\controller_ui.dm" #include "code\modules\mafia\map_pieces.dm" #include "code\modules\mafia\outfits.dm" #include "code\modules\mafia\abilities\abilities.dm" @@ -4317,6 +4379,7 @@ #include "code\modules\mafia\roles\town\town_protective.dm" #include "code\modules\mafia\roles\town\town_support.dm" #include "code\modules\mapfluff\centcom\nuke_ops.dm" +#include "code\modules\mapfluff\ruins\generic.dm" #include "code\modules\mapfluff\ruins\lavaland_ruin_code.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\library.dm" @@ -4489,12 +4552,14 @@ #include "code\modules\mob\living\basic\blob_minions\blobbernaut.dm" #include "code\modules\mob\living\basic\clown\clown.dm" #include "code\modules\mob\living\basic\clown\clown_ai.dm" -#include "code\modules\mob\living\basic\constructs\_construct.dm" -#include "code\modules\mob\living\basic\constructs\artificer.dm" -#include "code\modules\mob\living\basic\constructs\construct_ai.dm" -#include "code\modules\mob\living\basic\constructs\harvester.dm" -#include "code\modules\mob\living\basic\constructs\juggernaut.dm" -#include "code\modules\mob\living\basic\constructs\wraith.dm" +#include "code\modules\mob\living\basic\cult\shade.dm" +#include "code\modules\mob\living\basic\cult\constructs\_construct.dm" +#include "code\modules\mob\living\basic\cult\constructs\artificer.dm" +#include "code\modules\mob\living\basic\cult\constructs\construct_ai.dm" +#include "code\modules\mob\living\basic\cult\constructs\harvester.dm" +#include "code\modules\mob\living\basic\cult\constructs\juggernaut.dm" +#include "code\modules\mob\living\basic\cult\constructs\proteon.dm" +#include "code\modules\mob\living\basic\cult\constructs\wraith.dm" #include "code\modules\mob\living\basic\drone\_drone.dm" #include "code\modules\mob\living\basic\drone\drone_say.dm" #include "code\modules\mob\living\basic\drone\drone_tools.dm" @@ -4525,11 +4590,27 @@ #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_accessories.dm" #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_ai.dm" #include "code\modules\mob\living\basic\farm_animals\gorilla\gorilla_emotes.dm" +#include "code\modules\mob\living\basic\guardian\guardian.dm" +#include "code\modules\mob\living\basic\guardian\guardian_creator.dm" +#include "code\modules\mob\living\basic\guardian\guardian_fluff.dm" +#include "code\modules\mob\living\basic\guardian\guardian_helpers.dm" +#include "code\modules\mob\living\basic\guardian\guardian_verbs.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\assassin.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\charger.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\dextrous.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\explosive.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\gaseous.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\gravitokinetic.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\lightning.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\protector.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\ranged.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\standard.dm" +#include "code\modules\mob\living\basic\guardian\guardian_types\support.dm" +#include "code\modules\mob\living\basic\heretic\_heretic_summon.dm" #include "code\modules\mob\living\basic\heretic\ash_spirit.dm" #include "code\modules\mob\living\basic\heretic\fire_shark.dm" #include "code\modules\mob\living\basic\heretic\flesh_stalker.dm" #include "code\modules\mob\living\basic\heretic\flesh_worm.dm" -#include "code\modules\mob\living\basic\heretic\heretic_summon.dm" #include "code\modules\mob\living\basic\heretic\maid_in_the_mirror.dm" #include "code\modules\mob\living\basic\heretic\raw_prophet.dm" #include "code\modules\mob\living\basic\heretic\rust_walker.dm" @@ -4541,6 +4622,9 @@ #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_abilities.dm" #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_ai.dm" #include "code\modules\mob\living\basic\jungle\venus_human_trap.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper_abilities.dm" +#include "code\modules\mob\living\basic\jungle\leaper\leaper_ai.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_abilities.dm" #include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_ai.dm" @@ -4568,6 +4652,10 @@ #include "code\modules\mob\living\basic\lavaland\goliath\goliath_ai.dm" #include "code\modules\mob\living\basic\lavaland\goliath\goliath_trophy.dm" #include "code\modules\mob\living\basic\lavaland\goliath\tentacle.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutluncher_foodtrough.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers_ai.dm" +#include "code\modules\mob\living\basic\lavaland\gutlunchers\gutlunchers_inherit_datum.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\hivelord.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\hivelord_ai.dm" #include "code\modules\mob\living\basic\lavaland\hivelord\spawn_hivelord_brood.dm" @@ -4604,6 +4692,9 @@ #include "code\modules\mob\living\basic\ruin_defender\living_floor.dm" #include "code\modules\mob\living\basic\ruin_defender\skeleton.dm" #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard_ai.dm" +#include "code\modules\mob\living\basic\ruin_defender\wizard\wizard_spells.dm" #include "code\modules\mob\living\basic\space_fauna\ant.dm" #include "code\modules\mob\living\basic\space_fauna\cat_surgeon.dm" #include "code\modules\mob\living\basic\space_fauna\faithless.dm" @@ -4702,6 +4793,7 @@ #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\basic\vermin\space_bat.dm" #include "code\modules\mob\living\brain\brain.dm" +#include "code\modules\mob\living\brain\brain_cybernetic.dm" #include "code\modules\mob\living\brain\brain_item.dm" #include "code\modules\mob\living\brain\brain_say.dm" #include "code\modules\mob\living\brain\death.dm" @@ -4846,7 +4938,6 @@ #include "code\modules\mob\living\simple_animal\animal_defense.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" -#include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\bot\bot.dm" #include "code\modules\mob\living\simple_animal\bot\bot_announcement.dm" @@ -4865,19 +4956,6 @@ #include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\guardian\guardian.dm" -#include "code\modules\mob\living\simple_animal\guardian\guardian_creator.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\assassin.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\charger.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\dextrous.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\explosive.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\gaseous.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\gravitokinetic.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\lightning.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\protector.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\ranged.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\standard.dm" -#include "code\modules\mob\living\simple_animal\guardian\types\support.dm" #include "code\modules\mob\living\simple_animal\hostile\alien.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" @@ -4885,11 +4963,7 @@ #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\ooze.dm" #include "code\modules\mob\living\simple_animal\hostile\vatbeast.dm" -#include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" -#include "code\modules\mob\living\simple_animal\hostile\constructs\constructs.dm" -#include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" -#include "code\modules\mob\living\simple_animal\hostile\jungle\leaper.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\_megafauna.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm" @@ -4901,7 +4975,6 @@ #include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\wendigo.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\curse_blob.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\polarbear.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\wolf.dm" @@ -5301,6 +5374,7 @@ #include "code\modules\reagents\chemistry\machinery\chem_separator.dm" #include "code\modules\reagents\chemistry\machinery\chem_synthesizer.dm" #include "code\modules\reagents\chemistry\machinery\pandemic.dm" +#include "code\modules\reagents\chemistry\machinery\portable_chem_mixer.dm" #include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" #include "code\modules\reagents\chemistry\machinery\smoke_machine.dm" #include "code\modules\reagents\chemistry\reagents\atmos_gas_reagents.dm" @@ -5557,7 +5631,6 @@ #include "code\modules\spells\spell_types\self\lichdom.dm" #include "code\modules\spells\spell_types\self\mime_vow.dm" #include "code\modules\spells\spell_types\self\mutate.dm" -#include "code\modules\spells\spell_types\self\personality_commune.dm" #include "code\modules\spells\spell_types\self\rod_form.dm" #include "code\modules\spells\spell_types\self\sanguine_strike.dm" #include "code\modules\spells\spell_types\self\smoke.dm" @@ -5961,6 +6034,7 @@ #include "code\modules\wiremod\datatypes\option.dm" #include "code\modules\wiremod\datatypes\signal.dm" #include "code\modules\wiremod\datatypes\string.dm" +#include "code\modules\wiremod\datatypes\user.dm" #include "code\modules\wiremod\datatypes\composite\assoc_list.dm" #include "code\modules\wiremod\datatypes\composite\composite.dm" #include "code\modules\wiremod\datatypes\composite\list.dm" @@ -6048,6 +6122,7 @@ #include "modular_skyrat\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "modular_skyrat\master_files\code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" #include "modular_skyrat\master_files\code\game\machinery\hologram.dm" +#include "modular_skyrat\master_files\code\game\machinery\limbgrower.dm" #include "modular_skyrat\master_files\code\game\machinery\suit_storage.dm" #include "modular_skyrat\master_files\code\game\machinery\doors\firedoor.dm" #include "modular_skyrat\master_files\code\game\objects\items.dm" @@ -6066,6 +6141,7 @@ #include "modular_skyrat\master_files\code\game\objects\items\RCD.dm" #include "modular_skyrat\master_files\code\game\objects\items\religion.dm" #include "modular_skyrat\master_files\code\game\objects\items\scratchingstone.dm" +#include "modular_skyrat\master_files\code\game\objects\items\wiki_manuals.dm" #include "modular_skyrat\master_files\code\game\objects\items\devices\anomaly_neutralizer.dm" #include "modular_skyrat\master_files\code\game\objects\items\stacks\sheets\sheet_types.dm" #include "modular_skyrat\master_files\code\game\objects\items\storage\backpack.dm" @@ -6094,6 +6170,8 @@ #include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\kill_pet.dm" #include "modular_skyrat\master_files\code\modules\antagonists\traitor\objectives\smuggling.dm" #include "modular_skyrat\master_files\code\modules\asset_cache\assets\plumbing.dm" +#include "modular_skyrat\master_files\code\modules\atmospherics\machinery\pipes\pipes.dm" +#include "modular_skyrat\master_files\code\modules\bitrunning\orders\disks.dm" #include "modular_skyrat\master_files\code\modules\bitrunning\orders\tech.dm" #include "modular_skyrat\master_files\code\modules\buildmode\bm_mode.dm" #include "modular_skyrat\master_files\code\modules\buildmode\submodes\offercontrol.dm" @@ -6268,6 +6346,7 @@ #include "modular_skyrat\master_files\code\modules\mod\mod_types.dm" #include "modular_skyrat\master_files\code\modules\mod\modules\_module.dm" #include "modular_skyrat\master_files\code\modules\mod\modules\modules_antag.dm" +#include "modular_skyrat\master_files\code\modules\mod\modules\modules_supply.dm" #include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm" #include "modular_skyrat\master_files\code\modules\pai\card.dm" #include "modular_skyrat\master_files\code\modules\paperwork\employment_contract.dm" @@ -6281,6 +6360,7 @@ #include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic.dm" #include "modular_skyrat\master_files\code\modules\projectiles\guns\energy.dm" #include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\revolver.dm" +#include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\suppressor.dm" #include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\_bow.dm" #include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\bow_quivers.dm" #include "modular_skyrat\master_files\code\modules\projectiles\guns\ballistic\bows\bow_types.dm" @@ -6293,6 +6373,7 @@ #include "modular_skyrat\master_files\code\modules\reagents\withdrawal\generic_addictions.dm" #include "modular_skyrat\master_files\code\modules\religion\religious_sects.dm" #include "modular_skyrat\master_files\code\modules\research\designs\biogenerator_designs.dm" +#include "modular_skyrat\master_files\code\modules\research\designs\limbgrower_designs.dm" #include "modular_skyrat\master_files\code\modules\research\designs\medical_designs.dm" #include "modular_skyrat\master_files\code\modules\research\designs\misc_designs.dm" #include "modular_skyrat\master_files\code\modules\research\designs\tool_designs.dm" @@ -6338,7 +6419,6 @@ #include "modular_skyrat\modules\aesthetics\chemical_tanks\chemical_tanks.dm" #include "modular_skyrat\modules\aesthetics\clothing\clothing.dm" #include "modular_skyrat\modules\aesthetics\computer\code\computer.dm" -#include "modular_skyrat\modules\aesthetics\crates\code\crates.dm" #include "modular_skyrat\modules\aesthetics\device\device.dm" #include "modular_skyrat\modules\aesthetics\directwindow\code\window.dm" #include "modular_skyrat\modules\aesthetics\disposals\code\disposals.dm" @@ -6419,6 +6499,7 @@ #include "modular_skyrat\modules\ashwalkers\code\items\ashwalker_shaman.dm" #include "modular_skyrat\modules\ashwalkers\code\species\Ashwalkers.dm" #include "modular_skyrat\modules\ashwalkers\code\species\damage_datum.dm" +#include "modular_skyrat\modules\ashwalkers\code\turfs\closed_turfs.dm" #include "modular_skyrat\modules\ashwalkers\code\turfs\icemoon_tiles.dm" #include "modular_skyrat\modules\assault_operatives\code\areas.dm" #include "modular_skyrat\modules\assault_operatives\code\assault_operatives.dm" @@ -6974,6 +7055,7 @@ #include "modular_skyrat\modules\delam_emergency_stop\code\admin_scram.dm" #include "modular_skyrat\modules\delam_emergency_stop\code\delam.dm" #include "modular_skyrat\modules\delam_emergency_stop\code\scram.dm" +#include "modular_skyrat\modules\Department_Budgets\cards.dm" #include "modular_skyrat\modules\departmentization\cargo_technician.dm" #include "modular_skyrat\modules\departmentization\clothing_overrides.dm" #include "modular_skyrat\modules\departmentization\quartermaster.dm" @@ -7558,6 +7640,7 @@ #include "modular_skyrat\modules\novaya_ert\code\id.dm" #include "modular_skyrat\modules\novaya_ert\code\mod_suit.dm" #include "modular_skyrat\modules\novaya_ert\code\outfit.dm" +#include "modular_skyrat\modules\novaya_ert\code\police_outfit.dm" #include "modular_skyrat\modules\novaya_ert\code\shield.dm" #include "modular_skyrat\modules\novaya_ert\code\suit.dm" #include "modular_skyrat\modules\novaya_ert\code\surplus_armor.dm" @@ -7594,6 +7677,11 @@ #include "modular_skyrat\modules\oversized\code\door.dm" #include "modular_skyrat\modules\oversized\code\oversized_quirk.dm" #include "modular_skyrat\modules\panicbunker\code\panicbunker.dm" +#include "modular_skyrat\modules\paycheck_rations\code\quirk.dm" +#include "modular_skyrat\modules\paycheck_rations\code\rationpacks.dm" +#include "modular_skyrat\modules\paycheck_rations\code\reagents.dm" +#include "modular_skyrat\modules\paycheck_rations\code\ticket_book.dm" +#include "modular_skyrat\modules\paycheck_rations\code\tickets.dm" #include "modular_skyrat\modules\pixel_shift\code\pixel_shift_component.dm" #include "modular_skyrat\modules\pixel_shift\code\pixel_shift_keybind.dm" #include "modular_skyrat\modules\pixel_shift\code\pixel_shift_mob.dm" @@ -7637,6 +7725,7 @@ #include "modular_skyrat\modules\primitive_cooking_additions\code\cookware.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\cutting_board.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\millstone.dm" +#include "modular_skyrat\modules\primitive_cooking_additions\code\stone_griddle.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\stone_oven.dm" #include "modular_skyrat\modules\primitive_cooking_additions\code\stone_stove.dm" #include "modular_skyrat\modules\primitive_production\code\ceramics.dm" diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index 2477641c7e7..56951b14846 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -4,7 +4,7 @@ "version": "4.3.1", "type": "module", "dependencies": { - "axios": "^0.21.1", + "axios": "^1.6.0", "glob": "^7.1.7", "source-map": "^0.7.3", "stacktrace-parser": "^0.1.10", diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 51ee8f1deae..ecafbd23641 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -64,6 +64,8 @@ const loadChatFromStorage = async (store) => { export const chatMiddleware = (store) => { let initialized = false; let loaded = false; + const sequences = []; + const sequences_requested = []; chatRenderer.events.on('batchProcessed', (countByType) => { // Use this flag to workaround unread messages caused by // loading them from storage. Side effect of that, is that @@ -85,9 +87,41 @@ export const chatMiddleware = (store) => { loadChatFromStorage(store); } if (type === 'chat/message') { - // Normalize the payload - const batch = Array.isArray(payload) ? payload : [payload]; - chatRenderer.processBatch(batch); + let payload_obj; + try { + payload_obj = JSON.parse(payload); + } catch (err) { + return; + } + + const sequence = payload_obj.sequence; + if (sequences.includes(sequence)) { + return; + } + + const sequence_count = sequences.length; + seq_check: if (sequence_count > 0) { + if (sequences_requested.includes(sequence)) { + sequences_requested.splice(sequences_requested.indexOf(sequence), 1); + // if we are receiving a message we requested, we can stop reliability checks + break seq_check; + } + + // cannot do reliability if we don't have any messages + const expected_sequence = sequences[sequence_count - 1] + 1; + if (sequence !== expected_sequence) { + for ( + let requesting = expected_sequence; + requesting < sequence; + requesting++ + ) { + requested_sequences.push(requesting); + Byond.sendMessage('chat/resend', requesting); + } + } + } + + chatRenderer.processBatch([payload_obj.content]); return; } if (type === loadChat.type) { diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 73e997f0478..e3f4ecd2feb 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -506,6 +506,11 @@ em { font-size: 90%; } +.bolditalic { + font-style: italic; + font-weight: bold; +} + .boldnotice { color: #6685f5; font-weight: bold; @@ -1062,6 +1067,7 @@ $alert-stripe-colors: ( 'orange': #593400, 'red': #420000, 'purple': #2c0030, + 'grey': #252525, ); $alert-stripe-alternate-colors: ( @@ -1073,28 +1079,31 @@ $alert-stripe-alternate-colors: ( 'orange': #6b4200, 'red': #520000, 'purple': #38003d, + 'grey': #292929, ); $alert-major-header-colors: ( 'default': #33d5ff, 'green': #00ff80, 'blue': #33d5ff, - 'pink': #ff80b3, + 'pink': #ff5297, 'yellow': #fff4e0, 'orange': #feefe7, - 'red': #ffa8c4, + 'red': #ff5297, 'purple': #c7a1f7, + 'grey': #ff5297, ); $alert-subheader-header-colors: ( - 'default': #ff9ebb, - 'green': #ffb3c9, - 'blue': #ff9ebb, - 'pink': #75e3ff, - 'yellow': #75e3ff, - 'orange': #bdf1ff, - 'red': #75e3ff, - 'purple': #75e3ff, + 'default': #ff5297, + 'green': #ff85b5, + 'blue': #ff5297, + 'pink': #33d5ff, + 'yellow': #33d5ff, + 'orange': #33d5ff, + 'red': #33d5ff, + 'purple': #33d5ff, + 'grey': #33d5ff, ); */ @@ -1107,6 +1116,7 @@ $alert-stripe-colors: ( 'orange': #431b16, 'red': #420000, 'purple': #220c24, + 'grey': #252525, ); $alert-stripe-alternate-colors: ( @@ -1118,6 +1128,7 @@ $alert-stripe-alternate-colors: ( 'orange': #50211b, 'red': #520000, 'purple': #2b0f2e, + 'grey': #292929, ); $alert-major-header-colors: ( @@ -1129,6 +1140,7 @@ $alert-major-header-colors: ( 'orange': #e79f79, 'red': #ff4542, 'purple': #bf9cde, + 'grey': #ff4542, ); $alert-subheader-header-colors: ( @@ -1140,6 +1152,7 @@ $alert-subheader-header-colors: ( 'orange': #ffddbd, 'red': #e9aa72, 'purple': #f7cfcf, + 'grey': #e9aa72, ); // SKYRAT EDIT CHANGE END diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 2e7e9c5af0a..81955e9eded 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -995,6 +995,7 @@ $alert-stripe-colors: ( 'orange': #ffe2b3, 'red': #ffb3b3, 'purple': #fac2ff, + 'grey': #e3e3e3, ); $alert-stripe-alternate-colors: ( @@ -1006,6 +1007,7 @@ $alert-stripe-alternate-colors: ( 'orange': #ffe8c2, 'red': #ffc2c2, 'purple': #fbd1ff, + 'grey': #ebebeb, ); $alert-major-header-colors: ( @@ -1017,6 +1019,7 @@ $alert-major-header-colors: ( 'orange': #823208, 'red': #800029, 'purple': #450d8c, + 'grey': #800033, ); $alert-subheader-header-colors: ( @@ -1028,6 +1031,7 @@ $alert-subheader-header-colors: ( 'orange': #002c85, 'red': #002c85, 'purple': #002c85, + 'grey': #002c85, ); */ @@ -1040,6 +1044,7 @@ $alert-stripe-colors: ( 'orange': #ffe2b3, 'red': #ffbbb3, 'purple': #e6d1f0, + 'grey': #e3e3e3, ); $alert-stripe-alternate-colors: ( @@ -1051,6 +1056,7 @@ $alert-stripe-alternate-colors: ( 'orange': #ffe8c2, 'red': #ffc8c2, 'purple': #ead9f2, + 'grey': #ebebeb, ); $alert-major-header-colors: ( @@ -1062,6 +1068,7 @@ $alert-major-header-colors: ( 'orange': #b14810, 'red': #a80e00, 'purple': #5b2673, + 'grey': #a80e00, ); $alert-subheader-header-colors: ( @@ -1073,6 +1080,7 @@ $alert-subheader-header-colors: ( 'orange': #002c85, 'red': #483c3c, 'purple': #991200, + 'grey': #002c85, ); // SKYRAT EDIT CHANGE END diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx index 283c0a2b912..d89423aded2 100644 --- a/tgui/packages/tgui/components/LabeledList.tsx +++ b/tgui/packages/tgui/components/LabeledList.tsx @@ -8,6 +8,7 @@ import { BooleanLike, classes, pureComponentHooks } from 'common/react'; import { InfernoNode } from 'inferno'; import { Box, unit } from './Box'; import { Divider } from './Divider'; +import { Tooltip } from './Tooltip'; type LabeledListProps = { children?: any; @@ -20,19 +21,20 @@ export const LabeledList = (props: LabeledListProps) => { LabeledList.defaultHooks = pureComponentHooks; -type LabeledListItemProps = { - className?: string | BooleanLike; - label?: string | InfernoNode | BooleanLike; - labelColor?: string | BooleanLike; - labelWrap?: boolean; - color?: string | BooleanLike; - textAlign?: string | BooleanLike; - buttons?: InfernoNode; +type LabeledListItemProps = Partial<{ + className: string | BooleanLike; + label: string | InfernoNode | BooleanLike; + labelColor: string | BooleanLike; + labelWrap: boolean; + color: string | BooleanLike; + textAlign: string | BooleanLike; + buttons: InfernoNode; /** @deprecated */ - content?: any; - children?: InfernoNode; - verticalAlign?: string; -}; + content: any; + children: InfernoNode; + verticalAlign: string; + tooltip: string; +}>; const LabeledListItem = (props: LabeledListItemProps) => { const { @@ -46,20 +48,46 @@ const LabeledListItem = (props: LabeledListItemProps) => { content, children, verticalAlign = 'baseline', + tooltip, } = props; + + let innerLabel; + if (label) { + innerLabel = label; + if (typeof label === 'string') innerLabel += ':'; + } + + if (tooltip !== undefined) { + innerLabel = ( + + + {innerLabel} + + + ); + } + + let labelChild = ( + + {innerLabel} + + ); + return ( - - {label ? (typeof label === 'string' ? label + ':' : label) : null} - + {labelChild} { {tab === 1 && } {tab === 2 && } + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} diff --git a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx index e8471a6a5ac..7000b324aa9 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx @@ -1,6 +1,9 @@ import { useBackend } from '../backend'; import { Box, Collapsible, Divider, LabeledList, Section, Stack } from '../components'; import { Objective } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END import { Window } from '../layouts'; @@ -25,6 +28,7 @@ export const AntagInfoBlob = (props, context) => { + diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx index f3eda78c661..339c115e30c 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx @@ -4,6 +4,9 @@ import { useBackend, useSharedState } from '../backend'; import { Button, Dimmer, Dropdown, Section, Stack, NoticeBox } from '../components'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective, ReplaceObjectivesButton } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const hivestyle = { fontWeight: 'bold', @@ -54,9 +57,10 @@ type Info = { can_change_objective: BooleanLike; }; +// SKYRAT EDIT change height from 750 to 900 export const AntagInfoChangeling = (props, context) => { return ( - + { + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} diff --git a/tgui/packages/tgui/interfaces/AntagInfoClock.tsx b/tgui/packages/tgui/interfaces/AntagInfoClock.tsx index 8912a666bc5..96b94c70339 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoClock.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoClock.tsx @@ -1,16 +1,20 @@ import { useBackend } from '../backend'; import { Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END type Info = { antag_name: string; }; +// SKYRAT EDIT change height from 250 to 350 export const AntagInfoClock = (props, context) => { const { data } = useBackend(context); const { antag_name } = data; return ( - +
@@ -19,6 +23,11 @@ export const AntagInfoClock = (props, context) => { {' You are the ' + antag_name + '! '} + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} diff --git a/tgui/packages/tgui/interfaces/AntagInfoCyberAuth.tsx b/tgui/packages/tgui/interfaces/AntagInfoCyberAuth.tsx deleted file mode 100644 index 21d872ed6a0..00000000000 --- a/tgui/packages/tgui/interfaces/AntagInfoCyberAuth.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { useBackend } from '../backend'; -import { Divider, Section, Stack } from '../components'; -import { Window } from '../layouts'; -import { Objective } from './common/Objectives'; - -type Info = { - antag_name: string; - objectives: Objective[]; -}; - -const textStyles = { - variable: { - color: 'white', - }, - danger: { - color: 'red', - }, -} as const; - -export const AntagInfoCyberAuth = (props, context) => { - const { data } = useBackend(context); - const { objectives = [] } = data; - - return ( - - -
- - FN CYBER AUTHORITY UNIT (REF) - - - - You are a cyber authority unit. - - - - Your mission: Eliminate{' '} - organic intruders to maintain the integrity of the system. - - - Bitrunning is a crime. To - assist your task, your program has been loaded with cutting edge{' '} - martial arts skills. - - - Ranged weaponry is{' '} - forbidden. Ballistic - defense is frowned upon. Style is paramount. - - - {objectives[0].explanation} - - - - const TARGETS ={' '} - - - system. - INTRUDERS; - - - while TARGETS.LIFE !={' '} - stat.DEAD - - - action. - KILL() - - cyber_authority_unit([0x70cf4020]) - -
-
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx index 33b7623c44f..7aa7b80eea0 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx @@ -2,23 +2,32 @@ import { useBackend } from '../backend'; import { Section, Stack } from '../components'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END type Info = { antag_name: string; objectives: Objective[]; }; +// SKYRAT EDIT increase height from 250 to 500 export const AntagInfoGeneric = (props, context) => { const { data } = useBackend(context); const { antag_name, objectives } = data; return ( - +
You are the {antag_name}! + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} diff --git a/tgui/packages/tgui/interfaces/AntagInfoGlitch.tsx b/tgui/packages/tgui/interfaces/AntagInfoGlitch.tsx new file mode 100644 index 00000000000..ca6ac70ccb3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AntagInfoGlitch.tsx @@ -0,0 +1,109 @@ +import { useBackend } from '../backend'; +import { Divider, Section, Stack } from '../components'; +import { Window } from '../layouts'; +import { Objective } from './common/Objectives'; + +type Data = { + antag_name: string; + objectives: Objective[]; +}; + +const textStyles = { + variable: { + color: 'white', + }, + danger: { + color: 'red', + }, +} as const; + +export const AntagInfoGlitch = (props, context) => { + const { data } = useBackend(context); + const { antag_name, objectives = [] } = data; + + return ( + + +
+ + FN TERMINATE_INTRUDERS (REF) + + + Initialize({antag_name}) + + + Bitrunning is a crime. Your + mission: Eliminate{' '} + organic intruders to maintain the integrity of the system. + + + + {objectives[0]?.explanation} + + + + const TARGETS ={' '} + + + system. + INTRUDERS; + + + while TARGETS.LIFE !={' '} + stat.DEAD + + + action. + KILL() + + terminate_intruders([0x70cf4020]) + +
+
+
+ ); +}; + +const SpecificInfo = (props, context) => { + const { data } = useBackend(context); + const { antag_name } = data; + + switch (antag_name) { + case 'Cyber Police': + return ( + <> + + To assist your task, your program has been loaded with cutting edge{' '} + martial arts skills. + + + Ranged weaponry is forbidden. + Ballistic defense is frowned upon. Style is paramount. + + + ); + case 'Cyber Tac': + return ( + <> + + You are an advanced combat unit. You have been outfitted with{' '} + lethal weaponry. + + + Terminate organic life at any + cost. + + + ); + case 'NetGuardian Prime': + return ( + + + ORGANIC LIFE MUST BE TERMINATED. + + + ); + default: + return null; + } +}; diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx index da4331026cc..367cc311403 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx @@ -3,6 +3,9 @@ import { Section, Stack, Box, Tabs, Button, BlockQuote } from '../components'; import { Window } from '../layouts'; import { BooleanLike } from 'common/react'; import { ObjectivePrintout, Objective, ReplaceObjectivesButton } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const hereticRed = { color: '#e03c3c', @@ -46,7 +49,6 @@ type KnowledgeInfo = { type Info = { charges: number; - side_charges: number; total_sacrifices: number; ascended: BooleanLike; objectives: Objective[]; @@ -64,6 +66,12 @@ const IntroductionSection = (props, context) => { + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} + @@ -180,7 +188,7 @@ const GuideSection = () => { const InformationSection = (props, context) => { const { data } = useBackend(context); - const { charges, side_charges, total_sacrifices, ascended } = data; + const { charges, total_sacrifices, ascended } = data; return ( @@ -202,13 +210,6 @@ const InformationSection = (props, context) => { knowledge point{charges !== 1 ? 's' : ''} - {!!side_charges && ( - - {' '} - and {side_charges} side point - {side_charges !== 1 ? 's' : ''} - - )}{' '} . @@ -283,7 +284,7 @@ const KnowledgeShop = (props, context) => { const ResearchInfo = (props, context) => { const { data } = useBackend(context); - const { charges, side_charges } = data; + const { charges } = data; return ( @@ -293,14 +294,7 @@ const ResearchInfo = (props, context) => { You have {charges || 0}  knowledge point{charges !== 1 ? 's' : ''} - - {!!side_charges && ( - - {' '} - and {side_charges} side point - {side_charges !== 1 ? 's' : ''} - - )}{' '} + {' '} to spend. diff --git a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx index 0344f11d2ee..76e7944cfd7 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx @@ -5,6 +5,9 @@ import { BlockQuote, Button, Section, Stack, Tabs } from '../components'; import { BooleanLike } from 'common/react'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective, ReplaceObjectivesButton } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const allystyle = { fontWeight: 'bold', @@ -55,6 +58,7 @@ const IntroductionSection = (props, context) => { /> } /> +
diff --git a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx index fb98e1aa35b..58c379ab522 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx @@ -1,5 +1,8 @@ import { BlockQuote, Stack } from '../components'; import { Window } from '../layouts'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const goodstyle = { color: 'lightgreen', @@ -48,6 +51,11 @@ export const AntagInfoMorph = (props, context) => { {' '} + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx index 327e114e2fd..6d4b105c498 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx @@ -1,5 +1,8 @@ import { BlockQuote, LabeledList, Section, Stack } from '../components'; import { Window } from '../layouts'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const tipstyle = { color: 'white', @@ -68,6 +71,11 @@ export const AntagInfoNightmare = (props, context) => {
+ {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx index a537888af75..0615e46e05d 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx @@ -3,6 +3,9 @@ import { useBackend } from '../backend'; import { Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective, ReplaceObjectivesButton } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const ninja_emphasis = { color: 'red', @@ -48,6 +51,11 @@ export const AntagInfoNinja = (props, context) => { what you can do! + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} { + const { data } = useBackend(context); + const { antag_name } = data; + switch (antag_name) { + case 'Abductor Agent' || 'Abductor Scientist' || 'Abductor Solo': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Drifting Contractor': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Cortical Borer': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Venus Human Trap': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Obsessed': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Revenant': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Space Dragon': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Space Pirate': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Blob': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + case 'Changeling': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'ClockCult': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'AssaultOps': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Heretic': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Malf AI': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Morph': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Nightmare': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Ninja': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + case 'Wizard': + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + default: + return ( + + Special Rules: + + { + + Special Rules and Metaprotections! + + } + + + ); + break; + } +}; diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx index cc62986c085..083e3b2372c 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx @@ -4,6 +4,9 @@ import { BlockQuote, Button, Dimmer, Section, Stack } from '../components'; import { BooleanLike } from 'common/react'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const allystyle = { fontWeight: 'bold', @@ -48,6 +51,14 @@ const IntroductionSection = (props, context) => { + {/* SKYRAT EDIT ADDITION START */} + + {/* SKYRAT EDIT ADDITION START */} + + + + + {/* SKYRAT EDIT ADDITION END */} ); @@ -218,11 +229,12 @@ const CodewordsSection = (props, context) => { ); }; +// SKYRAT EDIT: change height from 580 to 650 export const AntagInfoTraitor = (props, context) => { const { data } = useBackend(context); const { theme } = data; return ( - + diff --git a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx index e5de257851a..94d528513d0 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx @@ -3,6 +3,9 @@ import { useBackend } from '../backend'; import { Box, Section, Stack } from '../components'; import { Window } from '../layouts'; import { ObjectivePrintout, Objective, ReplaceObjectivesButton } from './common/Objectives'; +// SKYRAT EDIT BEGIN +import { Rules } from './AntagInfoRules'; +// SKYRAT EDIT END const teleportstyle = { color: 'yellow', @@ -48,12 +51,13 @@ type Info = { can_change_objective: BooleanLike; }; +// SKYRAT CHANGE height from 630 to 700 export const AntagInfoWizard = (props, context) => { const { data, act } = useBackend(context); const { ritual, objectives, can_change_objective } = data; return ( - + @@ -78,6 +82,11 @@ export const AntagInfoWizard = (props, context) => { + {/* SKYRAT EDIT ADDITION START */} + + + + {/* SKYRAT EDIT ADDITION END */} diff --git a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx index d8516d1e000..2c4b58395a7 100644 --- a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx +++ b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx @@ -1,27 +1,17 @@ -import { BooleanLike } from 'common/react'; +import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; import { useBackend } from '../backend'; -import { AnimatedNumber, Box, Button, LabeledList, NumberInput, Section } from '../components'; +import { Button, NumberInput, Section } from '../components'; import { Window } from '../layouts'; type Data = { amount: number; purity: number; - beakerCurrentVolume: number; - beakerMaxVolume: number; - isBeakerLoaded: BooleanLike; - beakerContents: { name: string; volume: number }[]; + beaker: Beaker; }; export const ChemDebugSynthesizer = (props, context) => { const { act, data } = useBackend(context); - const { - amount, - purity, - beakerCurrentVolume, - beakerMaxVolume, - isBeakerLoaded, - beakerContents = [], - } = data; + const { amount, purity, beaker } = data; return ( @@ -29,18 +19,13 @@ export const ChemDebugSynthesizer = (props, context) => {
-
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.js b/tgui/packages/tgui/interfaces/ChemDispenser.tsx similarity index 65% rename from tgui/packages/tgui/interfaces/ChemDispenser.js rename to tgui/packages/tgui/interfaces/ChemDispenser.tsx index d1035900a32..b873100332e 100644 --- a/tgui/packages/tgui/interfaces/ChemDispenser.js +++ b/tgui/packages/tgui/interfaces/ChemDispenser.tsx @@ -1,31 +1,44 @@ import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; import { toTitleCase } from 'common/string'; -import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; -import { AnimatedNumber, Box, Button, Icon, LabeledList, ProgressBar, Section } from '../components'; +import { Box, Button, Icon, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; +import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; + +type DispensableReagent = { + title: string; + id: string; + pH: number; + pHCol: string; +}; + +type Data = { + showpH: BooleanLike; + amount: number; + energy: number; + maxEnergy: number; + chemicals: DispensableReagent[]; + recipes: string[]; + recordingRecipe: string[]; + recipeReagents: string[]; + beaker: Beaker; +}; export const ChemDispenser = (props, context) => { - const { act, data } = useBackend(context); + const { act, data } = useBackend(context); const recording = !!data.recordingRecipe; - const { recipeReagents = [] } = data; + const { recipeReagents = [], recipes = [], beaker } = data; const [hasCol, setHasCol] = useLocalState(context, 'has_col', false); - // TODO: Change how this piece of shit is built on server side - // It has to be a list, not a fucking OBJECT! - const recipes = Object.keys(data.recipes).map((name) => ({ - name, - contents: data.recipes[name], - })); - const beakerTransferAmounts = data.beakerTransferAmounts || []; - const beakerContents = - (recording && - Object.keys(data.recordingRecipe).map((id) => ({ - id, - name: toTitleCase(id.replace(/_/, ' ')), - volume: data.recordingRecipe[id], - }))) || - data.beakerContents || - []; + + const beakerTransferAmounts = beaker ? beaker.transferAmounts : []; + const recordedContents = + recording && + Object.keys(data.recordingRecipe).map((id) => ({ + id, + name: toTitleCase(id.replace(/_/, ' ')), + volume: data.recordingRecipe[id], + })); return ( @@ -41,10 +54,10 @@ export const ChemDispenser = (props, context) => { )} + + + + + + + }> + + + {emotes + .filter( + (emote) => + emote.key && + (searchText.length > 0 + ? emote.key + .toLowerCase() + .includes(searchText.toLowerCase()) || + emote.name.toLowerCase().includes(searchText.toLowerCase()) + : true) && + (filterVisible ? emote.visible : true) && + (filterAudible ? emote.audible : true) && + (filterSound ? emote.sound : true) && + (filterHands ? emote.hands : true) && + (filterUseParams ? emote.use_params : true) + ) + .sort((a, b) => (a.name > b.name ? 1 : -1)) + .map((emote) => ( + + ))} + + + + + ); +}; + +const EmoteIcons = (props, context) => { + const { visible, audible, sound, hands, use_params, margin } = props; + + return ( + + + + + + + + ); +}; + +export const EmotePanel = (props, context) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx index 5175cdbdb7f..93877783c43 100644 --- a/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx +++ b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx @@ -91,11 +91,11 @@ const EyeColorDisplay = (props, context) => { const { eyeColor } = data; return ( <> - + act('toggle_eye_color')} - tooltip="Toggle the eye color mode." + tooltip="Toggles whether eyecolor matches the color of the light." /> {!eyeColor.mode && ( @@ -112,7 +112,7 @@ const EyeColorDisplay = (props, context) => { onClick={() => act('random_color', { to_update: ToUpdate.LeftEye }) } - tooltip="Randomizes the light color." + tooltip="Randomizes the eye color." /> { onClick={() => act('random_color', { to_update: ToUpdate.RightEye }) } - tooltip="Randomizes the light color." + tooltip="Randomizes the eye color." /> { + const { act, data } = useBackend(context); + const { input_code, locked, lock_code } = data; + return ( + + + + + {input_code} + + + {!lock_code && 'No password set.'} + {!!lock_code && (!locked ? 'Unlocked' : 'Locked')} + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/MafiaPanel.tsx b/tgui/packages/tgui/interfaces/MafiaPanel.tsx index 528f6260b8d..ee63d105dd1 100644 --- a/tgui/packages/tgui/interfaces/MafiaPanel.tsx +++ b/tgui/packages/tgui/interfaces/MafiaPanel.tsx @@ -1,4 +1,4 @@ -import { classes } from 'common/react'; +import { BooleanLike, classes } from 'common/react'; import { decodeHtmlEntities } from 'common/string'; import { multiline } from 'common/string'; import { useBackend, useLocalState } from '../backend'; @@ -16,6 +16,7 @@ type RoleInfo = { type PlayerInfo = { name: string; + is_you: BooleanLike; ref: string; alive: string; possible_actions: ActionInfo[]; @@ -431,7 +432,8 @@ const MafiaPlayers = (props, context) => { - {player.name} {!player.alive && '(DEAD)'} + {player.name} + {player.is_you && ' (YOU)'} {!player.alive && '(DEAD)'} {player.votes !== undefined && diff --git a/tgui/packages/tgui/interfaces/MatMarket.tsx b/tgui/packages/tgui/interfaces/MatMarket.tsx index 38ecfec2c18..55f0985c47e 100644 --- a/tgui/packages/tgui/interfaces/MatMarket.tsx +++ b/tgui/packages/tgui/interfaces/MatMarket.tsx @@ -21,10 +21,11 @@ type Data = { orderBalance: number; materials: Material[]; catastrophe: BooleanLike; + CARGO_CRATE_VALUE: number; }; export const MatMarket = (props, context) => { - const { act, data } = useBackend(context); // this will tell your editor that data is the type listed above + const { act, data } = useBackend(context); const { orderingPrive, @@ -33,7 +34,14 @@ export const MatMarket = (props, context) => { orderBalance, materials = [], catastrophe, + CARGO_CRATE_VALUE, } = data; + + // offset cost with crate value if there is currently nothing in the order + const total_order_cost = orderBalance || CARGO_CRATE_VALUE; + // multiplier of 1.1 for private orders + const multiplier = orderingPrive ? 1.1 : 1; + return ( @@ -126,7 +134,8 @@ export const MatMarket = (props, context) => { disabled={ catastrophe === 1 || material.price <= 0 || - creditBalance - orderBalance < material.price || + creditBalance - total_order_cost < + material.price * multiplier || material.requested + 1 > material.quantity } tooltip={material.price * 1} @@ -142,7 +151,8 @@ export const MatMarket = (props, context) => { disabled={ catastrophe === 1 || material.price <= 0 || - creditBalance - orderBalance < material.price * 5 || + creditBalance - total_order_cost < + material.price * 5 * multiplier || material.requested + 5 > material.quantity } tooltip={material.price * 5} @@ -158,7 +168,8 @@ export const MatMarket = (props, context) => { disabled={ catastrophe === 1 || material.price <= 0 || - creditBalance - orderBalance < material.price * 10 || + creditBalance - total_order_cost < + material.price * 10 * multiplier || material.requested + 10 > material.quantity } tooltip={material.price * 10} @@ -174,7 +185,8 @@ export const MatMarket = (props, context) => { disabled={ catastrophe === 1 || material.price <= 0 || - creditBalance - orderBalance < material.price * 25 || + creditBalance - total_order_cost < + material.price * 25 * multiplier || material.requested + 25 > material.quantity } tooltip={material.price * 25} @@ -190,7 +202,8 @@ export const MatMarket = (props, context) => { disabled={ catastrophe === 1 || material.price <= 0 || - creditBalance - orderBalance < material.price * 50 || + creditBalance - total_order_cost < + material.price * 50 * multiplier || material.requested + 50 > material.quantity } tooltip={material.price * 50} diff --git a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx index 04a1100fa13..e891337c275 100644 --- a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx @@ -290,6 +290,7 @@ const MECHA_SNOWFLAKE_ID_RADIO = 'radio_snowflake'; const MECHA_SNOWFLAKE_ID_AIR_TANK = 'air_tank_snowflake'; const MECHA_SNOWFLAKE_ID_WEAPON_BALLISTIC = 'ballistic_weapon_snowflake'; const MECHA_SNOWFLAKE_ID_GENERATOR = 'generator_snowflake'; +const MECHA_SNOWFLAKE_ID_CLAW = 'lawclaw_snowflake'; export const ModuleDetailsExtra = (props: { module: MechModule }, context) => { const module = props.module; @@ -308,6 +309,8 @@ export const ModuleDetailsExtra = (props: { module: MechModule }, context) => { return ; case MECHA_SNOWFLAKE_ID_GENERATOR: return ; + case MECHA_SNOWFLAKE_ID_CLAW: + return ; default: return null; } @@ -887,3 +890,27 @@ const SnowflakeGeneraor = (props, context) => { ); }; + +const SnowflakeLawClaw = (props, context) => { + const { act, data } = useBackend(context); + const { ref } = props.module; + const { autocuff } = props.module.snowflake; + return ( + + act('equip_act', { + ref: ref, + gear_action: 'togglecuff', + }) + } + /> + } + /> + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosMain.js b/tgui/packages/tgui/interfaces/NtosMain.js index 8debe5d93be..e7e0fc58446 100644 --- a/tgui/packages/tgui/interfaces/NtosMain.js +++ b/tgui/packages/tgui/interfaces/NtosMain.js @@ -83,7 +83,7 @@ export const NtosMain = (props, context) => { ) }> - {(data.contents.length === 0 && ( + {contents.length === 0 ? ( Unfortunately, this {data.name} is empty. - )) || ( + ) : ( Item - {data.verb ? data.verb : 'Dispense'} + {data.isdryer ? 'Take' : 'Dispense'} - {map((value, key) => ( + {Object.values(contents).map((value, key) => ( {value.name} @@ -58,7 +71,7 @@ export const SmartVend = (props, context) => { /> - ))(data.contents)} + ))}
)} diff --git a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx new file mode 100644 index 00000000000..8665712acf3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx @@ -0,0 +1,67 @@ +import { BooleanLike } from 'common/react'; +import { AnimatedNumber, Box, Button, LabeledList } from '../../components'; +import { useBackend } from '../../backend'; + +type BeakerReagent = { + name: string; + volume: number; +}; + +export type Beaker = { + maxVolume: number; + transferAmounts: number[]; + pH: number; + currentVolume: number; + contents: BeakerReagent[]; +}; + +type BeakerProps = { + beaker: Beaker; + replace_contents?: BeakerReagent[]; + title_label?: string; + showpH?: BooleanLike; +}; + +export const BeakerDisplay = (props: BeakerProps, context) => { + const { act } = useBackend(context); + const { beaker, replace_contents, title_label, showpH } = props; + const beakerContents = replace_contents || beaker?.contents || []; + + return ( + + act('eject')} /> + ) + }> + {title_label || + (!!beaker && ( + <> + / + {beaker.maxVolume} units + + )) || + 'No beaker'} + + + + {(!beaker && 'N/A') || (beakerContents.length === 0 && 'Nothing')} + + {beakerContents.map((chemical) => ( + + units of{' '} + {chemical.name} + + ))} + {beakerContents.length > 0 && !!showpH && ( + + pH: + + + )} + + + ); +}; diff --git a/tgui/public/tgui.html b/tgui/public/tgui.html index a518c5f5aac..5bd21f1b50d 100644 --- a/tgui/public/tgui.html +++ b/tgui/public/tgui.html @@ -510,9 +510,6 @@ window.replaceHtml = function (inline_html) { + "" ); }; - -// Signal tgui that we're ready to receive updates -Byond.sendMessage('ready');